spark_api 1.5.1 → 1.5.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b9c9695944207ba64adf36cd6417e6f534222643a04058581af5451ef4e0361e
4
- data.tar.gz: 4911595b9144031b4659ef04bbd1ca8689090e23297d686741c26649c359b0ed
3
+ metadata.gz: d86ac16091ab48c0702a43a4825f816e22941ec010f550520f1f3d2baa716045
4
+ data.tar.gz: 901de544603a1537f103c5724217c2d9d4f0b25858bd38494d49fb783e658509
5
5
  SHA512:
6
- metadata.gz: d1e45e5ebb03f2561b2d1a8234510598ced6b3816f961dd84e2200f66359bd22a6360b4bdba06bfcaad46e2a5bbac5c22cb03611dc0b4b249ea001ac5022964b
7
- data.tar.gz: 5259a965c9131db98ef5c9ca876f59189a43274fa30c780c98b1d56b1d762fd974f9a618a407e0daf0d16c9f1e0b690ffd0a500dfe4f225c9eadc2b81091ec6e
6
+ metadata.gz: e286d779462e7aaab1c5fbd59714a2b03d7ce3165bbe889f5f5b5e0088e14cd1ea16c7ab4e79ae29fd0759af915c1725609af074a1015d701676ada66a4adc3d
7
+ data.tar.gz: 7e9ed4f8a4ea53e6a0a094968e06c75df7bb554a80a8d5061fb279bce5f52edf7faefbc675a1df9719071d3ef12e635309c3a48e7a63898116a24f46b095432f
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.5.1
1
+ 1.5.5
@@ -63,6 +63,8 @@ module SparkApi
63
63
  # Perform an HTTP request (no data)
64
64
  def request(method, path, body, options)
65
65
  escaped_path = Addressable::URI.escape(path)
66
+ connection = @client.connection
67
+ connection.headers.merge!(options.delete(:override_headers) || {})
66
68
  request_opts = {
67
69
  :AuthToken => @session.auth_token
68
70
  }
@@ -76,10 +78,10 @@ module SparkApi
76
78
  request_path = "#{escaped_path}?#{build_url_parameters({"ApiSig"=>sig}.merge(request_opts))}"
77
79
  SparkApi.logger.debug { "Request: #{request_path}" }
78
80
  if body.nil?
79
- response = @client.connection.send(method, request_path)
81
+ response = connection.send(method, request_path)
80
82
  else
81
83
  SparkApi.logger.debug { "Data: #{body}" }
82
- response = @client.connection.send(method, request_path, body)
84
+ response = connection.send(method, request_path, body)
83
85
  end
84
86
  response
85
87
  end
@@ -42,6 +42,7 @@ module SparkApi
42
42
  def request(method, path, body, options={})
43
43
  escaped_path = Addressable::URI.escape(path)
44
44
  connection = @client.connection(true) # SSL Only!
45
+ connection.headers.merge!(options.delete(:override_headers) || {})
45
46
  connection.headers.merge!(self.auth_header)
46
47
 
47
48
  unless (@client.api_user.nil? || options[:ApiUser])
@@ -15,14 +15,18 @@ module SparkApi
15
15
  def on_complete(env)
16
16
  body = MultiJson.decode(env[:body])
17
17
  SparkApi.logger.debug { "[oauth2] Response Body: #{body.inspect}" }
18
+
18
19
  unless body.is_a?(Hash)
19
20
  raise InvalidResponse, "The server response could not be understood"
20
21
  end
22
+
21
23
  case env[:status]
22
24
  when 200..299
23
25
  SparkApi.logger.debug{ "[oauth2] Success!" }
24
26
  session = OAuthSession.new(body)
25
- else
27
+ else
28
+ SparkApi.logger.warn { "[oauth2] failure #{body.inspect}" }
29
+
26
30
  # Handle the WWW-Authenticate Response Header Field if present. This can be returned by
27
31
  # OAuth2 implementations and wouldn't hurt to log.
28
32
  auth_header_error = env[:request_headers]["WWW-Authenticate"]
@@ -29,7 +29,11 @@ module SparkApi
29
29
  if paging.nil?
30
30
  results = response
31
31
  else
