acfs 0.50.0 → 1.0.0.dev.1.b297

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 (90) hide show
  1. checksums.yaml +13 -5
  2. data/CHANGELOG.md +0 -80
  3. data/README.md +9 -8
  4. data/acfs.gemspec +7 -7
  5. data/lib/acfs.rb +5 -7
  6. data/lib/acfs/adapter/base.rb +2 -0
  7. data/lib/acfs/adapter/typhoeus.rb +13 -17
  8. data/lib/acfs/collections/paginatable.rb +10 -10
  9. data/lib/acfs/configuration.rb +5 -4
  10. data/lib/acfs/errors.rb +9 -10
  11. data/lib/acfs/global.rb +7 -16
  12. data/lib/acfs/location.rb +11 -11
  13. data/lib/acfs/middleware/base.rb +2 -1
  14. data/lib/acfs/middleware/json_decoder.rb +16 -0
  15. data/lib/acfs/middleware/json_encoder.rb +20 -0
  16. data/lib/acfs/middleware/logger.rb +2 -0
  17. data/lib/acfs/middleware/msgpack_decoder.rb +26 -0
  18. data/lib/acfs/middleware/msgpack_encoder.rb +19 -0
  19. data/lib/acfs/middleware/print.rb +2 -0
  20. data/lib/acfs/operation.rb +5 -5
  21. data/lib/acfs/request.rb +4 -4
  22. data/lib/acfs/request/callbacks.rb +3 -2
  23. data/lib/acfs/resource.rb +2 -2
  24. data/lib/acfs/resource/attributes.rb +38 -11
  25. data/lib/acfs/resource/attributes/base.rb +19 -10
  26. data/lib/acfs/resource/attributes/boolean.rb +8 -10
  27. data/lib/acfs/resource/attributes/date_time.rb +9 -6
  28. data/lib/acfs/resource/attributes/float.rb +5 -11
  29. data/lib/acfs/resource/attributes/integer.rb +5 -7
  30. data/lib/acfs/resource/attributes/list.rb +6 -13
  31. data/lib/acfs/resource/attributes/string.rb +5 -3
  32. data/lib/acfs/resource/attributes/uuid.rb +17 -8
  33. data/lib/acfs/resource/dirty.rb +15 -3
  34. data/lib/acfs/resource/loadable.rb +1 -0
  35. data/lib/acfs/resource/locatable.rb +4 -0
  36. data/lib/acfs/resource/operational.rb +2 -0
  37. data/lib/acfs/resource/persistence.rb +17 -17
  38. data/lib/acfs/resource/query_methods.rb +7 -8
  39. data/lib/acfs/resource/service.rb +2 -0
  40. data/lib/acfs/resource/validation.rb +4 -4
  41. data/lib/acfs/response.rb +2 -1
  42. data/lib/acfs/response/formats.rb +3 -2
  43. data/lib/acfs/response/status.rb +5 -3
  44. data/lib/acfs/runner.rb +11 -21
  45. data/lib/acfs/service.rb +6 -4
  46. data/lib/acfs/service/middleware.rb +30 -20
  47. data/lib/acfs/singleton_resource.rb +2 -0
  48. data/lib/acfs/stub.rb +21 -30
  49. data/lib/acfs/util.rb +1 -1
  50. data/lib/acfs/version.rb +4 -6
  51. data/spec/acfs/adapter/typhoeus_spec.rb +4 -12
  52. data/spec/acfs/collection_spec.rb +33 -45
  53. data/spec/acfs/configuration_spec.rb +1 -9
  54. data/spec/acfs/global_spec.rb +3 -21
  55. data/spec/acfs/middleware/json_decoder_spec.rb +45 -0
  56. data/spec/acfs/middleware/msgpack_decoder_spec.rb +36 -0
  57. data/spec/acfs/request/callbacks_spec.rb +8 -8
  58. data/spec/acfs/request_spec.rb +5 -5
  59. data/spec/acfs/resource/attributes/boolean_spec.rb +9 -40
  60. data/spec/acfs/resource/attributes/date_time_spec.rb +35 -29
  61. data/spec/acfs/resource/attributes/float_spec.rb +9 -48
  62. data/spec/acfs/resource/attributes/list_spec.rb +19 -43
  63. data/spec/acfs/resource/attributes/uuid_spec.rb +54 -31
  64. data/spec/acfs/resource/attributes_spec.rb +31 -17
  65. data/spec/acfs/resource/locatable_spec.rb +2 -2
  66. data/spec/acfs/resource/persistance_spec.rb +34 -65
  67. data/spec/acfs/resource/query_methods_spec.rb +90 -97
  68. data/spec/acfs/resource/validation_spec.rb +5 -4
  69. data/spec/acfs/response/formats_spec.rb +4 -4
  70. data/spec/acfs/response/status_spec.rb +1 -1
  71. data/spec/acfs/runner_spec.rb +3 -28
  72. data/spec/acfs/service/middleware_spec.rb +20 -4
  73. data/spec/acfs/service_spec.rb +5 -3
  74. data/spec/acfs/singleton_resource_spec.rb +2 -1
  75. data/spec/acfs/stub_spec.rb +22 -137
  76. data/spec/acfs_spec.rb +19 -22
  77. data/spec/spec_helper.rb +2 -3
  78. data/spec/support/service.rb +6 -10
  79. data/spec/support/shared/find_callbacks.rb +7 -7
  80. metadata +36 -43
  81. data/lib/acfs/middleware/json.rb +0 -27
  82. data/lib/acfs/middleware/msgpack.rb +0 -30
  83. data/lib/acfs/middleware/serializer.rb +0 -39
  84. data/lib/acfs/resource/attributes/dict.rb +0 -37
  85. data/lib/acfs/service/middleware/stack.rb +0 -63
  86. data/spec/acfs/middleware/json_spec.rb +0 -63
  87. data/spec/acfs/middleware/msgpack_spec.rb +0 -60
  88. data/spec/acfs/operation_spec.rb +0 -10
  89. data/spec/acfs/resource/attributes/dict_spec.rb +0 -75
  90. data/spec/acfs/resource/attributes/integer_spec.rb +0 -34
