acfs 1.6.0 → 1.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.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1 -0
  3. data/README.md +16 -19
  4. data/acfs.gemspec +2 -0
  5. data/lib/acfs/adapter/typhoeus.rb +6 -4
  6. data/lib/acfs/configuration.rb +13 -3
  7. data/lib/acfs/errors.rb +1 -1
  8. data/lib/acfs/global.rb +2 -2
  9. data/lib/acfs/location.rb +1 -1
  10. data/lib/acfs/operation.rb +1 -1
  11. data/lib/acfs/request/callbacks.rb +1 -1
  12. data/lib/acfs/request.rb +1 -1
  13. data/lib/acfs/resource/attributes/uuid.rb +1 -1
  14. data/lib/acfs/resource/locatable.rb +2 -2
  15. data/lib/acfs/resource/query_methods.rb +2 -2
  16. data/lib/acfs/runner.rb +15 -15
  17. data/lib/acfs/stub.rb +34 -29
  18. data/lib/acfs/version.rb +2 -2
  19. data/spec/acfs/adapter/typhoeus_spec.rb +1 -1
  20. data/spec/acfs/collection_spec.rb +66 -41
  21. data/spec/acfs/configuration_spec.rb +22 -12
  22. data/spec/acfs/global_spec.rb +9 -7
  23. data/spec/acfs/middleware/json_spec.rb +8 -8
  24. data/spec/acfs/middleware/{msgpack_spec.rb → message_pack_spec.rb} +6 -6
  25. data/spec/acfs/operation_spec.rb +3 -2
  26. data/spec/acfs/request/callbacks_spec.rb +19 -10
  27. data/spec/acfs/request_spec.rb +15 -19
  28. data/spec/acfs/resource/attributes/boolean_spec.rb +32 -32
  29. data/spec/acfs/resource/attributes/date_time_spec.rb +16 -8
  30. data/spec/acfs/resource/attributes/dict_spec.rb +15 -9
  31. data/spec/acfs/resource/attributes/float_spec.rb +20 -10
  32. data/spec/acfs/resource/attributes/integer_spec.rb +10 -5
  33. data/spec/acfs/resource/attributes/list_spec.rb +13 -8
  34. data/spec/acfs/resource/attributes/uuid_spec.rb +12 -6
  35. data/spec/acfs/resource/attributes_spec.rb +33 -32
  36. data/spec/acfs/resource/dirty_spec.rb +6 -3
  37. data/spec/acfs/resource/initialization_spec.rb +4 -5
  38. data/spec/acfs/resource/loadable_spec.rb +3 -1
  39. data/spec/acfs/resource/locatable_spec.rb +24 -18
  40. data/spec/acfs/resource/{persistance_spec.rb → persistence_spec.rb} +114 -82
  41. data/spec/acfs/resource/query_methods_spec.rb +143 -110
  42. data/spec/acfs/resource/validation_spec.rb +34 -27
  43. data/spec/acfs/response/formats_spec.rb +8 -8
  44. data/spec/acfs/response/status_spec.rb +16 -9
  45. data/spec/acfs/runner_spec.rb +10 -8
  46. data/spec/acfs/service/middleware_spec.rb +3 -3
  47. data/spec/acfs/service_spec.rb +5 -4
  48. data/spec/acfs/singleton_resource_spec.rb +2 -1
  49. data/spec/acfs/stub_spec.rb +57 -53
  50. data/spec/acfs_spec.rb +111 -93
  51. data/spec/spec_helper.rb +1 -1
  52. data/spec/support/response.rb +2 -2
  53. data/spec/support/service.rb +1 -1
  54. data/spec/support/shared/find_callbacks.rb +14 -10
  55. metadata +9 -8
data/spec/acfs_spec.rb CHANGED
@@ -4,57 +4,68 @@ require 'spec_helper'
4
4
 
5
5
  describe 'Acfs' do
6
6
  before do
