acfs 1.0.0.dev.1.b305 → 1.0.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 (89) hide show
  1. checksums.yaml +5 -13
  2. data/CHANGELOG.md +64 -0
  3. data/README.md +2 -2
  4. data/acfs.gemspec +4 -4
  5. data/lib/acfs.rb +7 -5
  6. data/lib/acfs/adapter/base.rb +0 -2
  7. data/lib/acfs/adapter/typhoeus.rb +17 -13
  8. data/lib/acfs/collections/paginatable.rb +10 -10
  9. data/lib/acfs/configuration.rb +4 -5
  10. data/lib/acfs/errors.rb +10 -9
  11. data/lib/acfs/global.rb +16 -7
  12. data/lib/acfs/location.rb +11 -11
  13. data/lib/acfs/middleware/base.rb +1 -2
  14. data/lib/acfs/middleware/json.rb +27 -0
  15. data/lib/acfs/middleware/logger.rb +0 -2
  16. data/lib/acfs/middleware/msgpack.rb +30 -0
  17. data/lib/acfs/middleware/print.rb +0 -2
  18. data/lib/acfs/middleware/serializer.rb +39 -0
  19. data/lib/acfs/operation.rb +5 -5
  20. data/lib/acfs/request.rb +4 -4
  21. data/lib/acfs/request/callbacks.rb +2 -3
  22. data/lib/acfs/resource.rb +2 -2
  23. data/lib/acfs/resource/attributes.rb +10 -37
  24. data/lib/acfs/resource/attributes/base.rb +10 -19
  25. data/lib/acfs/resource/attributes/boolean.rb +10 -8
  26. data/lib/acfs/resource/attributes/date_time.rb +6 -9
  27. data/lib/acfs/resource/attributes/dict.rb +37 -0
  28. data/lib/acfs/resource/attributes/float.rb +11 -5
  29. data/lib/acfs/resource/attributes/integer.rb +7 -5
  30. data/lib/acfs/resource/attributes/list.rb +13 -6
  31. data/lib/acfs/resource/attributes/string.rb +3 -5
  32. data/lib/acfs/resource/attributes/uuid.rb +8 -17
  33. data/lib/acfs/resource/loadable.rb +0 -1
  34. data/lib/acfs/resource/locatable.rb +0 -4
  35. data/lib/acfs/resource/operational.rb +0 -2
  36. data/lib/acfs/resource/persistence.rb +17 -17
  37. data/lib/acfs/resource/query_methods.rb +3 -5
  38. data/lib/acfs/resource/service.rb +0 -2
  39. data/lib/acfs/resource/validation.rb +0 -2
  40. data/lib/acfs/response.rb +1 -2
  41. data/lib/acfs/response/formats.rb +1 -2
  42. data/lib/acfs/response/status.rb +3 -5
  43. data/lib/acfs/runner.rb +21 -11
  44. data/lib/acfs/service.rb +4 -6
  45. data/lib/acfs/service/middleware.rb +20 -30
  46. data/lib/acfs/service/middleware/stack.rb +63 -0
  47. data/lib/acfs/singleton_resource.rb +0 -2
  48. data/lib/acfs/stub.rb +30 -21
  49. data/lib/acfs/util.rb +1 -1
  50. data/lib/acfs/version.rb +4 -2
  51. data/spec/acfs/adapter/typhoeus_spec.rb +12 -4
  52. data/spec/acfs/collection_spec.rb +45 -33
  53. data/spec/acfs/configuration_spec.rb +9 -1
  54. data/spec/acfs/global_spec.rb +21 -3
  55. data/spec/acfs/middleware/json_spec.rb +63 -0
  56. data/spec/acfs/middleware/msgpack_spec.rb +60 -0
  57. data/spec/acfs/operation_spec.rb +10 -0
  58. data/spec/acfs/request/callbacks_spec.rb +8 -8
  59. data/spec/acfs/request_spec.rb +5 -5
  60. data/spec/acfs/resource/attributes/boolean_spec.rb +40 -9
  61. data/spec/acfs/resource/attributes/date_time_spec.rb +29 -35
  62. data/spec/acfs/resource/attributes/dict_spec.rb +75 -0
  63. data/spec/acfs/resource/attributes/float_spec.rb +48 -9
  64. data/spec/acfs/resource/attributes/integer_spec.rb +34 -0
  65. data/spec/acfs/resource/attributes/list_spec.rb +43 -19
  66. data/spec/acfs/resource/attributes/uuid_spec.rb +31 -54
  67. data/spec/acfs/resource/attributes_spec.rb +17 -31
  68. data/spec/acfs/resource/locatable_spec.rb +2 -2
  69. data/spec/acfs/resource/persistance_spec.rb +65 -34
  70. data/spec/acfs/resource/query_methods_spec.rb +87 -87
  71. data/spec/acfs/resource/validation_spec.rb +4 -5
  72. data/spec/acfs/response/formats_spec.rb +1 -1
  73. data/spec/acfs/response/status_spec.rb +1 -1
  74. data/spec/acfs/runner_spec.rb +28 -3
  75. data/spec/acfs/service/middleware_spec.rb +4 -20
  76. data/spec/acfs/service_spec.rb +3 -5
  77. data/spec/acfs/singleton_resource_spec.rb +1 -2
  78. data/spec/acfs/stub_spec.rb +137 -22
  79. data/spec/acfs_spec.rb +22 -19
  80. data/spec/spec_helper.rb +2 -1
  81. data/spec/support/service.rb +10 -6
  82. data/spec/support/shared/find_callbacks.rb +7 -7
  83. metadata +37 -30
  84. data/lib/acfs/middleware/json_decoder.rb +0 -16
  85. data/lib/acfs/middleware/json_encoder.rb +0 -20
  86. data/lib/acfs/middleware/msgpack_decoder.rb +0 -26
  87. data/lib/acfs/middleware/msgpack_encoder.rb +0 -19
  88. data/spec/acfs/middleware/json_decoder_spec.rb +0 -45
  89. data/spec/acfs/middleware/msgpack_decoder_spec.rb +0 -36