@@ -1,59 +1,20 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Acfs::Resource::Attributes::Float do
4
- let(:type) { Acfs::Resource::Attributes::Float.new }
4
+ let(:model) { Class.new Acfs::Resource }
5
+ subject { described_class.new }
5
6
 
6
- describe '#cast' do
7
- subject { -> { type.cast value } }
8
-
9
- context 'with nil' do
10
- let(:value) { nil }
11
- it { expect(subject.call).to eq nil }
12
- end
13
-
14
- context 'with blank string (I)' do
15
- let(:value) { '' }
16
- it { expect(subject.call).to eq 0.0 }
17
- end
18
-
19
- context 'with blank string (II)' do
20
- let(:value) { " \t" }
21
- it { expect(subject.call).to eq 0.0 }
22
- end
23
-
24
- context 'with float' do
25
- let(:value) { 1.7 }
26
- it { expect(subject.call).to eq 1.7 }
27
- end
28
-
29
- context 'with Infinity' do
30
- let(:value) { 'Infinity' }
31
- it { expect(subject.call).to eq ::Float::INFINITY }
32
- end
33
-
34
- context 'with -Infinity' do
35
- let(:value) { '-Infinity' }
36
- it { expect(subject.call).to eq -::Float::INFINITY }
37
- end
38
-
39
- context 'with NaN' do
40
- let(:value) { 'NaN' }
41
- it { expect(subject.call).to be_nan }
42
- end
43
-
44
- context 'with fixnum' do
45
- let(:value) { 1 }
46
- it { expect(subject.call).to eq 1.0 }
7
+ describe 'cast' do
8
+ it 'should return same object, if obj is already of float class' do
9
+ expect(subject.cast(1.3)).to be == 1.3
47
10
  end
48
11
 
49
- context 'with valid string' do
50
- let(:value) { '1.7' }
51
- it { expect(subject.call).to eq 1.7 }
12
+ it 'should return parsed object, if obj is of Fixnum class' do
13
+ expect(subject.cast(7)).to be == 7.0
52
14
  end
53
15
 
54
- context 'with invalid string (I)' do
55
- let(:value) { '1.7a' }
56
- it { is_expected.to raise_error ArgumentError }
16
+ it 'should return parsed object, if obj is of String class containing a float' do
17
+ expect(subject.cast('1.7')).to be == 1.7
57
18
  end
