api-resource 0.6.1 → 0.7.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
  SHA1:
3
- metadata.gz: db46a506b98a3f2140ff615dabe2e4fe147c683b
4
- data.tar.gz: d4b4d7176000df6b5467cd3b02b291732e81b346
3
+ metadata.gz: 1b43230ab4592f487f3ced50d5148946ad42811c
4
+ data.tar.gz: bf945dbe477665f5ae40e0e8a8d40416d14b7952
5
5
  SHA512:
6
- metadata.gz: 04d9e92da052db48f4208748f128f32bb999278efd4c289d9434ab2947418bc0d7f656e82d34954a26ff3e4b2acf2cb73a0a7577a31ef4340a32dd84b858f719
7
- data.tar.gz: 6b03d44984962528ec13cc08bbdd7aa1d69af6b3e887bf9fcb59fc0f9ccb337163c08bc442ddfb06d67ebb5746b268185b34eee1becd0ee09f2007f96acbcbc7
6
+ metadata.gz: d78d747c15f45145f9f4cc89b5816f4973a1cba477b08ad5479af57c4fdfb10ae4f7f4a9df0da23bcb4156d90a2ac9faca3c85372de58df6f0fff74798a8d46e
7
+ data.tar.gz: 201e9c121ab99db3182c3f76941e5c8689c9153b69a3c69d63c1fa0745fc7702bf2cdf137a397672447ded96b76cee3215b0f4eeb839b10a9eba8c3149c907a3
@@ -60,23 +60,23 @@ module ApiResource
60
60
  self.class.resource_path = path
61
61
  end
62
62
 
63
- def self.find(id, options={})
64
- result = client(:get, options, resource_path, id)
63
+ def self.find(id, params={})
64
+ result = client(:get, params, resource_path, id)
65
65
  json = JSON.parse(result)
66
66
  self.new(json['data'] || json)
67
67
  end
68
68
 
69
- def self.all(method=:get)
70
- self.where({}, method)
69
+ def self.all
70
+ self.where({})
71
71
  end
72
72
 
73
- def self.all_pages(options={})
74
- options = { page: 1, per_page: default_per_page }.merge(options)
75
- per_page = options[:per_page].to_i
76
- page = options[:page].to_i
73
+ def self.all_pages(params={})
74
+ params = { page: 1, per_page: default_per_page }.merge(params)
75
+ per_page = params[:per_page].to_i
76
+ page = params[:page].to_i
77
77
  begin
78
- options[:page] = page
79
- result = self.where(options)
78
+ params[:page] = page
79
+ result = self.where(params)
80
80
  total_count = result.try :total_count
81
81
  arr = result.to_a
82
82
  count = arr.length
@@ -85,8 +85,8 @@ module ApiResource
85
85
  end while true
86
86
  end
87
87
 
88
- def self.where(options, method=:get)
89
- result = client(method, options, resource_path)
88
+ def self.where(params)
89
+ result = client(:get, params, resource_path)
90
90
  create_resource_collection(result)
91
91
  end
92
92
 
@@ -110,7 +110,7 @@ module ApiResource
110
110
  end
111
111
 
112
112
  def destroy!(options={})
113
- self.submit_resource(resource_path, false, options[:id_attr], :delete)
113
+ submit_resource(resource_path, false, options[:id_attr], :delete)
114
114
  self
115
115
  end
116
116
 
@@ -162,9 +162,9 @@ module ApiResource
162
162
  def self.method_missing(m, *args, &_)
163
163
  case (m)
164
164
  when /^by_(.+)/
165
- resource_path = self.resource_path
165
+ resource_path = build_url($1.pluralize, args[0], self.resource_path)
166
166
  Class.new(self) do
167
- self.resource_path = build_url($1.pluralize, args[0], resource_path)
167
+ self.resource_path = resource_path
168
168
  end
169
169
  else
170
170
  super