7
- stub_request(:get, 'http://users.example.org/users').to_return response([{id: 1, name: 'Anon', age: 12}, {id: 2, name: 'John', age: 26}])
8
- stub_request(:get, 'http://users.example.org/users/2').to_return response(id: 2, name: 'John', age: 26)
9
- stub_request(:get, 'http://users.example.org/users/3').to_return response(id: 3, name: 'Miraculix', age: 122)
10
- stub_request(:get, 'http://users.example.org/users/100').to_return response(id: 100, name: 'Jimmy', age: 45)
11
- stub_request(:get, 'http://users.example.org/users/2/friends').to_return response([{id: 1, name: 'Anon', age: 12}])
12
- stub_request(:get, 'http://comments.example.org/comments?user=2').to_return response([{id: 1, text: 'Comment #1'}, {id: 2, text: 'Comment #2'}])
7
+ stub_request(:get, 'http://users.example.org/users')
8
+ .to_return response([{id: 1, name: 'Anon', age: 12}, {id: 2, name: 'John', age: 26}])
9
+
10
+ stub_request(:get, 'http://users.example.org/users/2')
11
+ .to_return response(id: 2, name: 'John', age: 26)
12
+
13
+ stub_request(:get, 'http://users.example.org/users/3')
14
+ .to_return response(id: 3, name: 'Miraculix', age: 122)
15
+
16
+ stub_request(:get, 'http://users.example.org/users/100')
17
+ .to_return response(id: 100, name: 'Jimmy', age: 45)
18
+
19
+ stub_request(:get, 'http://users.example.org/users/2/friends')
20
+ .to_return response([{id: 1, name: 'Anon', age: 12}])
21
+
22
+ stub_request(:get, 'http://comments.example.org/comments?user=2')
23
+ .to_return response([{id: 1, text: 'Comment #1'}, {id: 2, text: 'Comment #2'}])
13
24
  end
14
25
 
15
- it 'should update single resource synchronously' do
26
+ it 'updates single resource synchronously' do
16
27
  stub = stub_request(:put, 'http://users.example.org/users/2')
17
- .to_return {|request| {body: request.body, headers: {'Content-Type' => request.headers['Content-Type']}} }
28
+ .to_return {|request| {body: request.body, headers: {'Content-Type' => request.headers['Content-Type']}} }
18
29
 
19
- @user = MyUser.find 2
30
+ user = MyUser.find 2
20
31
  Acfs.run
21
32
 
22
- expect(@user).to_not be_changed
23
- expect(@user).to be_persisted
33
+ expect(user).not_to be_changed
34
+ expect(user).to be_persisted
24
35
 
25
- @user.name = 'Johnny'
36
+ user.name = 'Johnny'
26
37
 
27
- expect(@user).to be_changed
28
- expect(@user).to be_persisted
38
+ expect(user).to be_changed
39
+ expect(user).to be_persisted
29
40
 
30
- @user.save
41
+ user.save
31
42
 
32
43
  expect(stub).to have_been_requested
33
- expect(@user).to_not be_changed
34
- expect(@user).to be_persisted
44
+ expect(user).not_to be_changed
45
+ expect(user).to be_persisted
35
46
  end
36
47
 
37
- it 'should create a single resource synchronously' do
48
+ it 'creates a single resource synchronously' do
38
49
  stub = stub_request(:post, 'http://users.example.org/sessions').to_return response(id: 'sessionhash', user: 1)
39
50
 
40
51
  session = Session.create ident: 'Anon'
41
52
 
42
53
  expect(stub).to have_been_requested
43
- expect(session.id).to be == 'sessionhash'
44
- expect(session.user).to be == 1
54
+ expect(session.id).to eq 'sessionhash'
55
+ expect(session.user).to eq 1
45
56
  end
46
57
 
47
- it 'should load single resource' do
48
- @user = MyUser.find(2)
58
+ it 'loads single resource' do
59
+ user = MyUser.find(2)
49
60
 
50
- expect(@user).to_not be_loaded
61
+ expect(user).not_to be_loaded
51
62
 
52
63
  Acfs.run
53
64
 
54
- expect(@user).to be_loaded
55
- expect(@user.id).to be == 2
56
- expect(@user.name).to be == 'John'
57
- expect(@user.age).to be == 26
65
+ expect(user).to be_loaded
66
+ expect(user.id).to eq 2
67
+ expect(user.name).to eq 'John'
68
+ expect(user.age).to eq 26
58
69
  end
59
70
 
60
71
  describe 'singleton' do
@@ -62,144 +73,151 @@ describe 'Acfs' do
62
73
  stub_request(:get, 'http://users.example.org/singles?user_id=5').to_return response(score: 250, user_id: 5)
63
74
  end
64
75
 
65
- it 'should create a singleton resource' do
76
+ it 'creates a singleton resource' do
66
77
  stub = stub_request(:post, 'http://users.example.org/singles').to_return response(score: 250, user_id: 5)
67
78
 
68
- @single = Single.new user_id: 5, score: 250
69
- expect(@single.new?).to eq true
79
+ single = Single.new user_id: 5, score: 250
80
+ expect(single.new?).to eq true
70
81
 
71
- @single.save
82
+ single.save
72
83
  expect(stub).to have_been_requested
