spark_api 1.6.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 967a5f3bb318a1587f3ffee8c3708a6067119c17f21bfa77cdaef3210259b064
4
- data.tar.gz: f49b25406b4b4b57a80fe6621fab36a1ea4e85a50e25637f2251278c789ccde2
3
+ metadata.gz: 225a876c0d7cc718e2f7b02544ad280b304d2dae759af03e1a0f2a54558f5323
4
+ data.tar.gz: 0da2c909ca58b47e9dd9583a6fef4256fcf0ab55448a6eff00ff29cc6a42bd5c
5
5
  SHA512:
6
- metadata.gz: c32304629346b5d903d7ac51de3f01353f3078cc89e0c90c07a81c0245d44ca4788536f80d147d92058d5d92ec8ab06304509fe13ce3a546e6eb25b98948ffd7
7
- data.tar.gz: cc3246679de5467e4eab37a0c4d997d3ca2f3ddff5f38b2914c13514ae695cb0b22799356eca0e9430aaff7d871032e3e847da5bc201becbfbb1994811df533d
6
+ metadata.gz: 7435c421f7978b5e48b79a6d2f2cb9fc9e88ac664b5b4c9b9f956e0e72b7d4cf115e7ebb4024b0551aacc98975d887f0957c67ddecc232fa6777d92567d20875
7
+ data.tar.gz: 6a71260f031fd07ac91721b026beec5665986b447a25d1465ff1875819197d38840999879d0ec73717b844e9abb00f94d8e5103a001152bdfaa49ec4853503cf
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  Spark API
2
2
  =====================