@@ -174,13 +174,23 @@ module ApiResource
174
174
  def method_missing(m, *args, &_)
175
175
  case m
176
176
  when /^by_(.+)/
177
- begin
178
- original_path = resource_path
179
- self.resource_path = self.class.build_url($1, args[0], resource_path)
180
- yield(self) if block_given?
181
- ensure
182
- self.resource_path = original_path
183
- end
177
+ resource_path = self.class.build_url($1.pluralize, args[0], self.resource_path)
178
+ Class.new do
179
+ def initialize(proxied, resource_path)
180
+ @proxied = proxied
181
+ @resource_path = resource_path
182
+ end
183
+
184
+ def method_missing(m, *args, &block)
185
+ begin
186
+ old_resource_path = @proxied.resource_path
187
+ @proxied.resource_path = @resource_path
188
+ @proxied.public_send(m, *args, &block)
189
+ ensure
190
+ @proxied.resource_path = old_resource_path
191
+ end
192
+ end
193
+ end.new(self, resource_path)
184
194
  else
185
195
  super
186
196
  end
@@ -1,3 +1,3 @@
1
1
  module ApiResource
2
- VERSION = '0.6.1'
2
+ VERSION = '0.7.0'
3
3
  end
@@ -20,23 +20,6 @@ RSpec.describe ApiResource::Resource do
20
20
  end
21
21
  end
22
22
 
23
- def check_returned_array(type, expected, actual)
24
- expect(actual).to be_a Enumerable
25
- actual.each { |e| expect(e).to be_a type }
26
- expect(actual.map { |e| e.attributes }).to match ((expected.is_a?(Hash) && expected[:data]) || expected)
27
- end
28
-
29
- def check_returned_object(type, expected, actual, *except)
30
- expect(actual).to be_a(type)
31
- expect(actual.try(:attributes) || actual).to match((expected[:data] || expected).except(*except))
32
- end
33
-
34
- def req(verb, path, resource, status=200, params=nil)
35
- stub_request(verb, "#{BlogApi::Resource.base_url}#{path}").
36
- with(headers: { 'Accept' => 'application/json' }, body: params).
37
- to_return(status: status, body: resource.is_a?(String) || resource.blank? ? resource : resource.to_json)
38
- end
39
-
40
23
  before do
