Tidy up the note model a bit
This commit is contained in:
parent
e3b8b89330
commit
33c0f15990
2 changed files with 23 additions and 12 deletions
|
@ -64,7 +64,8 @@ class NoteController < ApplicationController
|
|||
|
||||
#Include in a transaction to ensure that there is always a note_comment for every note
|
||||
Note.transaction do
|
||||
@note = Note.create_bug(lat, lon)
|
||||
@note = Note.create(:lat => lat, :lon => lon)
|
||||
raise OSM::APIBadUserInput.new("The note is outside this world") unless @note.in_world?
|
||||
|
||||
#TODO: move this into a helper function
|
||||
begin
|
||||
|
@ -99,7 +100,7 @@ class NoteController < ApplicationController
|
|||
|
||||
note = Note.find(id)
|
||||
raise OSM::APINotFoundError unless note
|
||||
raise OSM::APIAlreadyDeletedError unless note.visible
|
||||
raise OSM::APIAlreadyDeletedError unless note.visible?
|
||||
|
||||
Note.transaction do
|
||||
add_comment(note, params['text'], name, "commented")
|
||||
|
@ -117,7 +118,7 @@ class NoteController < ApplicationController
|
|||
|
||||
note = Note.find_by_id(id)
|
||||
raise OSM::APINotFoundError unless note
|
||||
raise OSM::APIAlreadyDeletedError unless note.visible
|
||||
raise OSM::APIAlreadyDeletedError unless note.visible?
|
||||
|
||||
Note.transaction do
|
||||
note.close
|
||||
|
@ -150,7 +151,7 @@ class NoteController < ApplicationController
|
|||
def read
|
||||
@note = Note.find(params['id'])
|
||||
raise OSM::APINotFoundError unless @note
|
||||
raise OSM::APIAlreadyDeletedError unless @note.visible
|
||||
raise OSM::APIAlreadyDeletedError unless @note.visible?
|
||||
|
||||
respond_to do |format|
|
||||
format.rss
|
||||
|
@ -163,7 +164,7 @@ class NoteController < ApplicationController
|
|||
def delete
|
||||
note = note.find(params['id'])
|
||||
raise OSM::APINotFoundError unless note
|
||||
raise OSM::APIAlreadyDeletedError unless note.visible
|
||||
raise OSM::APIAlreadyDeletedError unless note.visible?
|
||||
|
||||
Note.transaction do
|
||||
note.status = "hidden"
|
||||
|
|
|
@ -12,21 +12,26 @@ class Note < ActiveRecord::Base
|
|||
validates_numericality_of :longitude, :only_integer => true
|
||||
validates_presence_of :closed_at if :status == "closed"
|
||||
validates_inclusion_of :status, :in => ["open", "closed", "hidden"]
|
||||
validate :validate_position
|
||||
|
||||
def self.create_bug(lat, lon)
|
||||
note = Note.new(:lat => lat, :lon => lon, :status => "open")
|
||||
raise OSM::APIBadUserInput.new("The note is outside this world") unless note.in_world?
|
||||
|
||||
return note
|
||||
# Sanity check the latitude and longitude and add an error if it's broken
|
||||
def validate_position
|
||||
errors.add_to_base("Note is not in the world") unless in_world?
|
||||
end
|
||||
|
||||
# Fill in default values for new notes
|
||||
def after_initialize
|
||||
self.status = "open" unless self.attribute_present?(:status)
|
||||
end
|
||||
|
||||
# Close a note
|
||||
def close
|
||||
self.status = "closed"
|
||||
self.closed_at = Time.now.getutc
|
||||
|
||||
self.save
|
||||
end
|
||||
|
||||
# Return a flattened version of the comments for a note
|
||||
def flatten_comment(separator_char, upto_timestamp = :nil)
|
||||
resp = ""
|
||||
comment_no = 1
|
||||
|
@ -43,22 +48,27 @@ class Note < ActiveRecord::Base
|
|||
return resp
|
||||
end
|
||||
|
||||
def visible
|
||||
# Check if a note is visible
|
||||
def visible?
|
||||
return status != "hidden"
|
||||
end
|
||||
|
||||
# Return the author object, derived from the first comment
|
||||
def author
|
||||
self.comments.first.author
|
||||
end
|
||||
|
||||
# Return the author IP address, derived from the first comment
|
||||
def author_ip
|
||||
self.comments.first.author_ip
|
||||
end
|
||||
|
||||
# Return the author id, derived from the first comment
|
||||
def author_id
|
||||
self.comments.first.author_id
|
||||
end
|
||||
|
||||
# Return the author name, derived from the first comment
|
||||
def author_name
|
||||
self.comments.first.author_name
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue