Class: SparkApi::Models::Listing
- Inherits:
-
Base
- Object
- Base
- SparkApi::Models::Listing
show all
- Extended by:
- Finders
- Defined in:
- lib/spark_api/models/listing.rb
Constant Summary
collapse
- DATA_MASK =
"********"
- WRITEABLE_FIELDS =
["ListPrice", "ExpirationDate"]
Constants included
from Paginate
Paginate::DEFAULT_PAGE_SIZE
Instance Attribute Summary collapse
Attributes inherited from Base
#attributes, #errors, #parent
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Finders
find, find_one, first, last
Methods inherited from Base
#connection, connection, count, element_name, element_name=, first, get, #load, #parse_id, #path, path, #persisted?, prefix, prefix=, #resource_uri
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 = []
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
TODO trim this down so we’re only overriding the StandardFields access
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
|
# File 'lib/spark_api/models/listing.rb', line 222
def method_missing(method_symbol, *arguments)
method_name = method_symbol.to_s
if method_name =~ /(=|\?)$/
case $1
when "="
write_attribute($`,arguments.first)
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
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, options={})
query = {:_filter => "ListingCart Eq '#{cart_id}'"}
find(:all, options.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
195
196
197
198
199
200
201
202
|
# File 'lib/spark_api/models/listing.rb', line 195
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
204
205
206
|
# File 'lib/spark_api/models/listing.rb', line 204
def ExpirationDate
attributes["ExpirationDate"]
end
|
#ExpirationDate=(value) ⇒ Object
207
208
209
|
# File 'lib/spark_api/models/listing.rb', line 207
def ExpirationDate=(value)
write_attribute("ExpirationDate", value)
end
|
#full_address ⇒ Object
140
141
142
|
# File 'lib/spark_api/models/listing.rb', line 140
def full_address
"#{self.street_address}, #{self.region_address}".strip().gsub(/^,\s/, '').gsub(/,$/, '')
end
|
#my_notes ⇒ Object
110
111
112
113
114
115
|
# 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"
end
end
|
#region_address ⇒ Object
136
137
138
|
# File 'lib/spark_api/models/listing.rb', line 136
def region_address
"#{self.City}, #{self.StateOrProvince} #{self.PostalCode}".delete(DATA_MASK).strip().gsub(/^,\s/, '').gsub(/,$/, '')
end
|
#reorder_photos(arguments = {}) ⇒ Object
180
181
182
183
184
185
186
187
188
189
|
# File 'lib/spark_api/models/listing.rb', line 180
def reorder_photos(arguments={})
begin
return reorder_photos!(arguments)
rescue BadResourceRequest => e
SparkApi.logger.warn { "Failed to save resource #{self}: #{e.message}" }
rescue NotFound => e
SparkApi.logger.error { "Failed to save resource #{self}: #{e.message}" }
end
false
end
|
#reorder_photos!(arguments = {}) ⇒ Object
190
191
192
193
|
# File 'lib/spark_api/models/listing.rb', line 190
def reorder_photos!(arguments={})
results = connection.put "#{self.class.path}/#{self.Id}/photos", arguments
true
end
|
#respond_to?(method_symbol, include_all = false) ⇒ Boolean
211
212
213
214
215
216
217
|
# File 'lib/spark_api/models/listing.rb', line 211
def respond_to?(method_symbol, include_all=false)
if super
true
else
attributes['StandardFields'].include?(method_symbol.to_s) rescue false
end
end
|
#save(arguments = {}) ⇒ Object
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
|
# File 'lib/spark_api/models/listing.rb', line 144
def save(arguments={})
self.errors = []
begin
return save!(arguments)
rescue BadResourceRequest => e
self.errors << {:code => e.code, :message => e.message}
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.message}" }
rescue NotFound => e
SparkApi.logger.error { "Failed to save resource #{self}: #{e.message}" }
end
false
end
|
#save!(arguments = {}) ⇒ Object
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
|
# File 'lib/spark_api/models/listing.rb', line 164
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
121
122
123
124
125
126
127
128
129
130
|
# File 'lib/spark_api/models/listing.rb', line 121
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
|
#street_address ⇒ Object
132
133
134
|
# File 'lib/spark_api/models/listing.rb', line 132
def street_address
"#{self.StreetNumber} #{self.StreetDirPrefix} #{self.StreetName} #{self.StreetSuffix} #{self.StreetDirSuffix} #{self.StreetAdditionalInfo}".delete(DATA_MASK).strip().gsub(/\s{2,}/, ' ')
end
|