acfs 1.0.0.dev.1.b305 → 1.0.0

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