forminate 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f117e333af88c5257424675b2ba3b235a3a7e514
4
- data.tar.gz: 6a5483b6310fdc7b46341d53f3dcd1f8382474df
3
+ metadata.gz: 788144e945686f0d22aca012824b9e9ec934ddc6
4
+ data.tar.gz: 2c48c40dfe89785a48a8ad957cfa871e1d7939bd
5
5
  SHA512:
6
- metadata.gz: 99a8d7568801c1732bbe22381569925e84da62555b8aa9edb1f2d3fa4fbb9bcd248c054db78414a868997d54dbff71cc2d5a9aa296585a9b63f7d238627bfeaa
7
- data.tar.gz: 4eda18ed97e5a63be2fa985eafd15b403faf0640eefd5c2705dbc20c1a5c4d999f9e55ea1bf9d9de38182b650634c308e4c4369bb3f5dc5b6e319bb056d200ce
6
+ metadata.gz: e6366cdaa910762361b1fd368db1f6a17dbea84c36bc36e661bb86b96152d587f7237d3c77dc522096f17709524e8e435e37a7ec6cb6849880f77c199e9ebac7
7
+ data.tar.gz: eda25d9eb9d7f963b2f1b5ede5a01d904086e0625ee0ec061186313c2365d1b81e509238b6c47933d6152aa29a2e46d8765a4f67d914a63cc402d42ac3eae754
@@ -23,12 +23,12 @@ Gem::Specification.new do |spec|
23
23
  spec.add_dependency 'client_side_validations', '~> 3.2'
24
24
 
25
25
  spec.add_development_dependency 'bundler', '~> 1.3'
26
- spec.add_development_dependency 'rake'
26
+ spec.add_development_dependency 'rake', '~> 10.1'
27
27
  spec.add_development_dependency 'rspec', '~> 2.11'
28
28
  spec.add_development_dependency 'activerecord', '~> 3.2'
29
29
  if defined?(JRUBY_VERSION)
30
- spec.add_development_dependency 'activerecord-jdbcsqlite3-adapter'
30
+ spec.add_development_dependency 'activerecord-jdbcsqlite3-adapter', '~> 1.3'
31
31
  else
32
- spec.add_development_dependency 'sqlite3'
32
+ spec.add_development_dependency 'sqlite3', '~> 1.3'
33
33
  end
34
34
  end
@@ -79,16 +79,19 @@ module Forminate
79
79
  Hash[association_names.map { |name| [name, send(name)] }]
80
80
  end
81
81
 
82
- def save
82
+ def save!
83
83
  return false unless valid?
84
-
85
84
  before_save
86
- if defined? ActiveRecord
87
- ActiveRecord::Base.transaction { persist_associations }
85
+ persist_associations
86
+ self
87
+ end
88
+
89
+ def save
90
+ if use_transaction?
91
+ ActiveRecord::Base.transaction { save! }
88
92
  else
89
- persist_associations
93
+ save!
90
94
  end
91
- self
92
95
  end
93
96
 
94
97
  def before_save
@@ -153,4 +156,8 @@ module Forminate
153
156
  assoc = send(assoc_name)
154
157
  return assoc, assoc_method_name
155
158
  end
159
+
160
+ def use_transaction?
161
+ defined?(ActiveRecord)
162
+ end
156
163
  end
@@ -1,3 +1,3 @@
1
1
  module Forminate
2
- VERSION = '0.2.0'
2
+ VERSION = '0.3.0'
3
3
  end
@@ -14,7 +14,7 @@ describe Forminate::AssociationDefinition do
14
14
  describe '#validation_condition' do
15
15
  context 'options hash does not contain :validate key' do
16
16
  it 'returns true' do
17
- expect(subject.validation_condition).to be_true
17
+ expect(subject.validation_condition).to be true
18
18
  end
19
19
  end
20
20
 
@@ -32,7 +32,7 @@ describe Forminate do
32
32
 
33
33
  describe '.attributes_for' do
34
34
  it 'adds a reader method for each attribute of the associated model' do
35
- expect(model.respond_to?(:dummy_user_first_name)).to be_true
35
+ expect(model.respond_to?(:dummy_user_first_name)).to be true
36
36
  end
37
37
 
38
38
  it 'adds reader and writer methods for each attribute of the associated model' do
@@ -52,9 +52,9 @@ describe Forminate do
52
52
  context 'true or false' do
53
53
  it 'validates associated object based value given' do
54
54
  model.calculate_total
55
- expect(model.valid?).to be_false
55
+ expect(model.valid?).to be false
56
56
  model.dummy_user_email = 'bob@example.com'
57
- expect(model.valid?).to be_true
57
+ expect(model.valid?).to be true
58
58
  end
59
59
  end
60
60
 
