slim_form_object 0.5.3 → 0.5.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: da6582abfd769d9af8238cfad6ca79a890b62308
4
- data.tar.gz: b6b7e88761e2684826122f454d8374413981f532
3
+ metadata.gz: 20e76ba7c91e9ca6496af6eddddec79358576136
4
+ data.tar.gz: 47d1ddf450ab45e020d63d0b5c43e16a54ce8946
5
5
  SHA512:
6
- metadata.gz: 1f6b7b6a8bcc973b1ad647960fffd088e2a07ceb9efc34fa30af6d823398c80bf744ec492b1d16caaa6a06b9ba5e4398ccd4b281ed477e66d8730510bfdf425b
7
- data.tar.gz: 1accda12ed241795b42024073ead360d49fb0a2cfbf15df6fa22fbec275587e5988fe3d65bcbdf65bd8338bd135e1711705ec3580b9502a92bce8d57176ee047
6
+ metadata.gz: ee29067605105c217d60e76cb3978ee26e38c83df2065ed4625e2e25d1a379b2d126ac3fbeb973acce18efd394ef4b685a236639de16c6151ecf1632c8c5baaf
7
+ data.tar.gz: 5b1b27cabb0f566e4cfed1a2c9ca65ffde2fef082814ec744d8231a5066cd336a1554965aa6cc00eca8d9cb5760b5dbcff696c242ef62e5af82bcb721c5fbb18
@@ -1,3 +1,3 @@
1
1
  module SlimFormObject
2
- VERSION = "0.5.3"
2
+ VERSION = "0.5.4"
3
3
  end
@@ -100,14 +100,26 @@ module SlimFormObject
100
100
  end
101
101
 
102
102
  def keys_of_collections
103
- @keys ||= params.keys.select{ |key| key =~ /^.+_ids$/ }
103
+ @keys ||= []
104
+ params.keys.each do |key|
105
+ array_of_models.each do |model|
106
+ self_object_of_model = method( snake(model.to_s) ).call
107
+ method_name = key.to_s[/#{snake(model.to_s)}_(.*)/, 1]
108
+ @keys << method_name if self_object_of_model.respond_to? method_name.to_s
109
+ end if key[/^.+_ids$/]
110
+ end if @keys.empty?
111
+ @keys
104
112
  end
105
113
 
106
- def exist_any_arrors_without_collections?(model)
107
- keys_of_collections.each do |key|
108
- name_of_model = key.to_s[/^#{snake(model.to_s)}_(.*)_ids$/, 1].split('_').map(&:capitalize).join
109
- name_of_key_error = Object.const_get(name_of_model).table_name
110
- errors.messages.delete(name_of_key_error.to_sym)
114
+ def exist_any_arrors_without_collections?
115
+ keys_of_collections.each do |method_name|
116
+ array_of_models.each do |model|
117
+ self_object_of_model = method( snake(model.to_s) ).call
118
+ name_of_model = method_name.to_s[/^(.+)_ids$/, 1]
119
+ name_of_constant_model = name_of_model.split('_').map(&:capitalize).join
120
+ name_of_key_error = Object.const_get(name_of_constant_model).table_name
121
+ errors.messages.delete(name_of_key_error.to_sym)
122
+ end
111
123
  end unless valid?
112
124
  errors.messages.empty?
113
125
  end
@@ -115,14 +127,13 @@ module SlimFormObject
115
127
  def assign_attributes_for_collection(model)
116
128
  self_object_of_model = method( snake(model.to_s) ).call
117
129
 
118
- keys_of_collections.each do |key|
119
- method_name = key.to_s[/#{snake(model.to_s)}_(.*)/, 1]
120
- if self_object_of_model.respond_to? method_name.to_s
130
+ keys_of_collections.each do |method_name|
131
+ if self_object_of_model.respond_to? method_name
121
132
  old_attribute = self_object_of_model.method( method_name ).call
122
- unless self_object_of_model.update_attributes( {method_name.to_s => params[key]} )
133
+ unless self_object_of_model.update_attributes( {method_name.to_s => params["#{snake(model.to_s)}_#{method_name}".to_sym]} )
123
134
  set_errors(self_object_of_model.errors)
124
135
  self_object_of_model.update_attributes( {method_name.to_s => old_attribute} )
125
- end if exist_any_arrors_without_collections?(model)
136
+ end if exist_any_arrors_without_collections?
126
137
  end
127
138
  end
128
139
  end
@@ -208,7 +208,7 @@ describe TestModule do
208
208
  it 'assign attributes for test_one_model' do
209
209
  object.stub(:params).and_return( {test_one_model_test_four_model_ids: [1, 2, 3]} )
210
210
  object.stub_chain(:method, :call) { @test_object }
211
- object.stub(:keys_of_collections).and_return( [:test_one_model_test_four_model_ids] )
211
+ object.stub(:keys_of_collections).and_return( ['test_four_model_ids'] )
212
212
  object.send(:assign_attributes_for_collection, TestOneModel)
213
213
 
214
214
  expect(@test_object.test_four_model_ids).to eq( [1, 2, 3] )
@@ -227,8 +227,9 @@ describe TestModule do
227
227
  context 'keys_of_collections' do
228
228
  it 'must be return array with values' do
229
229
  object.stub(:params).and_return( {test_one_model_test_four_model_ids: [1, 2, 3]} )
230
+ object.stub_chain(:method, :call) { TestOneModel.create(title:'title', descr:'descr') }
230
231
 
231
- expect(object.send :keys_of_collections).to eq( [:test_one_model_test_four_model_ids] )
232
+ expect(object.send :keys_of_collections).to eq( ['test_four_model_ids'] )
232
233
  end
233
234
 
234
235
  it 'must be return array without values' do
@@ -238,6 +239,42 @@ describe TestModule do
238
239
  end
239
240
  end
240
241
 
242
+ context 'exist_any_arrors_without_collections?' do
243
+ before :each do
244
+ object.instance_eval do
245
+ def test_one_model
246
+ TestOneModel.create(title:'title', descr:'descr')
247
+ end
248
+ def test_four_model
249
+ TestFourModel.create(title:'title', descr:'descr')
250
+ end
251
+ end
252
+ end
253
+
254
+ it 'must be return true' do
255
+ object.stub(:keys_of_collections).and_return( ['test_one_model_ids', 'test_four_model_ids'] )
256
+ object.stub(:array_of_models).and_return( [TestOneModel, TestFourModel] )
257
+ object.stub(:valid?).and_return( false )
258
+ object.stub_chain(:errors, :messages).and_return( {:test_one_models=>'error', :test_four_models=>'error'} )
259
+
260
+ expect(object.send :exist_any_arrors_without_collections?).to eq( true )
261
+ end
262
+
263
+ it 'must be return true' do
264
+ object.instance_eval do
265
+ def test_one_model
266
+ TestThreeModel.create(title:'title', descr:'')
267
+ end
268
+ end
269
+ object.stub(:keys_of_collections).and_return( ['test_one_model_ids', 'test_four_model_ids'] )
270
+ object.stub(:array_of_models).and_return( [TestOneModel, TestFourModel] )
271
+ object.stub(:valid?).and_return( false )
272
+ object.stub_chain(:errors, :messages).and_return( {:test_one_models=>'error', :test_four_models=>'error', :descr=>'error'} )
273
+
274
+ expect(object.send :exist_any_arrors_without_collections?).to eq( false )
275
+ end
276
+ end
277
+
241
278
  end
242
279
 
243
280
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slim_form_object
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
4
+ version: 0.5.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - woodcrust
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-19 00:00:00.000000000 Z
11
+ date: 2016-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord