forminate 0.2.0 → 0.3.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.
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.