acfs 0.42.0 → 0.43.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.
Files changed (93) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/README.md +8 -9
  4. data/acfs.gemspec +3 -3
  5. data/lib/acfs.rb +0 -2
  6. data/lib/acfs/adapter/base.rb +0 -2
  7. data/lib/acfs/adapter/typhoeus.rb +6 -9
  8. data/lib/acfs/collection.rb +3 -3
  9. data/lib/acfs/collections/paginatable.rb +16 -16
  10. data/lib/acfs/configuration.rb +3 -5
  11. data/lib/acfs/errors.rb +8 -7
  12. data/lib/acfs/global.rb +1 -1
  13. data/lib/acfs/location.rb +11 -11
  14. data/lib/acfs/middleware/base.rb +1 -2
  15. data/lib/acfs/middleware/json.rb +0 -1
  16. data/lib/acfs/middleware/logger.rb +0 -2
  17. data/lib/acfs/middleware/print.rb +0 -2
  18. data/lib/acfs/middleware/serializer.rb +3 -6
  19. data/lib/acfs/operation.rb +3 -4
  20. data/lib/acfs/request.rb +2 -3
  21. data/lib/acfs/request/callbacks.rb +2 -3
  22. data/lib/acfs/resource.rb +34 -5
  23. data/lib/acfs/{model → resource}/attributes.rb +70 -46
  24. data/lib/acfs/{model → resource}/attributes/base.rb +10 -6
  25. data/lib/acfs/resource/attributes/boolean.rb +33 -0
  26. data/lib/acfs/resource/attributes/date_time.rb +32 -0
  27. data/lib/acfs/{model → resource}/attributes/dict.rb +1 -3
  28. data/lib/acfs/{model → resource}/attributes/float.rb +3 -6
  29. data/lib/acfs/{model → resource}/attributes/integer.rb +3 -6
  30. data/lib/acfs/{model → resource}/attributes/list.rb +2 -5
  31. data/lib/acfs/{model → resource}/attributes/string.rb +4 -6
  32. data/lib/acfs/{model → resource}/attributes/uuid.rb +18 -8
  33. data/lib/acfs/resource/dirty.rb +47 -0
  34. data/lib/acfs/{model → resource}/initialization.rb +8 -10
  35. data/lib/acfs/{model → resource}/loadable.rb +3 -4
  36. data/lib/acfs/{model → resource}/locatable.rb +22 -23
  37. data/lib/acfs/{model → resource}/operational.rb +2 -3
  38. data/lib/acfs/resource/persistence.rb +257 -0
  39. data/lib/acfs/{model → resource}/query_methods.rb +81 -66
  40. data/lib/acfs/{model → resource}/service.rb +10 -9
  41. data/lib/acfs/resource/validation.rb +28 -0
  42. data/lib/acfs/response.rb +1 -2
  43. data/lib/acfs/response/formats.rb +1 -2
  44. data/lib/acfs/response/status.rb +3 -5
  45. data/lib/acfs/runner.rb +4 -5
  46. data/lib/acfs/service.rb +4 -6
  47. data/lib/acfs/service/middleware.rb +1 -3
  48. data/lib/acfs/singleton_resource.rb +11 -24
  49. data/lib/acfs/stub.rb +30 -22
  50. data/lib/acfs/util.rb +1 -1
  51. data/lib/acfs/version.rb +4 -2
  52. data/spec/acfs/adapter/typhoeus_spec.rb +4 -4
  53. data/spec/acfs/collection_spec.rb +33 -33
  54. data/spec/acfs/configuration_spec.rb +0 -1
  55. data/spec/acfs/global_spec.rb +3 -3
  56. data/spec/acfs/middleware/json_spec.rb +2 -2
  57. data/spec/acfs/middleware/msgpack_spec.rb +4 -4
  58. data/spec/acfs/request/callbacks_spec.rb +8 -8
  59. data/spec/acfs/request_spec.rb +5 -5
  60. data/spec/acfs/{model → resource}/attributes/boolean_spec.rb +2 -2
  61. data/spec/acfs/{model → resource}/attributes/date_time_spec.rb +7 -7
  62. data/spec/acfs/{model → resource}/attributes/dict_spec.rb +6 -6
  63. data/spec/acfs/{model → resource}/attributes/float_spec.rb +3 -3
  64. data/spec/acfs/{model → resource}/attributes/list_spec.rb +5 -5
  65. data/spec/acfs/{model → resource}/attributes/uuid_spec.rb +6 -6
  66. data/spec/acfs/{model → resource}/attributes_spec.rb +31 -17
  67. data/spec/acfs/{model → resource}/dirty_spec.rb +7 -5
  68. data/spec/acfs/{model → resource}/initialization_spec.rb +7 -7
  69. data/spec/acfs/{model → resource}/loadable_spec.rb +4 -3
  70. data/spec/acfs/{model → resource}/locatable_spec.rb +24 -14
  71. data/spec/acfs/{model → resource}/persistance_spec.rb +34 -34
  72. data/spec/acfs/{model → resource}/query_methods_spec.rb +171 -130
  73. data/spec/acfs/{model → resource}/validation_spec.rb +5 -6
  74. data/spec/acfs/response/formats_spec.rb +1 -1
  75. data/spec/acfs/response/status_spec.rb +1 -1
  76. data/spec/acfs/runner_spec.rb +2 -3
  77. data/spec/acfs/service/middleware_spec.rb +1 -1
  78. data/spec/acfs/service_spec.rb +3 -5
  79. data/spec/acfs/singleton_resource_spec.rb +3 -3
  80. data/spec/acfs/stub_spec.rb +52 -24
  81. data/spec/acfs_spec.rb +22 -19
  82. data/spec/spec_helper.rb +1 -1
  83. data/spec/support/hash.rb +9 -0
  84. data/spec/support/service.rb +4 -7
  85. data/spec/support/shared/find_callbacks.rb +7 -7
  86. metadata +52 -52
  87. data/lib/acfs/model.rb +0 -43
  88. data/lib/acfs/model/attributes/boolean.rb +0 -38
  89. data/lib/acfs/model/attributes/date_time.rb +0 -30
  90. data/lib/acfs/model/dirty.rb +0 -49
  91. data/lib/acfs/model/persistence.rb +0 -243
  92. data/lib/acfs/model/relations.rb +0 -10
  93. data/lib/acfs/model/validation.rb +0 -30
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Acfs::Model::Validation do
3
+ describe Acfs::Resource::Validation do
4
4
  let(:params) { {name: 'john smith', age: 24} }