@@ -62,11 +62,11 @@ describe Forminate do
62
62
  it 'validates associated objects based on result of method call' do
63
63
  model.calculate_total
64
64
  model.dummy_user_email = 'bob@example.com'
65
- expect(model.valid?).to be_true
65
+ expect(model.valid?).to be true
66
66
  model.dummy_book_price = 12.95
67
- expect(model.valid?).to be_false
67
+ expect(model.valid?).to be false
68
68
  model.dummy_credit_card_number = 4242424242424242
69
- expect(model.valid?).to be_true
69
+ expect(model.valid?).to be true
70
70
  end
71
71
  end
72
72
 
@@ -175,21 +175,55 @@ describe Forminate do
175
175
  end
176
176
  end
177
177
 
178
- describe '#save' do
178
+ shared_examples 'a save method' do
179
179
  context 'object is valid' do
180
- it 'saves associations and returns self' do
180
+ before do
181
181
  model.dummy_user_email = 'bob@example.com'
182
182
  model.calculate_total
183
+ end
184
+
185
+ it 'persists associations and returns self' do
183
186
  DummyUser.any_instance.should_receive(:save)
184
- expect(model.save).to eq(model)
187
+ expect(method).to eq(model)
185
188
  end
186
189
  end
187
190
 
188
- context 'object is not valid' do
189
- it 'does not save associations and returns false' do
191
+ context 'object is invalid' do
192
+ it 'does not persist associations and returns false' do
190
193
  DummyUser.any_instance.should_not_receive(:save)
191
- expect(model.save).to be_false
194
+ expect(method).to be false
195
+ end
196
+ end
197
+ end
198
+
199
+ describe '#save!' do
200
+ let(:method) { model.save! }
201
+ it_behaves_like 'a save method'
202
+ end
203
+
204
+ describe '#save' do
205
+ let(:method) { model.save }
206
+
207
+ context 'with ActiveRecord defined' do
208
+ before { model.stub(:use_transaction?).and_return(true) }
209
+
210
+ it 'wraps persistence in a transaction' do
211
+ ActiveRecord::Base.should_receive(:transaction).once
212
+ model.save
192
213
  end
214
+
215
+ it_behaves_like 'a save method'
216
+ end
217
+
218
+ context 'without ActiveRecord defined' do
219
+ before { model.stub(:use_transaction?).and_return(false) }
220
+
221
+ it 'does not wrap persistence in a transaction' do
222
+ ActiveRecord::Base.should_not_receive(:transaction)
223
+ model.save
224
+ end
225
+
226
+ it_behaves_like 'a save method'
193
227
  end
194
228
  end
195
229
 
@@ -225,13 +259,13 @@ describe Forminate do
225
259
  describe '#respond_to_missing?' do
226
260
  context 'associated object responds to method' do
227
261
  it 'returns true' do
228
- expect(model.respond_to?(:dummy_user_temporary_note)).to be_true
262
+ expect(model.respond_to?(:dummy_user_temporary_note)).to be true
229
263
  end
230
264
  end
231
265
 
232
266
  context 'associated object does not respond to method' do
233
267
  it 'returns false' do
234
- expect(model.respond_to?(:dummy_user_bogus_method)).to be_false
268
+ expect(model.respond_to?(:dummy_user_bogus_method)).to be false
235
269
  end
236
270
  end
237
271
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forminate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mo Lawson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-26 00:00:00.000000000 Z
11
+ date: 2014-10-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_attr
@@ -76,16 +76,16 @@ dependencies:
76
76
  name: rake
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - ">="
79
+ - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: '0'
81
+ version: '10.1'
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
- - - ">="
86
+ - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: '0'
88
+ version: '10.1'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: rspec
91
91
  requirement: !ruby/object:Gem::Requirement
@@ -118,16 +118,16 @@ dependencies:
118
118
  name: sqlite3
119
119
  requirement: !ruby/object:Gem::Requirement
120
120
  requirements:
121
- - - ">="
121
+ - - "~>"
122
122
  - !ruby/object:Gem::Version
123
- version: '0'
123
+ version: '1.3'
124
124
  type: :development
125
125
  prerelease: false
126
126
  version_requirements: !ruby/object:Gem::Requirement
127
127
  requirements:
128
- - - ">="
128
+ - - "~>"
129
129
  - !ruby/object:Gem::Version
130
- version: '0'
130
+ version: '1.3'
131
131
  description: Form objects for Rails applications
132
132
  email:
133
133
  - mo@molawson.com
@@ -176,7 +176,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
176
176
  version: '0'
177
177
  requirements: []
178
178
  rubyforge_project:
179
- rubygems_version: 2.2.2
179
+ rubygems_version: 2.4.2
180
180
  signing_key:
181
181
  specification_version: 4
182
182
  summary: Create form objects from multiple Active Record and/or ActiveAttr models.