acfs 1.3.1 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +41 -1
  3. data/README.md +10 -25
  4. data/acfs.gemspec +20 -15
  5. data/lib/acfs.rb +2 -0
  6. data/lib/acfs/adapter/base.rb +6 -8
  7. data/lib/acfs/adapter/typhoeus.rb +25 -6
  8. data/lib/acfs/collection.rb +2 -1
  9. data/lib/acfs/collections/paginatable.rb +4 -3
  10. data/lib/acfs/configuration.rb +14 -7
  11. data/lib/acfs/errors.rb +60 -19
  12. data/lib/acfs/global.rb +12 -2
  13. data/lib/acfs/location.rb +9 -5
  14. data/lib/acfs/middleware/base.rb +5 -1
  15. data/lib/acfs/middleware/json.rb +5 -3
  16. data/lib/acfs/middleware/logger.rb +2 -0
  17. data/lib/acfs/middleware/msgpack.rb +2 -0
  18. data/lib/acfs/middleware/print.rb +2 -0
  19. data/lib/acfs/middleware/serializer.rb +2 -0
  20. data/lib/acfs/operation.rb +20 -3
  21. data/lib/acfs/request.rb +5 -1
  22. data/lib/acfs/request/callbacks.rb +5 -1
  23. data/lib/acfs/resource.rb +2 -0
  24. data/lib/acfs/resource/attributes.rb +5 -2
  25. data/lib/acfs/resource/attributes/base.rb +2 -1
  26. data/lib/acfs/resource/attributes/boolean.rb +2 -0
  27. data/lib/acfs/resource/attributes/date_time.rb +2 -1
  28. data/lib/acfs/resource/attributes/dict.rb +2 -0
  29. data/lib/acfs/resource/attributes/float.rb +5 -3
  30. data/lib/acfs/resource/attributes/integer.rb +2 -0
  31. data/lib/acfs/resource/attributes/list.rb +2 -0
  32. data/lib/acfs/resource/attributes/string.rb +2 -0
  33. data/lib/acfs/resource/attributes/uuid.rb +4 -3
  34. data/lib/acfs/resource/dirty.rb +2 -0
  35. data/lib/acfs/resource/initialization.rb +2 -0
  36. data/lib/acfs/resource/loadable.rb +2 -0
  37. data/lib/acfs/resource/locatable.rb +10 -6
  38. data/lib/acfs/resource/operational.rb +2 -1
  39. data/lib/acfs/resource/persistence.rb +7 -6
  40. data/lib/acfs/resource/query_methods.rb +6 -4
  41. data/lib/acfs/resource/service.rb +3 -1
  42. data/lib/acfs/resource/validation.rb +3 -1
  43. data/lib/acfs/response.rb +2 -0
  44. data/lib/acfs/response/formats.rb +2 -0
  45. data/lib/acfs/response/status.rb +3 -1
  46. data/lib/acfs/rspec.rb +2 -0
  47. data/lib/acfs/runner.rb +6 -1
  48. data/lib/acfs/service.rb +24 -13
  49. data/lib/acfs/service/middleware.rb +2 -0
  50. data/lib/acfs/service/middleware/stack.rb +5 -3
  51. data/lib/acfs/singleton_resource.rb +4 -2
  52. data/lib/acfs/stub.rb +32 -11
  53. data/lib/acfs/util.rb +2 -0
  54. data/lib/acfs/version.rb +4 -2
  55. data/lib/acfs/yard.rb +1 -0
  56. data/spec/acfs/adapter/typhoeus_spec.rb +30 -3
  57. data/spec/acfs/collection_spec.rb +7 -5
  58. data/spec/acfs/configuration_spec.rb +2 -0
  59. data/spec/acfs/global_spec.rb +50 -3
  60. data/spec/acfs/location_spec.rb +2 -0
  61. data/spec/acfs/middleware/json_spec.rb +3 -1
  62. data/spec/acfs/middleware/msgpack_spec.rb +2 -0
  63. data/spec/acfs/operation_spec.rb +2 -0
  64. data/spec/acfs/request/callbacks_spec.rb +2 -0
  65. data/spec/acfs/request_spec.rb +3 -1
  66. data/spec/acfs/resource/attributes/boolean_spec.rb +2 -0
  67. data/spec/acfs/resource/attributes/date_time_spec.rb +2 -0
  68. data/spec/acfs/resource/attributes/dict_spec.rb +4 -2
  69. data/spec/acfs/resource/attributes/float_spec.rb +3 -1
  70. data/spec/acfs/resource/attributes/integer_spec.rb +2 -0
  71. data/spec/acfs/resource/attributes/list_spec.rb +5 -3
  72. data/spec/acfs/resource/attributes/uuid_spec.rb +2 -0
  73. data/spec/acfs/resource/attributes_spec.rb +8 -8
  74. data/spec/acfs/resource/dirty_spec.rb +2 -0
  75. data/spec/acfs/resource/initialization_spec.rb +8 -2
  76. data/spec/acfs/resource/loadable_spec.rb +2 -0
  77. data/spec/acfs/resource/locatable_spec.rb +2 -0
  78. data/spec/acfs/resource/persistance_spec.rb +10 -4
  79. data/spec/acfs/resource/query_methods_spec.rb +24 -17
  80. data/spec/acfs/resource/validation_spec.rb +2 -0
  81. data/spec/acfs/response/formats_spec.rb +3 -1
  82. data/spec/acfs/response/status_spec.rb +2 -0
  83. data/spec/acfs/runner_spec.rb +6 -8
  84. data/spec/acfs/service/middleware_spec.rb +2 -0
  85. data/spec/acfs/service_spec.rb +3 -1
  86. data/spec/acfs/singleton_resource_spec.rb +2 -0
  87. data/spec/acfs/stub_spec.rb +2 -0
  88. data/spec/acfs_spec.rb +2 -0
  89. data/spec/spec_helper.rb +3 -1
  90. data/spec/support/hash.rb +2 -0
  91. data/spec/support/response.rb +2 -0
  92. data/spec/support/service.rb +1 -0
  93. data/spec/support/shared/find_callbacks.rb +2 -0
  94. metadata +13 -28
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Acfs::Resource::QueryMethods do
@@ -158,7 +160,8 @@ describe Acfs::Resource::QueryMethods do
158
160
  .to_return response [
159
161
  {id: 1, type: 'PC'},
160
162
  {id: 2, type: 'Computer'},
161
- {id: 3, type: 'Mac'}]
163
+ {id: 3, type: 'Mac'}
164
+ ]
162
165
  end
