shutl_resource 0.11.4 → 1.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.
@@ -28,11 +28,19 @@ module Shutl::Resource
28
28
 
29
29
  module Configuration
30
30
  class << self
31
- attr_accessor :base_uri, :logger
31
+ attr_accessor :base_uri
32
32
 
33
33
  def configure
34
34
  yield self
35
35
  end
36
+
37
+ def logger
38
+ @logger ||= Logger.new($stdout)
39
+ end
40
+
41
+ def logger=(logger)
42
+ @logger = logger
43
+ end
36
44
  end
37
45
  end
38
46
  end
@@ -14,8 +14,14 @@ module Shutl::Resource
14
14
  attr_reader :response
15
15
 
16
16
  def self.included(base)
17
+ base.send :include, HTTParty
17
18
  base.send :extend, Shutl::Resource::RestClassMethods
18
19
 
20
+ base.send :headers, {
21
+ 'Accept' => 'application/json',
22
+ 'Content-Type' => 'application/json'
23
+ }
24
+
19
25
  base.send :resource_name, base.name.split('::').last.underscore
20
26
  base.send :resource_id, :id
21
27
  end
@@ -1,33 +1,6 @@
1
1
  require 'open-uri'
2
2
  module Shutl::Resource
3
3
  module RestClassMethods
4
- def base_uri uri
5
- @base_uri = uri
6
- end
7
-
8
- def connection
9
- @connection ||= Faraday.new(:url => @base_uri || Shutl::Resource.base_uri) do |faraday|
10
- faraday.request :url_encoded # form-encode POST params
11
- faraday.response :json
12
-
13
- # faraday.ssl[:ca_file] = ENV["SSL_CERT_FILE"]
14
-
15
- faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
16
-
17
- if Shutl::Resource.logger
18
- faraday.use :extended_logging, logger: Shutl::Resource.logger
19
- end
20
- end
21
- end
22
-
23
- def headers
24
- {
25
- 'Accept' => 'application/json',
26
- 'Content-Type' => 'application/json',
27
- 'User-Agent' => "Shutl Resource Gem v#{Shutl::Resource::VERSION}"
28
- }
29
- end
30
-
31
4
  def find(args = {}, params = {})
32
5
  params = args if @singular_resource
33
6
  auth_options = { auth: params.delete(:auth), from: params.delete(:from) }
@@ -42,13 +15,13 @@ module Shutl::Resource
42
15
  url = member_url args.dup, params
43
16
  end
44
17
 
45
- response = connection.get(url) do |req|
46
- req.headers = headers_with_auth(auth_options)
47
- end
18
+ response = get url, headers_with_auth(auth_options)
48
19
 
49
20
  check_fail response, "Failed to find #{name}! args: #{args}, params: #{params}"
50
21
 
51
- including_parent_attributes = response.body[@resource_name].merge args
22
+ parsed = response.parsed_response
23
+
24
+ including_parent_attributes = parsed[@resource_name].merge args
52
25
  new_object including_parent_attributes, response
53
26
  end
54
27
 
@@ -56,41 +29,40 @@ module Shutl::Resource
56
29
  url = generate_collection_url attributes
57
30
  attributes.delete "response"
58
31
 
59
- response = connection.post(url) do |req|
60
- req.headers = headers_with_auth(options)
61
- req.body = { @resource_name => attributes }.to_json
62
- end
32
+ response = post(
33
+ url,
34
+ { body: { @resource_name => attributes }.to_json }.merge(headers_with_auth(options))
35
+ )
63
36
 
64
37
  check_fail response, "Create failed"
65
38
 
66
- parsed = response.body || {}
39
+ parsed = response.parsed_response || {}
67
40
  attributes = parsed[@resource_name] || {}
68
41
 
69
42
  new_object attributes, response
70
43
  end
71
44
 
72
45
  def destroy instance, options = {}
73
- failure_message = "Failed to destroy #{name.downcase.pluralize}"
46
+ message = "Failed to destroy #{name.downcase.pluralize}"
74
47
 
75
48
  perform_action(
76
49
  instance,
77
50
  :delete,
78
- {},
79
51
  headers_with_auth(options),
80
- failure_message
52
+ message
81
53
  ).success?
82
54
  end
83
55
 
84
56
  def save instance, options = {}
57
+ #TODO: this is sometimes a hash and sometimes a Rest - need to rethink this
85
58
  attributes = instance.attributes rescue instance
86
59
 
87
- body = { @resource_name => convert_new_id(attributes) }.to_json
60
+ payload = {
61
+ body: { @resource_name => convert_new_id(attributes) }.to_json
62
+ }
88
63
 
89
- response = perform_action(instance,
90
- :put,
91
- body,
92
- headers_with_auth(options),
93
- "Save failed")
64
+ payload_with_headers = payload.merge(headers_with_auth options)
65
+ response = perform_action(instance, :put, payload, "Save failed")
94
66
 
95
67
  response.success?
96
68
  end
@@ -108,13 +80,11 @@ module Shutl::Resource
108
80
  params = partition.last.inject({}) { |h, pair| h[pair.first] = pair.last; h }
109
81
 