3
- ![CI](https://github.com/sparkapi/spark_api/workflows/CI/badge.svg) ![Code Climate](https://codeclimate.com/badge.png)
3
+ ![CI](https://github.com/sparkapi/spark_api/workflows/CI/badge.svg)
4
4
 
5
5
  A Ruby wrapper for the Spark REST API. Loosely based on ActiveResource to provide models to interact with remote services.
6
6
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.6.2
1
+ 2.0.0
@@ -1,5 +1,3 @@
1
- require "highline"
2
-
3
1
  module SparkApi
4
2
  module Authentication
5
3
  module OAuth2Impl
@@ -18,9 +16,11 @@ module SparkApi
18
16
  def redirect(url)
19
17
  puts "Missing OAuth2 session, redirecting..."
20
18
  puts "Please visit #{url}, login as a user, and paste the authorization code here:"
21
- self.code = HighLine.ask("Authorization code?") do |q|
22
- q.whitespace = :strip_and_collapse
23
- q.validate = /^\w+$/
19
+ puts "Authorization code?"
20
+ raw_code = gets.strip
21
+
22
+ unless raw_code.match?(/^\w+$/)
23
+ raise "Invalid authorization code. Please try again."
24
24
  end
25
25
  end
26
26
 
@@ -6,7 +6,7 @@ module SparkApi
6
6
 
7
7
  #==OAuth2 Faraday response middleware
8
8
  # HTTP Response after filter to package oauth2 responses and bubble up basic api errors.
9
- class FaradayMiddleware < Faraday::Response::Middleware
9
+ class FaradayMiddleware < Faraday::Middleware
10
10
 
11
11
  def initialize(app)
12
12
  super(app)
@@ -42,7 +42,7 @@ module SparkApi
42
42
 
43
43
  #==OAuth2 Faraday response middleware
44
44
  # HTTP Response after filter to package oauth2 responses and bubble up basic api errors.
45
- class SparkbarFaradayMiddleware < Faraday::Response::Middleware
45
+ class SparkbarFaradayMiddleware < Faraday::Middleware
46
46
 
47
47
  def initialize(app)
48
48
  super(app)
@@ -60,7 +60,7 @@ module SparkApi
60
60
  end
61
61
 
62
62
  def self.exists?(name)
63
- File.exists? "#{config_path}/#{name}.yml"
63
+ File.exist? "#{config_path}/#{name}.yml"
64
64
  end
65
65
 
66
66
  def self.build(name)
@@ -9,9 +9,9 @@ module SparkApi
9
9
  end
10
10
 
11
11
  # valid configuration options
12
- VALID_OPTION_KEYS = [:api_key, :api_secret, :api_user, :endpoint,
13
- :user_agent, :version, :ssl, :ssl_verify, :oauth2_provider, :authentication_mode,
14
- :auth_endpoint, :callback, :compress, :timeout, :middleware, :dictionary_version, :request_id_chain].freeze
12
+ VALID_OPTION_KEYS = [:api_key, :api_secret, :api_user, :endpoint,
13
+ :user_agent, :version, :ssl, :ssl_verify, :oauth2_provider, :authentication_mode,
14
+ :auth_endpoint, :callback, :timeout, :middleware, :dictionary_version, :request_id_chain, :user_ip_address, :verbose].freeze
15
15
  OAUTH2_KEYS = [:authorization_uri, :access_uri, :client_id, :client_secret,
16
16
  # Requirements for authorization_code grant type
17
17
  :redirect_uri,
@@ -41,13 +41,15 @@ module SparkApi
41
41
  DEFAULT_SSL = true
42
42
  DEFAULT_SSL_VERIFY = true
43
43
  DEFAULT_OAUTH2 = nil
44
- DEFAULT_COMPRESS = false
45
44
  DEFAULT_TIMEOUT = 5 # seconds
46
45
  DEFAULT_MIDDLEWARE = 'spark_api'
47
46
  DEFAULT_DICTIONARY_VERSION = nil
48
47
  DEFAULT_REQUEST_ID_CHAIN = nil
48
+ DEFAULT_USER_IP_ADDRESS = nil
49
+ DEFAULT_VERBOSE = false
49
50
 
50
51
  X_SPARK_API_USER_AGENT = "X-SparkApi-User-Agent"
52
+ X_USER_IP_ADDRESS = "X-User-IP-Address"
51
53
 
52
54
  attr_accessor *VALID_OPTION_KEYS
53
55
  def configure
@@ -77,11 +79,12 @@ module SparkApi
77
79
  self.ssl = DEFAULT_SSL
78
80
  self.ssl_verify = DEFAULT_SSL_VERIFY
79
81
  self.version = DEFAULT_VERSION
80
- self.compress = DEFAULT_COMPRESS
81
82
  self.timeout = DEFAULT_TIMEOUT
82
83
  self.middleware = DEFAULT_MIDDLEWARE
83
84
  self.dictionary_version = DEFAULT_DICTIONARY_VERSION
84
85
  self.request_id_chain = DEFAULT_REQUEST_ID_CHAIN
86
+ self.user_ip_address = DEFAULT_USER_IP_ADDRESS
87
+ self.verbose = DEFAULT_VERBOSE
85
88
  self
86
89
  end
87
90
  end
@@ -10,7 +10,6 @@ module SparkApi
10
10
  HTTP_SCHEME = 'http:'
11
11
  HTTPS_SCHEME = 'https:'
12
12
  ACCEPT_ENCODING = 'Accept-Encoding'
13
- COMPRESS_ACCEPT_ENCODING = 'gzip, deflate'
14
13
  X_REQUEST_ID_CHAIN = 'X-Request-Id-Chain'
15
14
  MIME_JSON = 'application/json'
16
15
  MIME_RESO = 'application/json, application/xml'
@@ -27,10 +26,6 @@ module SparkApi
27
26
  opts[:url] = @endpoint.sub REG_HTTPS, HTTP_SCHEME
28
27
  end
29
28
 
30
- if self.compress
31
- opts[:headers][ACCEPT_ENCODING] = COMPRESS_ACCEPT_ENCODING
32
- end
33
-
34
29
  if request_id_chain
35
30
  opts[:headers][X_REQUEST_ID_CHAIN] = request_id_chain
36
31
  end
@@ -40,7 +35,9 @@ module SparkApi
40
35
  conn.options[:timeout] = self.timeout
41
36
  conn.adapter Faraday.default_adapter
42
37
  end
43
- SparkApi.logger.debug { "Connection: #{conn.inspect}" }
38
+ if self.verbose
39
+ SparkApi.logger.debug { "Connection: #{conn.inspect}" }
40
+ end
44
41
  conn
45
42
  end
46
43
 
@@ -5,7 +5,7 @@ require 'zlib'
5
5
  module SparkApi
6
6
  #=Spark API Faraday middleware
7
7
  # HTTP Response after filter to package api responses and bubble up basic api errors.
8
- class FaradayMiddleware < Faraday::Response::Middleware
8
+ class FaradayMiddleware < Faraday::Middleware
9
9
  include SparkApi::PaginateHelper
10
10
 
11
11
  def initialize(app)
@@ -15,10 +15,10 @@ module SparkApi
15
15
  # Handles pretty much all the api response parsing and error handling. All responses that
16
16
  # indicate a failure will raise a SparkApi::ClientError exception
17
17
  def on_complete(env)
18
- env[:body] = decompress_body(env)
19
-
20
18
  body = MultiJson.decode(env[:body])
21
- SparkApi.logger.debug{ "Response Body: #{body.inspect}" }
19
+ if SparkApi.verbose
20
+ SparkApi.logger.debug{ "Response Body: #{body.inspect}" }
21
+ end
22
22
  unless body.is_a?(Hash) && body.key?("D")
23
23
  raise InvalidResponse, "The server response could not be understood"
24
24
  end
@@ -80,18 +80,6 @@ module SparkApi
80
80
  env[:body] = results
81
81
  end
82
82
 
83
- def decompress_body(env)
84
- encoding = env[:response_headers]['content-encoding'].to_s.downcase
85
-
86
- if encoding == 'gzip'
87
- env[:body] = Zlib::GzipReader.new(StringIO.new(env[:body])).read
88
- elsif encoding == 'deflate'
89
- env[:body] = Zlib::Inflate.inflate(env[:body])
90
- end
91
-
92
- env[:body]
93
- end
94
-
95
83
  private
96
84
 
97
85
  def http_method_override_request?(env)
@@ -93,7 +93,9 @@ module SparkApi
93
93
  response = authenticator.request(method, request_path, nil, request_opts)
94
94
  else
95
95
  post_data = process_request_body(body)
96
- SparkApi.logger.debug { "#{method.to_s.upcase} Data: #{post_data}" }
96
+ if self.verbose
97
+ SparkApi.logger.debug { "#{method.to_s.upcase} Data: #{post_data}" }
98
+ end
97
99
  response = authenticator.request(method, request_path, post_data, request_opts)
98
100
  end
99
101
  request_time = Time.now - start_time
@@ -1,14 +1,9 @@
1
1
 
2
2
  module SparkApi
3
-
4
3
  class ResoFaradayMiddleware < FaradayMiddleware
5
-
6
4
  def on_complete(env)
7
-
8
- body = decompress_body(env)
9
-
10
5
  begin
11
- body = MultiJson.decode(body)
6
+ body = MultiJson.decode(env[:body])
12
7
 
13
8
  if body["D"]
14
9
  super(env)
@@ -21,9 +16,7 @@ module SparkApi
21
16
  # some minor format verification
22
17
  raise e if body.strip[/\A<\?xml/].nil?
23
18
  end
24
-
25
19
  end
26
-
27
20
  end
28
21
 
29
22
  Faraday::Response.register_middleware :reso_api => ResoFaradayMiddleware
data/spec/spec_helper.rb CHANGED
@@ -23,7 +23,7 @@ require path + '/spark_api'
23
23
 
24
24
  require 'spark_api'
25
25
 
26
- FileUtils.mkdir 'log' unless File.exists? 'log'
26
+ FileUtils.mkdir 'log' unless File.exist? 'log'
27
27
 
28
28
  module SparkApi
29
29
  def self.logger
@@ -27,9 +27,9 @@ describe SparkApi::Configuration::YamlConfig, "Yaml Config" do
27
27
  end
28
28
  it "should raise an error for a bad configuration" do
29
29
  allow(subject).to receive(:env){ {} }
30
- expect { subject.load_file("spec/config/spark_api/some_random_key.yml")}.to raise_error
30
+ expect { subject.load_file("spec/config/spark_api/some_random_key.yml")}.to raise_error(Errno::ENOENT)
31
31
  allow(subject).to receive(:env){ {"RAILS_ENV" => "fake_env"} }
32
- expect { subject.load_file(api_file)}.to raise_error
32
+ expect { subject.load_file(api_file)}.to raise_error(NoMethodError)
33
33
  end
34
34
  end
35
35
  describe "oauth2" do
@@ -14,7 +14,9 @@ describe SparkApi::Client, "Client config" do
14
14
  expect(SparkApi.api_key).to match("my_api_key")
15
15
  expect(SparkApi.timeout).to eq(5)
16
16
  expect(SparkApi.request_id_chain).to be_nil
17
+ expect(SparkApi.user_ip_address).to be_nil
17
18
  expect(SparkApi.middleware).to eq('spark_api')
19
+ expect(SparkApi.verbose).to be false
18
20
  end
19
21
  end
20
22
 
@@ -26,7 +28,9 @@ describe SparkApi::Client, "Client config" do
26
28
  :auth_endpoint => "https://login.wade.dev.fbsdata.com",
27
29
  :endpoint => "http://api.wade.dev.fbsdata.com",
28
30
  :timeout => 15,
29
- :request_id_chain => 'foobar')
31
+ :request_id_chain => 'foobar',
32
+ :user_ip_address => 'barfoo',
33
+ :verbose => true)
30
34
 
31
35
  expect(client.api_key).to match("key_of_wade")
32
36
  expect(client.api_secret).to match("TopSecret")
@@ -36,6 +40,8 @@ describe SparkApi::Client, "Client config" do
36
40
  expect(client.version).to match("v1")
37
41
  expect(client.timeout).to eq(15)
38
42
  expect(client.request_id_chain).to eq('foobar')
43
+ expect(client.user_ip_address).to eq('barfoo')
44
+ expect(client.verbose).to be true
39
45
  end
40
46
 
41
47
  it "should allow unverified ssl certificates when verification is off" do
@@ -98,6 +104,7 @@ describe SparkApi::Client, "Client config" do
98
104
  config.endpoint = "test.api.sparkapi.com"
99
105
  config.user_agent = "my useragent"
100
106
  config.timeout = 15
107
+ config.verbose = true
101
108
  end
102
109
 
103
110
  expect(SparkApi.api_key).to match("my_key")
@@ -108,6 +115,7 @@ describe SparkApi::Client, "Client config" do
108
115
  expect(SparkApi.user_agent).to match("my useragent")
109
116
  expect(SparkApi.oauth2_enabled?()).to be false
110
117
  expect(SparkApi.timeout).to eq(15)
118
+ expect(SparkApi.verbose).to be true
111
119
  end
112
120
 
113
121
  it "should correctly set up the client for oauth2" do
@@ -220,12 +228,6 @@ describe SparkApi::Client, "Client config" do
220
228
  expect(c.connection.headers["Accept-Encoding"]).to be_nil
221
229
  end
222
230
 
223
- it "should set gzip header if compress option is set" do
224
- c = SparkApi::Client.new(:endpoint => "https://api.sparkapi.com",
225
- :compress => true)
226
- expect(c.connection.headers["Accept-Encoding"]).to eq("gzip, deflate")
227
- end
228
-
229
231
  it "should set default timeout of 5 seconds" do
230
232
  c = SparkApi::Client.new(:endpoint => "https://sparkapi.com")
231
233
  expect(c.connection.options[:timeout]).to eq(5)
@@ -97,55 +97,6 @@ describe SparkApi do
97
97
  expect(e.errors).to eq("Some errors and stuff.")
98
98
  }