163
166
 
164
167
  it 'should invoke multiple callback after all models are loaded' do
@@ -209,7 +212,8 @@ describe Acfs::Resource::QueryMethods do
209
212
  .to_return response [
210
213
  {id: 1, type: 'MyUser'},
211
214
  {id: 2, type: 'Computer'},
212
- {id: 3, type: 'Mac'}]
215
+ {id: 3, type: 'Mac'}
216
+ ]
213
217
  end
214
218
  it_behaves_like 'with invalid type'
215
219
  end
@@ -220,7 +224,8 @@ describe Acfs::Resource::QueryMethods do
220
224
  .to_return response [
221
225
  {id: 1, type: 'PC'},
222
226
  {id: 2, type: 'noValidType'},
223
- {id: 3, type: 'Mac'}]
227
+ {id: 3, type: 'Mac'}
228
+ ]
224
229
  end
225
230
  it_behaves_like 'with invalid type'
226
231
  end
@@ -231,7 +236,8 @@ describe Acfs::Resource::QueryMethods do
231
236
  .to_return response [
232
237
  {id: 1, type: 'PC'},
233
238
  {id: 2, type: 'Computer'},
234
- {id: 3, type: 42}]
239
+ {id: 3, type: 42}
240
+ ]
235
241
  end
236
242
  it_behaves_like 'with invalid type'
237
243
  end
@@ -270,7 +276,8 @@ describe Acfs::Resource::QueryMethods do
270
276
  .to_return response [
271
277
  {id: 1, name: 'Mike', age: 24},
272
278
  {id: 4, type: 'Maria', age: 24},
273
- {id: 7, type: 'James', age: 24}]
279
+ {id: 7, type: 'James', age: 24}
280
+ ]
274
281
  end
275
282
 
276
283
  it 'should invoke callback after model is loaded' do
@@ -410,25 +417,25 @@ describe Acfs::Resource::QueryMethods do
410
417
  .to_return response([{id: 1, name: 'Anno', age: 1604, born_at: 'Santa Maria'}],
411
418
  headers: {
412
419
  'X-Total-Pages' => '4',
413
- 'Link' => '<http://users.example.org/users?page=2>; rel="next"'
420
+ 'Link' => '<http://users.example.org/users?page=2>; rel="next"'
414
421
  })
415
422
  stub_request(:get, 'http://users.example.org/users?page=2')
