Skip to content

Commit ce202bb

Browse files
committed
Fix
1 parent 09d69c6 commit ce202bb

9 files changed

Lines changed: 151 additions & 41 deletions

File tree

.github/workflows/ci.yml

Lines changed: 88 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,17 @@ jobs:
1212
strategy:
1313
fail-fast: false
1414
matrix:
15-
gemfile: [rails_7_1.gemfile, rails_7_2.gemfile, rails_8_0.gemfile, rails_8_1.gemfile, rails_main.gemfile]
16-
ruby_version: ['2.7', '3.0', '3.1', '3.2', '3.3', '3.4', '4.0']
15+
gemfile: [rails_5_2.gemfile, rails_6_0.gemfile, rails_6_1.gemfile, rails_7_0.gemfile, rails_7_1.gemfile, rails_7_2.gemfile, rails_8_0.gemfile, rails_main.gemfile]
16+
ruby_version: ['2.3', '2.4', '2.5', '2.6', '2.7', '3.0', '3.1', '3.2', '3.3', '3.4']
1717
exclude:
18+
- gemfile: rails_main.gemfile
19+
ruby_version: '2.3'
20+
- gemfile: rails_main.gemfile
21+
ruby_version: '2.4'
22+
- gemfile: rails_main.gemfile
23+
ruby_version: '2.5'
24+
- gemfile: rails_main.gemfile
25+
ruby_version: '2.6'
1826
- gemfile: rails_main.gemfile
1927
ruby_version: '2.7'
2028
- gemfile: rails_main.gemfile
@@ -23,22 +31,100 @@ jobs:
2331
ruby_version: '3.1'
2432
- gemfile: rails_main.gemfile
2533
ruby_version: '3.2'
34+
- gemfile: rails_8_1.gemfile
35+
ruby_version: '2.3'
36+
- gemfile: rails_8_1.gemfile
37+
ruby_version: '2.4'
38+
- gemfile: rails_8_1.gemfile
39+
ruby_version: '2.5'
40+
- gemfile: rails_8_1.gemfile
41+
ruby_version: '2.6'
2642
- gemfile: rails_8_1.gemfile
2743
ruby_version: '2.7'
2844
- gemfile: rails_8_1.gemfile
2945
ruby_version: '3.0'
3046
- gemfile: rails_8_1.gemfile
3147
ruby_version: '3.1'
48+
- gemfile: rails_8_0.gemfile
49+
ruby_version: '2.3'
50+
- gemfile: rails_8_0.gemfile
51+
ruby_version: '2.4'
52+
- gemfile: rails_8_0.gemfile
53+
ruby_version: '2.5'
54+
- gemfile: rails_8_0.gemfile
55+
ruby_version: '2.6'
3256
- gemfile: rails_8_0.gemfile
3357
ruby_version: '2.7'
3458
- gemfile: rails_8_0.gemfile
3559
ruby_version: '3.0'
3660
- gemfile: rails_8_0.gemfile
3761
ruby_version: '3.1'
62+
- gemfile: rails_7_2.gemfile
63+
ruby_version: '2.3'
64+
- gemfile: rails_7_2.gemfile
65+
ruby_version: '2.4'
66+
- gemfile: rails_7_2.gemfile
67+
ruby_version: '2.5'
68+
- gemfile: rails_7_2.gemfile
69+
ruby_version: '2.6'
3870
- gemfile: rails_7_2.gemfile
3971
ruby_version: '2.7'
4072
- gemfile: rails_7_2.gemfile
4173
ruby_version: '3.0'
74+
- gemfile: rails_7_1.gemfile
75+
ruby_version: '2.3'
76+
- gemfile: rails_7_1.gemfile
77+
ruby_version: '2.4'
78+
- gemfile: rails_7_1.gemfile
79+
ruby_version: '2.5'
80+
- gemfile: rails_7_1.gemfile
81+
ruby_version: '2.6'
82+
- gemfile: rails_7_0.gemfile
83+
ruby_version: '2.3'
84+
- gemfile: rails_7_0.gemfile
85+
ruby_version: '2.4'
86+
- gemfile: rails_7_0.gemfile
87+
ruby_version: '2.5'
88+
- gemfile: rails_7_0.gemfile
89+
ruby_version: '2.6'
90+
- gemfile: rails_7_0.gemfile
91+
ruby_version: '3.4'
92+
- gemfile: rails_6_1.gemfile
93+
ruby_version: '2.3'
94+
- gemfile: rails_6_1.gemfile
95+
ruby_version: '2.4'
96+
- gemfile: rails_6_1.gemfile
97+
ruby_version: '3.1'
98+
- gemfile: rails_6_1.gemfile
99+
ruby_version: '3.2'
100+
- gemfile: rails_6_1.gemfile
101+
ruby_version: '3.3'
102+
- gemfile: rails_6_1.gemfile
103+
ruby_version: '3.4'
104+
- gemfile: rails_6_0.gemfile
105+
ruby_version: '2.3'
106+
- gemfile: rails_6_0.gemfile
107+
ruby_version: '2.4'
108+
- gemfile: rails_6_0.gemfile
109+
ruby_version: '3.0'
110+
- gemfile: rails_6_0.gemfile
111+
ruby_version: '3.1'
112+
- gemfile: rails_6_0.gemfile
113+
ruby_version: '3.2'
114+
- gemfile: rails_6_0.gemfile
115+
ruby_version: '3.3'
116+
- gemfile: rails_6_0.gemfile
117+
ruby_version: '3.4'
118+
- gemfile: rails_5_2.gemfile
119+
ruby_version: '3.0'
120+
- gemfile: rails_5_2.gemfile
121+
ruby_version: '3.1'
122+
- gemfile: rails_5_2.gemfile
123+
ruby_version: '3.2'
124+
- gemfile: rails_5_2.gemfile
125+
ruby_version: '3.3'
126+
- gemfile: rails_5_2.gemfile
127+
ruby_version: '3.4'
42128
env:
43129
BUNDLE_GEMFILE: spec/gemfiles/${{ matrix.gemfile }}
44130
steps:

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ Available callbacks are (listed in execution order):
248248
- `after_save`
249249
- `after_commit/after_rollback`
250250