73
84
 
74
- expect(@single.new?).to eq false
75
- expect(@single.user_id).to eq 5
76
- expect(@single.score).to eq 250
85
+ expect(single.new?).to eq false
86
+ expect(single.user_id).to eq 5
87
+ expect(single.score).to eq 250
77
88
  end
78
89
 
79
- it 'should load singleton resource' do
80
- @single = Single.find user_id: 5
90
+ it 'loads singleton resource' do
91
+ single = Single.find user_id: 5
81
92
  Acfs.run
82
93
 
83
- expect(@single.score).to eq 250
94
+ expect(single.score).to eq 250
84
95
  end
85
96
 
86
- it 'should update singleton resource' do
97
+ it 'updates singleton resource' do
87
98
  stub = stub_request(:put, 'http://users.example.org/singles').to_return do |request|
88
99
  {
89
100
  body: request.body,
90
- headers: {'Content-Type' => request.headers['Content-Type']}
101
+ headers: {'Content-Type' => request.headers['Content-Type']},
91
102
  }
92
103
  end
93
104
 
94
- @single = Single.find user_id: 5
105
+ single = Single.find user_id: 5
95
106
  Acfs.run
96
107
 
97
- expect(@single.score).to eq 250
108
+ expect(single.score).to eq 250
98
109
 
99
- @single.score = 300
100
- @single.save
110
+ single.score = 300
111
+ single.save
101
112
 
102
113
  expect(stub).to have_been_requested
103
114
 
104
- expect(@single.score).to eq 300
115
+ expect(single.score).to eq 300
105
116
  end
106
117
 
107
- it 'should delete singleton resource' do
118
+ it 'deletes singleton resource' do
108
119
  stub = stub_request(:delete, 'http://users.example.org/singles').to_return do |request|
109
120
  {
110
121
  body: request.body,
111
- headers: {'Content-Type' => request.headers['Content-Type']}
122
+ headers: {'Content-Type' => request.headers['Content-Type']},
112
123
  }
113
124
  end
114
125
 
115
- @single = Single.find user_id: 5
126
+ single = Single.find user_id: 5
116
127
  Acfs.run
117
128
 
118
- expect(@single.new?).to eq false
129
+ expect(single.new?).to eq false
119
130
 
120
- @single.delete
131
+ single.delete
121
132
 
122
133
  expect(stub).to have_been_requested
123
134
  end
124
135
 
125
- it 'should raise error when calling `all\'' do
136
+ it 'raises error when calling .all' do
126
137
  expect { Single.all }.to raise_error ::Acfs::UnsupportedOperation
127
138
  end
128
139
  end
129
140
 
130
- it 'should load multiple single resources' do
131
- @users = MyUser.find([2, 3, 100]) do |users|
141
+ it 'loads multiple single resources' do
142
+ john = nil
143
+ mirx = nil
144
+ jimy = nil
145
+
146
+ users = MyUser.find([2, 3, 100]) do |users|
132
147
  # This block should be called only after *all* resources are loaded.
133
- @john = users[0]
134
- @mirx = users[1]
135
- @jimy = users[2]
148
+ john = users[0]
149
+ mirx = users[1]
150
+ jimy = users[2]
136
151
  end
137
152
 
138
- expect(@users).to_not be_loaded
153
+ expect(users).not_to be_loaded
139
154
 
140
155
  Acfs.run
141
156
 
142
- expect(@users).to be_loaded
143
- expect(@users).to have(3).items
157
+ expect(users).to be_loaded
158
+ expect(users).to have(3).items
144
159
 
145
- expect(@users[0].id).to be == 2
146
- expect(@users[0].name).to be == 'John'
147
- expect(@users[0].age).to be == 26
148
- expect(@users[0]).to be == @john
160
+ expect(users[0].id).to eq 2
161
+ expect(users[0].name).to eq 'John'
162
+ expect(users[0].age).to eq 26
163
+ expect(users[0]).to eq john
149
164
 
150
- expect(@users[1].id).to be == 3
151
- expect(@users[1].name).to be == 'Miraculix'
152
- expect(@users[1].age).to be == 122
153
- expect(@users[1]).to be == @mirx
165
+ expect(users[1].id).to eq 3
166
+ expect(users[1].name).to eq 'Miraculix'
167
+ expect(users[1].age).to eq 122
168
+ expect(users[1]).to eq mirx
154
169
 