416
423
  .to_return response([{id: 2, name: 'Anno', age: 1604, born_at: 'Santa Maria'}],
417
424
  headers: {
418
425
  'X-Total-Pages' => '4',
419
- 'Link' => '<http://users.example.org/users?page=3>; rel="next"'
426
+ 'Link' => '<http://users.example.org/users?page=3>; rel="next"'
420
427
  })
421
428
  stub_request(:get, 'http://users.example.org/users?page=3')
422
429
  .to_return response([{id: 3, name: 'Anno', age: 1604, born_at: 'Santa Maria'}],
423
430
  headers: {
424
431
  'X-Total-Pages' => '4',
425
- 'Link' => '<http://users.example.org/users?page=4>; rel="next"'
432
+ 'Link' => '<http://users.example.org/users?page=4>; rel="next"'
426
433
  })
427
434
  stub_request(:get, 'http://users.example.org/users?page=4')
428
435
  .to_return response([{id: 4, name: 'Anno', age: 1604, born_at: 'Santa Maria'}],
429
436
  headers: {
430
437
  'X-Total-Pages' => '4',
431
- 'Link' => ''
438
+ 'Link' => ''
432
439
  })
433
440
  end
434
441
 
@@ -452,25 +459,25 @@ describe Acfs::Resource::QueryMethods do
452
459
  .to_return response([{id: 1, name: 'Anno', age: 1604, born_at: 'Santa Maria'}],
453
460
  headers: {
454
461
  'X-Total-Pages' => '4',
455
- 'Link' => '<http://users.example.org/users?where=fuu&page=2>; rel="next"'
462
+ 'Link' => '<http://users.example.org/users?where=fuu&page=2>; rel="next"'
456
463
  })
457
464
  stub_request(:get, 'http://users.example.org/users?where=fuu&page=2')
458
465
  .to_return response([{id: 2, name: 'Anno', age: 1604, born_at: 'Santa Maria'}],
459
466
  headers: {
460
467
  'X-Total-Pages' => '4',
461
- 'Link' => '<http://users.example.org/users?page=3>; rel="next"'
468
+ 'Link' => '<http://users.example.org/users?page=3>; rel="next"'
462
469
  })
463
470
  stub_request(:get, 'http://users.example.org/users?page=3')
464
471
  .to_return response([{id: 3, name: 'Anno', age: 1604, born_at: 'Santa Maria'}],
465
472
  headers: {
466
473
  'X-Total-Pages' => '4',
467
- 'Link' => '<http://users.example.org/users?page=4>; rel="next"'
474
+ 'Link' => '<http://users.example.org/users?page=4>; rel="next"'
468
475
  })
469
476
  stub_request(:get, 'http://users.example.org/users?page=4')
470
477
  .to_return response([{id: 4, name: 'Anno', age: 1604, born_at: 'Santa Maria'}],
471
478
  headers: {
472
479
  'X-Total-Pages' => '4',
473
- 'Link' => ''
480
+ 'Link' => ''
474
481
  })
475
482
  end
476
483
 
@@ -496,25 +503,25 @@ describe Acfs::Resource::QueryMethods do
496
503
  .to_return response([{id: 1, name: 'Anno', age: 1604, born_at: 'Santa Maria'}],
497
504
  headers: {
498
505
  'X-Total-Pages' => '4',
499
- 'Link' => '<http://users.example.org/users?page=2>; rel="next"'
506
+ 'Link' => '<http://users.example.org/users?page=2>; rel="next"'
500
507
  })
501
508
  stub_request(:get, 'http://users.example.org/users?page=2')
502
509
  .to_return response([{id: 2, name: 'Anno', age: 1604, born_at: 'Santa Maria'}],
503
510
  headers: {
504
511
  'X-Total-Pages' => '4',
505
- 'Link' => '<http://users.example.org/users?page=3>; rel="next"'
512
+ 'Link' => '<http://users.example.org/users?page=3>; rel="next"'
506
513
  })
507
514
  stub_request(:get, 'http://users.example.org/users?page=3')
508
515
  .to_return response([{id: 3, name: 'Anno', age: 1604, born_at: 'Santa Maria'}, {id: 4, name: 'Anno', age: 1604, born_at: 'Santa Maria'}],
509
516
  headers: {
510
517
  'X-Total-Pages' => '4',
511
- 'Link' => '<http://users.example.org/users?page=4>; rel="next"'
518
+ 'Link' => '<http://users.example.org/users?page=4>; rel="next"'
512
519
  })
513
520
  stub_request(:get, 'http://users.example.org/users?page=4')
514
521
  .to_return response([{id: 5, name: 'Anno', age: 1604, born_at: 'Santa Maria'}],
515
522
  headers: {
516
523
  'X-Total-Pages' => '4',
517
- 'Link' => ''
524
+ 'Link' => ''
518
525
  })
