acfs 1.4.0 → 1.7.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 (73) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +26 -0
  3. data/README.md +22 -39
  4. data/acfs.gemspec +8 -14
  5. data/lib/acfs/adapter/base.rb +2 -0
  6. data/lib/acfs/adapter/typhoeus.rb +16 -11
  7. data/lib/acfs/collections/paginatable.rb +1 -1
  8. data/lib/acfs/configuration.rb +13 -3
  9. data/lib/acfs/errors.rb +41 -21
  10. data/lib/acfs/global.rb +2 -2
  11. data/lib/acfs/location.rb +26 -32
  12. data/lib/acfs/middleware/base.rb +2 -2
  13. data/lib/acfs/middleware/json.rb +4 -2
  14. data/lib/acfs/middleware/logger.rb +4 -6
  15. data/lib/acfs/middleware/serializer.rb +1 -1
  16. data/lib/acfs/operation.rb +21 -8
  17. data/lib/acfs/request/callbacks.rb +4 -4
  18. data/lib/acfs/request.rb +4 -11
  19. data/lib/acfs/resource/attributes/date_time.rb +1 -1
  20. data/lib/acfs/resource/attributes/uuid.rb +1 -1
  21. data/lib/acfs/resource/attributes.rb +16 -15
  22. data/lib/acfs/resource/dirty.rb +2 -2
  23. data/lib/acfs/resource/initialization.rb +5 -5
  24. data/lib/acfs/resource/locatable.rb +11 -8
  25. data/lib/acfs/resource/operational.rb +6 -3
  26. data/lib/acfs/resource/persistence.rb +13 -15
  27. data/lib/acfs/resource/query_methods.rb +10 -10
  28. data/lib/acfs/resource/service.rb +2 -2
  29. data/lib/acfs/resource/validation.rb +17 -7
  30. data/lib/acfs/response.rb +5 -5
  31. data/lib/acfs/runner.rb +15 -15
  32. data/lib/acfs/service.rb +16 -19
  33. data/lib/acfs/singleton_resource.rb +2 -2
  34. data/lib/acfs/stub.rb +41 -31
  35. data/lib/acfs/version.rb +2 -2
  36. data/spec/acfs/adapter/typhoeus_spec.rb +2 -2
  37. data/spec/acfs/collection_spec.rb +66 -41
  38. data/spec/acfs/configuration_spec.rb +22 -12
  39. data/spec/acfs/global_spec.rb +11 -9
  40. data/spec/acfs/location_spec.rb +2 -2
  41. data/spec/acfs/middleware/json_spec.rb +22 -8
  42. data/spec/acfs/middleware/{msgpack_spec.rb → message_pack_spec.rb} +6 -6
  43. data/spec/acfs/operation_spec.rb +3 -2
  44. data/spec/acfs/request/callbacks_spec.rb +19 -10
  45. data/spec/acfs/request_spec.rb +16 -20
  46. data/spec/acfs/resource/attributes/boolean_spec.rb +32 -32
  47. data/spec/acfs/resource/attributes/date_time_spec.rb +16 -8
  48. data/spec/acfs/resource/attributes/dict_spec.rb +15 -9
  49. data/spec/acfs/resource/attributes/float_spec.rb +20 -10
  50. data/spec/acfs/resource/attributes/integer_spec.rb +10 -5
  51. data/spec/acfs/resource/attributes/list_spec.rb +13 -8
  52. data/spec/acfs/resource/attributes/uuid_spec.rb +12 -6
  53. data/spec/acfs/resource/attributes_spec.rb +37 -38
  54. data/spec/acfs/resource/dirty_spec.rb +6 -3
  55. data/spec/acfs/resource/initialization_spec.rb +4 -5
  56. data/spec/acfs/resource/loadable_spec.rb +3 -1
  57. data/spec/acfs/resource/locatable_spec.rb +24 -18
  58. data/spec/acfs/resource/{persistance_spec.rb → persistence_spec.rb} +122 -90
  59. data/spec/acfs/resource/query_methods_spec.rb +143 -110
  60. data/spec/acfs/resource/validation_spec.rb +34 -27
  61. data/spec/acfs/response/formats_spec.rb +8 -8
  62. data/spec/acfs/response/status_spec.rb +16 -9
  63. data/spec/acfs/runner_spec.rb +10 -8
  64. data/spec/acfs/service/middleware_spec.rb +3 -3
  65. data/spec/acfs/service_spec.rb +6 -5
  66. data/spec/acfs/singleton_resource_spec.rb +2 -1
  67. data/spec/acfs/stub_spec.rb +57 -53
  68. data/spec/acfs_spec.rb +111 -93
  69. data/spec/spec_helper.rb +1 -2
  70. data/spec/support/response.rb +2 -2
  71. data/spec/support/service.rb +1 -1
  72. data/spec/support/shared/find_callbacks.rb +14 -10
  73. metadata +30 -29