32
- q = CGI.parse(env[:url].query)
32
+ q = if http_method_override_request?(env)
33
+ CGI.parse(env[:request_body])
34
+ else
35
+ CGI.parse(env[:url].query)
36
+ end
33
37
  if q.key?("_pagination") && q["_pagination"].first == "count"
34
38
  results = paging['TotalRows']
35
39
  else
@@ -87,7 +91,13 @@ module SparkApi
87
91
 
88
92
  env[:body]
89
93
  end
90
-
94
+
95
+ private
96
+
97
+ def http_method_override_request?(env)
98
+ env[:request_headers]["X-HTTP-Method-Override"] == "GET"
99
+ end
100
+
91
101
  end
92
102
 
93
103
  Faraday::Response.register_middleware :spark_api => FaradayMiddleware
@@ -61,6 +61,22 @@ module SparkApi
61
61
  unless authenticated?
62
62
  authenticate
63
63
  end
64
+
65
+ # Allow use of the X-HTTP-Method-Override header to disguise excessively
66
+ # large GET/DELETE/HEAD requests as POST requests.
67
+ if options[:http_method_override]
68
+ options = options.clone
69
+ options.delete(:http_method_override)
70
+ body = URI.encode_www_form(options)
71
+ options = {
72
+ override_headers: {
73
+ "X-HTTP-Method-Override" => method.to_s.upcase,
74
+ "Content-Type" => "application/x-www-form-urlencoded"
75
+ }
76
+ }
77
+ method = :post
78
+ end
79
+
64
80
  attempts = 0
65
81
  begin
66
82
  request_opts = {}
data/lib/spark_api.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'rubygems'
2
2
  require 'logger'
3
3
  require 'multi_json'
4
+ require 'addressable'
4
5
 
5
6
  require 'spark_api/version'
6
7
  require 'spark_api/errors'
@@ -119,6 +119,25 @@ describe SparkApi::Authentication::ApiAuth do
119
119
  :status=>201)
120
120
  expect(subject.request(:post, "/#{SparkApi.version}/contacts", contact, args).status).to eq(201)
121
121
  end
122
+ it "should incorporate any override_headers it is given while excluding them from the resulting request" do
123
+ stub_auth_request
124
+ args = {
125
+ override_headers: {
126
+ "Some-Header" => "Some-Value"
127
+ },
128
+ ApiUser: "foobar",
129
+ some_other_param: "some_other_value"
130
+ }
131
+ body = "somerequestbodytext"
132
+ stub_request(:post, "https://api.sparkapi.com/v1/someservice?ApiSig=856f5c036137c0cef5d4d223cd0f42be&ApiUser=foobar&AuthToken=1234&some_other_param=some_other_value").
133
+ with(body: "somerequestbodytext", headers: args[:override_headers]).
134
+ to_return(body: '{"D": {
135
+ "Success": true,
136
+ "Results": []
137
+ }',
138
+ status: 200)
139
+ expect(subject.request(:post, "/#{SparkApi.version}/someservice", body, args).status).to eq(200)
140
+ end
122
141
  end
123
142
 
124
143
  describe "sign" do
@@ -97,6 +97,24 @@ describe SparkApi::Authentication::OAuth2 do
97
97
  :status=>201)
98
98
  expect(subject.request(:post, "/#{SparkApi.version}/contacts", contact, args).status).to eq(201)
99
99
  end
100
+ it "should incorporate any override_headers it is given while excluding them from the resulting request" do
101
+ subject.session = session
102
+ args = {
103
+ override_headers: {
104
+ "Some-Header" => "Some-Value"
105
+ },
106
+ some_other_param: "some_other_value"
107
+ }
108
+ body = "somerequestbodytext"
109
+ stub_request(:post, "https://api.sparkapi.com/#{SparkApi.version}/someservice?some_other_param=some_other_value").
110
+ with(body: body, headers: args[:override_headers]).
111
+ to_return(body: '{"D": {
112
+ "Success": true,
113
+ "Results": []
114
+ }',
115
+ status: 200)
116
+ expect(subject.request(:post, "/#{SparkApi.version}/someservice", body, args).status).to eq(200)
117
+ end
100
118
  end