99
99
  end
100
-
101
- end
102
-
103
- describe "#decompress_body" do
104
- let(:middleware) do
105
- SparkApi::FaradayMiddleware.new(SparkApi)
106
- end
107
-
108
- it "should leave the body along if content-encoding not set" do
109
- env = {
110
- :body => "UNCOMPRESSED",
111
- :response_headers => {}
112
- }
113
-
114
- expect(middleware.decompress_body(env)).to eq("UNCOMPRESSED")
115
- end
116
-
117
- it "should unzip gzipped data" do
118
- bod = "OUTPUT BODY"
119
-
120
- out = StringIO.new
121
- gz = Zlib::GzipWriter.new(out)
122
- gz.write bod
123
- gz.close
124
-
125
- env = {
126
- :body => out.string,
127
- :response_headers => {
128
- 'content-encoding' => 'gzip'
129
- }
130
- }
131
-
132
- expect(middleware.decompress_body(env)).to eq(bod)
133
- end
134
-
135
- it "should inflate deflated data" do
136
- bod = "INFLATED BODY"
137
- deflated_bod = Zlib::Deflate.deflate(bod)
138
-
139
- env = {
140
- :body => deflated_bod,
141
- :response_headers => {
142
- 'content-encoding' => 'deflate'
143
- }
144
- }
145
-
146
- expect(middleware.decompress_body(env)).to eq(bod)
147
- end
148
100
  end
149
-
150
101
  end
151
102
 
@@ -44,7 +44,7 @@ describe SparkApi::MultiClient do
44
44
  expect(SparkApi.client.api_key).to eq('c')
45
45
  raise "OH MY GOODNESS I BLEW UP!!!"
46
46
  end
