spark_api 1.6.0 → 1.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +57 -28
- data/VERSION +1 -1
- data/script/access_token_example.rb +16 -0
- data/script/bootstrap +3 -2
- data/script/example.rb +4 -4
- data/script/reso_middleware_example.rb +53 -52
- data/script/spark_auth_example.rb +26 -0
- data/spec/unit/spark_api/models/defaultable_spec.rb +3 -2
- metadata +174 -158
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e315d7b172f1df48cf669a4900fde0367b629dba0fa337b1047d5aeb38c32dfb
|
4
|
+
data.tar.gz: cd034a5ea19d67503c5fca449771fa882a1f0b37b673d3f2259f38db0276a12a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da7b242dbdeb0dac71a5334a6a26d158ad49a8bc0c835b896b754f4ba4d4da87445c50164406863a8ba23d2f5a99ef6f95c0d08b4cf0b53392243012803289ad
|
7
|
+
data.tar.gz: c172948eff245c7ca407fb7a3d73f7634ce43fc1a1f906bdb90a4f73d2b7166eb0f88046beef6f856bab938dc15d4462af6b6150f0059c79e1b27291266d56b0
|
data/README.md
CHANGED
@@ -10,35 +10,76 @@ Documentation
|
|
10
10
|
|
11
11
|
For further client documentation, please consult our [wiki](https://github.com/sparkapi/spark_api/wiki).
|
12
12
|
|
13
|
-
For full information on the API, see [http://sparkplatform.com/docs/overview/api](http://sparkplatform.com/docs/overview/api)
|
13
|
+
For full information on the Spark API, see [http://sparkplatform.com/docs/overview/api](http://sparkplatform.com/docs/overview/api). If you would instead like information on the RESO Web API, see [http://sparkplatform.com/docs/reso/overview](http://sparkplatform.com/docs/reso/overview)
|
14
14
|
|
15
15
|
|
16
16
|
Installation
|
17
17
|
---------
|
18
18
|
gem install spark_api
|
19
19
|
|
20
|
+
|
21
|
+
Authentication Types
|
22
|
+
--------------
|
23
|
+
Authentication is handled transparently by the request framework in the gem, so you should never need to manually make an authentication request. More than one mode of authentication is supported, so the client needs to be configured accordingly.
|
24
|
+
|
25
|
+
#### [Access Token Authentication](https://github.com/sparkapi/spark_api/wiki/Spark-Authentication) (Preferred)
|
26
|
+
Also known as Bearer Token Authentication. If you've been provided a single non-expiring access (bearer) token for the purpose of accessing data on behalf of one or more MLS users, this method of authentication should be used. See "script/access_token_example.rb" for an example.
|
27
|
+
|
28
|
+
#### [OpenId/OAuth2 Combined Flow](https://github.com/sparkapi/spark_api/wiki/Hybrid-Authentication)
|
29
|
+
Authorization mode that separates application and user authentication. This mode requires the end user to be redirected to Spark Platform's openid endpoint in a web browser window. See "script/combined_flow_example.rb" for an example.
|
30
|
+
|
31
|
+
Read more about Spark Platform's combined flow <a href="http://sparkplatform.com/docs/authentication/openid_oauth2_authentication">here</a>.
|
32
|
+
|
33
|
+
#### [OAuth2 Authorization](https://github.com/sparkapi/spark_api/wiki/OAuth2-Only-Authentication)
|
34
|
+
Authorization mode that separates application and user authentication. This mode requires the end user to be redirected to Spark Platform's auth endpoint in a web browser window. See "script/oauth2_example.rb" for an example.
|
35
|
+
|
36
|
+
Read more about Spark Platform's OAuth 2 flow <a href="http://sparkplatform.com/docs/authentication/oauth2_authentication">here</a>.
|
37
|
+
|
38
|
+
#### [Spark API Authentication](https://github.com/sparkapi/spark_api/wiki/Spark-Authentication) (Deprecated)
|
39
|
+
Usually supplied for a single user, this authentication mode was our old standard, however, is now deprecated in favor of bearer token authentication. See "script/spark_auth_example.rb" for an example.
|
40
|
+
|
41
|
+
|
20
42
|
Usage Examples
|
21
43
|
------------------------
|
22
|
-
|
44
|
+
#### Accessing the Spark API (Default)
|
23
45
|
```ruby
|
24
46
|
require 'spark_api'
|
25
47
|
SparkApi.configure do |config|
|
26
48
|
config.endpoint = 'https://sparkapi.com'
|
27
|
-
|
28
|
-
|
29
|
-
|
49
|
+
config.authentication_mode = SparkApi::Authentication::OAuth2
|
50
|
+
end
|
51
|
+
#Non-expiring bearer token auth. See below if you are using a different authentication method.
|
52
|
+
SparkApi.client.session = SparkApi::Authentication::OAuthSession.new({ :access_token => "your_bearer_token_here" })
|
53
|
+
puts SparkApi.client.get '/system'
|
54
|
+
```
|
55
|
+
|
56
|
+
#### Accessing the RESO Web API
|
57
|
+
```ruby
|
58
|
+
require "spark_api"
|
59
|
+
|
60
|
+
# set up session and set the client to hit the RESO API endpoints.
|
61
|
+
SparkApi.configure do |config|
|
62
|
+
config.authentication_mode = SparkApi::Authentication::OAuth2
|
63
|
+
config.middleware = :reso_api
|
30
64
|
end
|
31
|
-
|
65
|
+
#Non-expiring bearer token auth. See below if you are using a different authentication method.
|
66
|
+
SparkApi.client.session = SparkApi::Authentication::OAuthSession.new({ :access_token => "your_access_token_here" })
|
67
|
+
|
68
|
+
puts SparkApi.client.get("/Property", {:$top => 10 })
|
32
69
|
```
|
33
70
|
|
71
|
+
The examples above utilize access token authentication. For examples using different authentication methods review the wiki and /script folder within this project.
|
34
72
|
|
35
73
|
#### Interactive Console
|
36
|
-
Included in the gem is an interactive spark_api console to interact with the api in a manner similar to the rails console.
|
74
|
+
Included in the gem is an interactive spark_api console to interact with the api in a manner similar to the rails console. Here are a few examples using various auth methods:
|
37
75
|
|
38
|
-
|
39
|
-
|
76
|
+
Access Token Auth:
|
77
|
+
|
78
|
+
> spark_api --oauth2
|
79
|
+
SparkApi:001:0> SparkApi.client.session = SparkApi::Authentication::OAuthSession.new({ :access_token => "your_access_token_here" })
|
80
|
+
SparkApi:002:0> SparkApi.client.get '/my/account'
|
40
81
|
|
41
|
-
|
82
|
+
Standard OAuth2 access is a bit more complicated as it requires a step for logging in through the browser to gain access to the access code for a client_id.
|
42
83
|
|
43
84
|
> bundle exec spark_api --oauth2 --client_id my_oauth2_client_id --client_secret my_oauth2_client_secret
|
44
85
|
Loading spark_api gem...
|
@@ -51,13 +92,18 @@ Using OAuth2 requires different arguments, and is a bit more complicated as it r
|
|
51
92
|
SparkApi:002:0> Account.my.UserType
|
52
93
|
"Member"
|
53
94
|
|
95
|
+
[Spark Auth (deprecated)](http://sparkplatform.com/docs/authentication/spark_api_authentication):
|
96
|
+
|
97
|
+
> spark_api --api_key MY_SPARK_API_KEY --api_secret MY_SPARK_API_SECRET
|
98
|
+
SparkApi> SparkApi.client.get '/my/account'
|
99
|
+
|
54
100
|
You can also provide other options from the command line, see "spark_api -h" for more information.
|
55
101
|
|
56
102
|
#### HTTP Interface
|
57
103
|
The base client provides a bare bones HTTP interface for working with the RESTful Spark API. This is basically a stylized curl interface that handles authentication, error handling, and processes JSON results as Ruby Hashes.
|
58
104
|
|
59
105
|
```ruby
|
60
|
-
SparkApi.client.get "/listings
|
106
|
+
SparkApi.client.get "/listings", :_expand => "CustomFields", :_filter => "MlsStatus Eq 'Active'", :_limit => 1
|
61
107
|
SparkApi.client.post "/listings/#{listing_id}/photos", photo_body_hash
|
62
108
|
SparkApi.client.put "/listings/#{listing_id}/photos/#{photo_id}", updated_photo_name_hash
|
63
109
|
SparkApi.client.delete "/listings/#{listing_id}/photos/#{photo_id}"
|
@@ -81,20 +127,3 @@ JSON Parsing
|
|
81
127
|
--------------
|
82
128
|
By default, this gem uses the pure ruby json gem for parsing API responses for cross platform compatibility. Projects that include the yajl-ruby gem will see noticeable speed improvements when installed.
|
83
129
|
|
84
|
-
|
85
|
-
Authentication Types
|
86
|
-
--------------
|
87
|
-
Authentication is handled transparently by the request framework in the gem, so you should never need to manually make an authentication request. More than one mode of authentication is supported, so the client needs to be configured accordingly.
|
88
|
-
|
89
|
-
#### [Spark API Authentication](https://github.com/sparkapi/spark_api/wiki/Spark-Authentication) (Default)
|
90
|
-
Usually supplied for a single user, this authentication mode is the simplest, and is setup as the default. The example usage above demonstrates how to get started using this authentication mode.
|
91
|
-
|
92
|
-
#### [OpenId/OAuth2 Combined Flow](https://github.com/sparkapi/spark_api/wiki/Hybrid-Authentication) (Preferred)
|
93
|
-
Authorization mode the separates application and user authentication. This mode requires the end user to be redirected to Spark Platform's openid endpoint. See "script/combined_flow_example.rb" for an example.
|
94
|
-
|
95
|
-
Read more about Spark Platform's combined flow <a href="http://sparkplatform.com/docs/authentication/openid_oauth2_authentication">here</a>.
|
96
|
-
|
97
|
-
#### [OAuth2 Authorization](https://github.com/sparkapi/spark_api/wiki/OAuth2-Only-Authentication)
|
98
|
-
Authorization mode the separates application and user authentication. This mode requires the end user to be redirected to Spark Platform's auth endpoint. See "script/oauth2_example.rb" for an example.
|
99
|
-
|
100
|
-
Read more about Spark Platform's OAuth 2 flow <a href="http://sparkplatform.com/docs/authentication/oauth2_authentication">here</a>.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.6.
|
1
|
+
1.6.1
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require "spark_api"
|
2
|
+
|
3
|
+
SparkApi.configure do |config|
|
4
|
+
config.endpoint = 'https://sparkapi.com'
|
5
|
+
config.authentication_mode = SparkApi::Authentication::OAuth2
|
6
|
+
end
|
7
|
+
|
8
|
+
#### COPY/PASTE YOUR ACCESS TOKEN WHERE DESIGNATED BELOW
|
9
|
+
SparkApi.client.session = SparkApi::Authentication::OAuthSession.new({ :access_token => "your_access_token_here" })
|
10
|
+
|
11
|
+
client = SparkApi.client
|
12
|
+
|
13
|
+
list = client.get '/contacts'
|
14
|
+
puts "client: #{list.inspect}"
|
15
|
+
list = SparkApi::Models::Contact.get
|
16
|
+
puts "model: #{list.inspect}"
|
data/script/bootstrap
CHANGED
data/script/example.rb
CHANGED
@@ -10,12 +10,12 @@ require path + '/spark_api'
|
|
10
10
|
SparkApi.logger.info("Hello!")
|
11
11
|
|
12
12
|
SparkApi.configure do |config|
|
13
|
-
config.
|
14
|
-
config.
|
15
|
-
config.version = "v1"
|
16
|
-
config.endpoint = "https://api.sparkapi.com"
|
13
|
+
config.endpoint = 'https://sparkapi.com'
|
14
|
+
config.authentication_mode = SparkApi::Authentication::OAuth2
|
17
15
|
end
|
18
16
|
|
17
|
+
SparkApi.client.session = SparkApi::Authentication::OAuthSession.new({ :access_token => "your_access_token_here" })
|
18
|
+
|
19
19
|
client = SparkApi.client
|
20
20
|
|
21
21
|
list = client.get '/contacts'
|
@@ -1,8 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
# This script demonstrates how to
|
4
|
-
# and replacing encoded field values with their corresponding human-readable values, which are
|
5
|
-
# pulled from the XML returned by the RESO metadata endpoint.
|
3
|
+
# This script demonstrates how to access the RESO Web API with FBS's Ruby API client.
|
6
4
|
|
7
5
|
require "spark_api"
|
8
6
|
require "nokogiri"
|
@@ -12,59 +10,62 @@ SparkApi.configure do |config|
|
|
12
10
|
config.authentication_mode = SparkApi::Authentication::OAuth2
|
13
11
|
config.middleware = :reso_api
|
14
12
|
end
|
15
|
-
|
16
|
-
SparkApi.client.session = SparkApi::Authentication::OAuthSession.new({ :access_token => "
|
13
|
+
#### COPY/PASTE YOUR ACCESS TOKEN BELOW
|
14
|
+
SparkApi.client.session = SparkApi::Authentication::OAuthSession.new({ :access_token => "your_access_token_here" })
|
17
15
|
|
18
16
|
# pull metadata from RESO Web API
|
19
|
-
metadata_res =
|
17
|
+
metadata_res = SparkApi.client.get("/$metadata")
|
20
18
|
metadata_xml = Nokogiri::XML(metadata_res).remove_namespaces!
|
21
19
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
20
|
+
## make an array of fields which need to be checked for readable values
|
21
|
+
## API now returns decoded field values. This is no longer necessary
|
22
|
+
#fields_to_lookup = []
|
23
|
+
#metadata_xml.xpath('//Schema/EnumType/@Name').each do |el|
|
24
|
+
# fields_to_lookup << el.to_str
|
25
|
+
#end
|
27
26
|
|
28
27
|
# get 25 listings
|
29
|
-
listings =
|
30
|
-
|
31
|
-
listings['value'].each do |listing| # for each listing,
|
32
|
-
fields_to_lookup.each do |field| # go through the array of fields to be checked.
|
33
|
-
if !!listing[field] # when one of the fields that needs to be checked exists in a listing,
|
34
|
-
if listing[field].is_a? String
|
35
|
-
readable = metadata_xml.xpath( # check for readable value to be swapped in
|
36
|
-
"//Schema/
|
37
|
-
EnumType[@Name=\"#{field}\"]/
|
38
|
-
Member[@Name=\"#{listing[field]}\"]/
|
39
|
-
Annotation"
|
40
|
-
).attr("String")
|
41
|
-
|
42
|
-
# if there is a readable value, swap it in
|
43
|
-
if !!readable
|
44
|
-
listing[field] = readable.to_str
|
45
|
-
end
|
46
|
-
|
47
|
-
elsif listing[field].is_a? Array
|
48
|
-
readable_arr = []
|
49
|
-
listing[field].each do |el|
|
50
|
-
readable = metadata_xml.xpath( # check for readable value to be swapped in
|
51
|
-
"//Schema/
|
52
|
-
EnumType[@Name=\"#{field}\"]/
|
53
|
-
Member[@Name=\"#{el}\"]/
|
54
|
-
Annotation"
|
55
|
-
).attr("String")
|
56
|
-
|
57
|
-
# assemble a new array with readable values and swap it in
|
58
|
-
if !!readable
|
59
|
-
readable_arr << readable.to_str
|
60
|
-
else
|
61
|
-
readable_arr << el
|
62
|
-
end
|
63
|
-
listing[field] = readable_arr
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
28
|
+
listings = SparkApi.client.get("/Property", {:$top => 25 })
|
70
29
|
puts listings
|
30
|
+
|
31
|
+
## API now returns decoded field values. The code below is no longer needed
|
32
|
+
#listings['value'].each do |listing| # for each listing,
|
33
|
+
# fields_to_lookup.each do |field| # go through the array of fields to be checked.
|
34
|
+
# if !!listing[field] # when one of the fields that needs to be checked exists in a listing,
|
35
|
+
# if listing[field].is_a? String
|
36
|
+
# readable = metadata_xml.xpath( # check for readable value to be swapped in
|
37
|
+
# "//Schema/
|
38
|
+
# EnumType[@Name=\"#{field}\"]/
|
39
|
+
# Member[@Name=\"#{listing[field]}\"]/
|
40
|
+
# Annotation"
|
41
|
+
# ).attr("String")
|
42
|
+
#
|
43
|
+
# # if there is a readable value, swap it in
|
44
|
+
# if !!readable
|
45
|
+
# listing[field] = readable.to_str
|
46
|
+
# end
|
47
|
+
#
|
48
|
+
# elsif listing[field].is_a? Array
|
49
|
+
# readable_arr = []
|
50
|
+
# listing[field].each do |el|
|
51
|
+
# readable = metadata_xml.xpath( # check for readable value to be swapped in
|
52
|
+
# "//Schema/
|
53
|
+
# EnumType[@Name=\"#{field}\"]/
|
54
|
+
# Member[@Name=\"#{el}\"]/
|
55
|
+
# Annotation"
|
56
|
+
# ).attr("String")
|
57
|
+
#
|
58
|
+
# # assemble a new array with readable values and swap it in
|
59
|
+
# if !!readable
|
60
|
+
# readable_arr << readable.to_str
|
61
|
+
# else
|
62
|
+
# readable_arr << el
|
63
|
+
# end
|
64
|
+
# listing[field] = readable_arr
|
65
|
+
# end
|
66
|
+
# end
|
67
|
+
# end
|
68
|
+
# end
|
69
|
+
#end
|
70
|
+
#
|
71
|
+
#puts listings
|
@@ -0,0 +1,26 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require "rubygems"
|
3
|
+
|
4
|
+
Bundler.require(:default, "development") if defined?(Bundler)
|
5
|
+
|
6
|
+
path = File.expand_path(File.dirname(__FILE__) + "/../lib/")
|
7
|
+
$LOAD_PATH.unshift(path) unless $LOAD_PATH.include?(path)
|
8
|
+
require path + '/spark_api'
|
9
|
+
|
10
|
+
SparkApi.logger.info("Hello!")
|
11
|
+
|
12
|
+
#### COPY/PASTE YOUR API KEY AND SECRET BELOW
|
13
|
+
SparkApi.configure do |config|
|
14
|
+
config.api_key = "agent_key"
|
15
|
+
config.api_secret = "agent_secret"
|
16
|
+
config.version = "v1"
|
17
|
+
config.endpoint = "https://api.sparkapi.com"
|
18
|
+
end
|
19
|
+
|
20
|
+
client = SparkApi.client
|
21
|
+
|
22
|
+
list = client.get '/contacts'
|
23
|
+
puts "client: #{list.inspect}"
|
24
|
+
list = SparkApi::Models::Contact.get
|
25
|
+
puts "model: #{list.inspect}"
|
26
|
+
|
@@ -44,8 +44,9 @@ describe Defaultable do
|
|
44
44
|
end
|
45
45
|
|
46
46
|
it "passes options to 'default'" do
|
47
|
-
|
48
|
-
TestClass.
|
47
|
+
args = { foo: true }
|
48
|
+
expect(TestClass).to receive(:default).with(args)
|
49
|
+
TestClass.find(TestClass::DEFAULT_ID, args)
|
49
50
|
end
|
50
51
|
|
51
52
|
it "calls Finders.find when given a normal id" 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.6.
|
4
|
+
version: 1.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brandon Hornseth
|
@@ -9,8 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2022-
|
12
|
+
date: 2022-10-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: addressable
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ">="
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
14
28
|
- !ruby/object:Gem::Dependency
|
15
29
|
name: faraday
|
16
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -313,6 +327,7 @@ files:
|
|
313
327
|
- lib/spark_api/reso_faraday_middleware.rb
|
314
328
|
- lib/spark_api/response.rb
|
315
329
|
- lib/spark_api/version.rb
|
330
|
+
- script/access_token_example.rb
|
316
331
|
- script/bootstrap
|
317
332
|
- script/ci_build
|
318
333
|
- script/combined_flow_example.rb
|
@@ -321,6 +336,7 @@ files:
|
|
321
336
|
- script/oauth2_example.rb
|
322
337
|
- script/release
|
323
338
|
- script/reso_middleware_example.rb
|
339
|
+
- script/spark_auth_example.rb
|
324
340
|
- spec/fixtures/accounts/all.json
|
325
341
|
- spec/fixtures/accounts/my.json
|
326
342
|
- spec/fixtures/accounts/my_portal.json
|
@@ -545,203 +561,203 @@ signing_key:
|
|
545
561
|
specification_version: 4
|
546
562
|
summary: A library for interacting with the Spark web services.
|
547
563
|
test_files:
|
548
|
-
- spec/fixtures/
|
549
|
-
- spec/fixtures/
|
550
|
-
- spec/fixtures/
|
551
|
-
- spec/fixtures/
|
552
|
-
- spec/fixtures/errors/failure.json
|
553
|
-
- spec/fixtures/errors/expired.json
|
554
|
-
- spec/fixtures/errors/failure_with_constraint.json
|
555
|
-
- spec/fixtures/property_types/property_types.json
|
556
|
-
- spec/fixtures/listing_carts/put.json
|
564
|
+
- spec/fixtures/idx_links/get.json
|
565
|
+
- spec/fixtures/session.json
|
566
|
+
- spec/fixtures/listing_carts/listing_portal_cart.json
|
567
|
+
- spec/fixtures/listing_carts/remove_listing.json
|
557
568
|
- spec/fixtures/listing_carts/post.json
|
558
|
-
- spec/fixtures/listing_carts/put_name.json
|
559
|
-
- spec/fixtures/listing_carts/add_portal_cart_listings.json
|
560
|
-
- spec/fixtures/listing_carts/listing_cart.json
|
561
|
-
- spec/fixtures/listing_carts/new_portal_cart.json
|
562
569
|
- spec/fixtures/listing_carts/put_ids.json
|
563
|
-
- spec/fixtures/listing_carts/
|
564
|
-
- spec/fixtures/listing_carts/remove_listing.json
|
565
|
-
- spec/fixtures/listing_carts/add_listing_post.json
|
566
|
-
- spec/fixtures/listing_carts/add_listing.json
|
570
|
+
- spec/fixtures/listing_carts/new_portal_cart.json
|
567
571
|
- spec/fixtures/listing_carts/add_portal_cart_listings_post.json
|
572
|
+
- spec/fixtures/listing_carts/listing_cart.json
|
573
|
+
- spec/fixtures/listing_carts/put_name.json
|
574
|
+
- spec/fixtures/listing_carts/new.json
|
575
|
+
- spec/fixtures/listing_carts/add_portal_cart_listings.json
|
568
576
|
- spec/fixtures/listing_carts/empty.json
|
569
|
-
- spec/fixtures/listing_carts/add_listings.json
|
570
577
|
- spec/fixtures/listing_carts/post_portal_cart.json
|
571
|
-
- spec/fixtures/listing_carts/
|
578
|
+
- spec/fixtures/listing_carts/add_listing.json
|
579
|
+
- spec/fixtures/listing_carts/put.json
|
572
580
|
- spec/fixtures/listing_carts/add_listings_post.json
|
573
|
-
- spec/fixtures/
|
574
|
-
- spec/fixtures/
|
575
|
-
- spec/fixtures/
|
576
|
-
- spec/fixtures/
|
577
|
-
- spec/fixtures/comments/get.json
|
578
|
-
- spec/fixtures/comments/post.json
|
579
|
-
- spec/fixtures/comments/new.json
|
580
|
-
- spec/fixtures/contacts/vow_accounts/edit.json
|
581
|
-
- spec/fixtures/contacts/vow_accounts/get.json
|
582
|
-
- spec/fixtures/contacts/vow_accounts/post.json
|
583
|
-
- spec/fixtures/contacts/vow_accounts/new.json
|
584
|
-
- spec/fixtures/contacts/new_empty.json
|
585
|
-
- spec/fixtures/contacts/post.json
|
586
|
-
- spec/fixtures/contacts/my.json
|
587
|
-
- spec/fixtures/contacts/new.json
|
588
|
-
- spec/fixtures/contacts/contacts.json
|
589
|
-
- spec/fixtures/contacts/new_notify.json
|
590
|
-
- spec/fixtures/contacts/tags.json
|
591
|
-
- spec/fixtures/oauth2/access_with_old_refresh.json
|
592
|
-
- spec/fixtures/oauth2/error.json
|
593
|
-
- spec/fixtures/oauth2/authorization_code_body.json
|
594
|
-
- spec/fixtures/oauth2/refresh_body.json
|
595
|
-
- spec/fixtures/oauth2/password_body.json
|
596
|
-
- spec/fixtures/oauth2/access_with_refresh.json
|
597
|
-
- spec/fixtures/oauth2/access.json
|
598
|
-
- spec/fixtures/base.json
|
599
|
-
- spec/fixtures/idx_links/get.json
|
600
|
-
- spec/fixtures/saved_searches/with_inactive_newsfeed.json
|
601
|
-
- spec/fixtures/saved_searches/get_provided.json
|
581
|
+
- spec/fixtures/listing_carts/add_listings.json
|
582
|
+
- spec/fixtures/listing_carts/add_listing_post.json
|
583
|
+
- spec/fixtures/property_types/property_types.json
|
584
|
+
- spec/fixtures/no_results.json
|
602
585
|
- spec/fixtures/saved_searches/get.json
|
586
|
+
- spec/fixtures/saved_searches/update.json
|
603
587
|
- spec/fixtures/saved_searches/post.json
|
604
|
-
- spec/fixtures/saved_searches/without_newsfeed.json
|
605
588
|
- spec/fixtures/saved_searches/with_newsfeed.json
|
606
589
|
- spec/fixtures/saved_searches/new.json
|
607
|
-
- spec/fixtures/saved_searches/
|
608
|
-
- spec/fixtures/
|
609
|
-
- spec/fixtures/
|
610
|
-
- spec/fixtures/
|
611
|
-
- spec/fixtures/
|
612
|
-
- spec/fixtures/
|
613
|
-
- spec/fixtures/
|
614
|
-
- spec/fixtures/
|
615
|
-
- spec/fixtures/
|
616
|
-
- spec/fixtures/
|
617
|
-
- spec/fixtures/
|
618
|
-
- spec/fixtures/
|
619
|
-
- spec/fixtures/
|
620
|
-
- spec/fixtures/
|
621
|
-
- spec/fixtures/
|
622
|
-
- spec/fixtures/
|
623
|
-
- spec/fixtures/
|
624
|
-
- spec/fixtures/listings/
|
625
|
-
- spec/fixtures/listings/photos/rotate.json
|
626
|
-
- spec/fixtures/listings/photos/rollback.json
|
627
|
-
- spec/fixtures/listings/photos/new.json
|
628
|
-
- spec/fixtures/listings/photos/batch_delete.json
|
629
|
-
- spec/fixtures/listings/constraints_with_pagination.json
|
630
|
-
- spec/fixtures/listings/with_rental_calendar.json
|
631
|
-
- spec/fixtures/listings/floplans_index.json
|
632
|
-
- spec/fixtures/listings/shared_listing_get.json
|
633
|
-
- spec/fixtures/listings/with_documents.json
|
634
|
-
- spec/fixtures/listings/tour_of_homes.json
|
590
|
+
- spec/fixtures/saved_searches/with_inactive_newsfeed.json
|
591
|
+
- spec/fixtures/saved_searches/without_newsfeed.json
|
592
|
+
- spec/fixtures/saved_searches/get_provided.json
|
593
|
+
- spec/fixtures/search_templates/quick_searches/get.json
|
594
|
+
- spec/fixtures/newsfeeds/get.json
|
595
|
+
- spec/fixtures/newsfeeds/inactive.json
|
596
|
+
- spec/fixtures/newsfeeds/meta.json
|
597
|
+
- spec/fixtures/sorts/get.json
|
598
|
+
- spec/fixtures/count.json
|
599
|
+
- spec/fixtures/base.json
|
600
|
+
- spec/fixtures/messages/get.json
|
601
|
+
- spec/fixtures/messages/post.json
|
602
|
+
- spec/fixtures/messages/count.json
|
603
|
+
- spec/fixtures/messages/new.json
|
604
|
+
- spec/fixtures/messages/new_with_recipients.json
|
605
|
+
- spec/fixtures/messages/new_empty.json
|
606
|
+
- spec/fixtures/success.json
|
607
|
+
- spec/fixtures/listings/open_houses.json
|
635
608
|
- spec/fixtures/listings/with_supplement.json
|
609
|
+
- spec/fixtures/listings/reorder_photo.json
|
610
|
+
- spec/fixtures/listings/videos_index.json
|
611
|
+
- spec/fixtures/listings/with_photos.json
|
612
|
+
- spec/fixtures/listings/no_subresources.json
|
636
613
|
- spec/fixtures/listings/with_videos.json
|
614
|
+
- spec/fixtures/listings/document_index.json
|
637
615
|
- spec/fixtures/listings/shared_listing_post.json
|
616
|
+
- spec/fixtures/listings/constraints_with_pagination.json
|
617
|
+
- spec/fixtures/listings/floplans_index.json
|
618
|
+
- spec/fixtures/listings/multiple.json
|
619
|
+
- spec/fixtures/listings/with_permissions.json
|
638
620
|
- spec/fixtures/listings/put_reorder_photo.json
|
639
|
-
- spec/fixtures/listings/rental_calendar.json
|
640
621
|
- spec/fixtures/listings/constraints.json
|
641
|
-
- spec/fixtures/listings/
|
642
|
-
- spec/fixtures/listings/with_permissions.json
|
643
|
-
- spec/fixtures/listings/open_houses.json
|
644
|
-
- spec/fixtures/listings/with_photos.json
|
645
|
-
- spec/fixtures/listings/with_vtour.json
|
646
|
-
- spec/fixtures/listings/multiple.json
|
647
|
-
- spec/fixtures/listings/document_index.json
|
648
|
-
- spec/fixtures/listings/reorder_photo.json
|
622
|
+
- spec/fixtures/listings/put.json
|
649
623
|
- spec/fixtures/listings/put_expiration_date.json
|
650
|
-
- spec/fixtures/listings/virtual_tours_index.json
|
651
624
|
- spec/fixtures/listings/tour_of_homes_search.json
|
625
|
+
- spec/fixtures/listings/with_rental_calendar.json
|
626
|
+
- spec/fixtures/listings/photos/rollback.json
|
627
|
+
- spec/fixtures/listings/photos/post.json
|
628
|
+
- spec/fixtures/listings/photos/batch_delete.json
|
629
|
+
- spec/fixtures/listings/photos/rotate.json
|
630
|
+
- spec/fixtures/listings/photos/new.json
|
631
|
+
- spec/fixtures/listings/photos/index.json
|
652
632
|
- spec/fixtures/listings/shared_listing_new.json
|
653
|
-
- spec/fixtures/
|
654
|
-
- spec/fixtures/
|
655
|
-
- spec/fixtures/
|
656
|
-
- spec/fixtures/
|
657
|
-
- spec/fixtures/
|
658
|
-
- spec/fixtures/
|
659
|
-
- spec/fixtures/oauth2_error.json
|
660
|
-
- spec/fixtures/finders.json
|
633
|
+
- spec/fixtures/listings/rental_calendar.json
|
634
|
+
- spec/fixtures/listings/virtual_tours_index.json
|
635
|
+
- spec/fixtures/listings/with_documents.json
|
636
|
+
- spec/fixtures/listings/tour_of_homes.json
|
637
|
+
- spec/fixtures/listings/shared_listing_get.json
|
638
|
+
- spec/fixtures/listings/with_vtour.json
|
661
639
|
- spec/fixtures/portal/post.json
|
662
640
|
- spec/fixtures/portal/my.json
|
663
|
-
- spec/fixtures/portal/
|
641
|
+
- spec/fixtures/portal/disable.json
|
664
642
|
- spec/fixtures/portal/new.json
|
643
|
+
- spec/fixtures/portal/my_non_existant.json
|
665
644
|
- spec/fixtures/portal/enable.json
|
666
|
-
- spec/fixtures/portal/disable.json
|
667
|
-
- spec/fixtures/session.json
|
668
|
-
- spec/fixtures/rules/get.json
|
669
|
-
- spec/fixtures/newsfeeds/get.json
|
670
|
-
- spec/fixtures/newsfeeds/inactive.json
|
671
|
-
- spec/fixtures/newsfeeds/meta.json
|
672
|
-
- spec/fixtures/listing_meta_translations/get.json
|
673
|
-
- spec/fixtures/empty.json
|
674
|
-
- spec/fixtures/sorts/get.json
|
675
|
-
- spec/fixtures/notifications/new_empty.json
|
676
645
|
- spec/fixtures/notifications/notifications.json
|
677
646
|
- spec/fixtures/notifications/post.json
|
678
647
|
- spec/fixtures/notifications/new.json
|
679
|
-
- spec/fixtures/notifications/mark_read.json
|
680
648
|
- spec/fixtures/notifications/unread.json
|
649
|
+
- spec/fixtures/notifications/mark_read.json
|
650
|
+
- spec/fixtures/notifications/new_empty.json
|
651
|
+
- spec/fixtures/rules/get.json
|
652
|
+
- spec/fixtures/empty.json
|
653
|
+
- spec/fixtures/activities/get.json
|
654
|
+
- spec/fixtures/errors/expired.json
|
655
|
+
- spec/fixtures/errors/failure_with_msg.json
|
656
|
+
- spec/fixtures/errors/failure_with_constraint.json
|
657
|
+
- spec/fixtures/errors/failure.json
|
658
|
+
- spec/fixtures/authentication_failure.json
|
659
|
+
- spec/fixtures/standardfields/standardfields.json
|
660
|
+
- spec/fixtures/standardfields/city.json
|
661
|
+
- spec/fixtures/standardfields/stateorprovince.json
|
662
|
+
- spec/fixtures/standardfields/nearby.json
|
663
|
+
- spec/fixtures/listing_meta_translations/get.json
|
664
|
+
- spec/fixtures/oauth2_error.json
|
665
|
+
- spec/fixtures/fields/order_a.json
|
666
|
+
- spec/fixtures/fields/order.json
|
667
|
+
- spec/fixtures/fields/settings.json
|
668
|
+
- spec/fixtures/notes/add.json
|
669
|
+
- spec/fixtures/notes/new.json
|
670
|
+
- spec/fixtures/notes/agent_shared.json
|
671
|
+
- spec/fixtures/notes/agent_shared_empty.json
|
672
|
+
- spec/fixtures/oauth2/access.json
|
673
|
+
- spec/fixtures/oauth2/access_with_old_refresh.json
|
674
|
+
- spec/fixtures/oauth2/password_body.json
|
675
|
+
- spec/fixtures/oauth2/access_with_refresh.json
|
676
|
+
- spec/fixtures/oauth2/error.json
|
677
|
+
- spec/fixtures/oauth2/authorization_code_body.json
|
678
|
+
- spec/fixtures/oauth2/refresh_body.json
|
681
679
|
- spec/fixtures/logo_fbs.png
|
680
|
+
- spec/fixtures/generic_failure.json
|
681
|
+
- spec/fixtures/accounts/my.json
|
682
|
+
- spec/fixtures/accounts/office.json
|
683
|
+
- spec/fixtures/accounts/password_save.json
|
684
|
+
- spec/fixtures/accounts/all.json
|
685
|
+
- spec/fixtures/accounts/my_put.json
|
686
|
+
- spec/fixtures/accounts/my_portal.json
|
687
|
+
- spec/fixtures/accounts/my_save.json
|
688
|
+
- spec/fixtures/contacts/vow_accounts/get.json
|
689
|
+
- spec/fixtures/contacts/vow_accounts/post.json
|
690
|
+
- spec/fixtures/contacts/vow_accounts/edit.json
|
691
|
+
- spec/fixtures/contacts/vow_accounts/new.json
|
692
|
+
- spec/fixtures/contacts/post.json
|
693
|
+
- spec/fixtures/contacts/my.json
|
694
|
+
- spec/fixtures/contacts/new.json
|
695
|
+
- spec/fixtures/contacts/tags.json
|
696
|
+
- spec/fixtures/contacts/new_notify.json
|
697
|
+
- spec/fixtures/contacts/contacts.json
|
698
|
+
- spec/fixtures/contacts/new_empty.json
|
699
|
+
- spec/fixtures/finders.json
|
700
|
+
- spec/fixtures/sharedlinks/success.json
|
682
701
|
- spec/fixtures/generic_delete.json
|
683
|
-
- spec/fixtures/
|
684
|
-
- spec/fixtures/
|
685
|
-
- spec/fixtures/
|
686
|
-
- spec/fixtures/messages/post.json
|
687
|
-
- spec/fixtures/messages/new.json
|
688
|
-
- spec/fixtures/messages/count.json
|
702
|
+
- spec/fixtures/comments/get.json
|
703
|
+
- spec/fixtures/comments/post.json
|
704
|
+
- spec/fixtures/comments/new.json
|
689
705
|
- spec/unit/spark_api_spec.rb
|
690
|
-
- spec/unit/spark_api/
|
691
|
-
- spec/unit/spark_api/request_spec.rb
|
692
|
-
- spec/unit/spark_api/options_hash_spec.rb
|
693
|
-
- spec/unit/spark_api/authentication/base_auth_spec.rb
|
694
|
-
- spec/unit/spark_api/authentication/oauth2_spec.rb
|
695
|
-
- spec/unit/spark_api/authentication/api_auth_spec.rb
|
696
|
-
- spec/unit/spark_api/authentication/oauth2_impl/single_session_provider_spec.rb
|
697
|
-
- spec/unit/spark_api/authentication/oauth2_impl/grant_type_base_spec.rb
|
698
|
-
- spec/unit/spark_api/authentication/oauth2_impl/faraday_middleware_spec.rb
|
699
|
-
- spec/unit/spark_api/models/notification_spec.rb
|
706
|
+
- spec/unit/spark_api/configuration/yaml_spec.rb
|
700
707
|
- spec/unit/spark_api/models/floplan_spec.rb
|
701
|
-
- spec/unit/spark_api/models/
|
702
|
-
- spec/unit/spark_api/models/
|
703
|
-
- spec/unit/spark_api/models/document_spec.rb
|
704
|
-
- spec/unit/spark_api/models/newsfeed_spec.rb
|
705
|
-
- spec/unit/spark_api/models/system_info_spec.rb
|
706
|
-
- spec/unit/spark_api/models/tour_of_home_spec.rb
|
707
|
-
- spec/unit/spark_api/models/vow_account_spec.rb
|
708
|
-
- spec/unit/spark_api/models/activity_spec.rb
|
709
|
-
- spec/unit/spark_api/models/listing_meta_translations_spec.rb
|
710
|
-
- spec/unit/spark_api/models/news_feed_meta_spec.rb
|
711
|
-
- spec/unit/spark_api/models/listing_spec.rb
|
708
|
+
- spec/unit/spark_api/models/email_link_spec.rb
|
709
|
+
- spec/unit/spark_api/models/property_types_spec.rb
|
712
710
|
- spec/unit/spark_api/models/sort_spec.rb
|
713
|
-
- spec/unit/spark_api/models/subresource_spec.rb
|
714
711
|
- spec/unit/spark_api/models/connect_prefs_spec.rb
|
715
|
-
- spec/unit/spark_api/models/
|
716
|
-
- spec/unit/spark_api/models/video_spec.rb
|
712
|
+
- spec/unit/spark_api/models/contact_spec.rb
|
717
713
|
- spec/unit/spark_api/models/virtual_tour_spec.rb
|
718
|
-
- spec/unit/spark_api/models/
|
719
|
-
- spec/unit/spark_api/models/
|
720
|
-
- spec/unit/spark_api/models/
|
721
|
-
- spec/unit/spark_api/models/
|
722
|
-
- spec/unit/spark_api/models/
|
723
|
-
- spec/unit/spark_api/models/
|
714
|
+
- spec/unit/spark_api/models/news_feed_meta_spec.rb
|
715
|
+
- spec/unit/spark_api/models/base_spec.rb
|
716
|
+
- spec/unit/spark_api/models/note_spec.rb
|
717
|
+
- spec/unit/spark_api/models/shared_listing_spec.rb
|
718
|
+
- spec/unit/spark_api/models/tour_of_home_spec.rb
|
719
|
+
- spec/unit/spark_api/models/video_spec.rb
|
720
|
+
- spec/unit/spark_api/models/rental_calendar_spec.rb
|
724
721
|
- spec/unit/spark_api/models/photo_spec.rb
|
722
|
+
- spec/unit/spark_api/models/vow_account_spec.rb
|
725
723
|
- spec/unit/spark_api/models/finders_spec.rb
|
726
|
-
- spec/unit/spark_api/models/
|
724
|
+
- spec/unit/spark_api/models/shared_link_spec.rb
|
727
725
|
- spec/unit/spark_api/models/concerns/savable_spec.rb
|
728
726
|
- spec/unit/spark_api/models/concerns/destroyable_spec.rb
|
729
|
-
- spec/unit/spark_api/models/
|
727
|
+
- spec/unit/spark_api/models/listing_meta_translations_spec.rb
|
728
|
+
- spec/unit/spark_api/models/rule_spec.rb
|
730
729
|
- spec/unit/spark_api/models/defaultable_spec.rb
|
731
|
-
- spec/unit/spark_api/models/
|
732
|
-
- spec/unit/spark_api/models/
|
733
|
-
- spec/unit/spark_api/models/
|
730
|
+
- spec/unit/spark_api/models/listing_spec.rb
|
731
|
+
- spec/unit/spark_api/models/dirty_spec.rb
|
732
|
+
- spec/unit/spark_api/models/subresource_spec.rb
|
733
|
+
- spec/unit/spark_api/models/open_house_spec.rb
|
734
|
+
- spec/unit/spark_api/models/portal_spec.rb
|
734
735
|
- spec/unit/spark_api/models/search_template/quick_search_spec.rb
|
735
|
-
- spec/unit/spark_api/models/
|
736
|
-
- spec/unit/spark_api/models/
|
737
|
-
- spec/unit/spark_api/models/
|
736
|
+
- spec/unit/spark_api/models/constraint_spec.rb
|
737
|
+
- spec/unit/spark_api/models/newsfeed_spec.rb
|
738
|
+
- spec/unit/spark_api/models/notification_spec.rb
|
739
|
+
- spec/unit/spark_api/models/standard_fields_spec.rb
|
740
|
+
- spec/unit/spark_api/models/fields_spec.rb
|
741
|
+
- spec/unit/spark_api/models/account_spec.rb
|
738
742
|
- spec/unit/spark_api/models/account_report_spec.rb
|
739
|
-
- spec/unit/spark_api/models/
|
740
|
-
- spec/unit/spark_api/models/
|
743
|
+
- spec/unit/spark_api/models/message_spec.rb
|
744
|
+
- spec/unit/spark_api/models/activity_spec.rb
|
745
|
+
- spec/unit/spark_api/models/system_info_spec.rb
|
746
|
+
- spec/unit/spark_api/models/document_spec.rb
|
747
|
+
- spec/unit/spark_api/models/listing_cart_spec.rb
|
748
|
+
- spec/unit/spark_api/models/saved_search_spec.rb
|
749
|
+
- spec/unit/spark_api/request_spec.rb
|
750
|
+
- spec/unit/spark_api/multi_client_spec.rb
|
751
|
+
- spec/unit/spark_api/authentication/oauth2_impl/grant_type_base_spec.rb
|
752
|
+
- spec/unit/spark_api/authentication/oauth2_impl/faraday_middleware_spec.rb
|
753
|
+
- spec/unit/spark_api/authentication/oauth2_impl/single_session_provider_spec.rb
|
754
|
+
- spec/unit/spark_api/authentication/oauth2_spec.rb
|
755
|
+
- spec/unit/spark_api/authentication/base_auth_spec.rb
|
756
|
+
- spec/unit/spark_api/authentication/api_auth_spec.rb
|
757
|
+
- spec/unit/spark_api/primary_array_spec.rb
|
741
758
|
- spec/unit/spark_api/faraday_middleware_spec.rb
|
742
759
|
- spec/unit/spark_api/configuration_spec.rb
|
743
|
-
- spec/unit/spark_api/primary_array_spec.rb
|
744
|
-
- spec/unit/spark_api/configuration/yaml_spec.rb
|
745
|
-
- spec/unit/spark_api/multi_client_spec.rb
|
746
760
|
- spec/unit/spark_api/authentication_spec.rb
|
761
|
+
- spec/unit/spark_api/paginate_spec.rb
|
762
|
+
- spec/unit/spark_api/options_hash_spec.rb
|
747
763
|
- spec/spec_helper.rb
|