58
19
  end
59
20
  end
@@ -1,58 +1,34 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Acfs::Resource::Attributes::List do
4
- let(:type) { Acfs::Resource::Attributes::List.new }
5
-
6
- describe '#cast' do
7
- subject { -> { type.cast value } }
8
-
9
- context 'with nil' do
10
- let(:value) { nil }
11
- it { expect(subject.call).to eq nil }
12
- end
13
-
14
- context 'with blank string (I)' do
15
- let(:value) { '' }
16
- it { expect(subject.call).to eq Array.new }
17
- end
18
-
19
- context 'with blank string (II)' do
20
- let(:value) { " \t" }
21
- it { expect(subject.call).to eq Array.new }
22
- end
4
+ let(:model) { Class.new Acfs::Resource }
5
+ subject { described_class.new }
23
6
 
7
+ describe '.cast' do
24
8
  context 'with array' do
25
- let(:value) { %w(abc cde efg) }
26
- it { expect(subject.call).to eq value }
27
- end
9
+ let(:sample) { %w(abc cde efg) }
28
10
 
29
- context 'with convertable object (I)' do
30
- let(:value) do
31
- Class.new do
32
- def to_ary
33
- [1, 2, 3]
34
- end
35
- end.new
11
+ it 'should return unmodified array' do
12
+ expect(subject.cast(sample)).to be == %w(abc cde efg)
36
13
  end
37
-
38
- it { expect(subject.call).to eq [1, 2, 3] }
39
14
  end
40
15
 
41
- context 'with convertable object (II)' do
42
- let(:value) do
43
- Class.new do
44
- def to_a
45
- [1, 2, 3]
46
- end
47
- end.new
48
- end
16
+ context 'with not listable object' do
17
+ let(:sample) { Object.new }
49
18
 
50
- it { expect(subject.call).to eq [1, 2, 3] }
19
+ it 'should raise a TypeError' do
20
+ expect do
21
+ subject.cast(sample)
22
+ end.to raise_error TypeError
23
+ end
51
24
  end
52
25
 
53
- context 'with non castable object' do
54
- let(:value) { Object.new }
55
- it { expect(subject.call).to eq [value] }
26
+ context 'with listable object' do
27
+ let(:sample) { 5..10 }
28
+
29
+ it 'should cast object to array' do
30
+ expect(subject.cast(sample)).to be == [5, 6, 7, 8, 9, 10]
31
+ end
56
32
  end
57
33
  end
58
34
  end
@@ -1,40 +1,63 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Acfs::Resource::Attributes::UUID do
4
- let(:type) { Acfs::Resource::Attributes::UUID.new }
5
-
6
- describe '#cast' do
7
- subject { -> { type.cast(value) } }
8
-
9
- context 'with nil' do
10
- let(:value) { nil }
11
- it { expect(subject.call).to eq nil }
4
+ let(:model) { Class.new Acfs::Resource }
5
+ let(:params) { {} }
6
+ let(:instance) { described_class.new params }
7
+ subject { instance }
8
+
9
+ describe '#cast_type' do
10
+ let(:param) { '450b7a40-94ad-11e3-baa8-0800200c9a66' }
11
+ let(:action) { instance.cast param }
12
+ subject { action }
13
+
14
+ context 'with String as param' do
15
+ context 'with valid UUID' do
16
+ let(:param) { '450b7a40-94ad-11e3-baa8-0800200c9a66' }
17
+ it { should be_a String }
18
+ it { should eq param }
19
+ end
20
+
21
+ context 'with invalid UUID' do
22
+ subject { -> { action } }
23
+
24
+ context 'with random non-empty string' do
25
+ let(:param) { 'invalid string' }
26
+ it { should raise_error ArgumentError }
27
+ end
28
+
29
+ context 'with UUID string containing invalid characters' do
30
+ let(:param) { 'xxxxxxxx-yyyy-11e3-baa8-0800200c9a66' }
31
+ it { should raise_error ArgumentError }
32
+ end
33
+
34
+ context 'with empty string' do
35
+ let(:param) { '' }
36
+
37
+ context 'with allow_nil option' do
38
+ let(:params) { {allow_nil: true} }
39
+ subject { action }
40
+ it { should eq nil }
41
+ end
42
+
43
+ context 'without allow_nil option' do
44
+ let(:params) { {allow_nil: false} }
45
+ it { should raise_error ArgumentError }
46
+ end
47
+ end
48
+ end
12
49
  end