5
5
  let(:model) { MyUserWithValidations.new params }
6
6
 
@@ -23,7 +23,7 @@ describe Acfs::Model::Validation do
23
23
  after { Acfs::Stub.disable }
24
24
 
25
25
  before do
26
- Acfs::Stub.resource MyUser, :create, with: {}, return: {errors: {name: ['can\'t be blank']}}, raise: 422
26
+ Acfs::Stub.resource MyUser, :create, return: {errors: {name: ['can\'t be blank']}}, raise: 422
27
27
  end
28
28
 
29
29
  let(:params) { {} }
@@ -34,7 +34,7 @@ describe Acfs::Model::Validation do
34
34
 
35
35
  it 'should not override errors' do
36
36
  subject.valid?
37
- expect(subject.errors.to_hash).to eq({name: ['can\'t be blank']})
37
+ expect(subject.errors.to_hash).to eq(name: ['can\'t be blank'])
38
38
  end
39
39
  end
40
40
  end
@@ -73,7 +73,7 @@ describe Acfs::Model::Validation do
73
73
  let(:resource) { MyUser.create params }
74
74
  subject { resource }
75
75
 
76
- its(:errors) { expect(subject.errors.to_hash).to eq({name: ['can\'t be blank']}) }
76
+ its(:errors) { expect(subject.errors.to_hash).to eq(name: ['can\'t be blank']) }
77
77
  end
78
78
  end
79
79
 
@@ -96,7 +96,7 @@ describe Acfs::Model::Validation do
96
96
 
97
97
  context 'on changed resource' do
98
98
  before { model.loaded! }
99
- let(:model) { super().tap { |m| m.id = 1 } }
99
+ let(:model) { super().tap {|m| m.id = 1 } }
100
100
 
101
101
  it 'should validate with `save` context' do
