acfs 0.42.0 → 0.43.0

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