moxiworks_platform 0.11.3 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3f30e0f092e72c478b298575a4e59acb1fe6f5cc
4
- data.tar.gz: 597bff8b2aecc6b068e7e22e7d00cf62fe343b24
3
+ metadata.gz: ec4c41788c2815f64aab1734e99120f0df9ed25e
4
+ data.tar.gz: 57eb6780ceebce6f9b9b79a350906c00cec174bb
5
5
  SHA512:
6
- metadata.gz: 4d656ba4e354e1f6773a41fc8db9a975dc8ea851e4ca88d2ace6a85e60f73adcd3c34e471be2394cd4553eea352f3c14ad81a9c7bf1ad867fbf9e980a1bc9a61
7
- data.tar.gz: 4139bc33e53334f094d95a7d25bf9f19a14e0698ac66c98f2d5ccf2460e332027a628261eff8c83281a983329d74c87cc7e922c6ac7088bb1c977b5efa50e78a
6
+ metadata.gz: 9ba19076c5f10ba8e819a895d2b0a5b6bc60cd86f369fbe6fb40ec056a0126a9e059c8bf2d6991277f2b589661ed2673413ccbe7b57dea559c4f7f01a1c077d8
7
+ data.tar.gz: 39828052e7381fe31b5b9037511c681dc592c90eee9af97817f22f6131e18981d4afb277c8f5721643a6117956d3f72f71f155bf22ebdbbabf5c4865a1ee2d5f
@@ -17,6 +17,11 @@ require 'moxiworks_platform/office'
17
17
  require 'moxiworks_platform/buyer_transaction'
18
18
  require 'moxiworks_platform/seller_transaction'
19
19
  require 'moxiworks_platform/brand'
20
+ require 'moxiworks_platform/gallery'
21
+ require 'moxiworks_platform/presentation_log'
22
+ require 'moxiworks_platform/sold_listing'
23
+ require 'moxiworks_platform/team'
24
+
20
25
 
21
26
 
22
27
  module MoxiworksPlatform
@@ -158,7 +158,8 @@ module MoxiworksPlatform
158
158
 
159
159
  # Find an Agent on the Moxi Works Platform
160
160
  # @param [Hash] opts named parameter Hash
161
- # @option opts [String] :moxi_works_agent_id *REQUIRED* The Moxi Works Agent ID for the agent
161
+ # @option opts [String] :moxi_works_agent_id *REQUIRED* -- either :moxi_works_agent_id or :agent_uuid is required -- The Moxi Works Agent ID for the agent
162
+ # @option opts [String] :agent_uuid *REQUIRED* -- either :moxi_works_agent_id or :agent_uuid is required -- The Moxi Works Agent ID for the agent
162
163
  #
163
164
  # @return [MoxiworksPlatform::Agent]
164
165
  #
@@ -166,13 +167,17 @@ module MoxiworksPlatform
166
167
  # named parameters aren't included
167
168
  #
168
169
  def self.find(opts={})
169
- url = "#{MoxiworksPlatform::Config.url}/api/agents/#{opts[:moxi_works_agent_id]}"
170
+ agent_identifier = opts[:agent_uuid] unless(opts[:agent_uuid].nil? or opts[:agent_uuid].empty?)
171
+ agent_identifier ||= opts[:moxi_works_agent_id] unless(opts[:moxi_works_agent_id].nil? or opts[:moxi_works_agent_id].empty?)
172
+ raise ::MoxiworksPlatform::Exception::ArgumentError, "#agent_uuid or moxi_works_agent_id required" if
173
+ agent_identifier.nil?
174
+ url = "#{MoxiworksPlatform::Config.url}/api/agents/#{agent_identifier}"
170
175
  self.send_request(:get, opts, url)
171
176
  end
172
177
 
173
178
  def self.send_request(method, opts={}, url=nil)
174
179
  url ||= "#{MoxiworksPlatform::Config.url}/api/agents"
175
- required_opts = [:moxi_works_agent_id]
180
+ required_opts = [:moxi_works_company_id]
176
181
  raise ::MoxiworksPlatform::Exception::ArgumentError,
177
182
  'arguments must be passed as named parameters' unless opts.is_a? Hash
178
183
  required_opts.each do |opt|
