shutl_resource 0.11.4 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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