trans_forms 0.1.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 +15 -0
- data/.gitignore +3 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +88 -0
- data/Rakefile +27 -0
- data/lib/generators/rails/setup_generator.rb +14 -0
- data/lib/generators/rails/templates/application_trans_form.rb +13 -0
- data/lib/generators/rails/templates/trans_form.rb +31 -0
- data/lib/generators/rails/trans_form_generator.rb +36 -0
- data/lib/generators/rspec/setup_generator.rb +9 -0
- data/lib/generators/rspec/templates/application_trans_form_spec.rb +4 -0
- data/lib/generators/rspec/templates/trans_form_spec.rb +4 -0
- data/lib/generators/rspec/trans_form_generator.rb +9 -0
- data/lib/trans_forms.rb +9 -0
- data/lib/trans_forms/callbacks.rb +30 -0
- data/lib/trans_forms/errors.rb +13 -0
- data/lib/trans_forms/form_base.rb +47 -0
- data/lib/trans_forms/form_errors.rb +38 -0
- data/lib/trans_forms/main_model.rb +115 -0
- data/lib/trans_forms/main_model/proxy.rb +38 -0
- data/lib/trans_forms/nested_forms.rb +69 -0
- data/lib/trans_forms/version.rb +3 -0
- data/spec/generators/trans_form/trans_form_generator_spec.rb +8 -0
- data/spec/spec_helper.rb +38 -0
- data/spec/support/models.rb +12 -0
- data/spec/support/schema.rb +23 -0
- data/spec/support/trans_forms/callback_forms.rb +22 -0
- data/spec/support/trans_forms/main_model_forms.rb +27 -0
- data/spec/support/trans_forms/multiple_records_forms.rb +31 -0
- data/spec/support/trans_forms/nested_forms.rb +26 -0
- data/spec/support/trans_forms/simple_forms.rb +13 -0
- data/spec/support/trans_forms/user_creator_1.rb +13 -0
- data/spec/trans_forms/callbacks_spec.rb +27 -0
- data/spec/trans_forms/form_base_spec.rb +70 -0
- data/spec/trans_forms/form_errors_spec.rb +14 -0
- data/spec/trans_forms/main_model/proxy_spec.rb +15 -0
- data/spec/trans_forms/main_model_spec.rb +49 -0
- data/spec/trans_forms/nested_forms_spec.rb +53 -0
- data/trans_forms.gemspec +29 -0
- metadata +214 -0
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module TransForms
|
4
|
+
describe Callbacks do
|
5
|
+
|
6
|
+
describe 'after_save_on_error' do
|
7
|
+
it 'registers a method to be called when a transaction is rolled back' do
|
8
|
+
attr = { name1: 'John', name2: 'John' }
|
9
|
+
form = CallbackForm.new(attr)
|
10
|
+
|
11
|
+
expect(form).to be_valid
|
12
|
+
expect(form.save).to be false
|
13
|
+
expect(form.i_was_called).to be true
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'will not call registered method if form model was invalid' do
|
17
|
+
attr = { name1: '', name2: '' }
|
18
|
+
form = CallbackForm.new(attr)
|
19
|
+
|
20
|
+
expect(form).not_to be_valid
|
21
|
+
expect(form.save).to be false
|
22
|
+
expect(form.i_was_called).not_to be true
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module TransForms
|
4
|
+
describe FormBase do
|
5
|
+
|
6
|
+
describe '#initialize' do
|
7
|
+
it 'assigns attributes defined by +attribute+' do
|
8
|
+
attr = { name: 'John Doe', age: 30, foo: 'bar' }
|
9
|
+
form = UserCreator1.new(attr)
|
10
|
+
|
11
|
+
expect(form.name).to eq(attr[:name])
|
12
|
+
expect(form.age).to eq(attr[:age])
|
13
|
+
expect { form.foo }.to raise_error
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe 'validations' do
|
18
|
+
it 'is considered valid when validations pass' do
|
19
|
+
attr = { name: 'John Doe', age: 30 }
|
20
|
+
form = UserCreator1.new(attr)
|
21
|
+
expect(form).to be_valid
|
22
|
+
|
23
|
+
form.name = ''
|
24
|
+
expect(form).not_to be_valid
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '#save' do
|
29
|
+
it 'returns true when no errors occur inside the +transaction+ block' do
|
30
|
+
form = NoErrorInTransactionForm.new
|
31
|
+
expect(form.save).to be true
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'returns false when errors do occur inside the +transaction+ block' do
|
35
|
+
form = ErrorInTransactionForm.new
|
36
|
+
expect(form.save).to be false
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe 'transaction' do
|
41
|
+
it 'saves multiple records to db when nothing raises errors' do
|
42
|
+
attr = { name1: 'John', name2: 'Peter' }
|
43
|
+
count = User.count
|
44
|
+
|
45
|
+
expect(MultipleRecordsCreator.new(attr).save).to be true
|
46
|
+
expect(User.count).to eq(count+2)
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'rollbacks both saves even if the first is successful and the last one raises an error' do
|
50
|
+
# First User is saved successfully, but last one will raise an
|
51
|
+
# error because of User class uniqueness validation on +name+
|
52
|
+
attr = { name1: 'John', name2: 'John' }
|
53
|
+
count = User.count
|
54
|
+
|
55
|
+
expect(MultipleRecordsCreator.new(attr).save).to be false
|
56
|
+
expect(User.count).to eq(count)
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'does not cause rollback when save is not raising error (no !), even though it was not saved' do
|
60
|
+
attr = { name1: 'John', name2: 'John' }
|
61
|
+
count = User.count
|
62
|
+
|
63
|
+
expect(MultipleRecordsCreatorNoBang.new(attr).save).to be true
|
64
|
+
expect(User.count).to eq(count+1) # Only one record saved
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module TransForms
|
4
|
+
describe FormErrors do
|
5
|
+
describe '#error_models' do
|
6
|
+
it 'does not raise an error when called on a form model without a main_instance' do
|
7
|
+
form = UserUpdater.new
|
8
|
+
expect(form.main_model).to eq(:user)
|
9
|
+
expect(form.main_instance).to be nil
|
10
|
+
expect { form.errors.error_models }.not_to raise_error
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module TransForms
|
4
|
+
module MainModel
|
5
|
+
describe Proxy do
|
6
|
+
describe 'model_name' do
|
7
|
+
it 'returns an ActiveModel::Name instance for the main_model instead of form model' do
|
8
|
+
expect(ProxyModel.main_model).to eq :user
|
9
|
+
expect(ProxyModel.name).to eq 'ProxyModel'
|
10
|
+
expect(ProxyModel.model_name.name).to eq 'User'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module TransForms
|
4
|
+
describe MainModel do
|
5
|
+
let(:user) { User.create(name: 'John') }
|
6
|
+
let(:phone_number) { PhoneNumber.create(user_id: user.id, number: '+1-555-MY-NUMBER') }
|
7
|
+
|
8
|
+
describe 'set_main_model' do
|
9
|
+
it 'defines accessor attributes for main model and stores them in a class attribute' do
|
10
|
+
form = MainModelModel.new
|
11
|
+
expect{ form.user }.to raise_error
|
12
|
+
expect{ form.user = User.new }.to raise_error
|
13
|
+
|
14
|
+
MainModelModel.set_main_model :user
|
15
|
+
form = MainModelModel.new
|
16
|
+
expect{ form.user }.not_to raise_error
|
17
|
+
expect{ form.user = User.new }.not_to raise_error
|
18
|
+
|
19
|
+
expect(MainModelModel.main_model).to eq :user
|
20
|
+
end
|
21
|
+
it 'proxies +model_name+ method to the main_model when proxy: true is set' do
|
22
|
+
expect(UserProxyModel.main_model).to eq :user
|
23
|
+
expect(UserProxyModel.name).to eq 'UserProxyModel'
|
24
|
+
expect(UserProxyModel.model_name.name).to eq 'User'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe 'model accessor' do
|
29
|
+
it 'can initialize a form model and automatically set the accessor defined by main_model' do
|
30
|
+
expect(UserUpdater.main_model).to eq :user
|
31
|
+
form = UserUpdater.new(model: user)
|
32
|
+
expect(form.user).to eq user
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'raises an error if the model supplied is not the type of main model' do
|
36
|
+
expect(UserUpdater.main_model).to eq :user
|
37
|
+
expect { UserUpdater.new(model: phone_number) }.to raise_error
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe 'model_name' do
|
42
|
+
it 'does not raise an error when raised' do
|
43
|
+
#TODO: Improve this spec
|
44
|
+
expect { UserUpdater.model_name }.not_to raise_error
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module TransForms
|
4
|
+
describe NestedForms do
|
5
|
+
|
6
|
+
describe '#each_nested_hash_for' do
|
7
|
+
it 'iterates through nested hash values and turns all hash keys into string values' do
|
8
|
+
attr = { 0 => { id: 1 }, 1 => { id: 2 } }
|
9
|
+
|
10
|
+
iterations = 0
|
11
|
+
NestedFormsModel.new.each_nested_hash_for attr do |nested_hash|
|
12
|
+
expect(nested_hash).to eq attr[iterations].stringify_keys
|
13
|
+
iterations += 1
|
14
|
+
end
|
15
|
+
expect(iterations).to eq 2
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'skips iterating over values that are not hashes' do
|
19
|
+
attr = { 0 => { name: 'John' }, 1 => 'Not a Hash' }
|
20
|
+
|
21
|
+
iterations = 0
|
22
|
+
NestedFormsModel.new.each_nested_hash_for attr do |nested_hash|
|
23
|
+
expect(nested_hash).to eq attr[iterations].stringify_keys
|
24
|
+
iterations += 1
|
25
|
+
end
|
26
|
+
expect(iterations).to eq 1
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'creates two nested PhoneNumber records for a User record' do
|
30
|
+
attr = { name: 'John', phone_numbers_attributes: {
|
31
|
+
'0' => { number: '+1-555-CALL-JOHN' },
|
32
|
+
'1' => { number: '+1-555-FOO-BAR' }
|
33
|
+
} }
|
34
|
+
count = PhoneNumber.count
|
35
|
+
expect(UserAndPoneNumbersCreator.new(attr).save).to be true
|
36
|
+
expect(PhoneNumber.count).to eq(count+2)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '#any_nested_hash_for?' do
|
41
|
+
it 'returns false unless there is at least one nested Hash value with at least one non-blank value' do
|
42
|
+
form = NestedFormsModel.new
|
43
|
+
|
44
|
+
expect(form.any_nested_hash_for?({ })).to be false
|
45
|
+
expect(form.any_nested_hash_for?({ '0' => 'Not a Hash' })).to be false
|
46
|
+
expect(form.any_nested_hash_for?({ '0' => { } })).to be false
|
47
|
+
expect(form.any_nested_hash_for?({ '0' => { name: '' } })).to be false
|
48
|
+
expect(form.any_nested_hash_for?({ '0' => { name: 'Not a blank value' } })).to be true
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
data/trans_forms.gemspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.expand_path('../lib/trans_forms/version', __FILE__)
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.authors = ['Daniel Viklund']
|
5
|
+
s.email = ['dannemanne@gmail.com']
|
6
|
+
s.summary = 'Gem to create Form records that handles multiple changes wrapped in a transaction'
|
7
|
+
s.description = 'Gem to create Form records that handles multiple changes wrapped in a transaction'
|
8
|
+
s.homepage = 'https://github.com/dannemanne/trans_forms'
|
9
|
+
s.license = 'MIT'
|
10
|
+
|
11
|
+
s.name = 'trans_forms'
|
12
|
+
s.version = TransForms::VERSION
|
13
|
+
s.date = '2014-07-08'
|
14
|
+
|
15
|
+
s.files = `git ls-files`.split("\n")
|
16
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
|
+
s.require_paths = ['lib']
|
19
|
+
|
20
|
+
s.add_development_dependency 'rake'
|
21
|
+
s.add_development_dependency 'rspec', '>= 2'
|
22
|
+
s.add_development_dependency 'rspec-rails', '>= 2'
|
23
|
+
s.add_development_dependency 'sqlite3'
|
24
|
+
s.add_development_dependency 'database_cleaner'
|
25
|
+
|
26
|
+
s.add_dependency 'virtus'
|
27
|
+
s.add_dependency 'rails', '>= 3'
|
28
|
+
s.add_dependency 'activemodel', '>= 3'
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,214 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: trans_forms
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Daniel Viklund
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-07-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ! '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ! '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec-rails
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '2'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: sqlite3
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: database_cleaner
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ! '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ! '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: virtus
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ! '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ! '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rails
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ! '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '3'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '3'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: activemodel
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '3'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ! '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '3'
|
125
|
+
description: Gem to create Form records that handles multiple changes wrapped in a
|
126
|
+
transaction
|
127
|
+
email:
|
128
|
+
- dannemanne@gmail.com
|
129
|
+
executables: []
|
130
|
+
extensions: []
|
131
|
+
extra_rdoc_files: []
|
132
|
+
files:
|
133
|
+
- .gitignore
|
134
|
+
- .rspec
|
135
|
+
- .travis.yml
|
136
|
+
- Gemfile
|
137
|
+
- LICENSE
|
138
|
+
- README.md
|
139
|
+
- Rakefile
|
140
|
+
- lib/generators/rails/setup_generator.rb
|
141
|
+
- lib/generators/rails/templates/application_trans_form.rb
|
142
|
+
- lib/generators/rails/templates/trans_form.rb
|
143
|
+
- lib/generators/rails/trans_form_generator.rb
|
144
|
+
- lib/generators/rspec/setup_generator.rb
|
145
|
+
- lib/generators/rspec/templates/application_trans_form_spec.rb
|
146
|
+
- lib/generators/rspec/templates/trans_form_spec.rb
|
147
|
+
- lib/generators/rspec/trans_form_generator.rb
|
148
|
+
- lib/trans_forms.rb
|
149
|
+
- lib/trans_forms/callbacks.rb
|
150
|
+
- lib/trans_forms/errors.rb
|
151
|
+
- lib/trans_forms/form_base.rb
|
152
|
+
- lib/trans_forms/form_errors.rb
|
153
|
+
- lib/trans_forms/main_model.rb
|
154
|
+
- lib/trans_forms/main_model/proxy.rb
|
155
|
+
- lib/trans_forms/nested_forms.rb
|
156
|
+
- lib/trans_forms/version.rb
|
157
|
+
- spec/generators/trans_form/trans_form_generator_spec.rb
|
158
|
+
- spec/spec_helper.rb
|
159
|
+
- spec/support/models.rb
|
160
|
+
- spec/support/schema.rb
|
161
|
+
- spec/support/trans_forms/callback_forms.rb
|
162
|
+
- spec/support/trans_forms/main_model_forms.rb
|
163
|
+
- spec/support/trans_forms/multiple_records_forms.rb
|
164
|
+
- spec/support/trans_forms/nested_forms.rb
|
165
|
+
- spec/support/trans_forms/simple_forms.rb
|
166
|
+
- spec/support/trans_forms/user_creator_1.rb
|
167
|
+
- spec/trans_forms/callbacks_spec.rb
|
168
|
+
- spec/trans_forms/form_base_spec.rb
|
169
|
+
- spec/trans_forms/form_errors_spec.rb
|
170
|
+
- spec/trans_forms/main_model/proxy_spec.rb
|
171
|
+
- spec/trans_forms/main_model_spec.rb
|
172
|
+
- spec/trans_forms/nested_forms_spec.rb
|
173
|
+
- trans_forms.gemspec
|
174
|
+
homepage: https://github.com/dannemanne/trans_forms
|
175
|
+
licenses:
|
176
|
+
- MIT
|
177
|
+
metadata: {}
|
178
|
+
post_install_message:
|
179
|
+
rdoc_options: []
|
180
|
+
require_paths:
|
181
|
+
- lib
|
182
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
183
|
+
requirements:
|
184
|
+
- - ! '>='
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: '0'
|
187
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
188
|
+
requirements:
|
189
|
+
- - ! '>='
|
190
|
+
- !ruby/object:Gem::Version
|
191
|
+
version: '0'
|
192
|
+
requirements: []
|
193
|
+
rubyforge_project:
|
194
|
+
rubygems_version: 2.2.2
|
195
|
+
signing_key:
|
196
|
+
specification_version: 4
|
197
|
+
summary: Gem to create Form records that handles multiple changes wrapped in a transaction
|
198
|
+
test_files:
|
199
|
+
- spec/generators/trans_form/trans_form_generator_spec.rb
|
200
|
+
- spec/spec_helper.rb
|
201
|
+
- spec/support/models.rb
|
202
|
+
- spec/support/schema.rb
|
203
|
+
- spec/support/trans_forms/callback_forms.rb
|
204
|
+
- spec/support/trans_forms/main_model_forms.rb
|
205
|
+
- spec/support/trans_forms/multiple_records_forms.rb
|
206
|
+
- spec/support/trans_forms/nested_forms.rb
|
207
|
+
- spec/support/trans_forms/simple_forms.rb
|
208
|
+
- spec/support/trans_forms/user_creator_1.rb
|
209
|
+
- spec/trans_forms/callbacks_spec.rb
|
210
|
+
- spec/trans_forms/form_base_spec.rb
|
211
|
+
- spec/trans_forms/form_errors_spec.rb
|
212
|
+
- spec/trans_forms/main_model/proxy_spec.rb
|
213
|
+
- spec/trans_forms/main_model_spec.rb
|
214
|
+
- spec/trans_forms/nested_forms_spec.rb
|