102
102
  expect(model).to receive(:valid?).with(:save).and_call_original
@@ -106,6 +106,5 @@ describe Acfs::Model::Validation do
106
106
  end
107
107
 
108
108
  describe 'validates with context' do
109
-
110
109
  end
111
110
  end
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe Acfs::Response::Formats do
4
4
  let(:status) { 200 }
5
5
  let(:mime_type) { 'application/unknown' }
6
- let(:headers) { { 'Content-Type' => mime_type } }
6
+ let(:headers) { {'Content-Type' => mime_type} }
7
7
  let(:request) { Acfs::Request.new 'fubar' }
8
8
  let(:body) { nil }
9
9
  let(:response) { Acfs::Response.new request, status: status, headers: headers, body: body }
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe Acfs::Response::Status do
4
4
  let(:status) { 200 }
5
5
  let(:mime_type) { 'application/unknown' }
6
- let(:headers) { { 'Content-Type' => mime_type } }
6
+ let(:headers) { {'Content-Type' => mime_type} }
7
7
  let(:request) { Acfs::Request.new 'fubar' }
8
8
  let(:body) { nil }
9
9
  let(:response) { Acfs::Response.new request, status: status, headers: headers, body: body }
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  class NullAdapter < Acfs::Adapter::Base
4
-
5
4
  # Start processing queued requests.
6
5
  #
7
6
  def start
@@ -46,8 +45,8 @@ describe ::Acfs::Runner do
46
45
 
47
46
  describe '#instrumentation' do
48
47
  before do
49
- ::ActiveSupport::Notifications.subscribe /^acfs\.runner/, collector
50
- ::ActiveSupport::Notifications.subscribe /^acfs\.operation/, collector2
48
+ ::ActiveSupport::Notifications.subscribe(/^acfs\.runner/, collector)
49
+ ::ActiveSupport::Notifications.subscribe(/^acfs\.operation/, collector2)
51
50
  end
52
51
 
53
52
  describe '#process' do
@@ -10,7 +10,7 @@ describe Acfs::Service::Middleware do
10
10
  let(:middleware) { TestMiddleware }
11
11
 
12
12
  describe '.use' do
13
- let(:options) { { abc: 'cde' } }
13
+ let(:options) { {abc: 'cde'} }
14
14
 
15
15
  it 'should add middleware to list' do
16
16
  srv_class.use middleware
@@ -10,7 +10,7 @@ describe Acfs::Service do
10
10
  end
11
11
 
12
12
  describe '#initialize' do
13
- let(:options) { { path: 'abc', key: 'value' } }
13
+ let(:options) { {path: 'abc', key: 'value'} }
14
14
 
15
15
  it 'should set options' do
16
16
  expect(service.options).to eq(options)
@@ -19,14 +19,14 @@ describe Acfs::Service do
19
19
 
20
20
  describe '#location' do
21
21
  let(:resource) { Class.new }
22
- before { allow(resource).to receive(:location_default_path, &proc{|a, p| p}) }
22
+ before { allow(resource).to receive(:location_default_path, &proc{|_a, p| p}) }
23
23
 
24
24
  it 'should extract resource path name from given class' do
25
25
  expect(service.location(resource).to_s).to eq('/classes')
26
26
  end
27
27
 
28
28
  context 'with path options' do
29
- let(:options) { { path: 'abc' } }
29
+ let(:options) { {path: 'abc'} }
30
30
 
31
31
  it 'should have custom resource path' do
32
32
  expect(service.location(resource).to_s).to eq('/abc')
@@ -35,13 +35,11 @@ describe Acfs::Service do
35
35
  end
36
36
 
37
37
  describe '.base_url' do
38
-
39
38
  before do
40
39
  Acfs::Configuration.current.locate :test, 'http://abc.de/api/v1'
41
40
  end
42
41
 
43
42
  it 'should return configured URI for service' do
44
-
45
43
  expect(srv_class.base_url).to eq('http://abc.de/api/v1')
46
44
  end
47
45
  end
@@ -5,11 +5,11 @@ describe Acfs::SingletonResource do
5
5
 
6
6
  describe '.find' do
7
7
  before do