47
- end.to raise_error
47
+ end.to raise_error(RuntimeError)
48
48
  expect(SparkApi.client.api_key).to eq('a')
49
49
  end
50
50
 
@@ -223,7 +223,7 @@ describe SparkApi do
223
223
  it "should escape a path correctly" do
224
224
  expect(subject.get('/test path with spaces').length).to eq(0)
225
225
  # now try this with an already escaped path. Kaboom!
226
- expect { subject.get('/test%20path%20with%20spaces') }.to raise_error()
226
+ expect { subject.get('/test%20path%20with%20spaces') }.to raise_error(Faraday::Adapter::Test::Stubs::NotFound)
227
227
  end
228
228
 
229
229
  it "post data should support non json data" 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.2
4
+ version: 2.0.0
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: 2022-11-07 00:00:00.000000000 Z
12
+ date: 2024-12-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: addressable
@@ -31,32 +31,26 @@ dependencies:
31
31
  requirements:
32
32
  - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: 0.17.3
35
- - - "<"
36
- - !ruby/object:Gem::Version
37
- version: '2.0'
34
+ version: 2.0.0
38
35
  type: :runtime
39
36
  prerelease: false
40
37
  version_requirements: !ruby/object:Gem::Requirement
41
38
  requirements:
42
39
  - - ">="
43
40
  - !ruby/object:Gem::Version
44
- version: 0.17.3
45
- - - "<"
46
- - !ruby/object:Gem::Version
47
- version: '2.0'
41
+ version: 2.0.0
48
42
  - !ruby/object:Gem::Dependency
49
43
  name: multi_json
50
44
  requirement: !ruby/object:Gem::Requirement
51
45
  requirements:
52
- - - "~>"
46
+ - - ">"
53
47
  - !ruby/object:Gem::Version
54
48
  version: '1.0'
55
49
  type: :runtime
56
50
  prerelease: false
57
51
  version_requirements: !ruby/object:Gem::Requirement
58
52
  requirements:
59
- - - "~>"
53
+ - - ">"
60
54
  - !ruby/object:Gem::Version
61
55
  version: '1.0'
62
56
  - !ruby/object:Gem::Dependency
@@ -73,26 +67,6 @@ dependencies:
73
67
  - - ">="
74
68
  - !ruby/object:Gem::Version
75
69
  version: '1.7'
76
- - !ruby/object:Gem::Dependency
77
- name: builder
78
- requirement: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: 2.1.2
83
- - - "<"
84
- - !ruby/object:Gem::Version
85
- version: 4.0.0
86
- type: :runtime
87
- prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- requirements:
90
- - - ">="
91
- - !ruby/object:Gem::Version
92
- version: 2.1.2
93
- - - "<"
94
- - !ruby/object:Gem::Version
95
- version: 4.0.0
96
70
  - !ruby/object:Gem::Dependency
97
71
  name: will_paginate
98
72
  requirement: !ruby/object:Gem::Requirement
@@ -114,21 +88,21 @@ dependencies:
114
88
  - !ruby/object:Gem::Version
115
89
  version: 4.0.0
116
90
  - !ruby/object:Gem::Dependency
117
- name: highline
91
+ name: rake
118
92
  requirement: !ruby/object:Gem::Requirement
119
93
  requirements:
120
94
  - - ">="
121
95
  - !ruby/object:Gem::Version
122
- version: '1.0'
123
- type: :runtime
96
+ version: '0'
97
+ type: :development
124
98
  prerelease: false
125
99
  version_requirements: !ruby/object:Gem::Requirement
126
100
  requirements:
127
101
  - - ">="
128
102
  - !ruby/object:Gem::Version
129
- version: '1.0'
103
+ version: '0'
130
104
  - !ruby/object:Gem::Dependency
131
- name: rake
105
+ name: rspec
132
106
  requirement: !ruby/object:Gem::Requirement
133
107
  requirements:
134
108
  - - ">="
@@ -142,7 +116,7 @@ dependencies:
142
116
  - !ruby/object:Gem::Version
143
117
  version: '0'
144
118
  - !ruby/object:Gem::Dependency
145
- name: rspec
119
+ name: webmock
146
120
  requirement: !ruby/object:Gem::Requirement
147
121
  requirements:
148
122
  - - ">="
@@ -156,7 +130,7 @@ dependencies:
156
130
  - !ruby/object:Gem::Version
157
131
  version: '0'
158
132
  - !ruby/object:Gem::Dependency
159
- name: webmock
133
+ name: rexml
160
134
  requirement: !ruby/object:Gem::Requirement
161
135
  requirements:
162
136
  - - ">="
@@ -170,7 +144,7 @@ dependencies:
170
144
  - !ruby/object:Gem::Version
171
145
  version: '0'
172
146
  - !ruby/object:Gem::Dependency
173
- name: rexml
147
+ name: typhoeus
174
148
  requirement: !ruby/object:Gem::Requirement
175
149
  requirements:
176
150
  - - ">="
@@ -184,7 +158,7 @@ dependencies:
184
158
  - !ruby/object:Gem::Version
185
159
  version: '0'
186
160
  - !ruby/object:Gem::Dependency
187
- name: typhoeus
161
+ name: ci_reporter_rspec
188
162
  requirement: !ruby/object:Gem::Requirement
189
163
  requirements:
190
164
  - - ">="
@@ -198,19 +172,25 @@ dependencies:
198
172
  - !ruby/object:Gem::Version
199
173
  version: '0'
200
174
  - !ruby/object:Gem::Dependency
201
- name: ci_reporter_rspec
175
+ name: builder
202
176
  requirement: !ruby/object:Gem::Requirement
203
177
  requirements:
204
178
  - - ">="
205
179
  - !ruby/object:Gem::Version
206
- version: '0'
180
+ version: 2.1.2
181
+ - - "<"
182
+ - !ruby/object:Gem::Version
183
+ version: 4.0.0
207
184
  type: :development