13
50
 
14
- context 'with empty string' do
15
- let(:value) { '' }
16
- it { expect(subject.call).to eq nil }
17
- end
18
-
19
- context 'with blank string' do
20
- let(:value) { " \t" }
21
- it { expect(subject.call).to eq nil }
22
- end
23
-
24
- context 'with string UUID' do
25
- let(:value) { '450b7a40-94ad-11e3-baa8-0800200c9a66' }
26
- it { expect(subject.call).to be_a String }
27
- it { expect(subject.call).to eq value }
28
- end
29
-
30
- context 'with invalid string' do
31
- let(:value) { 'invalid string' }
32
- it { is_expected.to raise_error TypeError, /invalid UUID/i }
33
- end
51
+ context 'with non-String as param' do
52
+ subject { -> { action } }
34
53
 
35
- context 'with invalid UUID' do
36
- let(:value) { 'xxxxxxxx-yyyy-11e3-baa8-0800200c9a66' }
37
- it { is_expected.to raise_error TypeError, /invalid UUID/i }
54
+ invalid_params = {fixnum: 1, float: 3.2, symbol: :invalid, boolean: true}
55
+ invalid_params.each do |type, incorrect_param|
56
+ context "with #{type} as param" do
57
+ let(:param) { incorrect_param }
58
+ it { should raise_error ArgumentError }
59
+ end
60
+ end
38
61
  end
39
62
  end
40
63
  end
@@ -2,7 +2,6 @@ require 'spec_helper'
2
2
 
3
3
  describe Acfs::Resource::Attributes do
4
4
  let(:model) { Class.new Acfs::Resource }
5
- let(:submodel) { Class.new model }
6
5
 
7
6
  describe '#initialize' do
8
7
  before { model.attribute :name, :string, default: 'John' }
@@ -47,15 +46,15 @@ describe Acfs::Resource::Attributes do
47
46
  end
48
47
  end
49
48
  let(:args) { [params] }
50
- let(:params) { {name: 'James'} }
49
+ let(:params){ {name: 'James'} }
51
50
  let(:m) { model.new }
52
- let(:action) { -> { m.write_attributes(*args) } }
51
+ let(:action) { ->{ m.write_attributes(*args) } }
53
52
  subject { action }
54
53
 
55
54
  it 'should update attributes' do
56
55
  should change(m, :attributes)
57
- .from(name: 'The Great John', age: 25)
58
- .to(name: 'The Great James', age: 25)
56
+ .from(name: 'The Great John', age: 25)
57
+ .to(name: 'The Great James', age: 25)
59
58
  end
60
59
 
61
60
  context 'without non-hash params' do
@@ -72,8 +71,8 @@ describe Acfs::Resource::Attributes do
72
71
 
73
72
  it 'should update known attributes and store unknown' do
74
73
  should change(m, :attributes)
75
- .from(name: 'The Great John', age: 25)
76
- .to(name: 'The Great James', age: 25, born_at: 'today')
74
+ .from(name: 'The Great John', age: 25)
75
+ .to(name: 'The Great James', age: 25, born_at: 'today')
77
76
  end
78
77
 
79
78
  context 'with unknown: :raise option' do
@@ -138,7 +137,7 @@ describe Acfs::Resource::Attributes do
138
137
  end
139
138
 
140
139
  describe 'class' do
141
- describe '#attributes' do
140
+ describe '#attribute' do
142
141
  it 'should add an attribute to model attribute list' do
143
142
  model.send :attribute, :name, :string
144
143
 
@@ -151,27 +150,42 @@ describe Acfs::Resource::Attributes do
151
150
  expect(model.attributes.symbolize_keys).to eq name: 'John'
152
151
  end
153
152
 
154
- it 'should accept a symbolic type' do
153
+ it 'should accept an symbolic type' do
155
154
  model.send :attribute, :age, :integer, default: '12'
156
155
 
157
156
  expect(model.attributes.symbolize_keys).to eq age: 12