8
- stub_request(:get, 'http://users.example.org/singles').to_return response({id:1})
8
+ stub_request(:get, 'http://users.example.org/singles')
9
+ .to_return response id: 1
9
10
  end
10
11
 
11
- let(:action) { lambda{|cb| model.find &cb }}
12
+ let(:action) { ->(cb) { model.find(&cb) } }
12
13
  it_should_behave_like 'a query method with multi-callback support'
13
14
  end
14
-
15
15
  end
@@ -14,7 +14,7 @@ describe Acfs::Stub do
14
14
 
15
15
  describe '#called?' do
16
16
  context 'without specified number' do
17
- let!(:operation) { Acfs::Stub.resource MyUser, :read, with: { id: 1 }, return: { id: 1, name: 'John Smith', age: 32 } }
17
+ let!(:operation) { Acfs::Stub.resource MyUser, :read, with: {id: 1}, return: {id: 1, name: 'John Smith', age: 32} }
18
18
 
19
19
  it 'should allow to test if stub was called' do
20
20
  MyUser.find 1
@@ -38,8 +38,8 @@ describe Acfs::Stub do
38
38
  describe '.resource' do
39
39
  context 'with ambiguous stubs' do
40
40
  before do
41
- Acfs::Stub.resource MyUser, :read, with: { id: 1 }, return: { id: 1, name: 'John Smith', age: 32 }
42
- Acfs::Stub.resource MyUser, :read, with: { id: 1 }, raise: :not_found
41
+ Acfs::Stub.resource MyUser, :read, with: {id: 1}, return: {id: 1, name: 'John Smith', age: 32}
42
+ Acfs::Stub.resource MyUser, :read, with: {id: 1}, raise: :not_found
43
43
  end
44
44
 
45
45
  it 'should raise error' do
@@ -51,9 +51,9 @@ describe Acfs::Stub do
51
51
 
52
52
  context 'with read action' do
53
53
  before do
54
- Acfs::Stub.resource MyUser, :read, with: { id: 1 }, return: { id: 1, name: 'John Smith', age: 32 }
55
- Acfs::Stub.resource MyUser, :read, with: { id: 2 }, raise: SpecialCustomError
56
- Acfs::Stub.resource MyUser, :read, with: { id: 3 }, raise: :not_found
54
+ Acfs::Stub.resource MyUser, :read, with: {id: 1}, return: {id: 1, name: 'John Smith', age: 32}
55
+ Acfs::Stub.resource MyUser, :read, with: {id: 2}, raise: SpecialCustomError
56
+ Acfs::Stub.resource MyUser, :read, with: {id: 3}, raise: :not_found
57
57
  end
58
58
 
59
59
  it 'should allow to stub resource reads' do
@@ -81,8 +81,8 @@ describe Acfs::Stub do
81
81
 
82
82
  context 'with type parameter' do
83
83
  before do
84
- Acfs::Stub.resource Computer, :read, with: { id: 1 }, return: { id: 1, type: 'PC' }
85
- Acfs::Stub.resource Computer, :read, with: { id: 2 }, return: { id: 2, type: 'Mac' }
84
+ Acfs::Stub.resource Computer, :read, with: {id: 1}, return: {id: 1, type: 'PC'}
85
+ Acfs::Stub.resource Computer, :read, with: {id: 2}, return: {id: 2, type: 'Mac'}
86
86
  end
87
87
 
88
88
  it 'should create inherited type' do
@@ -99,8 +99,8 @@ describe Acfs::Stub do
99
99
 
100
100
  context 'with create action' do
101
101
  before do
102
- Acfs::Stub.resource Session, :create, with: { ident: 'john@exmaple.org', password: 's3cr3t' }, return: { id: 'longhash', user: 1 }
103
- Acfs::Stub.resource Session, :create, with: lambda { |op| op.data[:ident] == 'john@exmaple.org' && op.data[:password] == 'wrong' }, raise: 422
102
+ Acfs::Stub.resource Session, :create, with: {ident: 'john@exmaple.org', password: 's3cr3t'}, return: {id: 'longhash', user: 1}
103
+ Acfs::Stub.resource Session, :create, with: ->(op) { op.data[:ident] == 'john@exmaple.org' && op.data[:password] == 'wrong' }, raise: 422
104
104
  end