101
119
 
102
120
  describe "sparkbar_token" do
@@ -181,6 +181,12 @@ describe Listing do
181
181
  count = Listing.count()
182
182
  expect(count).to eq(2001)
183
183
  end
184
+
185
+ on_get_it "should return the count even if http_method_override: true is passed" do
186
+ stub_api_post('/listings', '_pagination=count', 'count.json')
187
+ count = Listing.count(http_method_override: true)
188
+ expect(count).to eq(2001)
189
+ end
184
190
  end
185
191
 
186
192
  context "/listings/<listing_id>", :support do
@@ -160,7 +160,13 @@ describe SparkApi do
160
160
  }
161
161
  }']
162
162
  }
163
-
163
+ # For testing http_method_override. See associated test for more details.
164
+ stub.post('/v1/routetoproveweareposting?ApiSig=SignedToken&AuthToken=1234', 'some_param=some_value') { [200, {}, '{"D": {
165
+ "Success": true,
166
+ "Results": []
167
+ }
168
+ }']
169
+ }
164
170
  end
165
171
  @connection = test_connection(stubs)
166
172
  end
@@ -230,7 +236,7 @@ describe SparkApi do
230
236
  end
231
237
 
232
238
  it "should allow response object to be returned instead of body" do
233
- r = subject.get('/system', { full_response: true })
239
+ r = subject.get('/system', { some_param: 'something', full_response: true })
234
240
 
235
241
  expect(r.is_a?(Faraday::Response)).to be(true)
236
242
  expect(r.status).to eq(200)
@@ -248,7 +254,17 @@ describe SparkApi do
248
254
  expect(number.to_s).to eq(BigDecimal.new("9999999999999999999999999.99").to_s)
249
255
  end
250
256
  end
251
-
257
+
258
+ # This is a weird feature and it also gets a weird test that probably
259
+ # merits explanation:
260
+ #
261
+ # We have only stubbed POST for this route, so the below succeeding
262
+ # proves that we have converted our GET into a POST. It is additionally
263
+ # stubbed to prove that we turn the params into a body which excludes the
264
+ # http_method_override options as well as the override_headers options.
265
+ it "should convert GET to POST if http_method_override: true is supplied" do
266
+ expect(subject.get('/routetoproveweareposting', { http_method_override: true, some_param: "some_value" }).success?).to be true
267
+ end
252
268
  end
253
269
 
254
270
  context "when unauthenticated" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spark_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.1
4
+ version: 1.5.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Hornseth
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-02-11 00:00:00.000000000 Z
12
+ date: 2021-12-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday
@@ -534,208 +534,208 @@ required_rubygems_version: !ruby/object:Gem::Requirement
534
534
  - !ruby/object:Gem::Version
535
535
  version: '1.8'
536
536
  requirements: []
537
- rubygems_version: 3.1.4
537
+ rubygems_version: 3.1.6
538
538
  signing_key:
539
539
  specification_version: 4
540
540
  summary: A library for interacting with the Spark web services.
541
541
  test_files:
542
+ - spec/fixtures/fields/order_a.json
542
543
  - spec/fixtures/fields/settings.json
543
544
  - spec/fixtures/fields/order.json
544
- - spec/fixtures/fields/order_a.json
545
- - spec/fixtures/empty.json
546
- - spec/fixtures/finders.json
547
- - spec/fixtures/accounts/my_put.json
548
- - spec/fixtures/accounts/password_save.json
549
- - spec/fixtures/accounts/my.json
550
- - spec/fixtures/accounts/my_portal.json
551
- - spec/fixtures/accounts/office.json
552
- - spec/fixtures/accounts/all.json
553
- - spec/fixtures/accounts/my_save.json
554
- - spec/fixtures/base.json
555
- - spec/fixtures/success.json
545
+ - spec/fixtures/errors/failure_with_msg.json
546
+ - spec/fixtures/errors/failure.json
547
+ - spec/fixtures/errors/expired.json
548
+ - spec/fixtures/errors/failure_with_constraint.json
556
549
  - spec/fixtures/property_types/property_types.json