208
185
  prerelease: false
209
186
  version_requirements: !ruby/object:Gem::Requirement
210
187
  requirements:
211
188
  - - ">="
212
189
  - !ruby/object:Gem::Version
213
- version: '0'
190
+ version: 2.1.2
191
+ - - "<"
192
+ - !ruby/object:Gem::Version
193
+ version: 4.0.0
214
194
  - !ruby/object:Gem::Dependency
215
195
  name: simplecov-rcov
216
196
  requirement: !ruby/object:Gem::Requirement
@@ -556,208 +536,208 @@ required_rubygems_version: !ruby/object:Gem::Requirement
556
536
  - !ruby/object:Gem::Version
557
537
  version: '1.8'
558
538
  requirements: []
559
- rubygems_version: 3.1.6
539
+ rubygems_version: 3.5.22
560
540
  signing_key:
561
541
  specification_version: 4
562
542
  summary: A library for interacting with the Spark web services.
563
543
  test_files:
544
+ - spec/fixtures/accounts/all.json
545
+ - spec/fixtures/accounts/my.json
546
+ - spec/fixtures/accounts/my_portal.json
547
+ - spec/fixtures/accounts/my_put.json
548
+ - spec/fixtures/accounts/my_save.json
549
+ - spec/fixtures/accounts/office.json
550
+ - spec/fixtures/accounts/password_save.json
564
551
  - spec/fixtures/activities/get.json
565
- - spec/fixtures/finders.json
566
- - spec/fixtures/success.json
567
- - spec/fixtures/messages/post.json
568
- - spec/fixtures/messages/new_empty.json
569
- - spec/fixtures/messages/new.json
570
- - spec/fixtures/messages/new_with_recipients.json
571
- - spec/fixtures/messages/count.json
572
- - spec/fixtures/messages/get.json
573
- - spec/fixtures/portal/disable.json
574
- - spec/fixtures/portal/post.json
575
- - spec/fixtures/portal/new.json
576
- - spec/fixtures/portal/my.json
577
- - spec/fixtures/portal/my_non_existant.json
578
- - spec/fixtures/portal/enable.json
579
- - spec/fixtures/contacts/post.json
580
- - spec/fixtures/contacts/new_empty.json
581
- - spec/fixtures/contacts/tags.json
552
+ - spec/fixtures/authentication_failure.json
553
+ - spec/fixtures/base.json
554
+ - spec/fixtures/comments/get.json
555
+ - spec/fixtures/comments/new.json
556
+ - spec/fixtures/comments/post.json
557
+ - spec/fixtures/contacts/contacts.json
558
+ - spec/fixtures/contacts/my.json
582
559
  - spec/fixtures/contacts/new.json
560
+ - spec/fixtures/contacts/new_empty.json
583
561
  - spec/fixtures/contacts/new_notify.json
584
- - spec/fixtures/contacts/my.json
585
- - spec/fixtures/contacts/contacts.json
586
- - spec/fixtures/contacts/vow_accounts/post.json
587
- - spec/fixtures/contacts/vow_accounts/new.json
562
+ - spec/fixtures/contacts/post.json
563
+ - spec/fixtures/contacts/tags.json
588
564
  - spec/fixtures/contacts/vow_accounts/edit.json
589
565
  - spec/fixtures/contacts/vow_accounts/get.json
590
- - spec/fixtures/property_types/property_types.json
591
- - spec/fixtures/oauth2/access_with_refresh.json
592
- - spec/fixtures/oauth2/authorization_code_body.json
593
- - spec/fixtures/oauth2/access.json
594
- - spec/fixtures/oauth2/error.json
595
- - spec/fixtures/oauth2/refresh_body.json
596
- - spec/fixtures/oauth2/password_body.json
597
- - spec/fixtures/oauth2/access_with_old_refresh.json
598
- - spec/fixtures/base.json
599
- - spec/fixtures/logo_fbs.png
600
- - spec/fixtures/listings/shared_listing_get.json
601
- - spec/fixtures/listings/put_expiration_date.json
602
- - spec/fixtures/listings/open_houses.json
566
+ - spec/fixtures/contacts/vow_accounts/new.json
567
+ - spec/fixtures/contacts/vow_accounts/post.json
568
+ - spec/fixtures/count.json
569
+ - spec/fixtures/empty.json
570
+ - spec/fixtures/errors/expired.json
571
+ - spec/fixtures/errors/failure.json
572
+ - spec/fixtures/errors/failure_with_constraint.json
573
+ - spec/fixtures/errors/failure_with_msg.json
574
+ - spec/fixtures/fields/order.json
575
+ - spec/fixtures/fields/order_a.json
576
+ - spec/fixtures/fields/settings.json
577
+ - spec/fixtures/finders.json
578
+ - spec/fixtures/generic_delete.json
579
+ - spec/fixtures/generic_failure.json
580
+ - spec/fixtures/idx_links/get.json
581
+ - spec/fixtures/listing_carts/add_listing.json
582
+ - spec/fixtures/listing_carts/add_listing_post.json
583
+ - spec/fixtures/listing_carts/add_listings.json
584
+ - spec/fixtures/listing_carts/add_listings_post.json
585
+ - spec/fixtures/listing_carts/add_portal_cart_listings.json
586
+ - spec/fixtures/listing_carts/add_portal_cart_listings_post.json
587
+ - spec/fixtures/listing_carts/empty.json
588
+ - spec/fixtures/listing_carts/listing_cart.json
589
+ - spec/fixtures/listing_carts/listing_portal_cart.json
590
+ - spec/fixtures/listing_carts/new.json
591
+ - spec/fixtures/listing_carts/new_portal_cart.json
592
+ - spec/fixtures/listing_carts/post.json
593
+ - spec/fixtures/listing_carts/post_portal_cart.json
594
+ - spec/fixtures/listing_carts/put.json
595
+ - spec/fixtures/listing_carts/put_ids.json
596
+ - spec/fixtures/listing_carts/put_name.json
597
+ - spec/fixtures/listing_carts/remove_listing.json
598
+ - spec/fixtures/listing_meta_translations/get.json
599
+ - spec/fixtures/listings/constraints.json
603
600
  - spec/fixtures/listings/constraints_with_pagination.json