158
157
  end
159
158
 
160
- it 'should accept a class type' do
159
+ it 'should accept an class type' do
161
160
  model.send :attribute, :age, Acfs::Resource::Attributes::Integer,
162
- default: '12'
161
+ default: '12'
163
162
 
164
163
  expect(model.attributes.symbolize_keys).to eq age: 12
165
164
  end
166
165
 
167
- context 'on inherited resources' do
168
- before do
169
- model.attribute :age, :integer, default: 5
170
- submodel.attribute :born_at, :date_time
166
+ context 'allow nil option' do
167
+ it 'should allow nil as value' do
168
+ model.send :attribute, :updated_at, :date_time,
169
+ default: DateTime.new, allow_nil: true
170
+
171
+ resource = model.new
172
+ expect(resource.updated_at).to eq DateTime.new
173
+
174
+ resource.updated_at = ''
175
+ expect(resource.updated_at).to eq nil
171
176
  end
177
+ end
178
+
179
+ context 'allow blank option' do
180
+ it 'should allow blank as value' do
181
+ model.send :attribute, :updated_at, :date_time,
182
+ default: DateTime.new, allow_blank: true
183
+
184
+ resource = model.new
185
+ expect(resource.updated_at).to eq DateTime.new
172
186
 
173
- it 'includes superclass attributes' do
174
- expect(submodel.attributes.keys).to match_array %w(age born_at)
187
+ resource.updated_at = ''
188
+ expect(resource.updated_at).to eq nil
175
189
  end
176
190
  end
177
191
  end
@@ -28,7 +28,7 @@ describe Acfs::Resource::Locatable do
28
28
 
29
29
  context 'without attributes' do
30
30
  it 'should raise an error if attribute is missing' do
31
- expect { model.url }.to raise_error ArgumentError
31
+ expect{ model.url }.to raise_error ArgumentError
32
32
  end
33
33
  end
34
34
  end
@@ -59,7 +59,7 @@ describe Acfs::Resource::Locatable do
59
59
  context ':update location' do
60
60
  let(:action) { :update }
61
61
  its(:raw_uri) do
62
- expect { subject }.to raise_error ArgumentError, /update.*disabled/
62
+ expect{ subject }.to raise_error ArgumentError, /update.*disabled/
63
63
  end
64
64
  end
65
65
 
@@ -3,31 +3,31 @@ require 'spec_helper'
3
3
  describe Acfs::Resource::Persistence do
4
4
  let(:model_class) { MyUser }
5
5
  before do
6
- @get_stub = stub_request(:get, 'http://users.example.org/users/1').to_return response(id: 1, name: 'Anon', age: 12)
6
+ @get_stub = stub_request(:get, 'http://users.example.org/users/1').to_return response({ id: 1, name: 'Anon', age: 12 })
7
7
 
8
8
  @patch_stub = stub_request(:put, 'http://users.example.org/users/1')
9
- .with(body: '{"id":1,"name":"Idefix","age":12}')
10
- .to_return response(id: 1, name: 'Idefix', age: 12)
9
+ .with(body: '{"id":1,"name":"Idefix","age":12}')
10
+ .to_return response({ id: 1, name: 'Idefix', age: 12 })
11
11
 
12
12
  @post_stub = stub_request(:post, 'http://users.example.org/users')
13
- .with(body: '{"id":null,"name":"Idefix","age":12}')
14
- .to_return response(id: 5, name: 'Idefix', age: 12)
13
+ .with(body: '{"id":null,"name":"Idefix","age":12}')
14
+ .to_return response({ id: 5, name: 'Idefix', age: 12 })
15
15
 
16
16
  stub_request(:post, 'http://users.example.org/users')
17
17
  .with(body: '{"id":null,"name":"Anon","age":null}')
18
- .to_return response(id: 5, name: 'Anon', age: 12)
18
+ .to_return response({ id: 5, name: 'Anon', age: 12 })
19
19
 
20
20
  stub_request(:post, 'http://users.example.org/users')
21
21
  .with(body: '{id:null,"name":"Idefix","age":12}')
22
- .to_return response(id: 5, name: 'Idefix', age: 12)
22
+ .to_return response({ id: 5, name: 'Idefix', age: 12 })
23
23
 