557
- - spec/fixtures/saved_searches/get.json
558
- - spec/fixtures/saved_searches/without_newsfeed.json
559
- - spec/fixtures/saved_searches/with_inactive_newsfeed.json
560
- - spec/fixtures/saved_searches/get_provided.json
561
- - spec/fixtures/saved_searches/update.json
562
- - spec/fixtures/saved_searches/post.json
563
- - spec/fixtures/saved_searches/new.json
564
- - spec/fixtures/saved_searches/with_newsfeed.json
565
- - spec/fixtures/standardfields/stateorprovince.json
566
- - spec/fixtures/standardfields/standardfields.json
567
- - spec/fixtures/standardfields/city.json
568
- - spec/fixtures/standardfields/nearby.json
569
- - spec/fixtures/portal/my.json
570
- - spec/fixtures/portal/my_non_existant.json
571
- - spec/fixtures/portal/enable.json
572
- - spec/fixtures/portal/post.json
573
- - spec/fixtures/portal/disable.json
574
- - spec/fixtures/portal/new.json
575
- - spec/fixtures/oauth2_error.json
576
- - spec/fixtures/sharedlinks/success.json
577
- - spec/fixtures/authentication_failure.json
550
+ - spec/fixtures/listing_carts/put.json
551
+ - spec/fixtures/listing_carts/post.json
552
+ - spec/fixtures/listing_carts/put_name.json
553
+ - spec/fixtures/listing_carts/add_portal_cart_listings.json
554
+ - spec/fixtures/listing_carts/listing_cart.json
555
+ - spec/fixtures/listing_carts/new_portal_cart.json
556
+ - spec/fixtures/listing_carts/put_ids.json
557
+ - spec/fixtures/listing_carts/new.json
558
+ - spec/fixtures/listing_carts/remove_listing.json
559
+ - spec/fixtures/listing_carts/add_listing_post.json
560
+ - spec/fixtures/listing_carts/add_listing.json
561
+ - spec/fixtures/listing_carts/add_portal_cart_listings_post.json
562
+ - spec/fixtures/listing_carts/empty.json
563
+ - spec/fixtures/listing_carts/add_listings.json
564
+ - spec/fixtures/listing_carts/post_portal_cart.json
565
+ - spec/fixtures/listing_carts/listing_portal_cart.json
566
+ - spec/fixtures/listing_carts/add_listings_post.json
567
+ - spec/fixtures/success.json
578
568
  - spec/fixtures/activities/get.json
579
- - spec/fixtures/idx_links/get.json
580
- - spec/fixtures/contacts/my.json
581
- - spec/fixtures/contacts/vow_accounts/get.json
569
+ - spec/fixtures/generic_failure.json
570
+ - spec/fixtures/search_templates/quick_searches/get.json
571
+ - spec/fixtures/comments/get.json
572
+ - spec/fixtures/comments/post.json
573
+ - spec/fixtures/comments/new.json
582
574
  - spec/fixtures/contacts/vow_accounts/edit.json
575
+ - spec/fixtures/contacts/vow_accounts/get.json
583
576
  - spec/fixtures/contacts/vow_accounts/post.json
584
577
  - spec/fixtures/contacts/vow_accounts/new.json
585
578
  - spec/fixtures/contacts/new_empty.json
586
579
  - spec/fixtures/contacts/post.json
580
+ - spec/fixtures/contacts/my.json
587
581
  - spec/fixtures/contacts/new.json
588
- - spec/fixtures/contacts/tags.json
589
- - spec/fixtures/contacts/new_notify.json
590
582
  - spec/fixtures/contacts/contacts.json
583
+ - spec/fixtures/contacts/new_notify.json
584
+ - spec/fixtures/contacts/tags.json
585
+ - spec/fixtures/oauth2/access_with_old_refresh.json
586
+ - spec/fixtures/oauth2/error.json
587
+ - spec/fixtures/oauth2/authorization_code_body.json
588
+ - spec/fixtures/oauth2/refresh_body.json
589
+ - spec/fixtures/oauth2/password_body.json
590
+ - spec/fixtures/oauth2/access_with_refresh.json
591
+ - spec/fixtures/oauth2/access.json
592
+ - spec/fixtures/base.json
593
+ - spec/fixtures/idx_links/get.json
594
+ - spec/fixtures/saved_searches/with_inactive_newsfeed.json
595
+ - spec/fixtures/saved_searches/get_provided.json
596
+ - spec/fixtures/saved_searches/get.json
597
+ - spec/fixtures/saved_searches/post.json
598
+ - spec/fixtures/saved_searches/without_newsfeed.json
599
+ - spec/fixtures/saved_searches/with_newsfeed.json
600
+ - spec/fixtures/saved_searches/new.json
601
+ - spec/fixtures/saved_searches/update.json
591
602
  - spec/fixtures/no_results.json