110
82
  url = generate_collection_url url_args, params
111
- response = connection.get(url) do |req|
112
- req.headers = headers_with_auth(auth_options)
113
- end
83
+ response = get url, headers_with_auth(auth_options)
114
84
 
115
85
  check_fail response, "Failed to find all #{name.downcase.pluralize}"
116
86
 
117
- response_object = response.body[@resource_name.pluralize].map do |h|
87
+ response_object = response.parsed_response[@resource_name.pluralize].map do |h|
118
88
  new_object(args.merge(h), response)
119
89
  end
120
90
  if order_collection?
@@ -125,7 +95,7 @@ module Shutl::Resource
125
95
  end
126
96
  end
127
97
 
128
- RestCollection.new(response_object, response.body['pagination'])
98
+ RestCollection.new(response_object, response.parsed_response['pagination'])
129
99
  end
130
100
 
131
101
  class RestCollection
@@ -235,17 +205,15 @@ module Shutl::Resource
235
205
  h['Authorization'] = "Bearer #{options[:auth]}" if options[:auth]
236
206
  h['From'] = "#{options[:from]}" if options[:from]
237
207
  end
208
+ { headers: headers }
238
209
  end
239
210
 
240
- def perform_action instance, verb, body, headers, failure_message
211
+ def perform_action instance, verb, args, failure_message
241
212
  attributes = instance.is_a?(Hash) ? instance : instance.attributes
242
213
  attributes.delete "response" #used in debugging requests/responses
243
214
 
244
215
  url = member_url attributes
245
- response = connection.send(verb, url) do |req|
246
- req.headers = headers
247
- req.body = body
248
- end
216
+ response = send verb, url, args
249
217
 
250
218
  check_fail response, failure_message
251
219
 
@@ -256,7 +224,7 @@ module Shutl::Resource
256
224
  instance = new add_resource_id_to(args), response
257
225
 
258
226
  instance.tap do |i|
259
- parsed_response = response.body
227
+ parsed_response = response.parsed_response
260
228
 
261
229
  if errors = (parsed_response and parsed_response["errors"])
262
230
  i.errors = errors
@@ -265,7 +233,8 @@ module Shutl::Resource
265
233
  end
266
234
 
267
235
  def check_fail response, message
268
- failure_klass = case response.status
236
+ c = response.code
237
+ failure_klass = case c
269
238
  when 299
270
239
  if Shutl::Resource.raise_exceptions_on_no_quotes_generated
271
240
  Shutl::NoQuotesGenerated
@@ -296,7 +265,7 @@ module Shutl::Resource
296
265
 
297
266
 
298
267
  output = begin
299
- response.body["errors"]["base"]
268
+ response.parsed_response["errors"]["base"]
300
269
  rescue
301
270
  message
302
271
  end
@@ -309,6 +278,8 @@ module Shutl::Resource
309
278
  def generate_url!(url_pattern, args, params = {})
310
279
  url = url_pattern.dup
311
280
 
281
+ url = "#{Shutl::Resource.base_uri}#{url}" unless self.base_uri
282
+
312
283
  args, url = replace_args_from_pattern! args, url
313
284
 
314
285
  url = URI.escape url
@@ -1,5 +1,5 @@
1
1
  module Shutl
2
2
  module Resource
3
- VERSION = '0.11.4'
3
+ VERSION = '1.0.0'
4
4
  end
5
5
  end
@@ -1,10 +1,6 @@
1
1
  module Shutl
2
2
  end
3
3
 
4
- require 'faraday'
5
- require 'faraday_middleware'
6
- require "faraday/conductivity"
7
-
8
4
  require 'shutl_auth'
9
5
  require 'shutl/resource/version'
10
6
  require 'shutl/resource/configuration'
@@ -21,9 +21,6 @@ Gem::Specification.new do |gem|
21
21
  gem.add_dependency 'httparty', '~> 0.10.0'
22
22
  gem.add_dependency 'shutl_auth', '0.8.0'
23
23
  gem.add_dependency 'activemodel'
24
- gem.add_dependency 'faraday'
25
- gem.add_dependency 'faraday_middleware'
26
- gem.add_dependency 'faraday-conductivity'
27
24
 
28
25
  gem.add_development_dependency 'rake'
29
26
  gem.add_development_dependency 'rspec', '~> 2.11.0'
@@ -2,6 +2,18 @@ require 'spec_helper'
2
2
 
3
3
  describe Shutl::Resource do
4
4
  describe '#configure' do
5
+ let(:logger) { Shutl::Resource.logger }
6
+
7
+ it 'should configure the logger' do
8
+ logger = stub('logger')
9
+
10
+ Shutl::Resource.configure do |config|
11
+ config.logger = logger
12
+ end
13
+
14
+ Shutl::Resource.logger.should == logger
15
+ end
16
+
5
17
  it "allows for configuration of the base uri" do
6
18
  Shutl::Resource.configure do |config|
7
19
  config.base_uri = 'base uri'
@@ -81,7 +81,7 @@ describe Shutl::Resource::Rest do
81
81
  end
82
82
 
83
83
  it 'should support the params with invalid uri name' do