@@ -16,23 +16,23 @@ describe Acfs::Middleware::MessagePack do
16
16
 
17
17
  describe 'encode' do
18
18
  context 'with not serialized request' do
19
- it 'should set Content-Type' do
19
+ it 'sets Content-Type' do
20
20
  expect(request.headers['Content-Type']).to eq 'application/x-msgpack'
21
21
  end
22
22
 
23
- it 'should append Accept header' do
23
+ it 'appends Accept header' do
24
24
  expect(request.headers['Accept']).to eq 'application/x-msgpack;q=1'
25
25
  end
26
26
 
27
27
  context 'with JSON chained' do
28
28
  let(:decoder) { Acfs::Middleware::JSON.new super(), q: 0.5 }
29
29
 
30
- it 'should append to Accept header' do
30
+ it 'appends to Accept header' do
31
31
  expect(request.headers['Accept']).to eq 'application/json;q=0.5,application/x-msgpack;q=1'
32
32
  end
33
33
  end
34
34
 
35
- it 'should serialize data to MessagePack' do
35
+ it 'serializes data to MessagePack' do
36
36
  expect(MessagePack.unpack(request.body)).to eq data.map(&:stringify_keys)
37
37
  end
38
38
  end
@@ -42,7 +42,7 @@ describe Acfs::Middleware::MessagePack do
42
42
  let(:headers) { {'Content-Type' => 'application/x-msgpack'} }
43
43
  let(:body) { MessagePack.pack data }
44
44
 
45
- it 'should decode body data' do
45
+ it 'decodes body data' do
46
46
  request.complete! response
47
47
 
48
48
  expect(response.data).to be == data.map(&:stringify_keys)
@@ -53,7 +53,7 @@ describe Acfs::Middleware::MessagePack do
53
53
  let(:headers) { {'Content-Type' => 'application/text'} }
54
54
  let(:body) { data.to_json }
55
55
 
56
- it 'should not decode non-MessagePack encoded responses' do
56
+ it 'does not decode non-MessagePack encoded responses' do
57
57
  request.complete! response
58
58
 
59
59
  expect(response.data).to be_nil
@@ -5,8 +5,9 @@ require 'spec_helper'
5
5
  describe ::Acfs::Operation do
6
6
  let(:operation) { described_class.new MyUser, :read, params: {id: 0} }
7
7
 
8
- context '#request' do
8
+ describe '#request' do
9
9
  subject { operation.request }
10
- its(:operation) { should eq operation }
10
+
11
+ its(:operation) { is_expected.to eq operation }
11
12
  end
12
13
  end
@@ -7,42 +7,51 @@ describe Acfs::Request::Callbacks do
7
7
  let(:request) { Acfs::Request.new('fubar') }
8
8
 
9
9
  describe '#on_complete' do
10
- it 'should store a given callback' do
10
+ it 'stores a given callback' do
11
11
  request.on_complete(&callback)
12
12
 
13
13
  expect(request.callbacks).to have(1).item
14
- expect(request.callbacks[0]).to be == callback
14
+ expect(request.callbacks[0]).to eq callback
15
15
  end
16
16
 
17
- it 'should store multiple callback' do
17
+ it 'stores multiple callback' do
18
18
  request.on_complete {|_res| 'abc' }
19
19
  request.on_complete(&callback)
20
20
 
21
21
  expect(request.callbacks).to have(2).item
22
- expect(request.callbacks[0]).to be == callback
22
+ expect(request.callbacks[0]).to eq callback
23
23
  end
24
24
  end
25
25
 
26
26
  describe '#complete!' do
27
27
  let(:response) { Acfs::Response.new(request) }
28
28
 