592
- - spec/fixtures/generic_delete.json
593
- - spec/fixtures/sorts/get.json
594
- - spec/fixtures/search_templates/quick_searches/get.json
595
- - spec/fixtures/comments/get.json
596
- - spec/fixtures/comments/post.json
597
- - spec/fixtures/comments/new.json
598
- - spec/fixtures/session.json
599
- - spec/fixtures/notes/agent_shared.json
600
- - spec/fixtures/notes/add.json
601
- - spec/fixtures/notes/new.json
602
603
  - spec/fixtures/notes/agent_shared_empty.json
603
- - spec/fixtures/logo_fbs.png
604
- - spec/fixtures/listings/no_subresources.json
605
- - spec/fixtures/listings/constraints_with_pagination.json
606
- - spec/fixtures/listings/open_houses.json
607
- - spec/fixtures/listings/put_expiration_date.json
608
- - spec/fixtures/listings/tour_of_homes_search.json
609
- - spec/fixtures/listings/reorder_photo.json
610
- - spec/fixtures/listings/shared_listing_post.json
611
- - spec/fixtures/listings/multiple.json
612
- - spec/fixtures/listings/with_videos.json
613
- - spec/fixtures/listings/with_supplement.json
604
+ - spec/fixtures/notes/new.json
605
+ - spec/fixtures/notes/add.json
606
+ - spec/fixtures/notes/agent_shared.json
607
+ - spec/fixtures/accounts/my_put.json
608
+ - spec/fixtures/accounts/my_portal.json
609
+ - spec/fixtures/accounts/my.json
610
+ - spec/fixtures/accounts/office.json
611
+ - spec/fixtures/accounts/password_save.json
612
+ - spec/fixtures/accounts/my_save.json
613
+ - spec/fixtures/accounts/all.json
614
+ - spec/fixtures/sharedlinks/success.json
615
+ - spec/fixtures/listings/put.json
616
+ - spec/fixtures/listings/videos_index.json
614
617
  - spec/fixtures/listings/photos/index.json
615
618
  - spec/fixtures/listings/photos/post.json
619
+ - spec/fixtures/listings/photos/rotate.json
620
+ - spec/fixtures/listings/photos/rollback.json
616
621
  - spec/fixtures/listings/photos/new.json
617
622
  - spec/fixtures/listings/photos/batch_delete.json
618
- - spec/fixtures/listings/photos/rollback.json
619
- - spec/fixtures/listings/photos/rotate.json
620
- - spec/fixtures/listings/floplans_index.json
621
- - spec/fixtures/listings/with_vtour.json
623
+ - spec/fixtures/listings/constraints_with_pagination.json
622
624
  - spec/fixtures/listings/with_rental_calendar.json
623
- - spec/fixtures/listings/videos_index.json
624
- - spec/fixtures/listings/rental_calendar.json
625
- - spec/fixtures/listings/with_photos.json
625
+ - spec/fixtures/listings/floplans_index.json
626
626
  - spec/fixtures/listings/shared_listing_get.json
627
+ - spec/fixtures/listings/with_documents.json
627
628
  - spec/fixtures/listings/tour_of_homes.json
628
- - spec/fixtures/listings/document_index.json
629
+ - spec/fixtures/listings/with_supplement.json
630
+ - spec/fixtures/listings/with_videos.json
631
+ - spec/fixtures/listings/shared_listing_post.json
632
+ - spec/fixtures/listings/put_reorder_photo.json
633
+ - spec/fixtures/listings/rental_calendar.json
629
634
  - spec/fixtures/listings/constraints.json