@@ -1,16 +0,0 @@
1
- require 'multi_json'
2
-
3
- module Acfs
4
- module Middleware
5
-
6
- # A middleware to automatically decode JSON responses.
7
- #
8
- class JsonDecoder < Base
9
-
10
- def response(response, nxt)
11
- response.data = ::MultiJson.load(response.body) if response.json?
12
- nxt.call response
13
- end
14
- end
15
- end
16
- end
@@ -1,20 +0,0 @@
1
- require 'multi_json'
2
-
3
- module Acfs
4
- module Middleware
5
-
6
- # A middleware to encore request data using JSON.
7
- #
8
- class JsonEncoder < Base
9
-
10
- def call(request)
11
- unless request.method == :get or request.data.nil?
12
- request.body = ::MultiJson.dump(request.data)
13
- request.headers['Content-Type'] = 'application/json'
14
- end
15
-
16
- app.call request
17
- end
18
- end
19
- end
20
- end
@@ -1,26 +0,0 @@
1
- require 'msgpack'
2
- require 'action_dispatch'
3
-
4
- module Acfs
5
- module Middleware
6
-
7
- # Register msgpack mime type
8
- ::Mime::Type.register 'application/x-msgpack', :msgpack
9
-
10
- # A middleware to decode Message Pack responses.
11
- #
12
- class MessagePackDecoder < Base
13
-
14
- CONTENT_TYPES = %w(application/x-msgpack)
15
-
16
- def response(response, nxt)
17
- response.data = ::MessagePack.unpack(response.body) if message_pack?(response)
18
- nxt.call response
19
- end
20
-
21
- def message_pack?(response)
22
- CONTENT_TYPES.include? response.content_type
23
- end
24
- end
25
- end
26
- end
@@ -1,19 +0,0 @@
1
- require 'msgpack'
2
- require 'action_dispatch'
3
-
4
- module Acfs
5
- module Middleware
6
-
7
- # A middleware to encode request data with Message Pack.
8
- #
9
- class MessagePackEncoder < Base
10
-
11
- def call(request)
12
- request.body = ::MessagePack.dump(request.data)
13
- request.headers['Content-Type'] = 'application/x-msgpack'
14
-
15
- app.call request
16
- end
17
- end
18
- end
19
- end
@@ -1,45 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Acfs::Middleware::JsonDecoder do
4
- let(:data) { [{id: 1, name: "Anon"},{id: 2, name:"John", friends: [ 1 ]}] }
5
- let(:body) { data.to_param }
6
- let(:headers) { {} }
7
- let(:request) { Acfs::Request.new "fubar" }
8
- let(:response) { Acfs::Response.new request, status: 200, headers: headers, body: body }
9
- let(:decoder) { Acfs::Middleware::JsonDecoder.new lambda { |req| req } }
10
-
11
- before do
12
- decoder.call request
13
- end
14
-
15
- context 'with JSON response' do
16
- let(:headers) { { 'Content-Type' => 'application/json; charset=utf-8' } }
17
- let(:body) { data.to_json }
18
-
19
- it 'should decode body data' do
20
- request.complete! response
21
-
22
- expect(response.data).to be == data.map(&:stringify_keys)
23
- end
24
- end
25
-
26
- context 'with invalid JSON response' do
27
- let(:headers) { { 'Content-Type' => 'application/json' } }
28
- let(:body) { data.to_json[4..-4] }
29
-
30
- it 'should raise an error' do
31
- expect { request.complete! response }.to raise_error(MultiJson::LoadError)
32
- end
33
- end
34
-
35
- context 'without JSON response' do
36
- let(:headers) { { 'Content-Type' => 'application/text' } }
37
- let(:body) { data.to_json }
38
-
39
- it 'should not decode non-JSON encoded responses' do
40
- request.complete! response
41
-
42
- expect(response.data).to be_nil
43
- end
44
- end
45
- end
@@ -1,36 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Acfs::Middleware::MessagePackDecoder do
4
- let(:data) { [{id: 1, name: "Anon"},{id: 2, name:"John", friends: [ 1 ]}] }
5
- let(:body) { data.to_param }
6
- let(:headers) { {} }
7
- let(:request) { Acfs::Request.new "fubar" }
8
- let(:response) { Acfs::Response.new request, status: 200, headers: headers, body: body }
9
- let(:decoder) { Acfs::Middleware::MessagePackDecoder.new lambda { |req| req } }
10
-
11
- before do
12
- decoder.call request
13
- end
14
-
15
- context 'with Message Pack response' do
16
- let(:headers) { { 'Content-Type' => 'application/x-msgpack' } }
17
- let(:body) { MessagePack.pack data }
18
-
19
- it 'should decode body data' do
20
- request.complete! response
21
-
22
- expect(response.data).to be == data.map(&:stringify_keys)
23
- end
24
- end
25
-
26
- context 'without Message Pack response' do
27
- let(:headers) { { 'Content-Type' => 'application/text' } }
28
- let(:body) { data.to_json }
29
-
30
- it 'should not decode non-MessagePack encoded responses' do
31
- request.complete! response
32
-
33
- expect(response.data).to be_nil
34
- end
35
- end
36
- end