105
105
 
106
106
  it 'should allow stub resource creation' do
@@ -111,16 +111,16 @@ describe Acfs::Stub do
111
111
  end
112
112
 
113
113
  it 'should allow to raise error' do
114
- expect {
114
+ expect do
115
115
  Session.create! ident: 'john@exmaple.org', password: 'wrong'
116
- }.to raise_error(::Acfs::InvalidResource)
116
+ end.to raise_error(::Acfs::InvalidResource)
117
117
  end
118
118
  end
119
119
 
120
120
  context 'with list action' do
121
121
  before do
122
122
  Acfs::Stub.resource MyUser, :list,
123
- return: [{ id: 1, name: 'John Smith', age: 32 }, { id: 2, name: 'Anon', age: 12 }]
123
+ return: [{id: 1, name: 'John Smith', age: 32}, {id: 2, name: 'Anon', age: 12}]
124
124
  end
125
125
 
126
126
  it 'should return collection' do
@@ -158,8 +158,8 @@ describe Acfs::Stub do
158
158
  context 'with header' do
159
159
  before do
160
160
  Acfs::Stub.resource Comment, :list,
161
- return: [{ id: 1, text: 'Foo' }, { id: 2, text: 'Bar' }],
162
- headers: headers
161
+ return: [{id: 1, text: 'Foo'}, {id: 2, text: 'Bar'}],
162
+ headers: headers
163
163
  end
164
164
 
165
165
  let!(:comments) { Comment.all }
@@ -172,9 +172,15 @@ describe Acfs::Stub do
172
172
 
173
173
  context 'with update action' do
174
174
  before do
175
- Acfs::Stub.resource MyUser, :read, with: { id: 1 }, return: { id: 1, name: 'John Smith', age: 32 }
176
- Acfs::Stub.resource MyUser, :update, with: { id: 1, name: 'John Smith', age: 22 }, return: { id: 1, name: 'John Smith', age: 23 }
177
- Acfs::Stub.resource MyUser, :update, with: { id: 1, name: 'John Smith', age: 0 }, raise: 422
175
+ Acfs::Stub.resource MyUser, :read, with: {id: 1}, return: {id: 1, name: 'John Smith', age: 32}
176
+ Acfs::Stub.resource MyUser, :update, with: {id: 1, name: 'John Smith', age: 22}, return: {id: 1, name: 'John Smith', age: 23}
177
+ Acfs::Stub.resource MyUser, :update, with: {id: 1, name: 'John Smith', age: 0}, raise: 422
178
+ end
179
+
180
+ let!(:update_stub) do
181
+ Acfs::Stub.resource MyUser, :update,
182
+ with: {id: 1, name: 'Jane Smith'},
183
+ return: ->(op) { Hash[op.data.map {|k, v| [k, v.to_s.upcase] }] }
178
184
  end
179
185
 
180
186
  it 'should allow stub resource update' do
@@ -194,9 +200,31 @@ describe Acfs::Stub do
194
200
  user.age = 0
195
201
  user.save
196
202
 
197
- expect {
203
+ expect do
198
204
  user.save!
199
- }.to raise_error(::Acfs::InvalidResource)
205
+ end.to raise_error(::Acfs::InvalidResource)
206
+ end
207
+
208
+ it 'should match partial :with' do
209
+ user = MyUser.find 1
210
+ Acfs.run
211
+
212
+ user.age = 5
213
+ user.name = 'Jane Smith'
214
+ user.save!
215
+
216
+ expect(update_stub).to be_called
217
+ end
218
+
219
+ it 'should process response body' do
220
+ user = MyUser.find 1
221
+ Acfs.run
222
+
223
+ user.age = 5
224
+ user.name = 'Jane Smith'
225
+ user.save!
226
+
227
+ expect(user.name).to eq 'JANE SMITH'
200
228
  end
201
229
  end
202
230
 
@@ -206,9 +234,9 @@ describe Acfs::Stub do
206
234
  end
207
235
 
208
236
  it 'should allow to raise error' do