155
- expect(@users[2].id).to be == 100
156
- expect(@users[2].name).to be == 'Jimmy'
157
- expect(@users[2].age).to be == 45
158
- expect(@users[2]).to be == @jimy
170
+ expect(users[2].id).to eq 100
171
+ expect(users[2].name).to eq 'Jimmy'
172
+ expect(users[2].age).to eq 45
173
+ expect(users[2]).to eq jimy
159
174
  end
160
175
 
161
- it 'should load multiple resources' do
162
- @users = MyUser.all
176
+ it 'loads multiple resources' do
177
+ users = MyUser.all
163
178
 
164
- expect(@users).to_not be_loaded
179
+ expect(users).not_to be_loaded
165
180
 
166
181
  Acfs.run
167
182
 
168
- expect(@users).to be_loaded
169
- expect(@users).to have(2).items
170
- expect(@users[0].name).to be == 'Anon'
171
- expect(@users[0].age).to be == 12
172
- expect(@users[1].name).to be == 'John'
173
- expect(@users[1].age).to be == 26
183
+ expect(users).to be_loaded
184
+ expect(users).to have(2).items
185
+ expect(users[0].name).to eq 'Anon'
186
+ expect(users[0].age).to eq 12
187
+ expect(users[1].name).to eq 'John'
188
+ expect(users[1].age).to eq 26
174
189
  end
175
190
 
176
- it 'should load associated resources' do
191
+ it 'loads associated resources' do
177
192
  pending 'TODO: Implement high level feature'
193
+ friends = nil
178
194
 
179
- @user = MyUser.find(2) do |user|
180
- @friends = user.friends.all
195
+ user = MyUser.find(2) do |user|
196
+ friends = user.friends.all
181
197
  end
182
198
 
183
199
  Acfs.run
184
200
 
185
- expect(@user.name).to be == 'John'
186
- expect(@user.age).to be == 26
201
+ expect(user.name).to eq 'John'
202
+ expect(user.age).to eq 26
187
203
 
188
- expect(@friends).to have(1).items
204
+ expect(friends).to have(1).items
189
205
  end
190
206
 
191
- it 'should load associated resources from different service' do
192
- @user = MyUser.find 2 do |user|
193
- expect(user.id).to be == 2
194
- @comments = Comment.where({user: user.id})
207
+ it 'loads associated resources from different service' do
208
+ comments = nil
209
+
210
+ user = MyUser.find 2 do |user|
211
+ expect(user.id).to eq 2
212
+ comments = Comment.where({user: user.id})
195
213
  end
196
214
 
197
215
  Acfs.run
198
216
 
199
- expect(@user.id).to be == 2
200
- expect(@user.name).to be == 'John'
201
- expect(@user.age).to be == 26
217
+ expect(user.id).to eq 2
218
+ expect(user.name).to eq 'John'
219
+ expect(user.age).to eq 26
202
220
 
203
- expect(@comments).to have(2).items
221
+ expect(comments).to have(2).items
204
222
  end
205
223
  end
data/spec/spec_helper.rb CHANGED
@@ -35,7 +35,7 @@ RSpec.configure do |config|
35
35
  # --seed 1234
36
36
  config.order = 'random'
37
37
 
38
- config.before :each do
38
+ config.before do
39
39
  Acfs.runner.clear
40
40
  Acfs::Stub.clear
41
41
  end
@@ -4,9 +4,9 @@ require 'json'
4
4
 
5
5
  def response(data = nil, opts = {})
6
6
  if data
7
- opts.merge! body: JSON.dump(data)
7
+ opts[:body] = JSON.dump(data)
8
8
  opts[:headers] ||= {}
9
- opts[:headers].merge! 'Content-Type' => 'application/json'
9
+ opts[:headers]['Content-Type'] = 'application/json'
10
10
  end
11
11
  opts
12
12
  end
@@ -45,7 +45,7 @@ class Session < Acfs::Resource
45
45
  service UserService, path: {
46
46
  list: 'users/:user_id/sessions',
47
47
  delete: 'users/:user_id/sessions/del/:id',
48
- update: nil
48
+ update: nil,
49
49
  }
50
50
 
51
51
  attribute :id, :string
@@ -3,14 +3,14 @@
3
3
  shared_examples 'a query method with multi-callback support' do
4
4
  let(:cb) { Proc.new }
5
5
 
6
- it 'should invoke callback' do
6
+ it 'invokes callback' do
7
7
  expect do |cb|
8
8
  action.call cb
9
9
  Acfs.run
10
10
  end.to yield_with_args
11
11
  end
12
12
 
13
- it 'should invoke multiple callbacks' do
13
+ it 'invokes multiple callbacks' do
14
14
  expect do |cb|