24
24
  stub_request(:post, 'http://users.example.org/users')
25
25
  .with(body: '{"id":null,"name":null,"age":12}')
26
- .to_return response({errors: {name: ['required']}}, {status: 422})
26
+ .to_return response({ errors: { name: [ 'required' ] }}, status: 422)
27
27
 
28
28
  @del = stub_request(:delete, 'http://users.example.org/users/1')
29
- .with(body: '{}')
30
- .to_return response({id: 1, name: 'Idefix', age: 12}, {status: 200})
29
+ .with(body: '{}')
30
+ .to_return response({ id: 1, name: 'Idefix', age: 12 }, status: 200)
31
31
  end
32
32
 
33
33
  context 'new model' do
@@ -65,7 +65,7 @@ describe Acfs::Resource::Persistence do
65
65
  let!(:req) do
66
66
  stub_request(:post, 'http://users.example.org/users')
67
67
  .with(body: '{"id":null,"name":"Idefix","age":null,"born_at":"Berlin"}')
68
- .to_return response(id: 5, name: 'Idefix', age: 12, wuff: 'woa')
68
+ .to_return response({id: 5, name: 'Idefix', age: 12, wuff: 'woa'})
69
69
  end
70
70
  let(:model) { model_class.new name: 'Idefix', born_at: 'Berlin' }
71
71
 
@@ -100,12 +100,12 @@ describe Acfs::Resource::Persistence do
100
100
 
101
101
  describe '#update_attributes' do
102
102
  subject { -> { model.update_attributes name: 'John' } }
103
- it { expect { subject.call }.to raise_error Acfs::ResourceNotLoaded }
103
+ it { expect{ subject.call }.to raise_error Acfs::ResourceNotLoaded }
104
104
  end
105
105
 
106
106
  describe '#update_attributes!' do
107
107
  subject { -> { model.update_attributes! name: 'John' } }
108
- it { expect { subject.call }.to raise_error Acfs::ResourceNotLoaded }
108
+ it { expect{ subject.call }.to raise_error Acfs::ResourceNotLoaded }
109
109
  end
110
110
  end
111
111
 
@@ -122,53 +122,22 @@ describe Acfs::Resource::Persistence do
122
122
  let(:model) { model_class.find 1 }
123
123
  before { model; Acfs.run; model.name = 'dhh' }
124
124
 
125
- it { expect(model).to be_persisted }
125
+ it { expect(model).to_not be_persisted }
126
126
  it { expect(model).to_not be_new }
127
127
  end
128
128
 
129
129
  describe '#delete!' do
130
130
  let(:model) { model_class.find 1 }
131
- let(:before_acfs_run) {}
132
-
133
- describe 'normal delete actions' do
134
- before { model; Acfs.run }
135
-
136
- it 'should trigger DELETE request' do
137
- model.delete!
138
- expect(@del).to have_been_requested
139
- end
131
+ before { model; Acfs.run }
140
132
 
141
- it 'should be frozen after DELETE' do
142
- model.delete!
143
- expect(model.__getobj__).to be_frozen
144
- end
133
+ it 'should trigger DELETE request' do
134
+ model.delete!
135
+ expect(@del).to have_been_requested
145
136
  end
146
137
 
147
- describe 'correct URL generation' do
148
- let(:model_class) { PathArguments }
149
- let(:model) { model_class.find 1, params: {required_arg: 'some_value'} }
150
-
151
- before :each do
152
- resource_url = 'http://users.example.org/some_value/users/1'
153
- @my_get_stub = stub_request(:get, resource_url)
154
- .to_return response(id: 1, required_arg: 'some_value')
155
- @my_delete_stub = stub_request(:delete, resource_url)
156
- .with(body: '{}')
157
- .to_return response({id: 1, required_arg: 'some_value'}, {status: 200})
158
- model
159
- Acfs.run
160
- end
161
-
162
- it 'should not raise an error on URL generation' do
163
- expect do
164
- model.delete!
165
- end.not_to raise_error
166
- end
167
-
168
- it 'should request the delete' do
169
- model.delete!
170
- expect(@my_delete_stub).to have_been_requested
171
- end
138
+ it 'should be frozen after DELETE' do
139
+ model.delete!
140
+ expect(model.__getobj__).to be_frozen
172
141
  end