604
- - spec/fixtures/listings/with_rental_calendar.json
605
- - spec/fixtures/listings/with_videos.json
606
- - spec/fixtures/listings/shared_listing_new.json
607
- - spec/fixtures/listings/multiple.json
608
601
  - spec/fixtures/listings/document_index.json
609
- - spec/fixtures/listings/constraints.json
610
- - spec/fixtures/listings/shared_listing_post.json
611
- - spec/fixtures/listings/reorder_photo.json
612
602
  - spec/fixtures/listings/floplans_index.json
613
- - spec/fixtures/listings/rental_calendar.json
603
+ - spec/fixtures/listings/multiple.json
604
+ - spec/fixtures/listings/no_subresources.json
605
+ - spec/fixtures/listings/open_houses.json
606
+ - spec/fixtures/listings/photos/batch_delete.json
607
+ - spec/fixtures/listings/photos/index.json
608
+ - spec/fixtures/listings/photos/new.json
609
+ - spec/fixtures/listings/photos/post.json
610
+ - spec/fixtures/listings/photos/rollback.json
611
+ - spec/fixtures/listings/photos/rotate.json
614
612
  - spec/fixtures/listings/put.json
615
- - spec/fixtures/listings/videos_index.json
616
- - spec/fixtures/listings/tour_of_homes_search.json
613
+ - spec/fixtures/listings/put_expiration_date.json
614
+ - spec/fixtures/listings/put_reorder_photo.json
615
+ - spec/fixtures/listings/rental_calendar.json
616
+ - spec/fixtures/listings/reorder_photo.json
617
+ - spec/fixtures/listings/shared_listing_get.json
618
+ - spec/fixtures/listings/shared_listing_new.json
619
+ - spec/fixtures/listings/shared_listing_post.json
617
620
  - spec/fixtures/listings/tour_of_homes.json
621
+ - spec/fixtures/listings/tour_of_homes_search.json
622
+ - spec/fixtures/listings/videos_index.json
618
623
  - spec/fixtures/listings/virtual_tours_index.json
619
624
  - spec/fixtures/listings/with_documents.json
620
- - spec/fixtures/listings/with_vtour.json
621
- - spec/fixtures/listings/with_supplement.json
622
- - spec/fixtures/listings/with_photos.json
623
- - spec/fixtures/listings/put_reorder_photo.json
624
625
  - spec/fixtures/listings/with_permissions.json
625
- - spec/fixtures/listings/no_subresources.json
626
- - spec/fixtures/listings/photos/post.json
627
- - spec/fixtures/listings/photos/rotate.json
628
- - spec/fixtures/listings/photos/rollback.json
629
- - spec/fixtures/listings/photos/new.json
630
- - spec/fixtures/listings/photos/index.json
631
- - spec/fixtures/listings/photos/batch_delete.json
626
+ - spec/fixtures/listings/with_photos.json
627
+ - spec/fixtures/listings/with_rental_calendar.json
628
+ - spec/fixtures/listings/with_supplement.json
629
+ - spec/fixtures/listings/with_videos.json
630
+ - spec/fixtures/listings/with_vtour.json
631
+ - spec/fixtures/logo_fbs.png
632
+ - spec/fixtures/messages/count.json
633
+ - spec/fixtures/messages/get.json
634
+ - spec/fixtures/messages/new.json
635
+ - spec/fixtures/messages/new_empty.json
636
+ - spec/fixtures/messages/new_with_recipients.json
637
+ - spec/fixtures/messages/post.json
638
+ - spec/fixtures/newsfeeds/get.json
639
+ - spec/fixtures/newsfeeds/inactive.json
640
+ - spec/fixtures/newsfeeds/meta.json
641
+ - spec/fixtures/no_results.json
632
642
  - spec/fixtures/notes/add.json
633
- - spec/fixtures/notes/new.json
634
- - spec/fixtures/notes/agent_shared_empty.json
635
643
  - spec/fixtures/notes/agent_shared.json