630
- - spec/fixtures/listings/put.json
635
+ - spec/fixtures/listings/no_subresources.json
631
636
  - spec/fixtures/listings/with_permissions.json
632
- - spec/fixtures/listings/with_documents.json
633
- - spec/fixtures/listings/put_reorder_photo.json
634
- - spec/fixtures/listings/shared_listing_new.json
637
+ - spec/fixtures/listings/open_houses.json
638
+ - spec/fixtures/listings/with_photos.json
639
+ - spec/fixtures/listings/with_vtour.json
640
+ - spec/fixtures/listings/multiple.json
641
+ - spec/fixtures/listings/document_index.json
642
+ - spec/fixtures/listings/reorder_photo.json
643
+ - spec/fixtures/listings/put_expiration_date.json
635
644
  - spec/fixtures/listings/virtual_tours_index.json
645
+ - spec/fixtures/listings/tour_of_homes_search.json
646
+ - spec/fixtures/listings/shared_listing_new.json
647
+ - spec/fixtures/authentication_failure.json
648
+ - spec/fixtures/standardfields/city.json
649
+ - spec/fixtures/standardfields/nearby.json
650
+ - spec/fixtures/standardfields/standardfields.json
651
+ - spec/fixtures/standardfields/stateorprovince.json
652
+ - spec/fixtures/count.json
653
+ - spec/fixtures/oauth2_error.json
654
+ - spec/fixtures/finders.json
655
+ - spec/fixtures/portal/post.json
656
+ - spec/fixtures/portal/my.json
657
+ - spec/fixtures/portal/my_non_existant.json
658
+ - spec/fixtures/portal/new.json
659
+ - spec/fixtures/portal/enable.json
660
+ - spec/fixtures/portal/disable.json
661
+ - spec/fixtures/session.json
662
+ - spec/fixtures/rules/get.json
663
+ - spec/fixtures/newsfeeds/get.json
664
+ - spec/fixtures/newsfeeds/inactive.json
665
+ - spec/fixtures/newsfeeds/meta.json
636
666
  - spec/fixtures/listing_meta_translations/get.json
637
- - spec/fixtures/notifications/unread.json
667
+ - spec/fixtures/empty.json
668
+ - spec/fixtures/sorts/get.json
638
669
  - spec/fixtures/notifications/new_empty.json
639
670
  - spec/fixtures/notifications/notifications.json
640
671
  - spec/fixtures/notifications/post.json
641
672
  - spec/fixtures/notifications/new.json
642
673
  - spec/fixtures/notifications/mark_read.json
643
- - spec/fixtures/rules/get.json
644
- - spec/fixtures/oauth2/access.json
645
- - spec/fixtures/oauth2/access_with_old_refresh.json
646
- - spec/fixtures/oauth2/authorization_code_body.json
647
- - spec/fixtures/oauth2/password_body.json
648
- - spec/fixtures/oauth2/refresh_body.json
649
- - spec/fixtures/oauth2/error.json
650
- - spec/fixtures/oauth2/access_with_refresh.json
651
- - spec/fixtures/messages/get.json
674
+ - spec/fixtures/notifications/unread.json
675
+ - spec/fixtures/logo_fbs.png
676
+ - spec/fixtures/generic_delete.json
652
677
  - spec/fixtures/messages/new_empty.json
678
+ - spec/fixtures/messages/get.json
679
+ - spec/fixtures/messages/new_with_recipients.json
653
680
  - spec/fixtures/messages/post.json
654
681
  - spec/fixtures/messages/new.json
655
- - spec/fixtures/messages/new_with_recipients.json
656
682
  - spec/fixtures/messages/count.json