15
15
  object = action.call cb
16
16
  Acfs.add_callback object, &cb
@@ -19,31 +19,35 @@ shared_examples 'a query method with multi-callback support' do
19
19
  end
20
20
 
21
21
  describe 'callback' do
22
- it 'should be invoked with resource' do
22
+ it 'is invoked with resource' do
23
23
  proc = proc {}
24
+ object = nil
25
+
24
26
  expect(proc).to receive(:call) do |res|
25
- expect(res).to equal @object
27
+ expect(res).to equal object
26
28
  expect(res).to be_loaded
27
29
  end
28
30
 
29
- @object = action.call proc
31
+ object = action.call proc
30
32
  Acfs.run
31
33
  end
32
34
 
33
- it 'should invoke multiple callback with loaded resource' do
35
+ it 'invokes multiple callback with loaded resource' do
34
36
  proc1 = proc {}
35
37
  proc2 = proc {}
38
+ object = nil
39
+
36
40
  expect(proc1).to receive(:call) do |user|
37
- expect(user).to equal @object
41
+ expect(user).to equal object
38
42
  expect(user).to be_loaded
39
43
  end
40
44
  expect(proc2).to receive(:call) do |user|
41
- expect(user).to equal @object
45
+ expect(user).to equal object
42
46
  expect(user).to be_loaded
43
47
  end
44
48
 
45
- @object = action.call proc1
46
- Acfs.add_callback(@object, &proc2)
49
+ object = action.call proc1
50
+ Acfs.add_callback(object, &proc2)
47
51
  Acfs.run
48
52
  end
49
53
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acfs
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Graichen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-07 00:00:00.000000000 Z
11
+ date: 2022-01-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack
@@ -176,7 +176,7 @@ files:
176
176
  - spec/acfs/global_spec.rb
177
177
  - spec/acfs/location_spec.rb
178
178
  - spec/acfs/middleware/json_spec.rb
179
- - spec/acfs/middleware/msgpack_spec.rb
179
+ - spec/acfs/middleware/message_pack_spec.rb
180
180
  - spec/acfs/operation_spec.rb
181
181
  - spec/acfs/request/callbacks_spec.rb
182
182
  - spec/acfs/request_spec.rb
@@ -192,7 +192,7 @@ files:
192
192
  - spec/acfs/resource/initialization_spec.rb
193
193
  - spec/acfs/resource/loadable_spec.rb
194
194
  - spec/acfs/resource/locatable_spec.rb
195
- - spec/acfs/resource/persistance_spec.rb
195
+ - spec/acfs/resource/persistence_spec.rb
196
196
  - spec/acfs/resource/query_methods_spec.rb
197
197
  - spec/acfs/resource/validation_spec.rb
198
198
  - spec/acfs/response/formats_spec.rb
@@ -212,7 +212,8 @@ files:
212
212
  homepage: https://github.com/jgraichen/acfs
213
213
  licenses:
214
214
  - MIT
215
- metadata: {}
215
+ metadata:
216
+ rubygems_mfa_required: 'true'
216
217
  post_install_message:
217
218
  rdoc_options: []
218
219
  require_paths:
@@ -228,7 +229,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
228
229
  - !ruby/object:Gem::Version
229
230
  version: '0'
230
231
  requirements: []
231
- rubygems_version: 3.2.4
232
+ rubygems_version: 3.3.3
232
233
  signing_key:
233
234
  specification_version: 4
234
235
  summary: An abstract API base client for service oriented application.
@@ -239,7 +240,7 @@ test_files:
239
240
  - spec/acfs/global_spec.rb
240
241
  - spec/acfs/location_spec.rb
241
242
  - spec/acfs/middleware/json_spec.rb
242
- - spec/acfs/middleware/msgpack_spec.rb
243
+ - spec/acfs/middleware/message_pack_spec.rb
243
244
  - spec/acfs/operation_spec.rb
244
245
  - spec/acfs/request/callbacks_spec.rb
245
246
  - spec/acfs/request_spec.rb
@@ -255,7 +256,7 @@ test_files:
255
256
  - spec/acfs/resource/initialization_spec.rb
256
257
  - spec/acfs/resource/loadable_spec.rb
257
258
  - spec/acfs/resource/locatable_spec.rb
258
- - spec/acfs/resource/persistance_spec.rb
259
+ - spec/acfs/resource/persistence_spec.rb
259
260
  - spec/acfs/resource/query_methods_spec.rb
260
261
  - spec/acfs/resource/validation_spec.rb
261
262
  - spec/acfs/response/formats_spec.rb