29
- it 'should trigger registered callbacks with given response' do
29
+ it 'triggers registered callbacks with given response' do
30
30
  expect(callback).to receive(:call).with(response, kind_of(Proc))
31
31
 
32
32
  request.on_complete(&callback)
33
33
  request.complete! response
34
34
  end
35
35
 
36
- it 'should trigger multiple callback in reverted insertion order' do
36
+ it 'triggers multiple callback in reverted insertion order' do
37
37
  check = []
38
38
 
39
- request.on_complete {|res, nxt| check << 1; nxt.call res }
40
- request.on_complete {|res, nxt| check << 2; nxt.call res }
41
- request.on_complete {|res, nxt| check << 3; nxt.call res }
39
+ request.on_complete do |res, nxt|
40
+ check << 1
41
+ nxt.call res
42
+ end
43
+ request.on_complete do |res, nxt|
44
+ check << 2
45
+ nxt.call res
46
+ end
47
+ request.on_complete do |res, nxt|
48
+ check << 3
49
+ nxt.call res
50
+ end
42
51
 
43
52
  request.complete! response
44
53
 
45
- expect(check).to be == [3, 2, 1]
54
+ expect(check).to eq [3, 2, 1]
46
55
  end
47
56
  end
48
57
  end
@@ -9,18 +9,18 @@ describe Acfs::Request do
9
9
  let(:data) { nil }
10
10
  let(:method) { :get }
11
11
  let(:options) { {method: method, headers: headers, params: params, data: data} }
12
- let(:request) { Acfs::Request.new(url, options) }
12
+ let(:request) { Acfs::Request.new(url, **options) }
13
13
 
14
14
  describe '#url' do
15
- it 'should return request URL' do
16
- expect(request.url).to be == url
15
+ it 'returns request URL' do
16
+ expect(request.url).to eq url
17
17
  end
18
18
 
19
19
  context 'with parameters' do
20
20
  let(:params) { {id: 10} }
21
21
 
22
- it 'should return URL without query' do
23
- expect(request.url).to be == url.to_s
22
+ it 'returns URL without query' do
23
+ expect(request.url).to eq url.to_s
24
24
  end
25
25
  end
26
26
  end
@@ -28,8 +28,8 @@ describe Acfs::Request do
28
28
  describe '#headers' do
29
29
  let(:headers) { {'Accept' => 'application/json'} }
30
30
 
31
- it 'should return request headers' do
32
- expect(request.headers).to be == headers
31
+ it 'returns request headers' do
32
+ expect(request.headers).to eq headers
33
33
  end
34
34
  end
35
35
 
@@ -37,43 +37,39 @@ describe Acfs::Request do
37
37
  context 'when nil given' do
38
38
  let(:method) { nil }
39
39
 
40
- it 'should default to :get' do
41
- expect(request.method).to be == :get
40
+ it 'defaults to :get' do
41
+ expect(request.method).to eq :get
42
42
  end
43
43
  end
44
44
 
45
- it 'should return request method' do
46
- expect(request.method).to be == method
45
+ it 'returns request method' do
46
+ expect(request.method).to eq method
47
47
  end
48
48
  end
49
49
 
50
50
  describe '#params' do
51
51
  let(:params) { {id: 10} }
52
52
 
53
- it 'should return request headers' do
54
- expect(request.params).to be == params
53
+ it 'returns request headers' do
54
+ expect(request.params).to eq params
55
55
  end
56
56
  end
57
57
 
58
58
  describe '#data' do
59
59
  let(:data) { {id: 10, name: 'Anon'} }
60
60
 
61
- it 'should return request data' do
62
- expect(request.data).to be == data
61
+ it 'returns request data' do
62
+ expect(request.data).to eq data
63
63
  end
64
- end
65
64
 
66
- describe '#data' do
67
65
  context 'with data' do
68
- let(:data) { {id: 10, name: 'Anon'} }
69
-
70
66
  it { expect(request).to be_data }
71
67
  end
72
68
 
73
69
  context 'without data' do
74
70
  let(:data) { nil }
75
71
 
76
- it { expect(request).to_not be_data }
72
+ it { expect(request).not_to be_data }
77
73
  end
78
74
  end
79
75
  end