@@ -0,0 +1,107 @@
1
+ module MoxiworksPlatform
2
+ # = Moxi Works Platform Gallery
3
+ class Gallery < MoxiworksPlatform::Resource
4
+
5
+ # @!attribute list_office_aor
6
+ #
7
+ # @return [String] MLS the listing is listed with
8
+ attr_accessor :list_office_aor
9
+
10
+ # @!attribute listing_id
11
+ #
12
+ # @return [String] the mls number associated with the listing
13
+ attr_accessor :listing_id
14
+
15
+
16
+ # @!attribute listing_images
17
+ #
18
+ # @return [Array] array of image Hashes in the format
19
+ # {
20
+ # thumb_url: [String] url to thumbail size image (smallest),
21
+ # small_url: [String] url to small size image (small),
22
+ # full_url: [String] url to full size image (medium),
23
+ # gallery_url: [String] url to gallery size image (large),
24
+ # raw_url: [String] url to raw image (largest)
25
+ # title: [String] human readable title of image
26
+ # is_main_listing_image: [Boolean] whether the image is the main image for the listing
27
+ # caption: [String] human readable caption for the image
28
+ # description: [String] human readable description of the image
29
+ # width: [Integer] width of the raw image
30
+ # height: [Integer] height of the raw image
31
+ # mime_type: [String] MIME or media type of the image
32
+ #
33
+ # }
34
+ attr_accessor :gallery_images
35
+
36
+
37
+ # Search For Galleries in Moxi Works Platform
38
+ # @param [Hash] opts named parameter Hash
39
+ # @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)
40
+ # @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) -- only agent_uuid or moxi_works_agent_id are needed when searching for galleries by agent
41
+ # @option opts [String] :agent_uuid The Agent UUID For the search (use Agent.search to determine available agent_uuid) -- only agent_uuid or moxi_works_agent_id are needed when searching for galleries by agent
42
+ #
43
+ #
44
+ # optional Search parameters
45
+ #
46
+ #
47
+ # @return [Hash] with the format:
48
+ # {
49
+ # last_page: [Boolean],
50
+ # galleries: [Array] containing MoxiworkPlatform::Gallery objects
51
+ # }
52
+ #
53
+ #
54
+ # @raise ::MoxiworksPlatform::Exception::ArgumentError if required
55
+ # named parameters aren't included
56
+ #
57
+ # @example
58
+ # results = MoxiworksPlatform::Gallery.search(
59
+ # moxi_works_company_id: 'the_company',
60
+ # moxi_works_agent_id: 'abc123'
61
+ # )
62
+ #
63
+ #
64
+ # @block |Array|
65
+ # if you pass a block with the logic you want to perform on all galleries,
66
+ # you can have all galleries processed in a single call
67
+ #
68
+ # @example
69
+ # MoxiworksPlatform::Gallery.search(
70
+ # moxi_works_company_id: 'the_company',
71
+ # moxi_works_agent_id: 'abc123'
72
+ # agent_uuid: 'abc123') { |galleries| puts galleries.count }
73
+ #
74
+ def self.find(opts={})
75
+ required_opts = [:moxi_works_company_id]
76
+ required_opts.each do |opt|
77
+ raise ::MoxiworksPlatform::Exception::ArgumentError, "#{opt} required" if
78
+ opts[opt].nil? or opts[opt].to_s.empty?
79
+ end
80
+ agent_identifier = opts[:agent_uuid] unless(opts[:agent_uuid].nil? or opts[:agent_uuid].empty?)
81
+ agent_identifier ||= opts[:moxi_works_agent_id] unless(opts[:moxi_works_agent_id].nil? or opts[:moxi_works_agent_id].empty?)
82
+ raise ::MoxiworksPlatform::Exception::ArgumentError, "#agent_uuid or moxi_works_agent_id required" if
83
+ agent_identifier.nil?
84
+
85
+ url = "#{MoxiworksPlatform::Config.url}/api/galleries/#{agent_identifier}"
86
+
87
+ results = []
88
+ json = {'galleries': []}
89
+ RestClient::Request.execute(method: :get,
90
+ url: url,
91
+ payload: opts, headers: self.headers) do |response|
92
+ puts response if MoxiworksPlatform::Config.debug
93
+ self.check_for_error_in_response(response)
94
+ json = JSON.parse(response)
95
+ json = self.underscore_attribute_names json
96
+ json['galleries'].each do |r|
97
+ results << MoxiworksPlatform::Gallery.new(r) unless r.nil? or r.empty?
98
+ end
99
+ json['galleries'] = results
100
+ end
101
+ if block_given?
102
+ yield(json['galleries'])
103
+ end
104
+ json
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,158 @@
1
+ module MoxiworksPlatform
2
+ # = Moxi Works Platform PresentationLog
3
+ class PresentationLog < MoxiworksPlatform::Resource
4
+
5
+ # @!attribute agent_uuid
6
+ #
7
+ # @return [string] This is the Moxi Works Platform ID of the presentation_log which an ActionLog entry is associated with. This will be an RFC 4122 compliant UUID.
8
+ #
9
+ attr_accessor :agent_uuid
10
+
11
+ # @!attribute agent_fname
12
+ #
13
+ # @return [string] First name of agent. This can be null if there is no data for this attribute.
14
+ #
15
+ attr_accessor :agent_fname
16
+
17
+
18
+ # @!attribute agent_lname
19
+ #
20
+ # @return [string] Last name of agent. This can be null if there is no data for this attribute.
21
+ #
22
+ attr_accessor :agent_lname
23
+
24
+
25
+ # @!attribute title
26
+ #
27
+ # @return [string] The title of the presentation. This can be null if there is no data for this attribute.
28
+ #
29
+ attr_accessor :title
30
+
31
+
32
+ # @!attribute created
33
+ #
34
+ # @return [string] This is the Unix timestamp for the creation time of the presentation.
35
+ #
36
+ attr_accessor :created
37
+
38
+
39
+ # @!attribute edited
40
+ #
41
+ # @return [string] This is the Unix timestamp for the last time the presentation was edited.
42
+ #
43
+ attr_accessor :edited
44
+
45
+
46
+ # @!attribute agent_office_id
47
+ #
48
+ # @return [string] This is the ID of the office for the Agent associated with the presentation. This will be an integer.
49
+ #
50
+ attr_accessor :agent_office_id
51
+
52
+
53
+ # @!attribute type
54
+ #
55
+ # @return [string] Whether the presentation is for a buyer or seller.
56
+ #
57
+ attr_accessor :type
58
+
59
+
60
+ # @!attribute sent_by_agent
61
+ #
62
+ # @return [string] The UUID of the agent that sent the presentation to the client. This will be an RFC 4122 compliant UUID.
63
+ #
64
+ attr_accessor :sent_by_agent
65
+
66
+
67
+ # @!attribute pdf_requested
68
+ #
69
+ # @return [string] The number of PDF documents requested.
70
+ #
71
+ attr_accessor :pdf_requested
72
+
73
+
74
+ # @!attribute pres_requested
75
+ #
76
+ # @return [string] The number of Online presentations requested.
77
+ #
78
+ attr_accessor :pres_requested
79
+
80
+
81
+ # @!attribute external_identifier
82
+ #
83
+ # @return [string] This is the ID of the Agent utilized by their company.
84
+ #
85
+ attr_accessor :external_identifier
86
+
87
+
88
+ # @!attribute external_office_id
89
+ #
90
+ # @return [string] This is the ID of the office for this Agent utilized by their company.
91
+ #
92
+ attr_accessor :external_office_id
93
+
94
+
95
+ # @!attribute moxi_works_presentation_id
96
+ #
97
+ # @return [string] The unique UUID of the presentation. This will be an RFC 4122 compliant UUID.
98
+ #
99
+ attr_accessor :moxi_works_presentation_id
100
+
101
+
102
+
103
+ # Search For Agents in Moxi Works Platform
104
+ # @param [Hash] opts named parameter Hash
105
+ # @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)
106
+ #
107
+ #
108
+ # optional Search parameters
109
+ #
110
+ # @option opts [Integer] :updated_after Unix timestamp representing the start time for the search. If no updated_after parameter is included in the request, only presentations updated in the last seven days will be included in the response.
111
+ # @option opts [Integer] :updated_before Unix timestamp representing the end time for the search. If no updated_before parameter is included in the request, only presentations updated in the seven days following updated_after will be included in the response.
112
+ # @option opts [Integer] :created_after Unix timestamp representing the start time for the search.
113
+ # @option opts [Integer] :created_after Unix timestamp representing the end time for the search. If no created_before parameter is included in the request, only presentations updated in the seven days following created_after will be included in the response.
114
+ #
115
+ # @return [Hash] with the format:
116
+ # {
117
+ # presentations: [Array] containing MoxiworkPlatform::PresentationLog objects
118
+ # }
119
+ #
120
+ #
121
+ # @raise ::MoxiworksPlatform::Exception::ArgumentError if required
122
+ # named parameters aren't included
123
+ #
124
+ # @example
125
+ # results = MoxiworksPlatform::PresentationLog.search(
126
+ # moxi_works_company_id: 'the_company',
127
+ # updated_after: Time.now.to_i - 1296000,
128
+ # )
129
+ #
130
+ def self.search(opts={})
131
+ url ||= "#{MoxiworksPlatform::Config.url}/api/presentation_logs"
132
+ required_opts = [:moxi_works_company_id]
133
+ required_opts.each do |opt|
134
+ raise ::MoxiworksPlatform::Exception::ArgumentError, "#{opt} required" if
135
+ opts[opt].nil? or opts[opt].to_s.empty?
136
+ end
137
+
138
+
139
+ results = []
140
+ json = { 'presentations':[]}
141
+ RestClient::Request.execute(method: :get,
142
+ url: url,
143
+ payload: opts, headers: self.headers) do |response|
144
+ puts response if MoxiworksPlatform::Config.debug
145
+ self.check_for_error_in_response(response)
146
+ json = JSON.parse(response)
147
+ json['presentations'].each do |r|
148
+ results << MoxiworksPlatform::PresentationLog.new(r) unless r.nil? or r.empty?
149
+ end
150
+ json['presentations'] = results
151
+ end
152
+ json
153
+ end
154
+
155
+
156
+
157
+ end
158
+ end
@@ -0,0 +1,409 @@
1
+ module MoxiworksPlatform
2
+ # = Moxi Works Platform Listing
3
+ class SoldListing < MoxiworksPlatform::Resource
4
+
5
+ # @!attribute address
6
+ #
7
+ # @return [String] street address of property
8
+ attr_accessor :address
9
+
10
+ # @!attribute address2
11
+ #
12
+ # @return [String] a second line for street address if needed
13
+ attr_accessor :address2
14
+
15
+ # @!attribute agent_created_listing
16
+ #
17
+ # @return [Boolean] whether the agent created the listing
18
+ attr_accessor :agent_created_listing
19
+
20
+ # @!attribute association_fee
21
+ #
22
+ # @return [Integer] HOA fees for property
23
+ attr_accessor :association_fee
24
+
25
+ # @!attribute bathrooms_full
26
+ #
27
+ # @return [Integer|nil] number full bathrooms | nil if no data available
28
+ attr_accessor :bathrooms_full
29
+
30
+ # @!attribute bathrooms_half
31
+ #
32
+ # @return [Integer|nil] number half bathrooms | nil if no data available
33
+ attr_accessor :bathrooms_half
34
+
35
+ # @!attribute bathrooms_one_quarter
36
+ #
37
+ # @return [Integer|nil] number quarter bathrooms | nil if no data available
38
+ attr_accessor :bathrooms_one_quarter
39
+
40
+ # @!attribute bathrooms_partial
41
+ #
42
+ # @return [Integer|nil] number partial bathrooms | nil if no data available
43
+ attr_accessor :bathrooms_partial
44
+
45
+ # @!attribute bathrooms_total_integer
46
+ #
47
+ # @return [Integer|nil] number of rooms that are bathrooms | nil if no data available
48
+ attr_accessor :bathrooms_total_integer
49
+
50
+ # @!attribute bathrooms_three_quarter
51
+ #
52
+ # @return [Integer|nil] number three-quarter bathrooms | nil if no data available
53
+ attr_accessor :bathrooms_three_quarter
54
+
55
+ # @!attribute bathrooms_total
56
+ #
57
+ # @return [Integer|nil] number bathrooms | nil if no data available
58
+ attr_accessor :bathrooms_total
59
+
60
+ # @!attribute bedrooms_total
61
+ #
62
+ # @return [Integer] number of bedrooms
63
+ attr_accessor :bedrooms_total
64
+
65
+ # @!attribute city
66
+ #
67
+ # @return [String] city of property address
68
+ attr_accessor :city
69
+
70
+ # @!attribute county_or_parish
71
+ #
72
+ # @return [String] county of property address
73
+ attr_accessor :county_or_parish
74
+
75
+ # @!attribute created_date
76
+ #
77
+ # @return [String] string representing date in format 'MM/DD/YYYY'
78
+ attr_accessor :created_date
79
+
80
+ # @!attribute days_on_market
81
+ #
82
+ # @return [Integer] days listing has been on market
83
+ attr_accessor :days_on_market
84
+
85
+ # @!attribute elementary_school
86
+ #
87
+ # @return [String] elementary school for the property
88
+ attr_accessor :elementary_school
89
+
90
+ # @!attribute garage_spaces
91
+ #
92
+ # @return [Integer] garage spaces for the property
93
+ attr_accessor :garage_spaces
94
+
95
+ # @!attribute high_school
96
+ #
97
+ # @return [String] High school for property
98
+ attr_accessor :high_school
99
+
100
+ # @!attribute internet_address_display_yn
101
+ #
102
+ # @return [Boolean] whether to display the address publicly
103
+ attr_accessor :internet_address_display_yn
104
+
105
+ # @!attribute internet_entire_listing_display_yn
106
+ #
107
+ # @return [Boolean] whether to display listing on internet
108
+ attr_accessor :internet_entire_listing_display_yn
109
+
110
+ # @!attribute latitude
111
+ #
112
+ # @return [String] latitude of the property
113
+ attr_accessor :latitude
114
+
115
+ # @!attribute list_agent_full_name
116
+ #
117
+ # @return [String] name of listing agent
118
+ attr_accessor :list_agent_full_name
119
+
120
+ # @!attribute list_office_name
121
+ #
122
+ # @return [String] name office responsible for listing
123
+ attr_accessor :list_office_name
124
+
125
+ # @!attribute list_price
126
+ #
127
+ # @return [Integer] listed price
128
+ attr_accessor :list_price
129
+
130
+ # @!attribute list_office_aor
131
+ #
132
+ # @return [String] MLS the listing is listed with
133
+ attr_accessor :list_office_aor
134
+
135
+ # @!attribute listing_contract_date
136
+ #
137
+ # @return [String] string representing date in format 'MM/DD/YYYY'
138
+ attr_accessor :listing_contract_date
139
+
140
+ # @!attribute listing_id
141
+ #
142
+ # @return [String] the mls number associated with the listing
143
+ attr_accessor :listing_id
144
+
145
+ # @!attribute listing_images
146
+ #
147
+ # @return [Array] array of image Hashes in the format
148
+ # {
149
+ # thumb_url: [String] url to thumbail size image (smallest),
150
+ # small_url: [String] url to small size image (small),
151
+ # full_url: [String] url to full size image (medium),
152
+ # gallery_url: [String] url to gallery size image (large),
153
+ # raw_url: [String] url to raw image (largest)
154
+ # title: [String] human readable title of image
155
+ # is_main_listing_image: [Boolean] whether the image is the main image for the listing
156
+ # caption: [String] human readable caption for the image
157
+ # description: [String] human readable description of the image
158
+ # width: [Integer] width of the raw image
159
+ # height: [Integer] height of the raw image
160
+ # mime_type: [String] MIME or media type of the image
161
+ #
162
+ # }
163
+ attr_accessor :listing_images
164
+
165
+ # @!attribute living_area
166
+ #
167
+ # @return [Integer] square footage of the building
168
+ attr_accessor :living_area
169
+
170
+ # @!attribute longitude
171
+ #
172
+ # @return [String] longitude of the property
173
+ attr_accessor :longitude
174
+
175
+ # @!attribute lot_size_acres
176
+ #
177
+ # @return [float] the property acreage of the listing
178
+ attr_accessor :lot_size_acres
179
+
180
+ # @!attribute lot_size_square_feet
181
+ #
182
+ # @return [Integer] square footage of lot
183
+ attr_accessor :lot_size_square_feet
184
+
185
+ # @!attribute middle_or_junior_school
186
+ #
187
+ # @return [String] Middle school for property
188
+ attr_accessor :middle_or_junior_school
189
+
190
+ # @!attribute moxi_works_listing_id
191
+ # moxi_works_listing_id is the Moxi Works Platform ID of the listing
192
+ #
193
+ # this must be set for any Moxi Works Platform transaction
194
+ #
195
+ # @return [String] the Moxi Works Platform ID of the listing
196
+ attr_accessor :moxi_works_listing_id
197
+
198
+ # @!attribute modification_timestamp
199
+ #
200
+ # @return [String] string representing date in format 'MM/DD/YYYY'
201
+ attr_accessor :modification_timestamp
202
+
203
+ # @!attribute on_market
204
+ #
205
+ # @return [Boolean] whether the listing is on market
206
+ attr_accessor :on_market
207
+
208
+ # @!attribute pool_yn
209
+ #
210
+ # @return [Boolean] whether there is a pool
211
+ attr_accessor :pool_yn
212
+
213
+ # @!attribute postal_code
214
+ #
215
+ # @return [String] zip code of property address
216
+ attr_accessor :postal_code
217
+
218
+ # @!attribute property_features
219
+ #
220
+ # @return [Hash] property features associated with this listing
221
+ attr_accessor :property_features
222
+
223
+ # @!attribute property_type
224
+ #
225
+ # @return [String] type of property, could be 'Rental' 'Residential' 'Condo-Coop' 'Townhouse' 'Land' 'Multifamily'
226
+ attr_accessor :property_type
227
+
228
+ # @!attribute public_remarks
229
+ #
230
+ # @return [String] agent generated comments regarding the property
231
+ attr_accessor :public_remarks
232
+
233
+ # @!attribute single_story
234
+ #
235
+ # @return [Boolean] whether the building is single story
236
+ attr_accessor :single_story
237
+
238
+ # @!attribute state
239
+ #
240
+ # @return [String] state of property address
241
+ attr_accessor :state_or_province
242
+
243
+ # @!attribute tax_annual_amount
244
+ #
245
+ # @return [Integer] Annual property tax for the property
246
+ attr_accessor :tax_annual_amount
247
+
248
+ # @!attribute tax_year
249
+ #
250
+ # @return [Integer] assessment year that property_tax reflects
251
+ attr_accessor :tax_year
252
+
253
+ # @!attribute view_yn
254
+ #
255
+ # @return [Boolean] whether the property has a view
256
+ attr_accessor :view_yn
257
+
258
+ # @!attribute waterfront_yn
259
+ #
260
+ # @return [Boolean|nil] whether the property has waterfront acreage
261
+ attr_accessor :waterfront_yn
262
+
263
+ # @!attribute year_built
264
+ #
265
+ # @return [Integer] year the building was built
266
+ attr_accessor :year_built
267
+
268
+ # @!attribute sold_date
269
+ #
270
+ # @return [String] year the building was built
271
+ attr_accessor :sold_date
272
+
273
+ # @!attribute sold_price
274
+ #
275
+ # @return [Integer] price listing was sold for
276
+ attr_accessor :sold_price
277
+
278
+
279
+ # Find a listing on the Moxi Works Platform
280
+ # @param [Hash] opts named parameter Hash
281
+ # @option opts [String] :moxi_works_listing_id *REQUIRED* The Moxi Works Listing ID for the listing
282
+ # @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)
283
+ #
284
+ # @return [MoxiworksPlatform::Listing]
285
+ #
286
+ # @raise ::MoxiworksPlatform::Exception::ArgumentError if required
287
+ # named parameters aren't included
288
+ #
289
+ def self.find(opts={})
290
+ url = "#{MoxiworksPlatform::Config.url}/api/sold_listings/#{opts[:moxi_works_listing_id]}"
291
+ self.send_request(:get, opts, url)
292
+ end
293
+
294
+ def self.send_request(method, opts={}, url=nil)
295
+ url ||= "#{MoxiworksPlatform::Config.url}/api/sold_listings"
296
+ required_opts = [:moxi_works_listing_id, :moxi_works_company_id]
297
+ raise ::MoxiworksPlatform::Exception::ArgumentError,
298
+ 'arguments must be passed as named parameters' unless opts.is_a? Hash
299
+ required_opts.each do |opt|
300
+ raise ::MoxiworksPlatform::Exception::ArgumentError, "#{opt} required" if
301
+ opts[opt].nil? or opts[opt].to_s.empty?
302
+ end
303
+
304
+ RestClient::Request.execute(method: method,
305
+ url: url,
306
+ payload: opts, headers: self.headers) do |response|
307
+ puts response if MoxiworksPlatform::Config.debug
308
+ self.check_for_error_in_response(response)
309
+ json = JSON.parse(response)
310
+ json = self.underscore_attribute_names json
311
+ return false if not json['status'].nil? and json['status'] =='fail'
312
+ self.new(json) unless json.nil? or json.empty?
313
+ end
314
+ end
315
+
316
+ # Search For Listings in Moxi Works Platform
317
+ # @param [Hash] opts named parameter Hash
318
+ # @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)
319
+ # @option opts [Integer] :sold_since *REQUIRED* Unix timestamp; Only Listings updated after this date will be returned
320
+ # @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) -- only agent_uuid or moxi_works_agent_id are needed when searching for listings by agent
321
+ # @option opts [String] :agent_uuid The Agent UUID For the search (use Agent.search to determine available agent_uuid) -- only agent_uuid or moxi_works_agent_id are needed when searching for listings by agent
322
+ # @option opts [String] :moxi_works_office_id The Moxi Works Office ID For the search (use Office.search or Agent response to determine available moxi_works_office_id)
323
+ #
324
+ #
325
+ # optional Search parameters
326
+ #
327
+ # @option opts [String] :last_moxi_works_listing_id For multi-page responses (where the response value 'last_page' is false), send the listing ID of the last Listing in the previous page.
328
+ # @option opts [Hash] :previous_page For multi-page responses (where the response value 'last_page' is false), send the entire response from the previous page.
329
+ #
330
+ # @return [Hash] with the format:
331
+ # {
332
+ # last_page: [Boolean],
333
+ # listings: [Array] containing MoxiworkPlatform::Listing objects
334
+ # }
335
+ #
336
+ #
337
+ # @raise ::MoxiworksPlatform::Exception::ArgumentError if required
338
+ # named parameters aren't included
339
+ #
340
+ # @example
341
+ # results = MoxiworksPlatform::Listing.search(
342
+ # moxi_works_company_id: 'the_company',
343
+ # sold_since: Time.now.to_i - 1296000,
344
+ # moxi_works_agent_id: 'abc123'
345
+ # )
346
+ #
347
+ # next_page = MoxiworksPlatform::Listing.search(
348
+ # moxi_works_company_id: 'the_company',
349
+ # sold_since: Time.now.to_i - 1296000,
350
+ # moxi_works_agent_id: 'abc123',
351
+ # previous_page: results
352
+ # )
353
+ #
354
+ # @block |Array|
355
+ # if you pass a block with the logic you want to perform on all listings,
356
+ # you can have all listings processed in a single call
357
+ #
358
+ # @example
359
+ # MoxiworksPlatform::Listing.search(
360
+ # moxi_works_company_id: 'the_company',
361
+ # sold_since: Time.now.to_i - 131297832) { |page_of_listings| puts page_of_listings.count }
362
+ #
363
+ def self.search(opts={}, &block)
364
+ url ||= "#{MoxiworksPlatform::Config.url}/api/sold_listings"
365
+ required_opts = [:moxi_works_company_id, :sold_since]
366
+
367
+ required_opts.each do |opt|
368
+ raise ::MoxiworksPlatform::Exception::ArgumentError, "#{opt} required" if
369
+ opts[opt].nil? or opts[opt].to_s.empty?
370
+ end
371
+
372
+ prev_page = opts[:previous_page] || opts['previous_page']
373
+ unless(prev_page.nil? or
374
+ prev_page.empty? or
375
+ not prev_page.is_a?(Hash) or
376
+ prev_page['listings'].nil? or
377
+ prev_page['listings'].empty? or
378
+ not prev_page['listings'].is_a?(Array))
379
+ opts[:last_moxi_works_listing_id] ||= prev_page['listings'].last.moxi_works_listing_id
380
+ end
381
+
382
+ results = []
383
+ json = {'listings' => [], 'last_page' => true}
384
+ RestClient::Request.execute(method: :get,
385
+ url: url,
386
+ payload: opts, headers: self.headers) do |response|
387
+ puts response if MoxiworksPlatform::Config.debug
388
+ self.check_for_error_in_response(response)
389
+ json = JSON.parse(response)
390
+ json = self.underscore_attribute_names json
391
+ json['listings'].each do |r|
392
+ results << MoxiworksPlatform::Listing.new(r) unless r.nil? or r.empty?
393
+ end
394
+ json['listings'] = results
395
+ end
396
+ if block_given?
397
+ yield(json['listings'])
398
+ unless json['final_page']
399
+ last_listing = json['listings'].last
400
+ last_listing_id = (last_listing.nil?) ? nil : last_listing.moxi_works_listing_id
401
+ MoxiworksPlatform::Listing.search(opts.merge(last_moxi_works_listing_id: last_listing_id), &block) if last_listing_id
402
+ end
403
+ end
404
+ json
405
+ end
406
+
407
+ end
408
+ end
409
+
@@ -0,0 +1,208 @@
1
+ module MoxiworksPlatform
2
+ # = Moxi Works Platform Teams
3
+ class Team < MoxiworksPlatform::Resource
4
+
5
+
6
+ # @!attribute uuid
7
+ #
8
+ # @return string The unique ID of the Team
9
+ #
10
+ attr_accessor :uuid
11
+
12
+
13
+ # @!attribute name
14
+ #
15
+ # @return string The human readable name of the team
16
+ #
17
+ attr_accessor :name
18
+
19
+
20
+ # @!attribute email
21
+ #
22
+ # @return string Contact email address for the team
23
+ #
24
+ attr_accessor :email
25
+
26
+
27
+ # @!attribute address1
28
+ #
29
+ # @return string First line of contact address for the team
30
+ #
31
+ attr_accessor :address1
32
+
33
+
34
+ # @!attribute address2
35
+ #
36
+ # @return string Second line of contact address for the team
37
+ #
38
+ attr_accessor :address2
39
+
40
+
41
+ # @!attribute city
42
+ #
43
+ # @return string City portion of contact address for the team
44
+ #
45
+ attr_accessor :city
46
+
47
+
48
+ # @!attribute state
49
+ #
50
+ # @return string State portion of contact address for the team
51
+ #
52
+ attr_accessor :state
53
+
54
+
55
+ # @!attribute zipcode
56
+ #
57
+ # @return string Postal Code portion of the contact address for the team
58
+ #
59
+ attr_accessor :zipcode
60
+
61
+
62
+ # @!attribute phone
63
+ #
64
+ # @return string contact phone number for the team
65
+ #
66
+ attr_accessor :phone
67
+
68
+
69
+ # @!attribute fax
70
+ #
71
+ # @return string fax number for the team
72
+ #
73
+ attr_accessor :fax
74
+
75
+
76
+ # @!attribute logo_url
77
+ #
78
+ # @return string URL to a logo image for the team
79
+ #
80
+ attr_accessor :logo_url
81
+
82
+
83
+ # @!attribute photo_url
84
+ #
85
+ # @return string First URL to a image representing the team
86
+ #
87
+ attr_accessor :photo_url
88
+
89
+
90
+ # @!attribute description
91
+ #
92
+ # @return string Description of the team. can contain embedded HTML
93
+ #
94
+ attr_accessor :description
95
+
96
+
97
+ # @!attribute social_media_urls
98
+ #
99
+ # @return array Social media URLs associated with the team
100
+ #
101
+ attr_accessor :social_media_urls
102
+
103
+
104
+ # @!attribute alt_phone
105
+ #
106
+ # @return string Alternate contact phone number for the team
107
+ #
108
+ attr_accessor :alt_phone
109
+
110
+
111
+ # @!attribute alt_email
112
+ #
113
+ # @return string Alternate contact email address for the team
114
+ #
115
+ attr_accessor :alt_email
116
+
117
+
118
+ # @!attribute website_url
119
+ #
120
+ # @return string URL to the website for the team
121
+ #
122
+ attr_accessor :website_url
123
+
124
+
125
+ # @!attribute active
126
+ #
127
+ # @return boolean Whether the team is active or not
128
+ #
129
+ attr_accessor :active
130
+
131
+ # Find a Team by ID in Moxi Works Platform
132
+ # @param [Hash] opts named parameter Hash
133
+ # @option opts [String] :moxi_works_team_id *REQUIRED* The Moxi Works TEam ID
134
+ #
135
+ # @return [MoxiworksPlatform::Team]
136
+ #
137
+ # @raise ::MoxiworksPlatform::Exception::ArgumentError if required
138
+ # named parameters aren't included
139
+ #
140
+ def self.find(opts={})
141
+ raise ::MoxiworksPlatform::Exception::ArgumentError,
142
+ 'arguments must be passed as named parameters' unless opts.is_a? Hash
143
+ required_opts = [:moxi_works_team_id]
144
+ required_opts.each do |opt|
145
+ raise ::MoxiworksPlatform::Exception::ArgumentError, "#{opt} required" if
146
+ opts[opt].nil? or opts[opt].to_s.empty?
147
+ end
148
+ url = "#{MoxiworksPlatform::Config.url}/api/teams/#{opts[:moxi_works_team_id]}"
149
+ self.send_request(:get, opts, url)
150
+ end
151
+
152
+ # Search For Teams in Moxi Works Platform
153
+ # @param [Hash] opts named parameter Hash
154
+ # @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)
155
+ #
156
+ #
157
+ # optional Search parameters
158
+ #
159
+ #
160
+ # @return [Array] with the format:
161
+ #
162
+ #
163
+ # @raise ::MoxiworksPlatform::Exception::ArgumentError if required
164
+ # named parameters aren't included
165
+ #
166
+ # @example
167
+ # results = MoxiworksPlatform::Team.search(
168
+ # moxi_works_company_id: 'the_company',
169
+ # )
170
+ #
171
+ #
172
+ # @block |Array|
173
+ # if you pass a block with the logic you want to perform on all teams,
174
+ # you can have all teams processed in a single call
175
+ #
176
+ # @example
177
+ # MoxiworksPlatform::Team.search(
178
+ # moxi_works_company_id: 'the_company') { |teams| puts teams.count }
179
+ #
180
+ def self.search(opts={})
181
+ required_opts = [:moxi_works_company_id]
182
+ required_opts.each do |opt|
183
+ raise ::MoxiworksPlatform::Exception::ArgumentError, "#{opt} required" if
184
+ opts[opt].nil? or opts[opt].to_s.empty?
185
+ end
186
+
187
+ url = "#{MoxiworksPlatform::Config.url}/api/teams"
188
+
189
+ results = []
190
+ RestClient::Request.execute(method: :get,
191
+ url: url,
192
+ payload: opts, headers: self.headers) do |response|
193
+ puts response if MoxiworksPlatform::Config.debug
194
+ self.check_for_error_in_response(response)
195
+ json = JSON.parse(response)
196
+ json = self.underscore_attribute_names json
197
+ json.each do |r|
198
+ results << MoxiworksPlatform::Team.new(r) unless r.nil? or r.empty?
199
+ end
200
+ end
201
+ if block_given?
202
+ yield(results)
203
+ end
204
+ results
205
+ end
206
+
207
+ end
208
+ end
@@ -1,3 +1,3 @@
1
1
  module MoxiworksPlatform
2
- VERSION = '0.11.3'
2
+ VERSION = '0.12.0'
3
3
  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.11.3
4
+ version: 0.12.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: 2017-12-29 00:00:00.000000000 Z
11
+ date: 2018-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,13 +94,17 @@ files:
94
94
  - lib/moxiworks_platform/email_campaign.rb
95
95
  - lib/moxiworks_platform/event.rb
96
96
  - lib/moxiworks_platform/exception.rb
97
+ - lib/moxiworks_platform/gallery.rb
97
98
  - lib/moxiworks_platform/group.rb
98
99
  - lib/moxiworks_platform/listing.rb
99
100
  - lib/moxiworks_platform/office.rb
101
+ - lib/moxiworks_platform/presentation_log.rb
100
102
  - lib/moxiworks_platform/resource.rb
101
103
  - lib/moxiworks_platform/seller_transaction.rb
102
104
  - lib/moxiworks_platform/session.rb
105
+ - lib/moxiworks_platform/sold_listing.rb
103
106
  - lib/moxiworks_platform/task.rb
107
+ - lib/moxiworks_platform/team.rb
104
108
  - lib/moxiworks_platform/version.rb
105
109
  - moxiworks_platform.gemspec
106
110
  - publish_docs.sh