636
- - spec/fixtures/sharedlinks/success.json
637
- - spec/fixtures/errors/failure_with_constraint.json
638
- - spec/fixtures/errors/failure_with_msg.json
639
- - spec/fixtures/errors/expired.json
640
- - spec/fixtures/errors/failure.json
641
- - spec/fixtures/generic_delete.json
642
- - spec/fixtures/search_templates/quick_searches/get.json
643
- - spec/fixtures/session.json
644
- - spec/fixtures/accounts/office.json
645
- - spec/fixtures/accounts/my.json
646
- - spec/fixtures/accounts/password_save.json
647
- - spec/fixtures/accounts/my_portal.json
648
- - spec/fixtures/accounts/all.json
649
- - spec/fixtures/accounts/my_save.json
650
- - spec/fixtures/accounts/my_put.json
651
- - spec/fixtures/empty.json
652
- - spec/fixtures/no_results.json
653
- - spec/fixtures/newsfeeds/meta.json
654
- - spec/fixtures/newsfeeds/inactive.json
655
- - spec/fixtures/newsfeeds/get.json
656
- - spec/fixtures/saved_searches/post.json
657
- - spec/fixtures/saved_searches/update.json
658
- - spec/fixtures/saved_searches/without_newsfeed.json
659
- - spec/fixtures/saved_searches/with_newsfeed.json
660
- - spec/fixtures/saved_searches/get_provided.json
661
- - spec/fixtures/saved_searches/new.json
662
- - spec/fixtures/saved_searches/with_inactive_newsfeed.json
663
- - spec/fixtures/saved_searches/get.json
664
- - spec/fixtures/generic_failure.json
665
- - spec/fixtures/listing_meta_translations/get.json
666
- - spec/fixtures/oauth2_error.json
667
- - spec/fixtures/sorts/get.json
668
- - spec/fixtures/listing_carts/post.json
669
- - spec/fixtures/listing_carts/new_portal_cart.json
670
- - spec/fixtures/listing_carts/put_name.json
671
- - spec/fixtures/listing_carts/new.json
672
- - spec/fixtures/listing_carts/add_listing.json
673
- - spec/fixtures/listing_carts/listing_portal_cart.json
674
- - spec/fixtures/listing_carts/post_portal_cart.json
675
- - spec/fixtures/listing_carts/add_listings_post.json
676
- - spec/fixtures/listing_carts/put_ids.json
677
- - spec/fixtures/listing_carts/put.json
678
- - spec/fixtures/listing_carts/add_portal_cart_listings.json
679
- - spec/fixtures/listing_carts/empty.json
680
- - spec/fixtures/listing_carts/add_portal_cart_listings_post.json
681
- - spec/fixtures/listing_carts/add_listing_post.json
682
- - spec/fixtures/listing_carts/remove_listing.json
683
- - spec/fixtures/listing_carts/listing_cart.json
684
- - spec/fixtures/listing_carts/add_listings.json
685
- - spec/fixtures/count.json
686
- - spec/fixtures/comments/post.json
687
- - spec/fixtures/comments/new.json
688
- - spec/fixtures/comments/get.json
644
+ - spec/fixtures/notes/agent_shared_empty.json
645
+ - spec/fixtures/notes/new.json
689
646
  - spec/fixtures/notifications/mark_read.json
690
- - spec/fixtures/notifications/post.json
691
- - spec/fixtures/notifications/new_empty.json
692
647
  - spec/fixtures/notifications/new.json
648
+ - spec/fixtures/notifications/new_empty.json
693
649
  - spec/fixtures/notifications/notifications.json
650
+ - spec/fixtures/notifications/post.json
694
651
  - spec/fixtures/notifications/unread.json
695
- - spec/fixtures/authentication_failure.json
696
- - spec/fixtures/fields/settings.json
697
- - spec/fixtures/fields/order_a.json
698
- - spec/fixtures/fields/order.json
699
- - spec/fixtures/idx_links/get.json
700
- - spec/fixtures/standardfields/stateorprovince.json
652
+ - spec/fixtures/oauth2/access.json
653
+ - spec/fixtures/oauth2/access_with_old_refresh.json
654
+ - spec/fixtures/oauth2/access_with_refresh.json
655
+ - spec/fixtures/oauth2/authorization_code_body.json
656
+ - spec/fixtures/oauth2/error.json
657
+ - spec/fixtures/oauth2/password_body.json
658
+ - spec/fixtures/oauth2/refresh_body.json
659
+ - spec/fixtures/oauth2_error.json
660
+ - spec/fixtures/portal/disable.json
661
+ - spec/fixtures/portal/enable.json
662
+ - spec/fixtures/portal/my.json
663
+ - spec/fixtures/portal/my_non_existant.json
664
+ - spec/fixtures/portal/new.json
665
+ - spec/fixtures/portal/post.json
666
+ - spec/fixtures/property_types/property_types.json
667
+ - spec/fixtures/rules/get.json
668
+ - spec/fixtures/saved_searches/get.json
669
+ - spec/fixtures/saved_searches/get_provided.json
670
+ - spec/fixtures/saved_searches/new.json
671
+ - spec/fixtures/saved_searches/post.json
672
+ - spec/fixtures/saved_searches/update.json
673
+ - spec/fixtures/saved_searches/with_inactive_newsfeed.json
674
+ - spec/fixtures/saved_searches/with_newsfeed.json
675
+ - spec/fixtures/saved_searches/without_newsfeed.json
676
+ - spec/fixtures/search_templates/quick_searches/get.json
677
+ - spec/fixtures/session.json
678
+ - spec/fixtures/sharedlinks/success.json
679
+ - spec/fixtures/sorts/get.json
701
680
  - spec/fixtures/standardfields/city.json
702
- - spec/fixtures/standardfields/standardfields.json
703
681
  - spec/fixtures/standardfields/nearby.json
704
- - spec/fixtures/rules/get.json
705
- - spec/unit/spark_api_spec.rb
706
- - spec/unit/spark_api/paginate_spec.rb
707
- - spec/unit/spark_api/request_spec.rb
682
+ - spec/fixtures/standardfields/standardfields.json
683
+ - spec/fixtures/standardfields/stateorprovince.json
684
+ - spec/fixtures/success.json
708
685
  - spec/unit/spark_api/authentication/api_auth_spec.rb
709
- - spec/unit/spark_api/authentication/oauth2_spec.rb
686
+ - spec/unit/spark_api/authentication/base_auth_spec.rb
710
687
  - spec/unit/spark_api/authentication/oauth2_impl/faraday_middleware_spec.rb
711
688
  - spec/unit/spark_api/authentication/oauth2_impl/grant_type_base_spec.rb
712
689
  - spec/unit/spark_api/authentication/oauth2_impl/single_session_provider_spec.rb
713
- - spec/unit/spark_api/authentication/base_auth_spec.rb
690
+ - spec/unit/spark_api/authentication/oauth2_spec.rb
691
+ - spec/unit/spark_api/authentication_spec.rb
714
692
  - spec/unit/spark_api/configuration/yaml_spec.rb
715
- - spec/unit/spark_api/models/rental_calendar_spec.rb
693
+ - spec/unit/spark_api/configuration_spec.rb
694
+ - spec/unit/spark_api/faraday_middleware_spec.rb
695
+ - spec/unit/spark_api/models/account_report_spec.rb
716
696
  - spec/unit/spark_api/models/account_spec.rb
