spark_api 1.0.4 → 1.1.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.
data/History.txt CHANGED
@@ -1,139 +1,13 @@
1
- == v0.7.1 2011-10-13
2
- * Updated connection dependencies
3
- * Added messaging model
4
- * ExpirationDate editable for Listing
5
- == v0.7.0 2011-10-03
6
- * Major changes to results object returned from the client (and models). Results are no longer allowed to be nil, and Array is decorated with non result response information.
7
- * Finished listing photo uploads
8
- * ListPrice save operation for listings
9
- * Listing contraints processing
10
- == v0.6.7 2011-09-02
11
- * YAML key management
12
- == v0.6.6 2011-08-30
13
- * Added methods for returning street, region, and full address for a listing
14
- == v0.6.5 2011-08-02
15
- * Fixed some recursive gemspec issues from jewler by removing jeweler and going with some of our own custom rake tasks.
16
- == v0.6.4 2011-08-02
17
- * added public method for the listing carts service specified
18
- * added spec for portal listing cart method
19
- == v0.6.3 2011-08-02
20
- * Fix gemspec error on CLI launch (bundler)
21
- == v0.6.2 2011-07-29
22
- * Added command to make irb sessions rocktastic
23
- == v0.6.1 2011-07-14
24
- * Fixed request headers to match api expectations
25
- * OAuth2 grant types redesign
26
- * "provided" saved searches
27
- * Portal account saving
28
- == v0.5.9 2011-07-12
29
- * Modify Collect to handle FixNums in the case of pagination=count to my/office listings
30
- == v0.5.8 2011-07-08
31
- * Add finders to SharedListing model
32
- * fixed log message
33
- == v0.5.7 2011-07-07
34
- * Add /my/contact support
35
- == v0.5.6 2011-07-07
36
- * More build woes.
37
- == v0.5.5 2011-07-07
38
- == v0.5.4 2011-07-01
39
- * Added the add listing methods to the cart instance.
40
- * Added the remove listing methods to the cart instance.
41
- * Accounts service by office changes
42
- == v0.5.3 2011-06-28
43
- * API error handling bugfix to log decent messages
44
- * Fixed the OAuth flow.
45
- * Provide primary image types
46
- == v0.5.2 2011-06-23
47
- == v0.5.1 2011-06-03
48
- * Upgraded dependencies to latest releases.
49
- * Added put / delete functionality.
50
- * Make method_missing and respond_to? methods match the expected behavior and add specs to define those behaviors.
51
- * Properly escape uri paths when making requests.
52
- * SavedSearch resource.
53
- == v0.4.6 2011-05-13
54
- * Added notify option to contacts
55
- * Implementation of listing cart resource.
56
- * Pass JSON instead of a querystring for the OAuth POST body
57
- * API-101 client implementation for sharedlistings service.
58
- * Added multiclient support
59
- * Change client from sending credentials as request parameters to post data
60
- == v0.4.5 2011-05-06
61
- * Restrict lists larger than 1,000 scroll items
62
- * Fixed logging of oauth2 errors, removed redundant access_token from parameters.
63
- == v0.4.4 2011-05-06
64
- * Need to skip spec/reports for CI builds (oops).
65
- == v0.4.3 2011-05-05
66
- * Fixed semi important issue with timeout settings.
67
- == v0.4.2 2011-05-03
68
- * Fixed some nasty session timeout issues that were reported.
69
- * Raise proper exceptions for oauth grant errors.
70
- == v0.4.1 2011-04-11
71
- * Removed unnecessary finders from property type model
72
- * OAuth2 implementation and general auth redesign
73
- * Upgraded ruby version supported.
74
- * Add finders to Contact model
75
- * Adds an inspect to make debug info easier to read
76
- * Standard field support for _expanding and nearby
77
- == v0.3.9 2011-04-01
78
- * Added notes model and specs
79
- * Added a primary_logo method to the system info class
80
- * Change owner param to arguments hash
81
- * Add finders
82
- == v0.3.8 2011-03-24
83
- * Interface change! Remove api user calls that are all over the place.
84
- * Fix for empty count response.
85
- * Parse date and times for tour
86
- == v0.3.7 2011-03-11
87
- * Fix catch miss.
88
- * Added tour of homes model.
89
- == v0.3.6 2011-03-08
90
- * Added account model Also moved finders to a module.
91
- == v0.3.5 2011-03-08
92
- * changing units on API request logging
93
- == v0.3.4 2011-02-08
94
- * Fixed escaping special characters in the client. This needs to happen after signing.
95
- == v0.3.3 2011-01-28
96
- * Add session features to the api client.
97
- * Remove redundant debug log call
98
- == v0.3.2 2011-01-28
99
- * CustomFields class added
100
- == v0.3.1 2011-01-27
101
- * Prep work for rubygems
102
- * doc corrections
103
- == v0.3.0 2011-01-17
104
- * Added license for release.
105
- == v0.2.9 2011-01-12
106
- * misc project cleanup
107
- == v0.2.8 2011-01-10
108
- * Fixed client to use http for all requests (except for session auth) by default. Added :ssl option to enable https for all traffic.
109
- * Fixed client connection and resets.
110
- == v0.2.7 2011-01-10
111
- * Build troubles
112
- == v0.2.6 2011-01-10
113
- == v0.2.5 2011-01-10
114
- == v0.2.4 2011-01-10
115
- == v0.2.3 2011-01-10
116
- * Handy startup script picking keys from the environment.
117
- == v0.2.2 2010-12-29
118
- * per_page setting for the client models.
119
- * Pagination support for the Spark api client
120
- * Added branded? and unbranded? instance methods to Video
121
- * Added document model
122
- * Added virtual tours model
123
- * Added videos model
124
- * Contact model and saving
125
- * Added `find_by_cart_id' method to Listing model
126
- * allow finder to pass thru options
127
- * Implemented Listing.find(:all, ...)
128
- == v0.2.1 2010-12-29
129
- * fixed some error code issues.
130
- * corrected default endpoint to include the URL scheme
131
- == v0.2.0 2010-12-27
132
- * new gemspec
133
- * Session caching
134
- * Major overhaul on the models for code reuse
135
- * added Photo.find_by_listing_key
136
- == v0.1.1 2010-12-23
137
- * IDX link and market stat models.
138
- == v0.1.0 2010-12-13
139
- * Initial usable release with request interface and models
1
+ == v1.1.0 2012-08-07
2
+ * Upgraded faraday and other gems, cleand up the middleware
3
+ == v1.0.4 2012-07-26
4
+ * Moved to github for all development
5
+ == v1.0.3 2012-07-09
6
+ * Rental calendar
7
+ == v1.0.2 2012-05-30
8
+ * OpenId/Hybrid flow support
9
+ * OAuthSession does not support symbols as init
10
+ == v1.0.1 2012-04-30
11
+ * Fixed yaml config files
12
+ == v1.0.0 2012-04-20
13
+ * Switch to spark api branding from flexmls_api
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.4
1
+ 1.1.0
data/lib/spark_api.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'rubygems'
2
- require 'json'
3
2
  require 'logger'
3
+ require 'multi_json'
4
4
 
5
5
  require 'spark_api/version'
6
6
  require 'spark_api/configuration'
@@ -11,7 +11,7 @@ require 'spark_api/paginate'
11
11
  require 'spark_api/request'
12
12
  require 'spark_api/connection'
13
13
  require 'spark_api/client'
14
- require 'spark_api/faraday'
14
+ require 'spark_api/faraday_middleware'
15
15
  require 'spark_api/primary_array'
16
16
  require 'spark_api/options_hash'
17
17
  require 'spark_api/models'
@@ -1,7 +1,6 @@
1
1
 
2
2
  require 'openssl'
3
3
  require 'faraday'
4
- require 'faraday_middleware'
5
4
  require 'yajl'
6
5
  require 'date'
7
6
 
@@ -217,7 +217,7 @@ module SparkApi
217
217
  end
218
218
 
219
219
  module OAuth2Impl
220
- require 'spark_api/authentication/oauth2_impl/middleware'
220
+ require 'spark_api/authentication/oauth2_impl/faraday_middleware'
221
221
  require 'spark_api/authentication/oauth2_impl/grant_type_base'
222
222
  require 'spark_api/authentication/oauth2_impl/grant_type_refresh'
223
223
  require 'spark_api/authentication/oauth2_impl/grant_type_code'
@@ -1,38 +1,41 @@
1
- module SparkApi
1
+ require 'faraday'
2
2
 
3
+ module SparkApi
3
4
  module Authentication
4
-
5
5
  module OAuth2Impl
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 Middleware < Faraday::Response::ParseJson
10
- def on_complete(finished_env)
11
- body = parse(finished_env[:body])
9
+ class FaradayMiddleware < Faraday::Response::Middleware
10
+
11
+ def initialize(app)
12
+ super(app)
13
+ end
14
+
15
+ def on_complete(env)
16
+ body = MultiJson.decode(env[:body])
12
17
  SparkApi.logger.debug("[oauth2] Response Body: #{body.inspect}")
13
18
  unless body.is_a?(Hash)
14
19
  raise InvalidResponse, "The server response could not be understood"
15
20
  end
16
- case finished_env[:status]
21
+ case env[:status]
17
22
  when 200..299
18
23
  SparkApi.logger.debug("[oauth2] Success!")
19
24
  session = OAuthSession.new(body)
20
25
  else
21
26
  # Handle the WWW-Authenticate Response Header Field if present. This can be returned by
22
27
  # OAuth2 implementations and wouldn't hurt to log.
23
- auth_header_error = finished_env[:request_headers]["WWW-Authenticate"]
28
+ auth_header_error = env[:request_headers]["WWW-Authenticate"]
24
29
  SparkApi.logger.warn("Authentication error #{auth_header_error}") unless auth_header_error.nil?
25
- raise ClientError, {:message => body["error"], :code =>0, :status => finished_env[:status]}
30
+ raise ClientError, {:message => body["error"], :code =>0, :status => env[:status]}
26
31
  end
27
32
  SparkApi.logger.debug("[oauth2] Session=#{session.inspect}")
28
- finished_env[:body] = session
29
- end
30
-
31
- def initialize(app)
32
- super(app)
33
+ env[:body] = session
33
34
  end
34
-
35
+
35
36
  end
37
+ Faraday.register_middleware :response, :oauth2_impl => FaradayMiddleware
38
+
36
39
  end
37
40
  end
38
41
  end
@@ -68,9 +68,10 @@ module SparkApi
68
68
  }
69
69
  opts[:ssl] = {:verify => false }
70
70
  opts[:url] = endpoint
71
- conn = Faraday::Connection.new(opts) do |builder|
72
- builder.adapter Faraday.default_adapter
73
- builder.use SparkApi::Authentication::OAuth2Impl::Middleware
71
+ Faraday.register_middleware :response, :faraday_middleware => FaradayMiddleware
72
+ conn = Faraday::Connection.new(opts) do |conn|
73
+ conn.response :oauth2_impl
74
+ conn.adapter Faraday.default_adapter
74
75
  end
75
76
  end
76
77
  def build_url_parameters(parameters={})
@@ -1,5 +1,7 @@
1
1
  module SparkApi
2
2
  module Configuration
3
+
4
+ MultiJson.engine = "yajl"
3
5
 
4
6
  # valid configuration options
5
7
  VALID_OPTION_KEYS = [:api_key, :api_secret, :api_user, :endpoint,
@@ -1,7 +1,5 @@
1
1
  require 'openssl'
2
2
  require 'faraday'
3
- require 'faraday_middleware'
4
- require 'yajl'
5
3
 
6
4
  module SparkApi
7
5
  # =Connection
@@ -20,9 +18,10 @@ module SparkApi
20
18
  else
21
19
  opts[:url] = @endpoint.sub /^https:/, "http:"
22
20
  end
23
- conn = Faraday::Connection.new(opts) do |builder|
24
- builder.adapter Faraday.default_adapter
25
- builder.use SparkApi::FaradayExt::SparkMiddleware
21
+
22
+ conn = Faraday.new(opts) do |conn|
23
+ conn.response :spark_api
24
+ conn.adapter Faraday.default_adapter
26
25
  end
27
26
  SparkApi.logger.debug("Connection: #{conn.inspect}")
28
27
  conn
@@ -0,0 +1,69 @@
1
+ require 'faraday'
2
+ require 'cgi'
3
+
4
+ module SparkApi
5
+ #=Spark API Faraday middleware
6
+ # HTTP Response after filter to package api responses and bubble up basic api errors.
7
+ class FaradayMiddleware < Faraday::Response::Middleware
8
+ include SparkApi::PaginateHelper
9
+
10
+ def initialize(app)
11
+ super(app)
12
+ end
13
+
14
+ # Handles pretty much all the api response parsing and error handling. All responses that
15
+ # indicate a failure will raise a SparkApi::ClientError exception
16
+ def on_complete(env)
17
+ body = MultiJson.decode(env[:body])
18
+ SparkApi.logger.debug("Response Body: #{body.inspect}")
19
+ unless body.is_a?(Hash) && body.key?("D")
20
+ raise InvalidResponse, "The server response could not be understood"
21
+ end
22
+ response = ApiResponse.new body
23
+ paging = response.pagination
24
+ if paging.nil?
25
+ results = response
26
+ else
27
+ q = CGI.parse(env[:url].query)
28
+ if q.key?("_pagination") && q["_pagination"].first == "count"
29
+ results = paging['TotalRows']
30
+ else
31
+ results = paginate_response(response, paging)
32
+ end
33
+ end
34
+ case env[:status]
35
+ when 400
36
+ hash = {:message => response.message, :code => response.code, :status => env[:status]}
37
+
38
+ # constraint violation
39
+ if response.code == 1053
40
+ details = body['D']['Details']
41
+ hash[:details] = details
42
+ end
43
+ raise BadResourceRequest,hash
44
+ when 401
45
+ # Handle the WWW-Authenticate Response Header Field if present. This can be returned by
46
+ # OAuth2 implementations and wouldn't hurt to log.
47
+ auth_header_error = env[:request_headers]["WWW-Authenticate"]
48
+ SparkApi.logger.warn("Authentication error #{auth_header_error}") unless auth_header_error.nil?
49
+ raise PermissionDenied, {:message => response.message, :code => response.code, :status => env[:status]}
50
+ when 404
51
+ raise NotFound, {:message => response.message, :code => response.code, :status => env[:status]}
52
+ when 405
53
+ raise NotAllowed, {:message => response.message, :code => response.code, :status => env[:status]}
54
+ when 409
55
+ raise BadResourceRequest, {:message => response.message, :code => response.code, :status => env[:status]}
56
+ when 500
57
+ raise ClientError, {:message => response.message, :code => response.code, :status => env[:status]}
58
+ when 200..299
59
+ SparkApi.logger.debug("Success!")
60
+ else
61
+ raise ClientError, {:message => response.message, :code => response.code, :status => env[:status]}
62
+ end
63
+ env[:body] = results
64
+ end
65
+
66
+ end
67
+ Faraday.register_middleware :response, :spark_api => FaradayMiddleware
68
+
69
+ end
@@ -1,3 +1,5 @@
1
+ require 'base64'
2
+
1
3
  module SparkApi
2
4
  module Models
3
5
  class Photo < Base
data/spec/mock_helper.rb CHANGED
@@ -106,9 +106,9 @@ def mock_expired_session()
106
106
  end
107
107
 
108
108
  def test_connection(stubs)
109
- Faraday::Connection.new(nil, {:headers => SparkApi::Client.new.headers}) do |builder|
110
- builder.adapter :test, stubs
111
- builder.use SparkApi::FaradayExt::SparkMiddleware
109
+ Faraday.new(nil, {:headers => SparkApi::Client.new.headers}) do |conn|
110
+ conn.response :spark_api
111
+ conn.adapter :test, stubs
112
112
  end
113
113
  end
114
114
 
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require "rubygems"
2
2
  require "json"
3
+ require 'multi_json'
3
4
  require "rspec"
4
5
  require 'rspec/autorun'
5
6
  require 'webmock/rspec'
@@ -139,7 +139,7 @@ describe SparkApi::Paginate do
139
139
  "Success": true,
140
140
  "Results": [#{ListingJson.create_all(10)}],
141
141
  #{paginate_json}
142
- }
142
+ }}
143
143
  JSON
144
144
  stub_request(:get, "#{SparkApi.endpoint}/#{SparkApi.version}/listings").
145
145
  with(:query => {
@@ -172,7 +172,7 @@ describe SparkApi::Paginate do
172
172
  "Success": true,
173
173
  "Results": [#{ListingJson.create_all(10)}],
174
174
  #{paginate_json(2)}
175
- }
175
+ }}
176
176
  JSON
177
177
  stub_request(:get, "#{SparkApi.endpoint}/#{SparkApi.version}/listings").
178
178
  with(:query => {
@@ -195,7 +195,7 @@ describe SparkApi::Paginate do
195
195
  "Success": true,
196
196
  "Results": [#{ListingJson.create_all(8)}],
197
197
  #{paginate_json(4)}
198
- }
198
+ }}
199
199
  JSON
200
200
  stub_request(:get, "#{SparkApi.endpoint}/#{SparkApi.version}/listings").
201
201
  with(:query => {
@@ -5,6 +5,10 @@ describe SparkApi do
5
5
  reset_config
6
6
  end
7
7
 
8
+ it "should use 'yajl-ruby' for parsing json" do
9
+ MultiJson.engine.should eq(MultiJson::Adapters::Yajl)
10
+ end
11
+
8
12
  it "should load the version" do
9
13
  subject::VERSION.should match(/\d+\.\d+\.\d+/)
10
14
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spark_api
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
+ - 1
8
9
  - 0
9
- - 4
10
- version: 1.0.4
10
+ version: 1.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Brandon Hornseth
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2012-07-26 00:00:00 Z
19
+ date: 2012-08-07 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  version_requirements: &id001 !ruby/object:Gem::Requirement
@@ -24,34 +24,18 @@ dependencies:
24
24
  requirements:
25
25
  - - ~>
26
26
  - !ruby/object:Gem::Version
27
- hash: 9
27
+ hash: 61
28
28
  segments:
29
29
  - 0
30
- - 7
31
- - 5
32
- version: 0.7.5
30
+ - 8
31
+ - 1
32
+ version: 0.8.1
33
33
  requirement: *id001
34
34
  prerelease: false
35
35
  name: faraday
36
36
  type: :runtime
37
37
  - !ruby/object:Gem::Dependency
38
38
  version_requirements: &id002 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ~>
42
- - !ruby/object:Gem::Version
43
- hash: 3
44
- segments:
45
- - 0
46
- - 7
47
- - 0
48
- version: 0.7.0
49
- requirement: *id002
50
- prerelease: false
51
- name: faraday_middleware
52
- type: :runtime
53
- - !ruby/object:Gem::Dependency
54
- version_requirements: &id003 !ruby/object:Gem::Requirement
55
39
  none: false
56
40
  requirements:
57
41
  - - ~>
@@ -61,42 +45,43 @@ dependencies:
61
45
  - 1
62
46
  - 0
63
47
  version: "1.0"
64
- requirement: *id003
48
+ requirement: *id002
65
49
  prerelease: false
66
50
  name: multi_json
67
51
  type: :runtime
68
52
  - !ruby/object:Gem::Dependency
69
- version_requirements: &id004 !ruby/object:Gem::Requirement
53
+ version_requirements: &id003 !ruby/object:Gem::Requirement
70
54
  none: false
71
55
  requirements:
72
56
  - - ~>
73
57
  - !ruby/object:Gem::Version
74
- hash: 5
58
+ hash: 1
75
59
  segments:
76
60
  - 1
77
- - 5
78
- version: "1.5"
79
- requirement: *id004
61
+ - 7
62
+ version: "1.7"
63
+ requirement: *id003
80
64
  prerelease: false
81
65
  name: json
82
66
  type: :runtime
83
67
  - !ruby/object:Gem::Dependency
84
- version_requirements: &id005 !ruby/object:Gem::Requirement
68
+ version_requirements: &id004 !ruby/object:Gem::Requirement
85
69
  none: false
86
70
  requirements:
87
71
  - - ~>
88
72
  - !ruby/object:Gem::Version
89
- hash: 27
73
+ hash: 19
90
74
  segments:
75
+ - 1
76
+ - 1
91
77
  - 0
92
- - 8
93
- version: "0.8"
94
- requirement: *id005
78
+ version: 1.1.0
79
+ requirement: *id004
95
80
  prerelease: false
96
81
  name: yajl-ruby
97
82
  type: :runtime
98
83
  - !ruby/object:Gem::Dependency
99
- version_requirements: &id006 !ruby/object:Gem::Requirement
84
+ version_requirements: &id005 !ruby/object:Gem::Requirement
100
85
  none: false
101
86
  requirements:
102
87
  - - ">="
@@ -115,27 +100,12 @@ dependencies:
115
100
  - 0
116
101
  - 0
117
102
  version: 4.0.0
118
- requirement: *id006
103
+ requirement: *id005
119
104
  prerelease: false
120
105
  name: builder
121
106
  type: :runtime
122
107
  - !ruby/object:Gem::Dependency
123
- version_requirements: &id007 !ruby/object:Gem::Requirement
124
- none: false
125
- requirements:
126
- - - ~>
127
- - !ruby/object:Gem::Version
128
- hash: 7
129
- segments:
130
- - 2
131
- - 2
132
- version: "2.2"
133
- requirement: *id007
134
- prerelease: false
135
- name: addressable
136
- type: :runtime
137
- - !ruby/object:Gem::Dependency
138
- version_requirements: &id008 !ruby/object:Gem::Requirement
108
+ version_requirements: &id006 !ruby/object:Gem::Requirement
139
109
  none: false
140
110
  requirements:
141
111
  - - ">="
@@ -155,12 +125,12 @@ dependencies:
155
125
  - 0
156
126
  - 0
157
127
  version: 4.0.0
158
- requirement: *id008
128
+ requirement: *id006
159
129
  prerelease: false
160
130
  name: will_paginate
161
131
  type: :runtime
162
132
  - !ruby/object:Gem::Dependency
163
- version_requirements: &id009 !ruby/object:Gem::Requirement
133
+ version_requirements: &id007 !ruby/object:Gem::Requirement
164
134
  none: false
165
135
  requirements:
166
136
  - - ~>
@@ -171,12 +141,12 @@ dependencies:
171
141
  - 9
172
142
  - 2
173
143
  version: 0.9.2
174
- requirement: *id009
144
+ requirement: *id007
175
145
  prerelease: false
176
146
  name: rake
177
147
  type: :development
178
148
  - !ruby/object:Gem::Dependency
179
- version_requirements: &id010 !ruby/object:Gem::Requirement
149
+ version_requirements: &id008 !ruby/object:Gem::Requirement
180
150
  none: false
181
151
  requirements:
182
152
  - - ~>
@@ -187,12 +157,12 @@ dependencies:
187
157
  - 8
188
158
  - 0
189
159
  version: 2.8.0
190
- requirement: *id010
160
+ requirement: *id008
191
161
  prerelease: false
192
162
  name: rspec
193
163
  type: :development
194
164
  - !ruby/object:Gem::Dependency
195
- version_requirements: &id011 !ruby/object:Gem::Requirement
165
+ version_requirements: &id009 !ruby/object:Gem::Requirement
196
166
  none: false
197
167
  requirements:
198
168
  - - "="
@@ -203,12 +173,12 @@ dependencies:
203
173
  - 7
204
174
  - 5
205
175
  version: 1.7.5
206
- requirement: *id011
176
+ requirement: *id009
207
177
  prerelease: false
208
178
  name: webmock
209
179
  type: :development
210
180
  - !ruby/object:Gem::Dependency
211
- version_requirements: &id012 !ruby/object:Gem::Requirement
181
+ version_requirements: &id010 !ruby/object:Gem::Requirement
212
182
  none: false
213
183
  requirements:
214
184
  - - ~>
@@ -219,12 +189,12 @@ dependencies:
219
189
  - 2
220
190
  - 4
221
191
  version: 0.2.4
222
- requirement: *id012
192
+ requirement: *id010
223
193
  prerelease: false
224
194
  name: typhoeus
225
195
  type: :development
226
196
  - !ruby/object:Gem::Dependency
227
- version_requirements: &id013 !ruby/object:Gem::Requirement
197
+ version_requirements: &id011 !ruby/object:Gem::Requirement
228
198
  none: false
229
199
  requirements:
230
200
  - - ~>
@@ -235,12 +205,12 @@ dependencies:
235
205
  - 6
236
206
  - 3
237
207
  version: 1.6.3
238
- requirement: *id013
208
+ requirement: *id011
239
209
  prerelease: false
240
210
  name: ci_reporter
241
211
  type: :development
242
212
  - !ruby/object:Gem::Dependency
243
- version_requirements: &id014 !ruby/object:Gem::Requirement
213
+ version_requirements: &id012 !ruby/object:Gem::Requirement
244
214
  none: false
245
215
  requirements:
246
216
  - - ~>
@@ -251,12 +221,12 @@ dependencies:
251
221
  - 9
252
222
  - 9
253
223
  version: 0.9.9
254
- requirement: *id014
224
+ requirement: *id012
255
225
  prerelease: false
256
226
  name: rcov
257
227
  type: :development
258
228
  - !ruby/object:Gem::Dependency
259
- version_requirements: &id015 !ruby/object:Gem::Requirement
229
+ version_requirements: &id013 !ruby/object:Gem::Requirement
260
230
  none: false
261
231
  requirements:
262
232
  - - ~>
@@ -267,7 +237,7 @@ dependencies:
267
237
  - 2
268
238
  - 5
269
239
  version: 0.2.5
270
- requirement: *id015
240
+ requirement: *id013
271
241
  prerelease: false
272
242
  name: flexmls_gems
273
243
  type: :development
@@ -288,7 +258,7 @@ files:
288
258
  - VERSION
289
259
  - bin/spark_api
290
260
  - lib/spark_api/authentication/api_auth.rb
291
- - lib/spark_api/authentication/oauth2_impl/middleware.rb
261
+ - lib/spark_api/authentication/oauth2_impl/faraday_middleware.rb
292
262
  - lib/spark_api/authentication/oauth2_impl/grant_type_base.rb
293
263
  - lib/spark_api/authentication/oauth2_impl/password_provider.rb
294
264
  - lib/spark_api/authentication/oauth2_impl/grant_type_code.rb
@@ -297,6 +267,7 @@ files:
297
267
  - lib/spark_api/authentication/oauth2_impl/grant_type_password.rb
298
268
  - lib/spark_api/authentication/oauth2.rb
299
269
  - lib/spark_api/authentication/base_auth.rb
270
+ - lib/spark_api/faraday_middleware.rb
300
271
  - lib/spark_api/client.rb
301
272
  - lib/spark_api/primary_array.rb
302
273
  - lib/spark_api/version.rb
@@ -335,7 +306,6 @@ files:
335
306
  - lib/spark_api/cli/api_auth.rb
336
307
  - lib/spark_api/cli/setup.rb
337
308
  - lib/spark_api/cli/oauth2.rb
338
- - lib/spark_api/faraday.rb
339
309
  - lib/spark_api/request.rb
340
310
  - lib/spark_api/options_hash.rb
341
311
  - lib/spark_api/cli.rb
@@ -440,7 +410,6 @@ files:
440
410
  - spec/unit/spark_api/authentication/oauth2_impl/grant_type_base_spec.rb
441
411
  - spec/unit/spark_api/authentication/oauth2_spec.rb
442
412
  - spec/unit/spark_api/authentication/api_auth_spec.rb
443
- - spec/unit/spark_api/faraday_spec.rb
444
413
  - spec/unit/spark_api/authentication_spec.rb
445
414
  - spec/unit/spark_api/models/open_house_spec.rb
446
415
  - spec/unit/spark_api/models/account_spec.rb
@@ -464,6 +433,7 @@ files:
464
433
  - spec/unit/spark_api/models/tour_of_home_spec.rb
465
434
  - spec/unit/spark_api/models/system_info_spec.rb
466
435
  - spec/unit/spark_api/models/standard_fields_spec.rb
436
+ - spec/unit/spark_api/faraday_middleware_spec.rb
467
437
  - spec/unit/spark_api/options_hash_spec.rb
468
438
  - spec/unit/spark_api/paginate_spec.rb
469
439
  - spec/unit/spark_api/primary_array_spec.rb
@@ -602,7 +572,6 @@ test_files:
602
572
  - spec/unit/spark_api/authentication/oauth2_impl/grant_type_base_spec.rb
603
573
  - spec/unit/spark_api/authentication/oauth2_spec.rb
604
574
  - spec/unit/spark_api/authentication/api_auth_spec.rb
605
- - spec/unit/spark_api/faraday_spec.rb
606
575
  - spec/unit/spark_api/authentication_spec.rb
607
576
  - spec/unit/spark_api/models/open_house_spec.rb
608
577
  - spec/unit/spark_api/models/account_spec.rb
@@ -626,6 +595,7 @@ test_files:
626
595
  - spec/unit/spark_api/models/tour_of_home_spec.rb
627
596
  - spec/unit/spark_api/models/system_info_spec.rb
628
597
  - spec/unit/spark_api/models/standard_fields_spec.rb
598
+ - spec/unit/spark_api/faraday_middleware_spec.rb
629
599
  - spec/unit/spark_api/options_hash_spec.rb
630
600
  - spec/unit/spark_api/paginate_spec.rb
631
601
  - spec/unit/spark_api/primary_array_spec.rb
@@ -1,64 +0,0 @@
1
- module SparkApi
2
- module FaradayExt
3
- #=Spark API Faraday middleware
4
- # HTTP Response after filter to package api responses and bubble up basic api errors.
5
- class SparkMiddleware < Faraday::Response::ParseJson
6
- include SparkApi::PaginateHelper
7
- # Handles pretty much all the api response parsing and error handling. All responses that
8
- # indicate a failure will raise a SparkApi::ClientError exception
9
- def on_complete(finished_env)
10
- body = parse(finished_env[:body])
11
- SparkApi.logger.debug("Response Body: #{body.inspect}")
12
- unless body.is_a?(Hash) && body.key?("D")
13
- raise InvalidResponse, "The server response could not be understood"
14
- end
15
- response = ApiResponse.new body
16
- paging = response.pagination
17
- if paging.nil?
18
- results = response
19
- else
20
- if finished_env[:url].query_values["_pagination"] == "count"
21
- results = paging['TotalRows']
22
- else
23
- results = paginate_response(response, paging)
24
- end
25
- end
26
- case finished_env[:status]
27
- when 400
28
- hash = {:message => response.message, :code => response.code, :status => finished_env[:status]}
29
-
30
- # constraint violation
31
- if response.code == 1053
32
- details = body['D']['Details']
33
- hash[:details] = details
34
- end
35
- raise BadResourceRequest,hash
36
- when 401
37
- # Handle the WWW-Authenticate Response Header Field if present. This can be returned by
38
- # OAuth2 implementations and wouldn't hurt to log.
39
- auth_header_error = finished_env[:request_headers]["WWW-Authenticate"]
40
- SparkApi.logger.warn("Authentication error #{auth_header_error}") unless auth_header_error.nil?
41
- raise PermissionDenied, {:message => response.message, :code => response.code, :status => finished_env[:status]}
42
- when 404
43
- raise NotFound, {:message => response.message, :code => response.code, :status => finished_env[:status]}
44
- when 405
45
- raise NotAllowed, {:message => response.message, :code => response.code, :status => finished_env[:status]}
46
- when 409
47
- raise BadResourceRequest, {:message => response.message, :code => response.code, :status => finished_env[:status]}
48
- when 500
49
- raise ClientError, {:message => response.message, :code => response.code, :status => finished_env[:status]}
50
- when 200..299
51
- SparkApi.logger.debug("Success!")
52
- else
53
- raise ClientError, {:message => response.message, :code => response.code, :status => finished_env[:status]}
54
- end
55
- finished_env[:body] = results
56
- end
57
-
58
- def initialize(app)
59
- super(app)
60
- end
61
-
62
- end
63
- end
64
- end