84
- request = stub_request(:get, 'http://host/nested/10/resources?arg1=val1&arg%2B2=val2').
84
+ request = stub_request(:get, 'http://host/nested/10/resources?arg1=val1&arg%202=val2').
85
85
  to_return(body: '{"nested_resources": []}', headers: headers)
86
86
 
87
87
  NestedResource.all(parent_id: 10, arg1: 'val1', :'arg 2' => 'val2')
@@ -2,9 +2,14 @@ require 'spec_helper'
2
2
 
3
3
  describe Shutl::Resource::Rest do
4
4
  let(:headers) do
5
- { 'Accept' => 'application/json',
6
- 'Content-Type' => 'application/json',
7
- 'User-Agent' => "Shutl Resource Gem v#{Shutl::Resource::VERSION}" }
5
+ { 'Accept' => 'application/json', 'Content-Type' => 'application/json' }
6
+ end
7
+
8
+ it 'should include the REST verb' do
9
+ TestRest.should respond_to :get
10
+ TestRest.should respond_to :post
11
+ TestRest.should respond_to :post
12
+ TestRest.should respond_to :delete
8
13
  end
9
14
 
10
15
  let(:resource) { TestRest.new(a: 'a', b: 2) }
data/spec/spec_helper.rb CHANGED
@@ -5,3 +5,4 @@ require 'support/test_resource'
5
5
  require 'support/test_resource'
6
6
  require 'support/configured_base_uri_resource'
7
7
  require 'support/test_singular_resource'
8
+ require 'support/double_logger'
@@ -0,0 +1,14 @@
1
+
2
+ module Shutl::Resource
3
+ class NoLogger
4
+ def debug(message) ; end
5
+ def info(message) ; end
6
+ def warn(message) ; end
7
+ def error(message) ; end
8
+ def fatal(message) ; end
9
+ end
10
+ end
11
+
12
+ Shutl::Resource.configure do |config|
13
+ config.logger = Shutl::Resource::NoLogger.new
14
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shutl_resource
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.4
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2013-08-01 00:00:00.000000000 Z
14
+ date: 2013-08-02 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: httparty
@@ -61,54 +61,6 @@ dependencies:
61
61
  - - ! '>='
62
62
  - !ruby/object:Gem::Version
63
63
  version: '0'
64
- - !ruby/object:Gem::Dependency
65
- name: faraday
66
- requirement: !ruby/object:Gem::Requirement
67
- none: false
68
- requirements:
69
- - - ! '>='
70
- - !ruby/object:Gem::Version
71
- version: '0'
72
- type: :runtime
73
- prerelease: false
74
- version_requirements: !ruby/object:Gem::Requirement
75
- none: false
76
- requirements:
77
- - - ! '>='
78
- - !ruby/object:Gem::Version
79
- version: '0'
80
- - !ruby/object:Gem::Dependency
81
- name: faraday_middleware
82
- requirement: !ruby/object:Gem::Requirement
83
- none: false
84
- requirements:
85
- - - ! '>='
86
- - !ruby/object:Gem::Version
87
- version: '0'
88
- type: :runtime
89
- prerelease: false
90
- version_requirements: !ruby/object:Gem::Requirement
91
- none: false
92
- requirements:
93
- - - ! '>='
94
- - !ruby/object:Gem::Version
95
- version: '0'
96
- - !ruby/object:Gem::Dependency
97
- name: faraday-conductivity
98
- requirement: !ruby/object:Gem::Requirement
99
- none: false
100
- requirements:
101
- - - ! '>='
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :runtime
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- none: false
108
- requirements:
109
- - - ! '>='
110
- - !ruby/object:Gem::Version
111
- version: '0'
112
64
  - !ruby/object:Gem::Dependency
113
65
  name: rake
114
66
  requirement: !ruby/object:Gem::Requirement
@@ -206,6 +158,7 @@ files:
206
158
  - spec/rest_resource_spec.rb
207
159
  - spec/spec_helper.rb
208
160
  - spec/support/configured_base_uri_resource.rb
161
+ - spec/support/double_logger.rb
209
162
  - spec/support/test_resource.rb
210
163
  - spec/support/test_singular_resource.rb
211
164
  homepage: ''
@@ -222,7 +175,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
222
175
  version: '0'
223
176
  segments:
224
177
  - 0
225
- hash: 2169590113851625872
178
+ hash: 2862234294544768530
226
179
  required_rubygems_version: !ruby/object:Gem::Requirement
227
180
  none: false
228
181
  requirements:
@@ -231,7 +184,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
231
184
  version: '0'
232
185
  segments:
233
186
  - 0
234
- hash: 2169590113851625872
187
+ hash: 2862234294544768530
235
188
  requirements: []
236
189
  rubyforge_project:
237
190
  rubygems_version: 1.8.25
@@ -246,5 +199,6 @@ test_files:
246
199
  - spec/rest_resource_spec.rb
247
200
  - spec/spec_helper.rb
248
201
  - spec/support/configured_base_uri_resource.rb
202
+ - spec/support/double_logger.rb
249
203
  - spec/support/test_resource.rb
250
204
  - spec/support/test_singular_resource.rb