@@ -3,56 +3,56 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe Acfs::Resource::Attributes::Boolean do
6
- subject { Acfs::Resource::Attributes::Boolean.new }
6
+ subject(:type) { Acfs::Resource::Attributes::Boolean.new }
7
7
 
8
8
  describe '#cast' do
9
9
  it 'casts nil' do
10
- expect(subject.cast(nil)).to eq nil
10
+ expect(type.cast(nil)).to eq nil
11
11
  end
12
12
 
13
13
  it 'casts empty string to false' do
14
- expect(subject.cast('')).to eq nil
14
+ expect(type.cast('')).to eq nil
15
15
  end
16
16
 
17
17
  it 'casts blank string to false' do
18
- expect(subject.cast(" \t")).to eq nil
18
+ expect(type.cast(" \t")).to eq nil
19
19
  end
20
20
 
21
21
  it 'preserves boolean values' do
22
- expect(subject.cast(false)).to eq false
23
- expect(subject.cast(true)).to eq true
22
+ expect(type.cast(false)).to eq false
23
+ expect(type.cast(true)).to eq true
24
24
  end
25
25
 
26
26
  it 'casts falsy values to false' do
27
- expect(subject.cast(false)).to eq false
28
- expect(subject.cast(0)).to eq false
29
- expect(subject.cast('0')).to eq false
30
- expect(subject.cast('no')).to eq false
31
- expect(subject.cast('NO')).to eq false
32
- expect(subject.cast('off')).to eq false
33
- expect(subject.cast('OFF')).to eq false
34
- expect(subject.cast('false')).to eq false
35
- expect(subject.cast('FALSE')).to eq false
36
- expect(subject.cast('f')).to eq false
37
- expect(subject.cast('F')).to eq false
27
+ expect(type.cast(false)).to eq false
28
+ expect(type.cast(0)).to eq false
29
+ expect(type.cast('0')).to eq false
30
+ expect(type.cast('no')).to eq false
31
+ expect(type.cast('NO')).to eq false
32
+ expect(type.cast('off')).to eq false
33
+ expect(type.cast('OFF')).to eq false
34
+ expect(type.cast('false')).to eq false
35
+ expect(type.cast('FALSE')).to eq false
36
+ expect(type.cast('f')).to eq false
37
+ expect(type.cast('F')).to eq false
38
38
  end
39
39
 
40
40
  it 'casts any other value to true' do
41
- expect(subject.cast(true)).to eq true
42
- expect(subject.cast(1)).to eq true
43
- expect(subject.cast('1')).to eq true
44
- expect(subject.cast('yes')).to eq true
45
- expect(subject.cast('YES')).to eq true
46
- expect(subject.cast('on')).to eq true
47
- expect(subject.cast('ON')).to eq true
48
- expect(subject.cast('true')).to eq true
49
- expect(subject.cast('TRUE')).to eq true
50
- expect(subject.cast('t')).to eq true
51
- expect(subject.cast('T')).to eq true
52
-
53
- expect(subject.cast(2)).to eq true
54
- expect(subject.cast('wrong')).to eq true
55
- expect(subject.cast('random')).to eq true
41
+ expect(type.cast(true)).to eq true
42
+ expect(type.cast(1)).to eq true
43
+ expect(type.cast('1')).to eq true
44
+ expect(type.cast('yes')).to eq true
45
+ expect(type.cast('YES')).to eq true
46
+ expect(type.cast('on')).to eq true
47
+ expect(type.cast('ON')).to eq true
48
+ expect(type.cast('true')).to eq true
49
+ expect(type.cast('TRUE')).to eq true
50
+ expect(type.cast('t')).to eq true
51
+ expect(type.cast('T')).to eq true
52
+
53
+ expect(type.cast(2)).to eq true
54
+ expect(type.cast('wrong')).to eq true
55
+ expect(type.cast('random')).to eq true
56
56
  end
57
57
  end
58
58
  end
@@ -6,45 +6,53 @@ describe Acfs::Resource::Attributes::DateTime do
6
6
  let(:type) { Acfs::Resource::Attributes::DateTime.new }
7
7
 
8
8
  describe '#cast' do
9
- subject { -> { type.cast value } }
9
+ subject(:cast) { -> { type.cast value } }
10
10
 
11
11
  context 'with nil' do
12
12
  let(:value) { nil }