519
526
  end
520
527
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Acfs::Resource::Validation do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Acfs::Response::Formats do
@@ -9,7 +11,7 @@ describe Acfs::Response::Formats do
9
11
  let(:response) { Acfs::Response.new request, status: status, headers: headers, body: body }
10
12
 
11
13
  context 'without Content-Type header' do
12
- let(:headers) { {} }
14
+ let(:headers) { {} }
13
15
 
14
16
  it "should fallback on 'text/plain'" do
15
17
  expect(response.content_type).to be == Mime[:text]
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Acfs::Response::Status do
@@ -1,25 +1,23 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  class NullAdapter < Acfs::Adapter::Base
4
6
  # Start processing queued requests.
5
7
  #
6
- def start
7
- end
8
+ def start; end
8
9
 
9
10
  # Abort running and queued requests.
10
11
  #
11
- def abort
12
- end
12
+ def abort; end
13
13
 
14
14
  # Run request right now skipping queue.
15
15
  #
16
- def run(_)
17
- end
16
+ def run(_); end
18
17
 
19
18
  # Enqueue request to be run later.
20
19
  #
21
- def queue(_)
22
- end
20
+ def queue(_); end
23
21
  end
24
22
 
25
23
  class NotificationCollector
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  class TestMiddleware < Acfs::Middleware::Base
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Acfs::Service do
@@ -19,7 +21,7 @@ describe Acfs::Service do
19
21
 
20
22
  describe '#location' do
21
23
  let(:resource) { Class.new }
22
- before { allow(resource).to receive(:location_default_path, &proc{|_a, p| p}) }
24
+ before { allow(resource).to receive(:location_default_path, &proc {|_a, p| p }) }
23
25
 
24
26
  it 'should extract resource path name from given class' do
25
27
  expect(service.location(resource).to_s).to eq('/classes')
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Acfs::SingletonResource do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  class SpecialCustomError < StandardError; end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe 'Acfs' do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rspec'
2
4
  require 'webmock/rspec'
3
5
 
@@ -17,7 +19,7 @@ Bundler.require(:default, :test)
17
19
  require 'acfs'
18
20
  require 'webmock/rspec'
19
21
 
20
- Dir[File.expand_path('spec/support/**/*.rb')].each {|f| require f }
22
+ Dir[File.expand_path('spec/support/**/*.rb')].sort.each {|f| require f }
21
23
 
22
24
  RSpec.configure do |config|
23
25
  # ## Mock Framework
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class ActiveSupport::HashWithIndifferentAccess
2
4
  def ==(other)
3
5
  if other.respond_to? :with_indifferent_access
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'json'
2
4
 
3
5
  def response(data = nil, opts = {})
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  Acfs.configure do
3
4
  locate :user_service, 'http://users.example.org'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  shared_examples 'a query method with multi-callback support' do
2
4
  let(:cb) { Proc.new }
3
5
 
metadata CHANGED
@@ -1,59 +1,59 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acfs
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.5.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: 2019-07-02 00:00:00.000000000 Z
11
+ date: 2020-06-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: activesupport
14
+ name: actionpack
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '4.2'
19
+ version: '5.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '4.2'
26
+ version: '5.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activemodel
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '4.2'
33
+ version: '5.2'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '4.2'
40
+ version: '5.2'
41
41
  - !ruby/object:Gem::Dependency
42
- name: actionpack
42
+ name: activesupport
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '4.2'
47
+ version: '5.2'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '4.2'
54
+ version: '5.2'
55
55
  - !ruby/object:Gem::Dependency
56
- name: multi_json
56
+ name: rack
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -80,20 +80,6 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '1.0'
83
- - !ruby/object:Gem::Dependency
84
- name: rack
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: bundler
99
85
  requirement: !ruby/object:Gem::Requirement
@@ -110,7 +96,7 @@ dependencies:
110
96
  version: '0'
111
97
  description: API Client For Services
112
98
  email:
113
- - jg@altimos.de
99
+ - jgraichen@altimos.de
114
100
  executables: []
115
101
  extensions: []
116
102
  extra_rdoc_files: []
@@ -228,8 +214,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
228
214
  - !ruby/object:Gem::Version
229
215
  version: '0'
230
216
  requirements: []
231
- rubyforge_project:
232
- rubygems_version: 2.7.7
217
+ rubygems_version: 3.1.2
233
218
  signing_key:
234
219
  specification_version: 4
235
220
  summary: An abstract API base client for service oriented application.