rest-in-peace 4.0.0 → 4.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/VERSION +1 -1
- data/lib/rest_in_peace/active_model_api.rb +15 -1
- data/lib/rest_in_peace/api_call.rb +6 -1
- data/lib/rest_in_peace/template_sanitizer.rb +3 -1
- data/spec/rest_in_peace/active_model_api_spec.rb +19 -3
- data/spec/rest_in_peace/template_sanitizer_spec.rb +16 -2
- metadata +2 -2
data/.gitignore
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
4.
|
1
|
+
4.1.0
|
@@ -18,6 +18,8 @@ module RESTinPeace
|
|
18
18
|
|
19
19
|
base.send(:alias_method, :save_without_dirty_tracking, :save)
|
20
20
|
base.send(:alias_method, :save, :save_with_dirty_tracking)
|
21
|
+
base.send(:alias_method, :create_without_dirty_tracking, :create)
|
22
|
+
base.send(:alias_method, :create, :create_with_dirty_tracking)
|
21
23
|
|
22
24
|
def base.human_attribute_name(attr, options = {})
|
23
25
|
attr.to_s
|
@@ -35,8 +37,20 @@ module RESTinPeace
|
|
35
37
|
|
36
38
|
def save_with_dirty_tracking
|
37
39
|
save_without_dirty_tracking.tap do
|
38
|
-
clear_changes
|
40
|
+
clear_changes if valid?
|
39
41
|
end
|
42
|
+
valid?
|
43
|
+
end
|
44
|
+
|
45
|
+
def create_with_dirty_tracking
|
46
|
+
create_without_dirty_tracking.tap do
|
47
|
+
clear_changes if valid?
|
48
|
+
end
|
49
|
+
valid?
|
50
|
+
end
|
51
|
+
|
52
|
+
def valid?
|
53
|
+
!errors.any?
|
40
54
|
end
|
41
55
|
|
42
56
|
def persisted?
|
@@ -8,6 +8,7 @@ module RESTinPeace
|
|
8
8
|
@url_template = url_template
|
9
9
|
@klass = klass
|
10
10
|
@params = params
|
11
|
+
@attributes = {}
|
11
12
|
end
|
12
13
|
|
13
14
|
def get
|
@@ -43,8 +44,12 @@ module RESTinPeace
|
|
43
44
|
sanitizer.leftover_params
|
44
45
|
end
|
45
46
|
|
47
|
+
def attributes
|
48
|
+
@attributes = @klass.to_h if @klass.respond_to?(:to_h)
|
49
|
+
end
|
50
|
+
|
46
51
|
def sanitizer
|
47
|
-
@sanitizer ||= RESTinPeace::TemplateSanitizer.new(@url_template, @params)
|
52
|
+
@sanitizer ||= RESTinPeace::TemplateSanitizer.new(@url_template, @params, attributes)
|
48
53
|
end
|
49
54
|
|
50
55
|
def convert_response(response)
|
@@ -5,9 +5,10 @@ module RESTinPeace
|
|
5
5
|
|
6
6
|
class IncompleteParams < RESTinPeace::DefaultError; end
|
7
7
|
|
8
|
-
def initialize(url_template, params)
|
8
|
+
def initialize(url_template, params, attributes)
|
9
9
|
@url_template = url_template
|
10
10
|
@params = params.dup
|
11
|
+
@attributes = attributes
|
11
12
|
@url = nil
|
12
13
|
end
|
13
14
|
|
@@ -16,6 +17,7 @@ module RESTinPeace
|
|
16
17
|
@url = @url_template.dup
|
17
18
|
tokens.each do |token|
|
18
19
|
param = @params.delete(token.to_sym)
|
20
|
+
param ||= @attributes[token.to_sym]
|
19
21
|
raise IncompleteParams, "Unknown parameter for token :#{token} found" unless param
|
20
22
|
@url.sub!(%r{:#{token}}, param.to_s)
|
21
23
|
end
|
@@ -124,7 +124,7 @@ describe RESTinPeace do
|
|
124
124
|
let(:response) { OpenStruct.new(body: { name: 'new name from api' }) }
|
125
125
|
|
126
126
|
specify { expect { instance.save }.to_not raise_error }
|
127
|
-
specify { expect(instance.save
|
127
|
+
specify { expect(instance.save).to eq(true) }
|
128
128
|
specify { expect { instance.save }.to change(instance, :name) }
|
129
129
|
end
|
130
130
|
|
@@ -137,6 +137,7 @@ describe RESTinPeace do
|
|
137
137
|
specify { expect { instance.save }.to change { instance.errors.any? } }
|
138
138
|
specify { expect { instance.save }.to_not change { instance.description } }
|
139
139
|
specify { expect { instance.save }.to_not change { instance.name } }
|
140
|
+
specify { expect(instance.save).to eq(false) }
|
140
141
|
end
|
141
142
|
end
|
142
143
|
|
@@ -145,7 +146,7 @@ describe RESTinPeace do
|
|
145
146
|
let(:response) { OpenStruct.new(body: { name: 'new name from api' }) }
|
146
147
|
|
147
148
|
specify { expect { instance.create }.to_not raise_error }
|
148
|
-
specify { expect(instance.create
|
149
|
+
specify { expect(instance.create).to eq(true) }
|
149
150
|
specify { expect { instance.create }.to change(instance, :name) }
|
150
151
|
end
|
151
152
|
|
@@ -158,11 +159,13 @@ describe RESTinPeace do
|
|
158
159
|
specify { expect { instance.create }.to change { instance.errors.any? } }
|
159
160
|
specify { expect { instance.create }.to_not change { instance.description } }
|
160
161
|
specify { expect { instance.create }.to_not change { instance.name } }
|
162
|
+
specify { expect(instance.save).to eq(false) }
|
161
163
|
end
|
162
164
|
end
|
163
165
|
|
164
166
|
describe 'validation handling' do
|
165
167
|
let(:description) { 'desc' }
|
168
|
+
let(:errors) { { description: ['must not be empty'] } }
|
166
169
|
|
167
170
|
specify { expect(instance).to respond_to(:read_attribute_for_validation).with(1).argument }
|
168
171
|
specify { expect(instance.read_attribute_for_validation(:description)).to eq('desc') }
|
@@ -172,9 +175,22 @@ describe RESTinPeace do
|
|
172
175
|
end
|
173
176
|
|
174
177
|
describe '#errors=' do
|
175
|
-
let(:errors) { { description: ['must not be empty'] } }
|
176
178
|
specify { expect { instance.errors = errors }.to change { instance.errors.count } }
|
177
179
|
end
|
180
|
+
|
181
|
+
describe '#valid?' do
|
182
|
+
context 'without errors' do
|
183
|
+
specify { expect(instance.valid?).to eq(true) }
|
184
|
+
end
|
185
|
+
|
186
|
+
context 'with errors' do
|
187
|
+
before do
|
188
|
+
instance.errors = errors
|
189
|
+
end
|
190
|
+
|
191
|
+
specify { expect(instance.valid?).to eq(false) }
|
192
|
+
end
|
193
|
+
end
|
178
194
|
end
|
179
195
|
end
|
180
196
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'rest_in_peace/template_sanitizer'
|
2
2
|
|
3
3
|
describe RESTinPeace::TemplateSanitizer do
|
4
|
-
|
5
|
-
let(:
|
4
|
+
let(:template_sanitizer) { RESTinPeace::TemplateSanitizer.new(url_template, params, attributes) }
|
5
|
+
let(:attributes) { {} }
|
6
6
|
|
7
7
|
describe '#url' do
|
8
8
|
subject { template_sanitizer.url }
|
@@ -48,6 +48,20 @@ describe RESTinPeace::TemplateSanitizer do
|
|
48
48
|
let(:url_template) { '/a/:id' }
|
49
49
|
specify { expect { subject }.to_not change { params } }
|
50
50
|
end
|
51
|
+
|
52
|
+
context 'tokens from attributes' do
|
53
|
+
let(:params) { { id: 1 } }
|
54
|
+
let(:attributes) { { a_id: 2 } }
|
55
|
+
let(:url_template) { '/a/:a_id/b/:id' }
|
56
|
+
specify { expect(subject).to eq('/a/2/b/1') }
|
57
|
+
end
|
58
|
+
|
59
|
+
context 'incomplete params and attributes' do
|
60
|
+
let(:params) { { id: 1 } }
|
61
|
+
let(:attributes) { {} }
|
62
|
+
let(:url_template) { '/a/:a_id/b/:id' }
|
63
|
+
specify { expect { subject }.to raise_error(RESTinPeace::TemplateSanitizer::IncompleteParams) }
|
64
|
+
end
|
51
65
|
end
|
52
66
|
|
53
67
|
describe '#tokens' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rest-in-peace
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-06-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|