13
- it { expect(subject.call).to eq nil }
13
+
14
+ it { expect(cast.call).to eq nil }
14
15
  end
15
16
 
16
17
  context 'with empty string' do
17
18
  let(:value) { '' }
18
- it { expect(subject.call).to eq nil }
19
+
20
+ it { expect(cast.call).to eq nil }
19
21
  end
20
22
 
21
23
  context 'with blank string' do
22
24
  let(:value) { " \t" }
23
- it { expect(subject.call).to eq nil }
25
+
26
+ it { expect(cast.call).to eq nil }
24
27
  end
25
28
 
26
29
  context 'with DateTime' do
27
30
  let(:value) { DateTime.now }
28
- it { expect(subject.call).to eq value }
31
+
32
+ it { expect(cast.call).to eq value }
29
33
  end
30
34
 
31
35
  context 'with Time' do
32
36
  let(:value) { Time.now }
33
- it { expect(subject.call).to eq value.to_datetime }
37
+
38
+ it { expect(cast.call).to eq value.to_datetime }
34
39
  end
35
40
 
36
41
  context 'with Date' do
37
42
  let(:value) { Date.today }
38
- it { expect(subject.call).to eq value.to_datetime }
43
+
44
+ it { expect(cast.call).to eq value.to_datetime }
39
45
  end
40
46
 
41
47
  context 'with ISO8601' do
42
48
  let(:value) { DateTime.now.iso8601 }
43
- it { expect(subject.call.iso8601).to eq value }
49
+
50
+ it { expect(cast.call.iso8601).to eq value }
44
51
  end
45
52
 
46
53
  context 'with invalid string' do
47
54
  let(:value) { 'qwe123' }
55
+
48
56
  it { is_expected.to raise_error ArgumentError }
49
57
  end
50
58
  end
@@ -6,30 +6,35 @@ describe Acfs::Resource::Attributes::Dict do
6
6
  let(:type) { Acfs::Resource::Attributes::Dict.new }
7
7
 
8
8
  describe '#cast' do
9
- subject { -> { type.cast value } }
9
+ subject(:cast) { -> { type.cast value } }
10
10
 
11
11
  context 'with nil' do
12
12
  let(:value) { nil }
13
- it { expect(subject.call).to eq nil }
13
+
14
+ it { expect(cast.call).to eq nil }
14
15
  end
15
16
 
16
17
  context 'with blank string (I)' do
17
18
  let(:value) { '' }
18
- it { expect(subject.call).to eq({}) }
19
+
20
+ it { expect(cast.call).to eq({}) }
19
21
  end
20
22
 
21
23
  context 'with blank string (II)' do
22
24
  let(:value) { " \t" }
23
- it { expect(subject.call).to eq({}) }
25
+
26
+ it { expect(cast.call).to eq({}) }
24
27
  end
25
28
 
26
29
  context 'with hash' do
27
30
  let(:value) { {3 => true, abc: 4} }
28
- it { expect(subject.call).to eq value }
31
+
32
+ it { expect(cast.call).to eq value }
29
33
  end
30
34
 
31
35
  context 'with non hashable object' do
32
36
  let(:value) { Object.new }
37
+
33
38
  it { is_expected.to raise_error TypeError }
34
39
  end
35
40
 
@@ -42,7 +47,7 @@ describe Acfs::Resource::Attributes::Dict do
42
47
  end.new
43
48
  end
44
49
 
45
- it { expect(subject.call).to eq id: value.object_id }
50
+ it { expect(cast.call).to eq id: value.object_id }
46
51
  end
47
52
 
48
53
  context 'with hashable object (II)' do
@@ -54,7 +59,7 @@ describe Acfs::Resource::Attributes::Dict do
54
59
  end.new
55
60
  end
56
61
 
57
- it { expect(subject.call).to eq id: value.object_id }
62
+ it { expect(cast.call).to eq id: value.object_id }
58
63
  end
59
64
 
60
65
  context 'with serializable object' do
@@ -66,12 +71,13 @@ describe Acfs::Resource::Attributes::Dict do
66
71
  end.new
67
72
  end
68
73
 
69
- it { expect(subject.call).to eq id: value.object_id }
74
+ it { expect(cast.call).to eq id: value.object_id }
70
75
  end
71
76
 
72
77
  context 'with hash subclass object' do