657
- - spec/fixtures/count.json
658
- - spec/fixtures/generic_failure.json
659
- - spec/fixtures/newsfeeds/get.json
660
- - spec/fixtures/newsfeeds/meta.json
661
- - spec/fixtures/newsfeeds/inactive.json
662
- - spec/fixtures/errors/expired.json
663
- - spec/fixtures/errors/failure_with_constraint.json
664
- - spec/fixtures/errors/failure_with_msg.json
665
- - spec/fixtures/errors/failure.json
666
- - spec/fixtures/listing_carts/post_portal_cart.json
667
- - spec/fixtures/listing_carts/empty.json
668
- - spec/fixtures/listing_carts/put_name.json
669
- - spec/fixtures/listing_carts/add_portal_cart_listings_post.json
670
- - spec/fixtures/listing_carts/add_listings_post.json
671
- - spec/fixtures/listing_carts/new_portal_cart.json
672
- - spec/fixtures/listing_carts/remove_listing.json
673
- - spec/fixtures/listing_carts/add_listing_post.json
674
- - spec/fixtures/listing_carts/add_listing.json
675
- - spec/fixtures/listing_carts/post.json
676
- - spec/fixtures/listing_carts/new.json
677
- - spec/fixtures/listing_carts/listing_portal_cart.json
678
- - spec/fixtures/listing_carts/add_listings.json
679
- - spec/fixtures/listing_carts/put.json
680
- - spec/fixtures/listing_carts/add_portal_cart_listings.json
681
- - spec/fixtures/listing_carts/put_ids.json
682
- - spec/fixtures/listing_carts/listing_cart.json
683
- - spec/unit/spark_api/configuration_spec.rb
683
+ - spec/unit/spark_api_spec.rb
684
+ - spec/unit/spark_api/paginate_spec.rb
685
+ - spec/unit/spark_api/request_spec.rb
686
+ - spec/unit/spark_api/options_hash_spec.rb
687
+ - spec/unit/spark_api/authentication/base_auth_spec.rb
688
+ - spec/unit/spark_api/authentication/oauth2_spec.rb
689
+ - spec/unit/spark_api/authentication/api_auth_spec.rb
690
+ - spec/unit/spark_api/authentication/oauth2_impl/single_session_provider_spec.rb
691
+ - spec/unit/spark_api/authentication/oauth2_impl/grant_type_base_spec.rb
692
+ - spec/unit/spark_api/authentication/oauth2_impl/faraday_middleware_spec.rb
693
+ - spec/unit/spark_api/models/notification_spec.rb
694
+ - spec/unit/spark_api/models/floplan_spec.rb
695
+ - spec/unit/spark_api/models/fields_spec.rb
696
+ - spec/unit/spark_api/models/open_house_spec.rb
684
697
  - spec/unit/spark_api/models/document_spec.rb
685
- - spec/unit/spark_api/models/rental_calendar_spec.rb
698
+ - spec/unit/spark_api/models/newsfeed_spec.rb
686
699
  - spec/unit/spark_api/models/system_info_spec.rb
687
- - spec/unit/spark_api/models/listing_spec.rb
688
- - spec/unit/spark_api/models/listing_meta_translations_spec.rb
689
- - spec/unit/spark_api/models/contact_spec.rb
690
- - spec/unit/spark_api/models/concerns/destroyable_spec.rb
691
- - spec/unit/spark_api/models/concerns/savable_spec.rb
692
- - spec/unit/spark_api/models/video_spec.rb
693
- - spec/unit/spark_api/models/shared_listing_spec.rb
694
- - spec/unit/spark_api/models/email_link_spec.rb
695
- - spec/unit/spark_api/models/note_spec.rb
696
- - spec/unit/spark_api/models/rule_spec.rb
697
- - spec/unit/spark_api/models/vow_account_spec.rb
698
- - spec/unit/spark_api/models/account_report_spec.rb
699
700
  - spec/unit/spark_api/models/tour_of_home_spec.rb
701
+ - spec/unit/spark_api/models/vow_account_spec.rb
700
702
  - spec/unit/spark_api/models/activity_spec.rb
701
- - spec/unit/spark_api/models/saved_search_spec.rb
702
- - spec/unit/spark_api/models/listing_cart_spec.rb
703
- - spec/unit/spark_api/models/subresource_spec.rb
704
- - spec/unit/spark_api/models/newsfeed_spec.rb
705
- - spec/unit/spark_api/models/portal_spec.rb
706
- - spec/unit/spark_api/models/photo_spec.rb
707
- - spec/unit/spark_api/models/virtual_tour_spec.rb
703
+ - spec/unit/spark_api/models/listing_meta_translations_spec.rb
708
704
  - spec/unit/spark_api/models/news_feed_meta_spec.rb