251-
### Normalizes
251+
### Normalizes (Rails 8.1+)
252252

253253
`YAAF` form objects support `normalizes` the same way as `ActiveModel` models. For example:
254254

lib/yaaf/form.rb

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,12 @@ class Form
66
include ::ActiveModel::Model
77
include ::ActiveModel::Validations::Callbacks
88
include ::ActiveRecord::Transactions
9-
include ::ActiveModel::Attributes
109

1110
if defined?(::ActiveModel::Attributes::Normalization)
11+
include ::ActiveModel::Attributes
1212
include ::ActiveModel::Attributes::Normalization
1313
end
1414

15-
include ::ActiveRecord::Normalization if defined?(::ActiveRecord::Normalization)
16-
1715
define_model_callbacks :save
1816

1917
delegate :transaction, to: ::ActiveRecord::Base

spec/gemfiles/rails_5_2.gemfile

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
source 'https://rubygems.org'
2+
3+
gemspec path: '../..'
4+
5+
gem 'rails', '~> 5.2.0'
6+
gem 'sqlite3', '~> 1.4.2'

spec/gemfiles/rails_6_0.gemfile

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
source 'https://rubygems.org'
2+
3+
gemspec path: '../..'
4+
5+
gem 'rails', '~> 6.0.0'
6+
gem 'sqlite3', '~> 1.4.2'

spec/gemfiles/rails_6_1.gemfile

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
source 'https://rubygems.org'
2+
3+
gemspec path: '../..'
4+
5+
gem 'rails', '~> 6.1.0'
6+
gem 'sqlite3', '~> 1.4.2'

spec/gemfiles/rails_7_0.gemfile

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
source 'https://rubygems.org'
2+
3+
gemspec path: '../..'
4+
5+
gem 'rails', '~> 7.0.0'
6+
gem 'sqlite3', '~> 1.4.2'