73
78
  let(:value) { HashWithIndifferentAccess.new test: :foo }
74
- it { expect(subject.call).to be value }
79
+
80
+ it { expect(cast.call).to be value }
75
81
  end
76
82
  end
77
83
  end
@@ -6,55 +6,65 @@ describe Acfs::Resource::Attributes::Float do
6
6
  let(:type) { Acfs::Resource::Attributes::Float.new }
7
7
 
8
8
  describe '#cast' do
9
- subject { -> { type.cast value } }
9
+ subject(:cast) { -> { type.cast value } }
10
10
 
11
11
  context 'with nil' do
12
12
  let(:value) { nil }
13
- it { expect(subject.call).to eq nil }
13
+
14
+ it { expect(cast.call).to eq nil }
14
15
  end
15
16
 
16
17
  context 'with blank string (I)' do
17
18
  let(:value) { '' }
18
- it { expect(subject.call).to eq 0.0 }
19
+
20
+ it { expect(cast.call).to eq 0.0 }
19
21
  end
20
22
 
21
23
  context 'with blank string (II)' do
22
24
  let(:value) { " \t" }
23
- it { expect(subject.call).to eq 0.0 }
25
+
26
+ it { expect(cast.call).to eq 0.0 }
24
27
  end
25
28
 
26
29
  context 'with float' do
27
30
  let(:value) { 1.7 }
28
- it { expect(subject.call).to eq 1.7 }
31
+
32
+ it { expect(cast.call).to eq 1.7 }
29
33
  end
30
34
 
31
35
  context 'with Infinity' do
32
36
  let(:value) { 'Infinity' }
33
- it { expect(subject.call).to eq ::Float::INFINITY }
37
+
38
+ it { expect(cast.call).to eq ::Float::INFINITY }
34
39
  end
35
40
 
36
41
  context 'with -Infinity' do
37
42
  let(:value) { '-Infinity' }
38
- it { expect(subject.call).to eq -::Float::INFINITY }
43
+
44
+ it { expect(cast.call).to eq(-::Float::INFINITY) }
39
45
  end
40
46
 
41
47
  context 'with NaN' do
42
48
  let(:value) { 'NaN' }
43
- it { expect(subject.call).to be_nan }
49
+
50
+ it { expect(cast.call).to be_nan }
44
51
  end
45
52
 
46
53
  context 'with fixnum' do
47
54
  let(:value) { 1 }
48
- it { expect(subject.call).to eq 1.0 }
55
+
56
+ it { expect(cast.call).to eq 1.0 }
49
57
  end
50
58
 
51
59
  context 'with valid string' do
52
60
  let(:value) { '1.7' }
53
- it { expect(subject.call).to eq 1.7 }
61
+
62
+ it { expect(cast.call).to eq 1.7 }
54
63
  end
55
64
 
56
65
  context 'with invalid string (I)' do
57
66
  let(:value) { '1.7a' }
67
+
58
68
  it { is_expected.to raise_error ArgumentError }
59
69
  end
60
70
  end
@@ -6,30 +6,35 @@ describe Acfs::Resource::Attributes::Integer do
6
6
  let(:type) { Acfs::Resource::Attributes::Integer.new }
7
7
 
8
8
  describe '#cast' do
9
- subject { -> { type.cast value } }
9
+ subject(:cast) { -> { type.cast value } }
10
10
 
11
11
  context 'with nil' do
12
12
  let(:value) { nil }
13
- it { expect(subject.call).to eq nil }
13
+
14
+ it { expect(cast.call).to eq nil }
14
15
  end
15
16
 
16
17
  context 'with empty string' do
17
18
  let(:value) { '' }
18
- it { expect(subject.call).to eq 0 }
19
+
20
+ it { expect(cast.call).to eq 0 }
19
21
  end
20
22
 
21
23
  context 'with blank string' do
22
24
  let(:value) { " \t" }
23
- it { expect(subject.call).to eq 0 }
25
+
26
+ it { expect(cast.call).to eq 0 }
24
27
  end
25
28
 
26
29
  context 'with string' do
27
30
  let(:value) { '123' }
28
- it { expect(subject.call).to eq 123 }
31
+
32
+ it { expect(cast.call).to eq 123 }
29
33
  end
30
34
 
31
35
  context 'with invalid string' do