705
+ - spec/unit/spark_api/models/listing_spec.rb
709
706
  - spec/unit/spark_api/models/sort_spec.rb
710
- - spec/unit/spark_api/models/open_house_spec.rb
711
- - spec/unit/spark_api/models/fields_spec.rb
712
- - spec/unit/spark_api/models/message_spec.rb
707
+ - spec/unit/spark_api/models/subresource_spec.rb
713
708
  - spec/unit/spark_api/models/connect_prefs_spec.rb
714
- - spec/unit/spark_api/models/base_spec.rb
715
- - spec/unit/spark_api/models/account_spec.rb
709
+ - spec/unit/spark_api/models/rule_spec.rb
710
+ - spec/unit/spark_api/models/video_spec.rb
711
+ - spec/unit/spark_api/models/virtual_tour_spec.rb
712
+ - spec/unit/spark_api/models/listing_cart_spec.rb
713
+ - spec/unit/spark_api/models/message_spec.rb
714
+ - spec/unit/spark_api/models/email_link_spec.rb
715
+ - spec/unit/spark_api/models/standard_fields_spec.rb
716
716
  - spec/unit/spark_api/models/dirty_spec.rb
717
+ - spec/unit/spark_api/models/account_spec.rb
718
+ - spec/unit/spark_api/models/photo_spec.rb
717
719
  - spec/unit/spark_api/models/finders_spec.rb
720
+ - spec/unit/spark_api/models/note_spec.rb
721
+ - spec/unit/spark_api/models/concerns/savable_spec.rb
722
+ - spec/unit/spark_api/models/concerns/destroyable_spec.rb
723
+ - spec/unit/spark_api/models/portal_spec.rb
718
724
  - spec/unit/spark_api/models/defaultable_spec.rb
719
- - spec/unit/spark_api/models/notification_spec.rb
720
- - spec/unit/spark_api/models/property_types_spec.rb
721
- - spec/unit/spark_api/models/standard_fields_spec.rb
722
- - spec/unit/spark_api/models/shared_link_spec.rb
723
725
  - spec/unit/spark_api/models/constraint_spec.rb
726
+ - spec/unit/spark_api/models/shared_listing_spec.rb
727
+ - spec/unit/spark_api/models/property_types_spec.rb
724
728
  - spec/unit/spark_api/models/search_template/quick_search_spec.rb
725
- - spec/unit/spark_api/models/floplan_spec.rb
729
+ - spec/unit/spark_api/models/contact_spec.rb
730
+ - spec/unit/spark_api/models/rental_calendar_spec.rb
731
+ - spec/unit/spark_api/models/saved_search_spec.rb
732
+ - spec/unit/spark_api/models/account_report_spec.rb
733
+ - spec/unit/spark_api/models/base_spec.rb
734
+ - spec/unit/spark_api/models/shared_link_spec.rb
726
735
  - spec/unit/spark_api/faraday_middleware_spec.rb
727
- - spec/unit/spark_api/paginate_spec.rb
728
- - spec/unit/spark_api/authentication/api_auth_spec.rb
729
- - spec/unit/spark_api/authentication/base_auth_spec.rb
730
- - spec/unit/spark_api/authentication/oauth2_impl/faraday_middleware_spec.rb
731
- - spec/unit/spark_api/authentication/oauth2_impl/grant_type_base_spec.rb
732
- - spec/unit/spark_api/authentication/oauth2_impl/single_session_provider_spec.rb
733
- - spec/unit/spark_api/authentication/oauth2_spec.rb
736
+ - spec/unit/spark_api/configuration_spec.rb
737
+ - spec/unit/spark_api/primary_array_spec.rb
734
738
  - spec/unit/spark_api/configuration/yaml_spec.rb
735
739
  - spec/unit/spark_api/multi_client_spec.rb
736
740
  - spec/unit/spark_api/authentication_spec.rb
737
- - spec/unit/spark_api/options_hash_spec.rb
738
- - spec/unit/spark_api/primary_array_spec.rb
739
- - spec/unit/spark_api/request_spec.rb
740
- - spec/unit/spark_api_spec.rb
741
741
  - spec/spec_helper.rb