173
142
  end
174
143
 
@@ -187,8 +156,8 @@ describe Acfs::Resource::Persistence do
187
156
  end
188
157
 
189
158
  it 'should pass second hash to save' do
190
- expect(model.__getobj__).to receive(:save).with(bla: 'blub')
191
- model.update_attributes({name: 'Idefix'}, {bla: 'blub'})
159
+ expect(model.__getobj__).to receive(:save).with({ bla: 'blub' })
160
+ model.update_attributes({ name: 'Idefix' }, { bla: 'blub' })
192
161
  end
193
162
  end
194
163
 
@@ -207,8 +176,8 @@ describe Acfs::Resource::Persistence do
207
176
  end
208
177
 
209
178
  it 'should pass second hash to save' do
210
- expect(model.__getobj__).to receive(:save!).with(bla: 'blub')
211
- model.update_attributes!({name: 'Idefix'}, {bla: 'blub'})
179
+ expect(model.__getobj__).to receive(:save!).with({ bla: 'blub' })
180
+ model.update_attributes!({ name: 'Idefix' }, { bla: 'blub' })
212
181
  end
213
182
  end
214
183
  end
@@ -221,13 +190,13 @@ describe Acfs::Resource::Persistence do
221
190
  before do
222
191
  stub_request(:put, 'http://users.example.org/users/1')
223
192
  .with(body: '{"id":1,"name":"","age":12}')
224
- .to_return response({errors: {name: ['required']}}, {status: 422})
193
+ .to_return response({ errors: { name: [ 'required' ] }}, status: 422)
225
194
  end
226
195
 
227
196
  it 'should set local errors hash' do
228
197
  model.name = ''
229
198
  model.save! rescue nil
230
- expect(model.errors.to_hash).to be == {name: %w(required)}
199
+ expect(model.errors.to_hash).to be == { name: %w(required) }
231
200
  end
232
201
  end
233
202
 
@@ -237,15 +206,15 @@ describe Acfs::Resource::Persistence do
237
206
 
238
207
  before do
239
208
  stub_request(:put, 'http://users.example.org/users/1')
240
- .with(body: '{"id":1,"name":"","age":12}')
241
- .to_return response({errors: {name: ['required']}}, {status: 422})
209
+ .with(body: '{"id":1,"name":"","age":12}')
210
+ .to_return response({ errors: { name: [ 'required' ] }}, status: 422)
242
211
  end
243
212
  end
244
213
  end
245
214
 
246
215
  describe '.create!' do
247
216
  context 'with valid data' do
248
- let(:data) { {name: 'Idefix', age: 12} }
217
+ let(:data) { { name: 'Idefix', age: 12 } }
249
218
 
250
219
  it 'should create new resource' do
251
220
  model = model_class.create! data
@@ -263,9 +232,9 @@ describe Acfs::Resource::Persistence do
263
232
  let(:data) { {name: nil, age: 12} }
264
233
 
265
234
  it 'should raise an error' do
266
- expect { model_class.create! data }.to \
235
+ expect{ model_class.create! data }.to \
267
236
  raise_error(::Acfs::InvalidResource) do |error|
268
- expect(error.errors).to be == {'name' => %w(required)}
237
+ expect(error.errors).to be == { 'name' => %w(required) }
269
238
  end
270
239
  end
271
240
  end
@@ -303,13 +272,13 @@ describe Acfs::Resource::Persistence do
303
272
  let!(:req) do
304
273
  stub_request(:post, 'http://users.example.org/users')
305
274
  .with(body: '{"id":null,"name":"Anon","age":9,"born_at":"today"}')
306
- .to_return response(id: 5, name: 'Anon', age: 9)
275
+ .to_return response({id: 5, name: 'Anon', age: 9})
307
276
  end
308
277
  let(:data) { {age: 9, born_at: 'today'} }
309
278
 
310
279
  it 'should store them in attributes' do
311
280
  expect(subject.attributes).to eq 'id' => 5, 'name' => 'Anon',
312
- 'age' => 9, 'born_at' => 'today'
281
+ 'age' => 9, 'born_at' => 'today'
313
282
  end
314
283
  end
315
284
  end