spec/yaaf/normalization_spec.rb

Lines changed: 34 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,50 @@
11
# frozen_string_literal: true
22

33
RSpec.describe 'Form with normalization' do
4-
let(:form) { WithNormalizeForm.new(args) }
5-
let(:args) { { email: ' TEST@Example.com ', name: ' john doe ' } }
6-
7-
describe 'attribute normalization' do
8-
it 'normalizes email on assignment' do
9-
expect(form.email).to eq('test@example.com')
10-
end
11-
12-
it 'normalizes name on assignment' do
13-
expect(form.name).to eq('John Doe')
4+
if defined?(ActiveModel::Attributes::Normalization)
5+
let(:form) { WithNormalizeForm.new(args) }
6+
let(:args) { { email: ' TEST@Example.com ', name: ' john doe ' } }
7+
8+
describe 'attribute normalization' do
9+
it 'normalizes email on assignment' do
10+
expect(form.email).to eq('test@example.com')
11+
end
12+
13+
it 'normalizes name on assignment' do
14+
expect(form.name).to eq('John Doe')
15+
end
1416
end
15-
end
1617

17-
describe '#save' do
18-
subject { form.save }
18+
describe '#save' do
19+
subject { form.save }
1920

20-
it 'saves with normalized values' do
21-
expect(subject).to be true
22-
expect(User.last.email).to eq('test@example.com')
23-
expect(User.last.name).to eq('John Doe')
21+
it 'saves with normalized values' do
22+
expect(subject).to be true
23+
expect(User.last.email).to eq('test@example.com')
24+
expect(User.last.name).to eq('John Doe')
25+
end
2426
end
25-
end
2627

27-
describe '#valid?' do
28-
it 'validates with normalized values' do
29-
expect(form.valid?).to be true
28+
describe '#valid?' do
29+
it 'validates with normalized values' do
30+
expect(form.valid?).to be true
31+
end
3032
end
31-
end
3233

33-
context 'when updating attributes' do
34-
it 'normalizes new values' do
35-
form.email = ' test@example.com '
36-
expect(form.email).to eq('test@example.com')
34+
context 'when updating attributes' do
35+
it 'normalizes new values' do
36+
form.email = ' test@example.com '
37+
expect(form.email).to eq('test@example.com')
38+
end
3739
end
38-
end
3940

40-
context 'with nil values' do
41-
let(:args) { { email: nil, name: nil } }
41+
context 'with nil values' do
42+
let(:args) { { email: nil, name: nil } }
4243

43-
it 'does not normalize nil by default' do
44-
expect(form.email).to be_nil
45-
expect(form.name).to be_nil
44+
it 'does not normalize nil by default' do
45+
expect(form.email).to be_nil
46+
expect(form.name).to be_nil
47+
end
4648
end
4749
end
4850
end

yaaf.gemspec

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
1111
spec.summary = 'Easing the form object pattern in Rails applications.'
1212
spec.homepage = 'https://github.com/rootstrap/yaaf'
1313
spec.license = 'MIT'
14-
spec.required_ruby_version = Gem::Requirement.new('>= 2.7.0')
14+
spec.required_ruby_version = Gem::Requirement.new('>= 2.3.0')
1515

1616
spec.metadata['homepage_uri'] = spec.homepage
1717
spec.metadata['source_code_uri'] = 'https://github.com/rootstrap/yaaf'
@@ -21,8 +21,8 @@ Gem::Specification.new do |spec|
2121
spec.files = Dir['LICENSE.txt', 'README.md', 'lib/**/*']
2222
spec.require_paths = ['lib']
2323

24-
spec.add_dependency 'activemodel', '>= 7.1'
25-
spec.add_dependency 'activerecord', '>= 7.1'
24+
spec.add_dependency 'activemodel', '>= 5.2'
25+
spec.add_dependency 'activerecord', '>= 5.2'
2626

2727
spec.add_development_dependency 'database_cleaner-active_record', '~> 2.1.0'
2828
spec.add_development_dependency 'rake', '~> 13.0.1'

0 commit comments

Comments
 (0)