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.
- checksums.yaml +5 -13
- data/CHANGELOG.md +64 -0
- data/README.md +2 -2
- data/acfs.gemspec +4 -4
- data/lib/acfs.rb +7 -5
- data/lib/acfs/adapter/base.rb +0 -2
- data/lib/acfs/adapter/typhoeus.rb +17 -13
- data/lib/acfs/collections/paginatable.rb +10 -10
- data/lib/acfs/configuration.rb +4 -5
- data/lib/acfs/errors.rb +10 -9
- data/lib/acfs/global.rb +16 -7
- data/lib/acfs/location.rb +11 -11
- data/lib/acfs/middleware/base.rb +1 -2
- data/lib/acfs/middleware/json.rb +27 -0
- data/lib/acfs/middleware/logger.rb +0 -2
- data/lib/acfs/middleware/msgpack.rb +30 -0
- data/lib/acfs/middleware/print.rb +0 -2
- data/lib/acfs/middleware/serializer.rb +39 -0
- data/lib/acfs/operation.rb +5 -5
- data/lib/acfs/request.rb +4 -4
- data/lib/acfs/request/callbacks.rb +2 -3
- data/lib/acfs/resource.rb +2 -2
- data/lib/acfs/resource/attributes.rb +10 -37
- data/lib/acfs/resource/attributes/base.rb +10 -19
- data/lib/acfs/resource/attributes/boolean.rb +10 -8
- data/lib/acfs/resource/attributes/date_time.rb +6 -9
- data/lib/acfs/resource/attributes/dict.rb +37 -0
- data/lib/acfs/resource/attributes/float.rb +11 -5
- data/lib/acfs/resource/attributes/integer.rb +7 -5
- data/lib/acfs/resource/attributes/list.rb +13 -6
- data/lib/acfs/resource/attributes/string.rb +3 -5
- data/lib/acfs/resource/attributes/uuid.rb +8 -17
- data/lib/acfs/resource/loadable.rb +0 -1
- data/lib/acfs/resource/locatable.rb +0 -4
- data/lib/acfs/resource/operational.rb +0 -2
- data/lib/acfs/resource/persistence.rb +17 -17
- data/lib/acfs/resource/query_methods.rb +3 -5
- data/lib/acfs/resource/service.rb +0 -2
- data/lib/acfs/resource/validation.rb +0 -2
- data/lib/acfs/response.rb +1 -2
- data/lib/acfs/response/formats.rb +1 -2
- data/lib/acfs/response/status.rb +3 -5
- data/lib/acfs/runner.rb +21 -11
- data/lib/acfs/service.rb +4 -6
- data/lib/acfs/service/middleware.rb +20 -30
- data/lib/acfs/service/middleware/stack.rb +63 -0
- data/lib/acfs/singleton_resource.rb +0 -2
- data/lib/acfs/stub.rb +30 -21
- data/lib/acfs/util.rb +1 -1
- data/lib/acfs/version.rb +4 -2
- data/spec/acfs/adapter/typhoeus_spec.rb +12 -4
- data/spec/acfs/collection_spec.rb +45 -33
- data/spec/acfs/configuration_spec.rb +9 -1
- data/spec/acfs/global_spec.rb +21 -3
- data/spec/acfs/middleware/json_spec.rb +63 -0
- data/spec/acfs/middleware/msgpack_spec.rb +60 -0
- data/spec/acfs/operation_spec.rb +10 -0
- data/spec/acfs/request/callbacks_spec.rb +8 -8
- data/spec/acfs/request_spec.rb +5 -5
- data/spec/acfs/resource/attributes/boolean_spec.rb +40 -9
- data/spec/acfs/resource/attributes/date_time_spec.rb +29 -35
- data/spec/acfs/resource/attributes/dict_spec.rb +75 -0
- data/spec/acfs/resource/attributes/float_spec.rb +48 -9
- data/spec/acfs/resource/attributes/integer_spec.rb +34 -0
- data/spec/acfs/resource/attributes/list_spec.rb +43 -19
- data/spec/acfs/resource/attributes/uuid_spec.rb +31 -54
- data/spec/acfs/resource/attributes_spec.rb +17 -31
- data/spec/acfs/resource/locatable_spec.rb +2 -2
- data/spec/acfs/resource/persistance_spec.rb +65 -34
- data/spec/acfs/resource/query_methods_spec.rb +87 -87
- data/spec/acfs/resource/validation_spec.rb +4 -5
- data/spec/acfs/response/formats_spec.rb +1 -1
- data/spec/acfs/response/status_spec.rb +1 -1
- data/spec/acfs/runner_spec.rb +28 -3
- data/spec/acfs/service/middleware_spec.rb +4 -20
- data/spec/acfs/service_spec.rb +3 -5
- data/spec/acfs/singleton_resource_spec.rb +1 -2
- data/spec/acfs/stub_spec.rb +137 -22
- data/spec/acfs_spec.rb +22 -19
- data/spec/spec_helper.rb +2 -1
- data/spec/support/service.rb +10 -6
- data/spec/support/shared/find_callbacks.rb +7 -7
- metadata +37 -30
- data/lib/acfs/middleware/json_decoder.rb +0 -16
- data/lib/acfs/middleware/json_encoder.rb +0 -20
- data/lib/acfs/middleware/msgpack_decoder.rb +0 -26
- data/lib/acfs/middleware/msgpack_encoder.rb +0 -19
- data/spec/acfs/middleware/json_decoder_spec.rb +0 -45
- 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
|