717
- - spec/unit/spark_api/models/standard_fields_spec.rb
718
- - spec/unit/spark_api/models/note_spec.rb
719
- - spec/unit/spark_api/models/shared_listing_spec.rb
720
- - spec/unit/spark_api/models/virtual_tour_spec.rb
697
+ - spec/unit/spark_api/models/activity_spec.rb
721
698
  - spec/unit/spark_api/models/base_spec.rb
722
- - spec/unit/spark_api/models/open_house_spec.rb
723
- - spec/unit/spark_api/models/photo_spec.rb
724
- - spec/unit/spark_api/models/contact_spec.rb
725
- - spec/unit/spark_api/models/property_types_spec.rb
726
- - spec/unit/spark_api/models/subresource_spec.rb
727
- - spec/unit/spark_api/models/constraint_spec.rb
728
- - spec/unit/spark_api/models/listing_cart_spec.rb
729
- - spec/unit/spark_api/models/message_spec.rb
730
- - spec/unit/spark_api/models/notification_spec.rb
731
- - spec/unit/spark_api/models/news_feed_meta_spec.rb
732
- - spec/unit/spark_api/models/fields_spec.rb
733
- - spec/unit/spark_api/models/rule_spec.rb
734
- - spec/unit/spark_api/models/tour_of_home_spec.rb
735
699
  - spec/unit/spark_api/models/concerns/destroyable_spec.rb
736
700
  - spec/unit/spark_api/models/concerns/savable_spec.rb
701
+ - spec/unit/spark_api/models/connect_prefs_spec.rb
702
+ - spec/unit/spark_api/models/constraint_spec.rb
703
+ - spec/unit/spark_api/models/contact_spec.rb
704
+ - spec/unit/spark_api/models/defaultable_spec.rb
705
+ - spec/unit/spark_api/models/dirty_spec.rb
737
706
  - spec/unit/spark_api/models/document_spec.rb
738
- - spec/unit/spark_api/models/sort_spec.rb
739
- - spec/unit/spark_api/models/listing_meta_translations_spec.rb
707
+ - spec/unit/spark_api/models/email_link_spec.rb
708
+ - spec/unit/spark_api/models/fields_spec.rb
709
+ - spec/unit/spark_api/models/finders_spec.rb
740
710
  - spec/unit/spark_api/models/floplan_spec.rb
711
+ - spec/unit/spark_api/models/listing_cart_spec.rb
712
+ - spec/unit/spark_api/models/listing_meta_translations_spec.rb
713
+ - spec/unit/spark_api/models/listing_spec.rb
714
+ - spec/unit/spark_api/models/message_spec.rb
715
+ - spec/unit/spark_api/models/news_feed_meta_spec.rb
741
716
  - spec/unit/spark_api/models/newsfeed_spec.rb
742
- - spec/unit/spark_api/models/activity_spec.rb
743
- - spec/unit/spark_api/models/defaultable_spec.rb
744
- - spec/unit/spark_api/models/video_spec.rb
745
- - spec/unit/spark_api/models/email_link_spec.rb
746
- - spec/unit/spark_api/models/vow_account_spec.rb
747
- - spec/unit/spark_api/models/account_report_spec.rb
748
- - spec/unit/spark_api/models/search_template/quick_search_spec.rb
749
- - spec/unit/spark_api/models/dirty_spec.rb
750
- - spec/unit/spark_api/models/system_info_spec.rb
717
+ - spec/unit/spark_api/models/note_spec.rb
718
+ - spec/unit/spark_api/models/notification_spec.rb
719
+ - spec/unit/spark_api/models/open_house_spec.rb
720
+ - spec/unit/spark_api/models/photo_spec.rb
751
721
  - spec/unit/spark_api/models/portal_spec.rb
722
+ - spec/unit/spark_api/models/property_types_spec.rb
723
+ - spec/unit/spark_api/models/rental_calendar_spec.rb
724
+ - spec/unit/spark_api/models/rule_spec.rb
752
725
  - spec/unit/spark_api/models/saved_search_spec.rb
753
- - spec/unit/spark_api/models/finders_spec.rb
754
- - spec/unit/spark_api/models/connect_prefs_spec.rb
755
- - spec/unit/spark_api/models/listing_spec.rb
726
+ - spec/unit/spark_api/models/search_template/quick_search_spec.rb
756
727
  - spec/unit/spark_api/models/shared_link_spec.rb
728
+ - spec/unit/spark_api/models/shared_listing_spec.rb
729
+ - spec/unit/spark_api/models/sort_spec.rb
730
+ - spec/unit/spark_api/models/standard_fields_spec.rb
731
+ - spec/unit/spark_api/models/subresource_spec.rb
732
+ - spec/unit/spark_api/models/system_info_spec.rb
733
+ - spec/unit/spark_api/models/tour_of_home_spec.rb
734
+ - spec/unit/spark_api/models/video_spec.rb
735
+ - spec/unit/spark_api/models/virtual_tour_spec.rb
736
+ - spec/unit/spark_api/models/vow_account_spec.rb
737
+ - spec/unit/spark_api/multi_client_spec.rb
757
738
  - spec/unit/spark_api/options_hash_spec.rb
758
- - spec/unit/spark_api/authentication_spec.rb
739
+ - spec/unit/spark_api/paginate_spec.rb
759
740
  - spec/unit/spark_api/primary_array_spec.rb
760
- - spec/unit/spark_api/faraday_middleware_spec.rb
761
- - spec/unit/spark_api/configuration_spec.rb
762
- - spec/unit/spark_api/multi_client_spec.rb
741
+ - spec/unit/spark_api/request_spec.rb
742
+ - spec/unit/spark_api_spec.rb
763
743
  - spec/spec_helper.rb