moxiworks_platform 0.8.1 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/moxiworks_platform.rb +1 -1
- data/lib/moxiworks_platform/agent.rb +12 -2
- data/lib/moxiworks_platform/listing.rb +383 -0
- data/lib/moxiworks_platform/resource.rb +8 -0
- data/lib/moxiworks_platform/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 412995e90bdd8e998839e4d0b8cdb22bea1f4fd3
|
4
|
+
data.tar.gz: 677d8ee627b1f471d57c4bcfc68b7af14a141859
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f983e9bfb9da33f7df933fedc90f16391b01ac222f39bb20b1bfa5b1d98464bc376f06044a97a977a83cdebca832a68fa6fa3cd28c6da6920fc626ebb4507d7c
|
7
|
+
data.tar.gz: 9dc26db95954e27a9a5193ea7a82c11eed449ebff7ed162f04131e050085791c75754caa3a012941d66e2e49678113073a25e052719a820ae772dc4f02be1684
|
data/lib/moxiworks_platform.rb
CHANGED
@@ -11,6 +11,11 @@ module MoxiworksPlatform
|
|
11
11
|
# @return [String] the Moxi Works Platform ID of the agent
|
12
12
|
attr_accessor :moxi_works_agent_id
|
13
13
|
|
14
|
+
# @!attribute moxi_works_office_id
|
15
|
+
#
|
16
|
+
# @return [String] the UUID of the office which the Agent is associated
|
17
|
+
attr_accessor :moxi_works_office_id
|
18
|
+
|
14
19
|
# @!attribute address_street
|
15
20
|
#
|
16
21
|
# @return [String] the agent's address, street and number
|
@@ -116,11 +121,16 @@ module MoxiworksPlatform
|
|
116
121
|
# @return [String] url to a thumb size image of the agent
|
117
122
|
attr_accessor :profile_thumb_url
|
118
123
|
|
124
|
+
# @!attribute title
|
125
|
+
#
|
126
|
+
# @return [String] any business related titles associated with the agent
|
127
|
+
attr_accessor :title
|
128
|
+
|
119
129
|
# Find an Agent on the Moxi Works Platform
|
120
130
|
# @param [Hash] opts named parameter Hash
|
121
131
|
# @option opts [String] :moxi_works_agent_id *REQUIRED* The Moxi Works Agent ID for the agent to which this contact is to be associated
|
122
132
|
#
|
123
|
-
# @return [MoxiworksPlatform::
|
133
|
+
# @return [MoxiworksPlatform::Agent]
|
124
134
|
#
|
125
135
|
# @raise ::MoxiworksPlatform::Exception::ArgumentError if required
|
126
136
|
# named parameters aren't included
|
@@ -178,7 +188,7 @@ module MoxiworksPlatform
|
|
178
188
|
opts[opt].nil? or opts[opt].to_s.empty?
|
179
189
|
end
|
180
190
|
results = []
|
181
|
-
json = { 'page_number': 1, 'total_pages': 0, '
|
191
|
+
json = { 'page_number': 1, 'total_pages': 0, 'agents':[]}
|
182
192
|
RestClient::Request.execute(method: :get,
|
183
193
|
url: url,
|
184
194
|
payload: opts, headers: self.headers) do |response|
|
@@ -0,0 +1,383 @@
|
|
1
|
+
module MoxiworksPlatform
|
2
|
+
# = Moxi Works Platform Listing
|
3
|
+
class Listing < MoxiworksPlatform::Resource
|
4
|
+
|
5
|
+
# @!attribute moxi_works_listing_id
|
6
|
+
# moxi_works_listing_id is the Moxi Works Platform ID of the listing
|
7
|
+
#
|
8
|
+
# this must be set for any Moxi Works Platform transaction
|
9
|
+
#
|
10
|
+
# @return [String] the Moxi Works Platform ID of the listing
|
11
|
+
attr_accessor :moxi_works_listing_id
|
12
|
+
|
13
|
+
# @!attribute lot_size_acres
|
14
|
+
#
|
15
|
+
# @return [float] the property acreage of the listing
|
16
|
+
attr_accessor :lot_size_acres
|
17
|
+
|
18
|
+
# @!attribute address
|
19
|
+
#
|
20
|
+
# @return [String] street address of property
|
21
|
+
attr_accessor :address
|
22
|
+
|
23
|
+
# @!attribute address2
|
24
|
+
#
|
25
|
+
# @return [String] a second line for street address if needed
|
26
|
+
attr_accessor :address2
|
27
|
+
|
28
|
+
# @!attribute city
|
29
|
+
#
|
30
|
+
# @return [String] city of property address
|
31
|
+
attr_accessor :city
|
32
|
+
|
33
|
+
# @!attribute state
|
34
|
+
#
|
35
|
+
# @return [String] state of property address
|
36
|
+
attr_accessor :state_or_province
|
37
|
+
|
38
|
+
# @!attribute postal_code
|
39
|
+
#
|
40
|
+
# @return [String] zip code of property address
|
41
|
+
attr_accessor :postal_code
|
42
|
+
|
43
|
+
# @!attribute county_or_parish
|
44
|
+
#
|
45
|
+
# @return [String] county of property address
|
46
|
+
attr_accessor :county_or_parish
|
47
|
+
|
48
|
+
# @!attribute latitude
|
49
|
+
#
|
50
|
+
# @return [String] latitude of the property
|
51
|
+
attr_accessor :latitude
|
52
|
+
|
53
|
+
# @!attribute longitude
|
54
|
+
#
|
55
|
+
# @return [String] longitude of the property
|
56
|
+
attr_accessor :longitude
|
57
|
+
|
58
|
+
# @!attribute bathrooms_full
|
59
|
+
#
|
60
|
+
# @return [Integer|nil] number full bathrooms | nil if no data available
|
61
|
+
attr_accessor :bathrooms_full
|
62
|
+
|
63
|
+
# @!attribute bathrooms_half
|
64
|
+
#
|
65
|
+
# @return [Integer|nil] number half bathrooms | nil if no data available
|
66
|
+
attr_accessor :bathrooms_half
|
67
|
+
|
68
|
+
# @!attribute bathrooms_one_quarter
|
69
|
+
#
|
70
|
+
# @return [Integer|nil] number quarter bathrooms | nil if no data available
|
71
|
+
attr_accessor :bathrooms_one_quarter
|
72
|
+
|
73
|
+
# @!attribute bathrooms_partial
|
74
|
+
#
|
75
|
+
# @return [Integer|nil] number partial bathrooms | nil if no data available
|
76
|
+
attr_accessor :bathrooms_partial
|
77
|
+
|
78
|
+
# @!attribute bathrooms_total_integer
|
79
|
+
#
|
80
|
+
# @return [Integer|nil] number partial bathrooms | nil if no data available
|
81
|
+
attr_accessor :bathrooms_total_integer
|
82
|
+
|
83
|
+
# @!attribute bathrooms_three_quarter
|
84
|
+
#
|
85
|
+
# @return [Integer|nil] number three-quarter bathrooms | nil if no data available
|
86
|
+
attr_accessor :bathrooms_three_quarter
|
87
|
+
|
88
|
+
# @!attribute bathrooms_total
|
89
|
+
#
|
90
|
+
# @return [Integer|nil] number bathrooms | nil if no data available
|
91
|
+
attr_accessor :bathrooms_total
|
92
|
+
|
93
|
+
# @!attribute bedrooms
|
94
|
+
#
|
95
|
+
# @return [Integer] number of bedrooms
|
96
|
+
attr_accessor :bedrooms_total
|
97
|
+
|
98
|
+
# @!attribute public_remarks
|
99
|
+
#
|
100
|
+
# @return [String] agent generated comments regarding the property
|
101
|
+
attr_accessor :public_remarks
|
102
|
+
|
103
|
+
# @!attribute modification_timestamp
|
104
|
+
#
|
105
|
+
# @return [String] string representing date in format 'MM/DD/YYYY'
|
106
|
+
attr_accessor :modification_timestamp
|
107
|
+
|
108
|
+
# @!attribute internet_address_display_yn
|
109
|
+
#
|
110
|
+
# @return [Boolean] whether to display the address publicly
|
111
|
+
attr_accessor :internet_address_display_yn
|
112
|
+
|
113
|
+
# @!attribute days_on_market
|
114
|
+
#
|
115
|
+
# @return [Integer] days listing has been on market
|
116
|
+
attr_accessor :days_on_market
|
117
|
+
|
118
|
+
# @!attribute listing_contract_date
|
119
|
+
#
|
120
|
+
# @return [String] string representing date in format 'MM/DD/YYYY'
|
121
|
+
attr_accessor :listing_contract_date
|
122
|
+
|
123
|
+
# @!attribute created_date
|
124
|
+
#
|
125
|
+
# @return [String] string representing date in format 'MM/DD/YYYY'
|
126
|
+
attr_accessor :created_date
|
127
|
+
|
128
|
+
# @!attribute elementary_school
|
129
|
+
#
|
130
|
+
# @return [String] elementary school for the property
|
131
|
+
attr_accessor :elementary_school
|
132
|
+
|
133
|
+
# @!attribute garage_spaces
|
134
|
+
#
|
135
|
+
# @return [Integer] garage spaces for the property
|
136
|
+
attr_accessor :garage_spaces
|
137
|
+
|
138
|
+
# @!attribute waterfront_yn
|
139
|
+
#
|
140
|
+
# @return [Boolean] whether the property has waterfront acreage
|
141
|
+
attr_accessor :waterfront_yn
|
142
|
+
|
143
|
+
# @!attribute high_school
|
144
|
+
#
|
145
|
+
# @return [String] High school for property
|
146
|
+
attr_accessor :high_school
|
147
|
+
|
148
|
+
# @!attribute association_fee
|
149
|
+
#
|
150
|
+
# @return [Integer] HOA fees for property
|
151
|
+
attr_accessor :association_fee
|
152
|
+
|
153
|
+
# @!attribute list_office_name
|
154
|
+
#
|
155
|
+
# @return [String] name office responsible for listing
|
156
|
+
attr_accessor :list_office_name
|
157
|
+
|
158
|
+
# @!attribute list_price
|
159
|
+
#
|
160
|
+
# @return [Integer] listed price
|
161
|
+
attr_accessor :list_price
|
162
|
+
|
163
|
+
# @!attribute listing_id
|
164
|
+
#
|
165
|
+
# @return [String] the mls number associated with the listing
|
166
|
+
attr_accessor :listing_id
|
167
|
+
|
168
|
+
# @!attribute list_agent_full_name
|
169
|
+
#
|
170
|
+
# @return [String] name of listing agent
|
171
|
+
attr_accessor :list_agent_full_name
|
172
|
+
|
173
|
+
# @!attribute lot_size_square_feet
|
174
|
+
#
|
175
|
+
# @return [Integer] square footage of lot
|
176
|
+
attr_accessor :lot_size_square_feet
|
177
|
+
|
178
|
+
# @!attribute middle_or_junior_school
|
179
|
+
#
|
180
|
+
# @return [String] Middle school for property
|
181
|
+
attr_accessor :middle_or_junior_school
|
182
|
+
|
183
|
+
# @!attribute list_office_aor
|
184
|
+
#
|
185
|
+
# @return [String] MLS the listing is listed with
|
186
|
+
attr_accessor :list_office_aor
|
187
|
+
|
188
|
+
# @!attribute internet_entire_listing_display_yn
|
189
|
+
#
|
190
|
+
# @return [Boolean] whether to display listing on internet
|
191
|
+
attr_accessor :internet_entire_listing_display_yn
|
192
|
+
|
193
|
+
# @!attribute on_market
|
194
|
+
#
|
195
|
+
# @return [Boolean] whether the listing is on market
|
196
|
+
attr_accessor :on_market
|
197
|
+
|
198
|
+
# @!attribute pool_yn
|
199
|
+
#
|
200
|
+
# @return [Boolean] whether there is a pool
|
201
|
+
attr_accessor :pool_yn
|
202
|
+
|
203
|
+
# @!attribute property_type
|
204
|
+
#
|
205
|
+
# @return [String] type of property, could be 'Rental' 'Residential' 'Condo-Coop' 'Townhouse' 'Land' 'Multifamily'
|
206
|
+
attr_accessor :property_type
|
207
|
+
|
208
|
+
# @!attribute tax_annual_amount
|
209
|
+
#
|
210
|
+
# @return [Integer] Annual property tax for the property
|
211
|
+
attr_accessor :tax_annual_amount
|
212
|
+
|
213
|
+
# @!attribute tax_year
|
214
|
+
#
|
215
|
+
# @return [Integer] assessment year that property_tax reflects
|
216
|
+
attr_accessor :tax_year
|
217
|
+
|
218
|
+
# @!attribute single_story
|
219
|
+
#
|
220
|
+
# @return [Boolean] whether the building is single story
|
221
|
+
attr_accessor :single_story
|
222
|
+
|
223
|
+
# @!attribute living_area
|
224
|
+
#
|
225
|
+
# @return [Integer] square footage of the building
|
226
|
+
attr_accessor :living_area
|
227
|
+
|
228
|
+
# @!attribute title
|
229
|
+
#
|
230
|
+
# @return [String] a short description of the property
|
231
|
+
attr_accessor :title
|
232
|
+
|
233
|
+
# @!attribute view_yn
|
234
|
+
#
|
235
|
+
# @return [Boolean] whether the property has a view
|
236
|
+
attr_accessor :view_yn
|
237
|
+
|
238
|
+
# @!attribute year_built
|
239
|
+
#
|
240
|
+
# @return [Integer] year the building was built
|
241
|
+
attr_accessor :year_built
|
242
|
+
|
243
|
+
# @!attribute listing_images
|
244
|
+
#
|
245
|
+
# @return [Array] array of image Hashes in the format
|
246
|
+
# {
|
247
|
+
# image_thumb_url: [String] url to thumbail size image (smallest),
|
248
|
+
# image_small_url: [String] url to small size image (small),
|
249
|
+
# image_full_url: [String] url to full size image (medium),
|
250
|
+
# image_gallery_url: [String] url to gallery size image (large),
|
251
|
+
# image_raw_url: [String] url to raw image (largest)
|
252
|
+
# }
|
253
|
+
attr_accessor :listing_images
|
254
|
+
|
255
|
+
|
256
|
+
|
257
|
+
# Find a listing on the Moxi Works Platform
|
258
|
+
# @param [Hash] opts named parameter Hash
|
259
|
+
# @option opts [String] :moxi_works_listing_id *REQUIRED* The Moxi Works Listing ID for the listing
|
260
|
+
# @option opts [String] :moxi_works_company_id *REQUIRED* The Moxi Works Company ID For the search (use Company.search to determine available moxi_works_company_id)
|
261
|
+
#
|
262
|
+
# @return [MoxiworksPlatform::Listing]
|
263
|
+
#
|
264
|
+
# @raise ::MoxiworksPlatform::Exception::ArgumentError if required
|
265
|
+
# named parameters aren't included
|
266
|
+
#
|
267
|
+
def self.find(opts={})
|
268
|
+
url = "#{MoxiworksPlatform::Config.url}/api/listings/#{opts[:moxi_works_listing_id]}"
|
269
|
+
self.send_request(:get, opts, url)
|
270
|
+
end
|
271
|
+
|
272
|
+
def self.send_request(method, opts={}, url=nil)
|
273
|
+
url ||= "#{MoxiworksPlatform::Config.url}/api/listings"
|
274
|
+
required_opts = [:moxi_works_listing_id, :moxi_works_company_id]
|
275
|
+
raise ::MoxiworksPlatform::Exception::ArgumentError,
|
276
|
+
'arguments must be passed as named parameters' unless opts.is_a? Hash
|
277
|
+
required_opts.each do |opt|
|
278
|
+
raise ::MoxiworksPlatform::Exception::ArgumentError, "#{opt} required" if
|
279
|
+
opts[opt].nil? or opts[opt].to_s.empty?
|
280
|
+
end
|
281
|
+
|
282
|
+
RestClient::Request.execute(method: method,
|
283
|
+
url: url,
|
284
|
+
payload: opts, headers: self.headers) do |response|
|
285
|
+
puts response if MoxiworksPlatform::Config.debug
|
286
|
+
self.check_for_error_in_response(response)
|
287
|
+
json = JSON.parse(response)
|
288
|
+
json = self.underscore_attribute_names json
|
289
|
+
return false if not json['status'].nil? and json['status'] =='fail'
|
290
|
+
self.new(json) unless json.nil? or json.empty?
|
291
|
+
end
|
292
|
+
end
|
293
|
+
|
294
|
+
# Search For Listings in Moxi Works Platform
|
295
|
+
# @param [Hash] opts named parameter Hash
|
296
|
+
# @option opts [String] :moxi_works_company_id *REQUIRED* The Moxi Works Company ID For the search (use Company.search to determine available moxi_works_company_id)
|
297
|
+
# @option opts [Integer] :updated_since *REQUIRED* Unix timestamp; Only Listings updated after this date will be returned
|
298
|
+
# @option opts [String] :moxi_works_agent_id The Moxi Works Agent ID For the search (use Agent.search to determine available moxi_works_agent_id)
|
299
|
+
#
|
300
|
+
#
|
301
|
+
# optional Search parameters
|
302
|
+
#
|
303
|
+
# @option opts [Integer] :page_number the page of results to return
|
304
|
+
#
|
305
|
+
# @return [Hash] with the format:
|
306
|
+
# {
|
307
|
+
# page_number: [Integer],
|
308
|
+
# total_pages: [Integer],
|
309
|
+
# listings: [Array] containing MoxiworkPlatform::Listing objects
|
310
|
+
# }
|
311
|
+
#
|
312
|
+
#
|
313
|
+
# @raise ::MoxiworksPlatform::Exception::ArgumentError if required
|
314
|
+
# named parameters aren't included
|
315
|
+
#
|
316
|
+
# @example
|
317
|
+
# results = MoxiworksPlatform::Listing.search(
|
318
|
+
# moxi_works_company_id: 'the_company',
|
319
|
+
# updated_since: Time.now.to_i - 1296000,
|
320
|
+
# moxi_works_agent_id: 'abc123'
|
321
|
+
# )
|
322
|
+
#
|
323
|
+
# @block |Array|
|
324
|
+
# if you pass a block with the logic you want to perform on all listings,
|
325
|
+
# you can have all listings processed in a single call
|
326
|
+
#
|
327
|
+
# @example
|
328
|
+
# MoxiworksPlatform::Listing.search(
|
329
|
+
# moxi_works_company_id: 'the_company',
|
330
|
+
# updated_since: Time.now.to_i - 131297832) { |page_of_listings| puts page_of_listings.count }
|
331
|
+
#
|
332
|
+
def self.search(opts={}, &block)
|
333
|
+
url ||= "#{MoxiworksPlatform::Config.url}/api/listings"
|
334
|
+
required_opts = [:moxi_works_company_id, :updated_since]
|
335
|
+
required_opts.each do |opt|
|
336
|
+
raise ::MoxiworksPlatform::Exception::ArgumentError, "#{opt} required" if
|
337
|
+
opts[opt].nil? or opts[opt].to_s.empty?
|
338
|
+
end
|
339
|
+
results = []
|
340
|
+
json = {'listings': [], 'last_page': true}
|
341
|
+
RestClient::Request.execute(method: :get,
|
342
|
+
url: url,
|
343
|
+
payload: opts, headers: self.headers) do |response|
|
344
|
+
puts response if MoxiworksPlatform::Config.debug
|
345
|
+
self.check_for_error_in_response(response)
|
346
|
+
json = JSON.parse(response)
|
347
|
+
json = self.underscore_attribute_names json
|
348
|
+
json['listings'].each do |r|
|
349
|
+
results << MoxiworksPlatform::Listing.new(r) unless r.nil? or r.empty?
|
350
|
+
end
|
351
|
+
json['listings'] = results
|
352
|
+
end
|
353
|
+
if block_given?
|
354
|
+
yield(json['listings'])
|
355
|
+
unless json['final_page']
|
356
|
+
last_listing = json['listings'].last
|
357
|
+
last_listing_id = (last_listing.nil?) ? nil : last_listing.moxi_works_listing_id
|
358
|
+
MoxiworksPlatform::Listing.search(opts.merge(last_moxi_works_listing_id: last_listing_id), &block) if last_listing_id
|
359
|
+
end
|
360
|
+
end
|
361
|
+
json
|
362
|
+
end
|
363
|
+
|
364
|
+
def self.underscore_attribute_names(hash)
|
365
|
+
hash.keys.each do |key|
|
366
|
+
hash[key] = self.underscore_attribute_names hash[key] if hash[key].is_a? Hash
|
367
|
+
if hash[key].is_a? Array
|
368
|
+
array = hash[key]
|
369
|
+
new_array = []
|
370
|
+
array.each do |member|
|
371
|
+
new_array << self.underscore_attribute_names(member)
|
372
|
+
end
|
373
|
+
hash[key] = new_array
|
374
|
+
end
|
375
|
+
underscored = Resource.underscore(key)
|
376
|
+
hash[underscored] = hash.delete(key)
|
377
|
+
end
|
378
|
+
hash
|
379
|
+
end
|
380
|
+
|
381
|
+
|
382
|
+
end
|
383
|
+
end
|
@@ -158,6 +158,14 @@ module MoxiworksPlatform
|
|
158
158
|
[]
|
159
159
|
end
|
160
160
|
|
161
|
+
def self.underscore(attr)
|
162
|
+
attr.gsub(/::/, '/').
|
163
|
+
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
164
|
+
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
165
|
+
tr("-", "_").
|
166
|
+
downcase
|
167
|
+
end
|
168
|
+
|
161
169
|
end
|
162
170
|
|
163
171
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: moxiworks_platform
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tres Wong-Godfrey
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-11-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -93,6 +93,7 @@ files:
|
|
93
93
|
- lib/moxiworks_platform/event.rb
|
94
94
|
- lib/moxiworks_platform/exception.rb
|
95
95
|
- lib/moxiworks_platform/group.rb
|
96
|
+
- lib/moxiworks_platform/listing.rb
|
96
97
|
- lib/moxiworks_platform/resource.rb
|
97
98
|
- lib/moxiworks_platform/task.rb
|
98
99
|
- lib/moxiworks_platform/version.rb
|