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.
- 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
|