41
24
  @expected_resources = { data: [{ id: 1257, title: 'Hello' },
42
25
  { id: 33, title: 'World' },
@@ -65,7 +48,7 @@ RSpec.describe ApiResource::Resource do
65
48
 
66
49
  context '::find' do
67
50
  let(:blog_attrs) { { id: 1257, title: 'Hello' } }
68
- let(:extra_params) { { foo: 3, bar: 'baz' }}
51
+ let(:extra_params) { { foo: 3, bar: 'baz' } }
69
52
 
70
53
  def check_found_resource(returned_data, extra_params={})
71
54
  resource_id = blog_attrs[:id]
@@ -77,7 +60,7 @@ RSpec.describe ApiResource::Resource do
77
60
 
78
61
  it 'creates resource from data rooted json' do
79
62
  check_found_resource(data: blog_attrs)
80
- check_found_resource({data: blog_attrs}, extra_params)
63
+ check_found_resource({ data: blog_attrs }, extra_params)
81
64
  end
82
65
 
83
66
  it 'creates resource from un-rooted json' do
@@ -96,20 +79,10 @@ RSpec.describe ApiResource::Resource do
96
79
  end
97
80
 
98
81
  context '::where' do
99
-
82
+ let(:query_params) { { title: 'hello world', tags: ['hello', 'first', 'greeting'] } }
100
83
  it 'fetches resourced filtered by query string with GET' do
101
- req(:get, '/blogs?title=hello+world&tags%5B%5D=hello&tags%5B%5D=first&tags%5B%5D=greeting', @expected_resources)
102
- result = BlogApi::Blog.where(title: 'hello world', tags: ['hello', 'first', 'greeting'])
103
- check_returned_array(BlogApi::Blog, @expected_resources, result)
104
- end
105
-
106
- it 'fetches resources filtered by query string with POST' do
107
- stub_request(:post, "#{BlogApi::Blog.base_url}/blogs").
108
- with(headers: { 'Accept' => 'application/json', 'Content-Type' => 'application/x-www-form-urlencoded' },
109
- body: 'title=hello%20world&tags[]=hello&tags[]=first&tags[]=greeting').
110
- to_return(status: 200, body: @expected_resources.to_json)
111
-
112
- result = BlogApi::Blog.where({ title: 'hello world', tags: ['hello', 'first', 'greeting'] }, :post)
84
+ req(:get, "/blogs?#{query_params.to_param}", @expected_resources)
85
+ result = BlogApi::Blog.where(query_params)
113
86
  check_returned_array(BlogApi::Blog, @expected_resources, result)
114
87
  end
115
88
 
@@ -241,7 +214,7 @@ RSpec.describe ApiResource::Resource do
241
214
  user_id = 'ux345'
242
215
 
243
216
  stub = req(:post, "/users/#{user_id}/blogs", expected_value, 201, blog_attrs.except(:id))
244
- returned = blog.by_users(user_id, &:save!)
217
+ returned = blog.by_user(user_id).save!
245
218
  check_returned_object(BlogApi::Blog, expected_value, blog)
246
219
  expect(returned).to eq(blog)
247
220
  expect(blog.id).to eq(blog_id)
@@ -253,7 +226,7 @@ RSpec.describe ApiResource::Resource do
253
226
  user_id = 'ux345'
254
227
 
255
228
  stub = req(:put, "/users/#{user_id}/blogs/#{blog_id}", nil, 204, blog_attrs.except(:id))
256
- returned = blog.by_users(user_id, &:save!)
229
+ returned = blog.by_user(user_id).save!
257
230
  expect(returned).to eq(blog)
258
231
  expect(blog.id).to eq(blog_id)
259
232
  expect(stub).to have_been_requested
@@ -285,7 +258,7 @@ RSpec.describe ApiResource::Resource do
285
258
  end
286
259
 
287
260
  let(:sign_up_data) { { email: 'user@example.com', password: 'pass', password_confirmation: 'pass', name: 'Joe' } }
288
- let (:sign_up) { SignUp.new(sign_up_data) }
261
+ let(:sign_up) { SignUp.new(sign_up_data) }
289
262
 
290
263
  before do
291
264
 
data/spec/spec_helper.rb CHANGED
@@ -86,3 +86,23 @@ RSpec.configure do |config|
86
86
  # as the one that triggered the failure.
87
87
  Kernel.srand config.seed
88
88
  end
89
+
90
+ def check_returned_array(type, expected, actual)
91
+ expect(actual).to be_a Enumerable
92
+ actual.each { |e| expect(e).to be_a type }
93
+ expect(actual.map { |e| e.attributes }).to match ((expected.is_a?(Hash) && expected[:data]) || expected)
94
+ end
95
+
96
+ def check_returned_object(type, expected, actual, *except)
97
+ expect(actual).to be_a(type)
98
+ expect(actual.try(:attributes) || actual).to match((expected[:data] || expected).except(*except))
99
+ end
100
+
101
+ def req(method, path, returned_resource, status=200, params=nil)
102
+ response_body = returned_resource.is_a?(String) || returned_resource.blank? ?
103
+ returned_resource :
104
+ returned_resource.to_json
105
+ stub_request(method, "#{BlogApi::Resource.base_url}#{path}").
106
+ with(headers: { 'Accept' => 'application/json' }, body: params).
107
+ to_return(status: status, body: response_body)
108
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: api-resource
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chaker Nakhli
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-10 00:00:00.000000000 Z
11
+ date: 2015-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: simple-hmac