Class: SparkApi::Models::Listing
- Extended by:
- Finders
- Defined in:
- lib/spark_api/models/listing.rb
Constant Summary collapse
- DATA_MASK =
"********"- WRITEABLE_FIELDS =
["ListPrice", "ExpirationDate"]
Constants included from Paginate
Instance Attribute Summary collapse
-
#constraints ⇒ Object
Returns the value of attribute constraints.
-
#documents ⇒ Object
Returns the value of attribute documents.
-
#open_houses(arguments = {}) ⇒ Object
Returns the value of attribute open_houses.
-
#photos ⇒ Object
Returns the value of attribute photos.
-
#rental_calendars(arguments = {}) ⇒ Object
Returns the value of attribute rental_calendars.
-
#tour_of_homes(arguments = {}) ⇒ Object
Returns the value of attribute tour_of_homes.
-
#videos ⇒ Object
Returns the value of attribute videos.
-
#virtual_tours ⇒ Object
Returns the value of attribute virtual_tours.
Attributes inherited from Base
Class Method Summary collapse
- .company(arguments = {}) ⇒ Object
- .find_by_cart_id(cart_id, options = {}) ⇒ Object
- .my(arguments = {}) ⇒ Object
- .nearby(latitude, longitude, arguments = {}) ⇒ Object
- .office(arguments = {}) ⇒ Object
- .tour_of_homes(arguments = {}) ⇒ Object
Instance Method Summary collapse
- #editable?(editable_settings = []) ⇒ Boolean
- #ExpirationDate ⇒ Object
- #ExpirationDate=(value) ⇒ Object
- #full_address ⇒ Object
-
#initialize(attributes = {}) ⇒ Listing
constructor
A new instance of Listing.
- #my_notes ⇒ Object
- #region_address ⇒ Object
- #save(arguments = {}) ⇒ Object
- #save!(arguments = {}) ⇒ Object
-
#shared_notes(fore = nil) ⇒ Object
‘fore’ is required when accessing an agent’s shared notes for a specific contact.
- #street_address ⇒ Object
Methods included from Finders
Methods inherited from Base
#connection, connection, count, element_name, element_name=, first, get, #load, #parse_id, #path, path, #persisted?, prefix, prefix=, #resource_uri, #respond_to?
Methods included from Paginate
#collect, #paginate, #per_page
Methods included from Dirty
#changed, #changed?, #changed_attributes, #changes, #dirty_attributes, #previous_changes
Constructor Details
#initialize(attributes = {}) ⇒ Listing
Returns a new instance of Listing.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/spark_api/models/listing.rb', line 11 def initialize(attributes={}) @photos = [] @videos = [] @virtual_tours = [] @rental_calendars = [] @documents = [] @constraints = [] #@tour_of_homes = [] if attributes.has_key?('StandardFields') pics, vids, tours, docs, ohouses, tourhomes = attributes['StandardFields'].values_at('Photos','Videos', 'VirtualTours', 'Documents', 'OpenHouses', 'TourOfHomes') end if attributes.has_key?('RentalCalendar') rentalcalendars = attributes['RentalCalendar'] end if pics != nil pics.collect { |pic| @photos.push(Photo.new(pic)) } attributes['StandardFields'].delete('Photos') end if vids != nil vids.collect { |vid| @videos.push(Video.new(vid)) } attributes['StandardFields'].delete('Videos') end if tours != nil tours.collect { |tour| @virtual_tours.push(VirtualTour.new(tour)) } attributes['StandardFields'].delete('VirtualTours') end if docs != nil docs.collect { |doc| @documents.push(Document.new(doc)) } attributes['StandardFields'].delete('Documents') end if ohouses != nil @open_houses = [] ohouses.collect { |ohouse| @open_houses.push(OpenHouse.new(ohouse)) } attributes['StandardFields'].delete('OpenHouses') end if tourhomes != nil @tour_of_homes = [] tourhomes.collect { |tourhome| @tour_of_homes.push(TourOfHome.new(tourhome)) } attributes['StandardFields'].delete('TourOfHomes') end if rentalcalendars != nil rentalcalendars.collect { |rentalcalendar| @rental_calendars.push(RentalCalendar.new(rentalcalendar)) } attributes.delete('RentalCalendar') end super(attributes) end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_symbol, *arguments) ⇒ Object (private)
TODO trim this down so we’re only overriding the StandardFields access
202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 |
# File 'lib/spark_api/models/listing.rb', line 202 def method_missing(method_symbol, *arguments) method_name = method_symbol.to_s if method_name =~ /(=|\?)$/ case $1 when "=" write_attribute($`,arguments.first) # TODO figure out a nice way to present setters for the standard fields when "?" attributes[$`] end else return attributes[method_name] if attributes.include?(method_name) return @attributes['StandardFields'][method_name] if attributes['StandardFields'].include?(method_name) super # GTFO end end |
Instance Attribute Details
#constraints ⇒ Object
Returns the value of attribute constraints.
6 7 8 |
# File 'lib/spark_api/models/listing.rb', line 6 def constraints @constraints end |
#documents ⇒ Object
Returns the value of attribute documents.
5 6 7 |
# File 'lib/spark_api/models/listing.rb', line 5 def documents @documents end |
#open_houses(arguments = {}) ⇒ Object
Returns the value of attribute open_houses.
5 6 7 |
# File 'lib/spark_api/models/listing.rb', line 5 def open_houses @open_houses end |
#photos ⇒ Object
Returns the value of attribute photos.
5 6 7 |
# File 'lib/spark_api/models/listing.rb', line 5 def photos @photos end |
#rental_calendars(arguments = {}) ⇒ Object
Returns the value of attribute rental_calendars.
5 6 7 |
# File 'lib/spark_api/models/listing.rb', line 5 def rental_calendars @rental_calendars end |
#tour_of_homes(arguments = {}) ⇒ Object
Returns the value of attribute tour_of_homes.
5 6 7 |
# File 'lib/spark_api/models/listing.rb', line 5 def tour_of_homes @tour_of_homes end |
#videos ⇒ Object
Returns the value of attribute videos.
5 6 7 |
# File 'lib/spark_api/models/listing.rb', line 5 def videos @videos end |
#virtual_tours ⇒ Object
Returns the value of attribute virtual_tours.
5 6 7 |
# File 'lib/spark_api/models/listing.rb', line 5 def virtual_tours @virtual_tours end |
Class Method Details
.company(arguments = {}) ⇒ Object
81 82 83 |
# File 'lib/spark_api/models/listing.rb', line 81 def self.company(arguments={}) collect(connection.get("/company/listings", arguments)) end |
.find_by_cart_id(cart_id, options = {}) ⇒ Object
68 69 70 71 |
# File 'lib/spark_api/models/listing.rb', line 68 def self.find_by_cart_id(cart_id, ={}) query = {:_filter => "ListingCart Eq '#{cart_id}'"} find(:all, .merge(query)) end |
.my(arguments = {}) ⇒ Object
73 74 75 |
# File 'lib/spark_api/models/listing.rb', line 73 def self.my(arguments={}) collect(connection.get("/my/listings", arguments)) end |
.nearby(latitude, longitude, arguments = {}) ⇒ Object
85 86 87 88 |
# File 'lib/spark_api/models/listing.rb', line 85 def self.nearby(latitude, longitude, arguments={}) nearby_args = {:_lat => latitude, :_lon => longitude}.merge(arguments) collect(connection.get("/listings/nearby", nearby_args)) end |
.office(arguments = {}) ⇒ Object
77 78 79 |
# File 'lib/spark_api/models/listing.rb', line 77 def self.office(arguments={}) collect(connection.get("/office/listings", arguments)) end |
.tour_of_homes(arguments = {}) ⇒ Object
90 91 92 |
# File 'lib/spark_api/models/listing.rb', line 90 def self.tour_of_homes(arguments={}) collect(connection.get("/listings/tourofhomes", arguments)) end |
Instance Method Details
#editable?(editable_settings = []) ⇒ Boolean
182 183 184 185 186 187 188 189 |
# File 'lib/spark_api/models/listing.rb', line 182 def editable?(editable_settings = []) settings = Array(editable_settings) editable = attributes.include?("Permissions") && self.Permissions["Editable"] == true if editable settings.each{ |setting| editable = false unless self.Permissions["EditableSettings"][setting.to_s] == true } end editable end |
#ExpirationDate ⇒ Object
191 192 193 |
# File 'lib/spark_api/models/listing.rb', line 191 def ExpirationDate attributes["ExpirationDate"] end |
#ExpirationDate=(value) ⇒ Object
194 195 196 |
# File 'lib/spark_api/models/listing.rb', line 194 def ExpirationDate=(value) write_attribute("ExpirationDate", value) end |
#full_address ⇒ Object
141 142 143 |
# File 'lib/spark_api/models/listing.rb', line 141 def full_address "#{self.street_address}, #{self.region_address}".strip().gsub(/^,\s/, '').gsub(/,$/, '') end |
#my_notes ⇒ Object
110 111 112 113 114 115 116 |
# File 'lib/spark_api/models/listing.rb', line 110 def my_notes Note.build_subclass.tap do |note| note.prefix = "/listings/#{self.ListingKey}" note.element_name = "/my/notes" SparkApi.logger.info("Note.path: #{note.path}") end end |
#region_address ⇒ Object
137 138 139 |
# File 'lib/spark_api/models/listing.rb', line 137 def region_address "#{self.City}, #{self.StateOrProvince} #{self.PostalCode}".delete(DATA_MASK).strip().gsub(/^,\s/, '').gsub(/,$/, '') end |
#save(arguments = {}) ⇒ Object
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
# File 'lib/spark_api/models/listing.rb', line 145 def save(arguments={}) self.errors = [] begin return save!(arguments) rescue BadResourceRequest => e self.errors << {:code => e.code, :message => e.} SparkApi.logger.debug("BHDEBUG: #{e.inspect}") if e.code == 1053 @constraints = [] e.details.each do |detail| detail.each_pair do |k,v| v.each { |constraint| @constraints << Constraint.new(constraint)} end end end SparkApi.logger.warn("Failed to save resource #{self}: #{e.}") rescue NotFound => e SparkApi.logger.error("Failed to save resource #{self}: #{e.}") end false end |
#save!(arguments = {}) ⇒ Object
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
# File 'lib/spark_api/models/listing.rb', line 166 def save!(arguments={}) writable_changed_keys = changed & WRITEABLE_FIELDS if writable_changed_keys.empty? SparkApi.logger.warn("No supported listing change detected") else results = connection.put "#{self.class.path}/#{self.Id}", build_hash(writable_changed_keys), arguments @contstraints = [] results.details.each do |detail| detail.each_pair do |k,v| v.each { |constraint| @constraints << Constraint.new(constraint)} end end end true end |
#shared_notes(fore = nil) ⇒ Object
‘fore’ is required when accessing an agent’s shared notes for a specific contact. If the ApiUser /is/ the contact, then it can be inferred by the api, so it’s unecessary
122 123 124 125 126 127 128 129 130 131 |
# File 'lib/spark_api/models/listing.rb', line 122 def shared_notes(fore=nil) Note.build_subclass.tap do |note| note.prefix = "/listings/#{self.ListingKey}" if fore.nil? note.element_name = "/shared/notes" else note.element_name = "/shared/notes/contacts/#{fore}" end end end |