209
- expect {
210
- user = MyUser.create! name: 'John Smith', age: 0
211
- }.to raise_error(::Acfs::InvalidResource)
237
+ expect do
238
+ MyUser.create! name: 'John Smith', age: 0
239
+ end.to raise_error(::Acfs::InvalidResource)
212
240
  end
213
241
  end
214
242
  end
@@ -217,7 +245,7 @@ describe Acfs::Stub do
217
245
  context 'when enabled' do
218
246
  before do
219
247
  Acfs::Stub.allow_requests = true
220
- stub_request(:get, 'http://users.example.org/users/2').to_return response({ id: 2, name: 'John', age: 26 })
248
+ stub_request(:get, 'http://users.example.org/users/2').to_return response(id: 2, name: 'John', age: 26)
221
249
  end
222
250
 
223
251
  it 'should allow real requests' do
@@ -1,19 +1,18 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'Acfs' do
4
-
5
4
  before do
6
- stub_request(:get, 'http://users.example.org/users').to_return response([{ id: 1, name: 'Anon', age: 12 }, { id: 2, name: 'John', age: 26 }])
7
- stub_request(:get, 'http://users.example.org/users/2').to_return response({ id: 2, name: 'John', age: 26 })
8
- stub_request(:get, 'http://users.example.org/users/3').to_return response({ id: 3, name: 'Miraculix', age: 122 })
9
- stub_request(:get, 'http://users.example.org/users/100').to_return response({ id:100, name: 'Jimmy', age: 45 })
10
- stub_request(:get, 'http://users.example.org/users/2/friends').to_return response([{ id: 1, name: 'Anon', age: 12 }])
11
- stub_request(:get, 'http://comments.example.org/comments?user=2').to_return response([{ id: 1, text: 'Comment #1' }, { id: 2, text: 'Comment #2' }])
5
+ stub_request(:get, 'http://users.example.org/users').to_return response([{id: 1, name: 'Anon', age: 12}, {id: 2, name: 'John', age: 26}])
6
+ stub_request(:get, 'http://users.example.org/users/2').to_return response(id: 2, name: 'John', age: 26)
7
+ stub_request(:get, 'http://users.example.org/users/3').to_return response(id: 3, name: 'Miraculix', age: 122)
8
+ stub_request(:get, 'http://users.example.org/users/100').to_return response(id: 100, name: 'Jimmy', age: 45)
9
+ stub_request(:get, 'http://users.example.org/users/2/friends').to_return response([{id: 1, name: 'Anon', age: 12}])
10
+ stub_request(:get, 'http://comments.example.org/comments?user=2').to_return response([{id: 1, text: 'Comment #1'}, {id: 2, text: 'Comment #2'}])
12
11
  end
13
12
 
14
13
  it 'should update single resource synchronously' do
15
14
  stub = stub_request(:put, 'http://users.example.org/users/2')
16
- .to_return { |request| { body: request.body, headers: {'Content-Type' => request.headers['Content-Type']}} }
15
+ .to_return {|request| {body: request.body, headers: {'Content-Type' => request.headers['Content-Type']}} }
17
16
 
18
17
  @user = MyUser.find 2
19
18
  Acfs.run
@@ -34,7 +33,7 @@ describe 'Acfs' do
34
33
  end
35
34
 
36
35
  it 'should create a single resource synchronously' do
37
- stub = stub_request(:post, 'http://users.example.org/sessions').to_return response({id: 'sessionhash', user: 1})
36
+ stub = stub_request(:post, 'http://users.example.org/sessions').to_return response(id: 'sessionhash', user: 1)
38
37
 
39
38
  session = Session.create ident: 'Anon'
40
39
 
@@ -58,11 +57,11 @@ describe 'Acfs' do
58
57
 
59
58
  describe 'singleton' do
60
59
  before do
61
- stub_request(:get, 'http://users.example.org/singles?user_id=5').to_return response({ score: 250, user_id: 5 })
60
+ stub_request(:get, 'http://users.example.org/singles?user_id=5').to_return response(score: 250, user_id: 5)
62
61
  end
63
62
 
64
63
  it 'should create a singleton resource' do
65
- stub = stub_request(:post, 'http://users.example.org/singles').to_return response({ score: 250, user_id: 5 })
64
+ stub = stub_request(:post, 'http://users.example.org/singles').to_return response(score: 250, user_id: 5)
66
65
 