32
36
  let(:value) { '123a' }
37
+
33
38
  it { is_expected.to raise_error ArgumentError }
34
39
  end
35
40
  end
@@ -6,26 +6,30 @@ describe Acfs::Resource::Attributes::List do
6
6
  let(:type) { Acfs::Resource::Attributes::List.new }
7
7
 
8
8
  describe '#cast' do
9
- subject { -> { type.cast value } }
9
+ subject(:cast) { -> { type.cast value } }
10
10
 
11
11
  context 'with nil' do
12
12
  let(:value) { nil }
13
- it { expect(subject.call).to eq nil }
13
+
14
+ it { expect(cast.call).to eq nil }
14
15
  end
15
16
 
16
17
  context 'with blank string (I)' do
17
18
  let(:value) { '' }
18
- it { expect(subject.call).to eq [] }
19
+
20
+ it { expect(cast.call).to eq [] }
19
21
  end
20
22
 
21
23
  context 'with blank string (II)' do
22
24
  let(:value) { " \t" }
23
- it { expect(subject.call).to eq [] }
25
+
26
+ it { expect(cast.call).to eq [] }
24
27
  end
25
28
 
26
29
  context 'with array' do
27
30
  let(:value) { %w[abc cde efg] }
28
- it { expect(subject.call).to eq value }
31
+
32
+ it { expect(cast.call).to eq value }
29
33
  end
30
34
 
31
35
  context 'with convertable object (I)' do
@@ -37,7 +41,7 @@ describe Acfs::Resource::Attributes::List do
37
41
  end.new
38
42
  end
39
43
 
40
- it { expect(subject.call).to eq [1, 2, 3] }
44
+ it { expect(cast.call).to eq [1, 2, 3] }
41
45
  end
42
46
 
43
47
  context 'with convertable object (II)' do
@@ -49,12 +53,13 @@ describe Acfs::Resource::Attributes::List do
49
53
  end.new
50
54
  end
51
55
 
52
- it { expect(subject.call).to eq [1, 2, 3] }
56
+ it { expect(cast.call).to eq [1, 2, 3] }
53
57
  end
54
58
 
55
59
  context 'with non castable object' do
56
60
  let(:value) { Object.new }
57
- it { expect(subject.call).to eq [value] }
61
+
62
+ it { expect(cast.call).to eq [value] }
58
63
  end
59
64
  end
60
65
  end
@@ -6,36 +6,42 @@ describe Acfs::Resource::Attributes::UUID do
6
6
  let(:type) { Acfs::Resource::Attributes::UUID.new }
7
7
 
8
8
  describe '#cast' do
9
- subject { -> { type.cast(value) } }
9
+ subject(:cast) { -> { type.cast(value) } }
10
10
 
11
11
  context 'with nil' do
12
12
  let(:value) { nil }
13
- it { expect(subject.call).to eq nil }
13
+
14
+ it { expect(cast.call).to eq nil }
14
15
  end
15
16
 
16
17
  context 'with empty string' do
17
18
  let(:value) { '' }
18
- it { expect(subject.call).to eq nil }
19
+
20
+ it { expect(cast.call).to eq nil }
19
21
  end
20
22
 
21
23
  context 'with blank string' do
22
24
  let(:value) { " \t" }
23
- it { expect(subject.call).to eq nil }
25
+
26
+ it { expect(cast.call).to eq nil }
24
27
  end
25
28
 
26
29
  context 'with string UUID' do
27
30
  let(:value) { '450b7a40-94ad-11e3-baa8-0800200c9a66' }
28
- it { expect(subject.call).to be_a String }
29
- it { expect(subject.call).to eq value }
31
+
32
+ it { expect(cast.call).to be_a String }
33
+ it { expect(cast.call).to eq value }
30
34
  end
31
35
 
32
36
  context 'with invalid string' do
33
37
  let(:value) { 'invalid string' }
38
+
34
39
  it { is_expected.to raise_error TypeError, /invalid UUID/i }
35
40
  end
36
41
 
37
42
  context 'with invalid UUID' do
38
43
  let(:value) { 'xxxxxxxx-yyyy-11e3-baa8-0800200c9a66' }
44
+
39
45
  it { is_expected.to raise_error TypeError, /invalid UUID/i }
40
46
  end
41
47
  end