67
66
  @single = Single.new user_id: 5, score: 250
68
67
  expect(@single.new?).to eq true
@@ -83,10 +82,12 @@ describe 'Acfs' do
83
82
  end
84
83
 
85
84
  it 'should update singleton resource' do
86
- stub = stub_request(:put, 'http://users.example.org/singles').to_return { |request| {
85
+ stub = stub_request(:put, 'http://users.example.org/singles').to_return do |request|
86
+ {
87
87
  body: request.body,
88
- headers: { 'Content-Type' => request.headers['Content-Type'] }
89
- } }
88
+ headers: {'Content-Type' => request.headers['Content-Type']}
89
+ }
90
+ end
90
91
 
91
92
  @single = Single.find user_id: 5
92
93
  Acfs.run
@@ -102,10 +103,12 @@ describe 'Acfs' do
102
103
  end
103
104
 
104
105
  it 'should delete singleton resource' do
105
- stub = stub_request(:delete, 'http://users.example.org/singles').to_return { |request| {
106
+ stub = stub_request(:delete, 'http://users.example.org/singles').to_return do |request|
107
+ {
106
108
  body: request.body,
107
- headers: { 'Content-Type' => request.headers['Content-Type'] }
108
- } }
109
+ headers: {'Content-Type' => request.headers['Content-Type']}
110
+ }
111
+ end
109
112
 
110
113
  @single = Single.find user_id: 5
111
114
  Acfs.run
@@ -118,12 +121,12 @@ describe 'Acfs' do
118
121
  end
119
122
 
120
123
  it 'should raise error when calling `all\'' do
121
- expect {Single.all}.to raise_error(NoMethodError)
124
+ expect { Single.all }.to raise_error ::Acfs::UnsupportedOperation
122
125
  end
123
126
  end
124
127
 
125
128
  it 'should load multiple single resources' do
126
- @users = MyUser.find(2, 3, 100) do |users|
129
+ @users = MyUser.find([2, 3, 100]) do |users|
127
130
  # This block should be called only after *all* resources are loaded.
128
131
  @john = users[0]
129
132
  @mirx = users[1]
@@ -13,7 +13,7 @@ Bundler.require
13
13
 
14
14
  require 'acfs'
15
15
 
16
- Dir[File.expand_path('spec/support/**/*.rb')].each {|f| require f}
16
+ Dir[File.expand_path('spec/support/**/*.rb')].each {|f| require f }
17
17
 
18
18
  RSpec.configure do |config|
19
19
  # ## Mock Framework
@@ -0,0 +1,9 @@
1
+ class ActiveSupport::HashWithIndifferentAccess
2
+ def ==(other)
3
+ if other.respond_to? :with_indifferent_access
4
+ super other.with_indifferent_access
5
+ else
6
+ super
7
+ end
8
+ end
9
+ end
@@ -33,7 +33,6 @@ class Profile < Acfs::SingletonResource
33
33
  end
34
34
 
35
35
  class Customer < MyUser
36
-
37
36
  end
38
37
 
39
38
  class MyUserWithValidations < MyUser
@@ -43,9 +42,9 @@ end
43
42
 
44
43
  class Session < Acfs::Resource
45
44
  service UserService, path: {
46
- list: 'users/:user_id/sessions',
47
- delete: 'users/:user_id/sessions/del/:id',
48
- update: nil
45
+ list: 'users/:user_id/sessions',
46
+ delete: 'users/:user_id/sessions/del/:id',
47
+ update: nil
49
48
  }
50
49
 
51
50
  attribute :id, :string
@@ -72,11 +71,9 @@ class Computer < Acfs::Resource
72
71
  end
73
72
 
74
73
  class PC < Computer
75
-
76
74
  end
77
75
 
78
76
  class Mac < Computer
79
-
80
77
  end
81
78
 
82
79
  class Single < Acfs::SingletonResource
@@ -91,4 +88,4 @@ class PathArguments < Acfs::Resource
91
88
 
92
89
  attribute :id, :integer
93
90
  attribute :required_arg, :string
94
- end
91
+ end