assignable_values 0.16.0 → 0.16.1

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
- SHA256:
3
- metadata.gz: cc767440e4e60cd5e1d090edf24bbbe5750072010d72f8d871ff2fb3c5963aed
4
- data.tar.gz: b50641114a05d2c0a25c969e5b845a952e84944b65f1664b4c77e446f209d096
2
+ SHA1:
3
+ metadata.gz: 977d6a6005a660c922f2ceb114f0d0e9ca187312
4
+ data.tar.gz: 93af552eef243da11888c86be25e595242d67b65
5
5
  SHA512:
6
- metadata.gz: 4b1825671839986101ae0068bee450028f40c77c58acb0b4972e9b37c75485d3e0cbbfb979edcee3d7430cc1e3ee16e1b70aa1d50288cabd5e27cf9250a0f7c5
7
- data.tar.gz: 8b7fe509733f0f42b59726a29bcf21d26da7618b41c1295cb4d3830b57cd8fe7493323f89786c5623a7e5b86baa9e20931d199b89b2865e82c162aed0403c3ba
6
+ metadata.gz: d8a4a8064ed9a7b68639212901128814f083651af7628645fa8275968f20ae78920459397efa0ece9755d78ce659054745c7baf3e2aef3a891aa34b6436119c2
7
+ data.tar.gz: 4ee5bbd8c8a9137bd0f3b55cbfab07d104c0a5cc21817818ba21b2ceca48e0f5c4d42297778a4c23a4fe66399f3e8eda1d4ba98e357445b48734fea96990628f
@@ -5,6 +5,7 @@ rvm:
5
5
  - 2.1.8
6
6
  - 2.3.1
7
7
  - 2.4.2
8
+ - 2.5.3
8
9
 
9
10
  gemfile:
10
11
  - Gemfile.2.3
@@ -13,6 +14,7 @@ gemfile:
13
14
  - Gemfile.5.0
14
15
  - Gemfile.5.1
15
16
  - Gemfile.5.1.pg
17
+ - Gemfile.6.0.pg
16
18
 
17
19
  matrix:
18
20
  exclude:
@@ -22,26 +24,43 @@ matrix:
22
24
  rvm: 2.3.1
23
25
  - gemfile: Gemfile.2.3
24
26
  rvm: 2.4.2
27
+ - gemfile: Gemfile.2.3
28
+ rvm: 2.5.3
25
29
  - gemfile: Gemfile.3.2
26
30
  rvm: 2.3.1
27
31
  - gemfile: Gemfile.3.2
28
32
  rvm: 2.4.2
33
+ - gemfile: Gemfile.3.2
34
+ rvm: 2.5.3
29
35
  - gemfile: Gemfile.4.2
30
36
  rvm: 1.8.7
31
37
  - gemfile: Gemfile.4.2
32
38
  rvm: 2.4.2
39
+ - gemfile: Gemfile.4.2
40
+ rvm: 2.5.3
33
41
  - gemfile: Gemfile.5.0
34
- rvm: 2.1.8
42
+ rvm: 1.8.7
35
43
  - gemfile: Gemfile.5.0
44
+ rvm: 2.1.8
45
+ - gemfile: Gemfile.5.1
36
46
  rvm: 1.8.7
37
47
  - gemfile: Gemfile.5.1
38
48
  rvm: 2.1.8
39
- - gemfile: Gemfile.5.1
49
+ - gemfile: Gemfile.5.1.pg
40
50
  rvm: 1.8.7
41
51
  - gemfile: Gemfile.5.1.pg
42
52
  rvm: 2.1.8
43
- - gemfile: Gemfile.5.1.pg
53
+ - gemfile: Gemfile.6.0.pg
44
54
  rvm: 1.8.7
55
+ - gemfile: Gemfile.6.0.pg
56
+ rvm: 2.1.8
57
+ - gemfile: Gemfile.6.0.pg
58
+ rvm: 2.3.1
59
+ - gemfile: Gemfile.6.0.pg
60
+ rvm: 2.4.2
61
+
62
+ addons:
63
+ postgresql: "9.4"
45
64
 
46
65
  sudo: false
47
66
 
@@ -9,6 +9,21 @@ This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html
9
9
  ### Compatible changes
10
10
 
11
11
 
12
+ ## 0.16.1 - 2019-05-14
13
+
14
+ ### Compatible changes
15
+
16
+ - add tests for Rails 6
17
+ - Humanized assignable value methods now also take the include_old_values option (fixes #25)
18
+
19
+
20
+ ## 0.16.0 - 2019-02-20
21
+
22
+ ### Breaking changes
23
+
24
+ - fix arity bug
25
+
26
+
12
27
  ## 0.15.1 - 2018-11-05
13
28
 
14
29
  ### Compatible changes
data/Gemfile CHANGED
@@ -1 +1 @@
1
- ./Gemfile.4.2
1
+ Gemfile.4.2
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- assignable_values (0.15.1)
4
+ assignable_values (0.16.1)
5
5
  activerecord (>= 2.3)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- assignable_values (0.15.1)
4
+ assignable_values (0.16.1)
5
5
  activerecord (>= 2.3)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- assignable_values (0.15.1)
4
+ assignable_values (0.16.1)
5
5
  activerecord (>= 2.3)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- assignable_values (0.15.1)
4
+ assignable_values (0.16.1)
5
5
  activerecord (>= 2.3)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- assignable_values (0.15.1)
4
+ assignable_values (0.16.1)
5
5
  activerecord (>= 2.3)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- assignable_values (0.15.1)
4
+ assignable_values (0.16.1)
5
5
  activerecord (>= 2.3)
6
6
 
7
7
  GEM
@@ -0,0 +1,16 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Runtime dependencies
4
+ gem 'activerecord', '~>6.0.0beta'
5
+ gem 'i18n'
6
+ gem 'pg', '<1'
7
+
8
+ # Development dependencies
9
+ gem 'rake'
10
+ gem 'database_cleaner'
11
+ gem 'rspec'
12
+ gem 'rspec_candy'
13
+ gem 'gemika'
14
+
15
+ # Gem under test
16
+ gem 'assignable_values', :path => '.'
@@ -0,0 +1,68 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ assignable_values (0.16.1)
5
+ activerecord (>= 2.3)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ activemodel (6.0.0.beta3)
11
+ activesupport (= 6.0.0.beta3)
12
+ activerecord (6.0.0.beta3)
13
+ activemodel (= 6.0.0.beta3)
14
+ activesupport (= 6.0.0.beta3)
15
+ activesupport (6.0.0.beta3)
16
+ concurrent-ruby (~> 1.0, >= 1.0.2)
17
+ i18n (>= 0.7, < 2)
18
+ minitest (~> 5.1)
19
+ tzinfo (~> 1.1)
20
+ zeitwerk (~> 1.3, >= 1.3.1)
21
+ concurrent-ruby (1.1.5)
22
+ database_cleaner (1.7.0)
23
+ diff-lcs (1.3)
24
+ gemika (0.3.4)
25
+ i18n (1.6.0)
26
+ concurrent-ruby (~> 1.0)
27
+ minitest (5.11.3)
28
+ pg (0.21.0)
29
+ rake (12.3.2)
30
+ rspec (3.8.0)
31
+ rspec-core (~> 3.8.0)
32
+ rspec-expectations (~> 3.8.0)
33
+ rspec-mocks (~> 3.8.0)
34
+ rspec-core (3.8.0)
35
+ rspec-support (~> 3.8.0)
36
+ rspec-expectations (3.8.2)
37
+ diff-lcs (>= 1.2.0, < 2.0)
38
+ rspec-support (~> 3.8.0)
39
+ rspec-mocks (3.8.0)
40
+ diff-lcs (>= 1.2.0, < 2.0)
41
+ rspec-support (~> 3.8.0)
42
+ rspec-support (3.8.0)
43
+ rspec_candy (0.5.1)
44
+ rspec
45
+ sneaky-save
46
+ sneaky-save (0.1.3)
47
+ activerecord (>= 3.2.0)
48
+ thread_safe (0.3.6)
49
+ tzinfo (1.2.5)
50
+ thread_safe (~> 0.1)
51
+ zeitwerk (1.4.3)
52
+
53
+ PLATFORMS
54
+ ruby
55
+
56
+ DEPENDENCIES
57
+ activerecord (~> 6.0.0beta)
58
+ assignable_values!
59
+ database_cleaner
60
+ gemika
61
+ i18n
62
+ pg (< 1)
63
+ rake
64
+ rspec
65
+ rspec_candy
66
+
67
+ BUNDLED WITH
68
+ 1.17.3
@@ -1 +1 @@
1
- ./Gemfile.4.2.lock
1
+ Gemfile.4.2.lock
data/README.md CHANGED
@@ -5,7 +5,7 @@ assignable_values - Enums on vitamins [![Build Status](https://secure.travis-ci.
5
5
 
6
6
  We carefully enhanced the core enum functionality with small tweaks that are useful for web forms, internationalized applications and common authorization patterns.
7
7
 
8
- `assignable_values` is tested with Rails 2.3, 3.2, 4.2 and 5.0 on Ruby 1.8.7, 2.1 and 2.3.
8
+ `assignable_values` is tested with Rails 2.3, 3.2, 4.2, 5.1 and 6.0 (beta) on Ruby 1.8.7, 2.1, 2.3, 2.4 and 2.5.
9
9
 
10
10
 
11
11
  Restricting scalar attributes
@@ -353,7 +353,7 @@ There are tests in `spec`. We only accept PRs with tests. To run tests:
353
353
  - Create a local test database `assignable_values_test` in both MySQL and PostgreSQL
354
354
  - Copy `spec/support/database.sample.yml` to `spec/support/database.yml` and enter your local credentials for the test database
355
355
  - Install development dependencies using `bundle install`
356
- - Run tests using `bundle exec current_rspec`
356
+ - Run tests using `bundle exec rake current_rspec`
357
357
 
358
358
  We recommend to test large changes against multiple versions of Ruby and multiple dependency sets. Supported combinations are configured in `.travis.yml`. We provide some rake tasks to help with this:
359
359
 
@@ -17,8 +17,8 @@ module AssignableValues
17
17
  end
18
18
  end
19
19
 
20
- def humanized_assignable_values(record)
21
- values = assignable_values(record)
20
+ def humanized_assignable_values(record, options = {})
21
+ values = assignable_values(record, options)
22
22
  values.collect do |value|
23
23
  HumanizedValue.new(value, humanized_value(value))
24
24
  end
@@ -75,8 +75,8 @@ module AssignableValues
75
75
  restriction = self
76
76
  multiple = @options[:multiple]
77
77
  enhance_model do
78
- define_method :"humanized_assignable_#{restriction.property.to_s.pluralize}" do
79
- restriction.humanized_assignable_values(self)
78
+ define_method :"humanized_assignable_#{restriction.property.to_s.pluralize}" do |*args|
79
+ restriction.humanized_assignable_values(self, *args)
80
80
  end
81
81
 
82
82
  unless multiple
@@ -1,3 +1,3 @@
1
1
  module AssignableValues
2
- VERSION = '0.16.0'
2
+ VERSION = '0.16.1'
3
3
  end
@@ -1,6 +1,14 @@
1
1
  require 'spec_helper'
2
2
  require 'ostruct'
3
3
 
4
+ def save_without_validation(record)
5
+ if ActiveRecord::VERSION::MAJOR < 3
6
+ record.save(false)
7
+ else
8
+ record.save(:validate => false)
9
+ end
10
+ end
11
+
4
12
  describe AssignableValues::ActiveRecord do
5
13
 
6
14
  describe '.assignable_values' do
@@ -17,30 +25,30 @@ describe AssignableValues::ActiveRecord do
17
25
 
18
26
  before :each do
19
27
  @klass = Song.disposable_copy do
20
- assignable_values_for :sub_genre do
28
+ assignable_values_for :virtual_sub_genre do
21
29
  %w[pop rock]
22
30
  end
23
31
 
24
- assignable_values_for :multi_genres, :multiple => true, :allow_blank => true do
32
+ assignable_values_for :virtual_multi_genres, :multiple => true, :allow_blank => true do
25
33
  %w[pop rock]
26
34
  end
27
35
  end
28
36
  end
29
37
 
30
38
  it 'should validate that the attribute is allowed' do
31
- @klass.new(:sub_genre => 'pop').should be_valid
32
- @klass.new(:sub_genre => 'disallowed value').should_not be_valid
39
+ @klass.new(:virtual_sub_genre => 'pop').should be_valid
40
+ @klass.new(:virtual_sub_genre => 'disallowed value').should_not be_valid
33
41
  end
34
42
 
35
43
  it 'should not allow nil for the attribute value' do
36
- @klass.new(:sub_genre => nil).should_not be_valid
44
+ @klass.new(:virtual_sub_genre => nil).should_not be_valid
37
45
  end
38
46
 
39
47
  it 'should generate a method returning the humanized value' do
40
- song = @klass.new(:sub_genre => 'pop')
41
- song.humanized_sub_genre.should == 'Pop music'
42
- song.humanized_sub_genre('rock').should == 'Rock music'
43
- song.humanized_multi_genre('rock').should == 'Rock music'
48
+ song = @klass.new(:virtual_sub_genre => 'pop')
49
+ song.humanized_virtual_sub_genre.should == 'Pop music'
50
+ song.humanized_virtual_sub_genre('rock').should == 'Rock music'
51
+ song.humanized_virtual_multi_genre('rock').should == 'Rock music'
44
52
  end
45
53
 
46
54
  end
@@ -51,21 +59,21 @@ describe AssignableValues::ActiveRecord do
51
59
 
52
60
  before :each do
53
61
  @klass = Song.disposable_copy do
54
- assignable_values_for :multi_genres, :multiple => true do
62
+ assignable_values_for :virtual_multi_genres, :multiple => true do
55
63
  %w[pop rock]
56
64
  end
57
65
  end
58
66
  end
59
67
 
60
68
  it 'should validate that the attribute is a subset' do
61
- @klass.new(:multi_genres => ['pop']).should be_valid
62
- @klass.new(:multi_genres => ['pop', 'rock']).should be_valid
63
- @klass.new(:multi_genres => ['pop', 'disallowed value']).should_not be_valid
69
+ @klass.new(:virtual_multi_genres => ['pop']).should be_valid
70
+ @klass.new(:virtual_multi_genres => ['pop', 'rock']).should be_valid
71
+ @klass.new(:virtual_multi_genres => ['pop', 'disallowed value']).should_not be_valid
64
72
  end
65
73
 
66
74
  it 'should not allow nil or [] for allow_blank: false' do
67
- @klass.new(:multi_genres => nil).should_not be_valid
68
- @klass.new(:multi_genres => []).should_not be_valid
75
+ @klass.new(:virtual_multi_genres => nil).should_not be_valid
76
+ @klass.new(:virtual_multi_genres => []).should_not be_valid
69
77
  end
70
78
 
71
79
  end
@@ -74,15 +82,15 @@ describe AssignableValues::ActiveRecord do
74
82
 
75
83
  before :each do
76
84
  @klass = Song.disposable_copy do
77
- assignable_values_for :multi_genres, :multiple => true, :allow_blank => true do
85
+ assignable_values_for :virtual_multi_genres, :multiple => true, :allow_blank => true do
78
86
  %w[pop rock]
79
87
  end
80
88
  end
81
89
  end
82
90
 
83
91
  it 'should allow nil or [] for allow_blank: false' do
84
- @klass.new(:multi_genres => nil).should be_valid
85
- @klass.new(:multi_genres => []).should be_valid
92
+ @klass.new(:virtual_multi_genres => nil).should be_valid
93
+ @klass.new(:virtual_multi_genres => []).should be_valid
86
94
  end
87
95
 
88
96
  end
@@ -99,7 +107,7 @@ describe AssignableValues::ActiveRecord do
99
107
  %w[pop rock]
100
108
  end
101
109
 
102
- assignable_values_for :multi_genres, :multiple => true, :allow_blank => true do
110
+ assignable_values_for :virtual_multi_genres, :multiple => true, :allow_blank => true do
103
111
  %w[pop rock]
104
112
  end
105
113
  end
@@ -166,26 +174,26 @@ describe AssignableValues::ActiveRecord do
166
174
  context 'for multiple: true' do
167
175
  it 'should raise when trying to humanize a value without an argument' do
168
176
  song = @klass.new
169
- proc { song.humanized_multi_genre }.should raise_error(ArgumentError)
177
+ proc { song.humanized_virtual_multi_genre }.should raise_error(ArgumentError)
170
178
  end
171
179
 
172
180
  it 'should generate an instance method to retrieve the humanization of any given value' do
173
181
  song = @klass.new(:genre => 'pop')
174
- song.humanized_multi_genre('rock').should == 'Rock music'
182
+ song.humanized_virtual_multi_genre('rock').should == 'Rock music'
175
183
  end
176
184
 
177
185
  it 'should generate a class method to retrieve the humanization of any given value' do
178
- @klass.humanized_multi_genre('rock').should == 'Rock music'
186
+ @klass.humanized_virtual_multi_genre('rock').should == 'Rock music'
179
187
  end
180
188
 
181
189
  it 'should generate an instance method to retrieve the humanizations of all current values' do
182
190
  song = @klass.new
183
- song.multi_genres = nil
184
- song.humanized_multi_genres.should == nil
185
- song.multi_genres = []
186
- song.humanized_multi_genres.should == []
187
- song.multi_genres = ['pop', 'rock']
188
- song.humanized_multi_genres.should == ['Pop music', 'Rock music']
191
+ song.virtual_multi_genres = nil
192
+ song.humanized_virtual_multi_genres.should == nil
193
+ song.virtual_multi_genres = []
194
+ song.humanized_virtual_multi_genres.should == []
195
+ song.virtual_multi_genres = ['pop', 'rock']
196
+ song.humanized_virtual_multi_genres.should == ['Pop music', 'Rock music']
189
197
  end
190
198
  end
191
199
  end
@@ -280,43 +288,39 @@ describe AssignableValues::ActiveRecord do
280
288
 
281
289
  before :each do
282
290
  @klass = Song.disposable_copy do
283
- assignable_values_for :genres, :multiple => true do
291
+ assignable_values_for :multi_genres, :multiple => true do
284
292
  %w[pop rock]
285
293
  end
286
294
  end
287
295
  end
288
296
 
289
297
  it 'should validate that the attribute is allowed' do
290
- @klass.new(:genres => ['pop']).should be_valid
291
- @klass.new(:genres => ['pop', 'rock']).should be_valid
292
- @klass.new(:genres => ['pop', 'invalid value']).should_not be_valid
298
+ @klass.new(:multi_genres => ['pop']).should be_valid
299
+ @klass.new(:multi_genres => ['pop', 'rock']).should be_valid
300
+ @klass.new(:multi_genres => ['pop', 'invalid value']).should_not be_valid
293
301
  end
294
302
 
295
303
  it 'should not allow a scalar attribute' do
296
- @klass.new(:genres => 'pop').should_not be_valid
304
+ @klass.new(:multi_genres => 'pop').should_not be_valid
297
305
  end
298
306
 
299
307
  it 'should not allow nil or [] for the attribute value' do
300
- @klass.new(:genres => nil).should_not be_valid
301
- @klass.new(:genres => []).should_not be_valid
308
+ @klass.new(:multi_genres => nil).should_not be_valid
309
+ @klass.new(:multi_genres => []).should_not be_valid
302
310
  end
303
311
 
304
312
  it 'should allow a subset of previously saved values even if that value is no longer allowed' do
305
- record = @klass.create!(:genres => ['pop'])
306
- record.genres = ['pretend', 'previously', 'valid', 'value']
307
- if ActiveRecord::VERSION::MAJOR < 3
308
- record.save(false)
309
- else
310
- record.save(:validate => false) # update without validations for the sake of this test
311
- end
313
+ record = @klass.create!(:multi_genres => ['pop'])
314
+ record.multi_genres = ['pretend', 'previously', 'valid', 'value']
315
+ save_without_validation(record) # update without validation for the sake of this test
312
316
  record.reload.should be_valid
313
- record.genres = ['valid', 'previously', 'pop']
317
+ record.multi_genres = ['valid', 'previously', 'pop']
314
318
  record.should be_valid
315
319
  end
316
320
 
317
321
  it 'should allow a previously saved, blank value even if that value is no longer allowed' do
318
- record = @klass.create!(:genres => ['pop'])
319
- @klass.update_all(:genres => []) # update without validations for the sake of this test
322
+ record = @klass.create!(:multi_genres => ['pop'])
323
+ @klass.update_all(:multi_genres => []) # update without validations for the sake of this test
320
324
  record.reload.should be_valid
321
325
  end
322
326
 
@@ -326,18 +330,18 @@ describe AssignableValues::ActiveRecord do
326
330
 
327
331
  before :each do
328
332
  @klass = Song.disposable_copy do
329
- assignable_values_for :genres, :multiple => true, :allow_blank => true do
333
+ assignable_values_for :multi_genres, :multiple => true, :allow_blank => true do
330
334
  %w[pop rock]
331
335
  end
332
336
  end
333
337
  end
334
338
 
335
339
  it 'should allow nil for the attribute value' do
336
- @klass.new(:genres => nil).should be_valid
340
+ @klass.new(:multi_genres => nil).should be_valid
337
341
  end
338
342
 
339
343
  it 'should allow an empty array as value' do
340
- @klass.new(:genres => []).should be_valid
344
+ @klass.new(:multi_genres => []).should be_valid
341
345
  end
342
346
 
343
347
  end
@@ -752,10 +756,28 @@ describe AssignableValues::ActiveRecord do
752
756
  assignable_values_for :genre do
753
757
  %w[pop rock]
754
758
  end
759
+
760
+ assignable_values_for :multi_genres, :multiple => true do
761
+ %w[pop rock]
762
+ end
755
763
  end
756
- record = klass.create!(:genre => 'pop')
764
+ record = klass.create!(:genre => 'pop', :multi_genres => ['rock'])
757
765
  klass.update_all(:genre => 'ballad') # update without validation for the sake of this test
758
766
  record.reload.assignable_genres.should == %w[ballad pop rock]
767
+
768
+ humanized_genres = record.humanized_assignable_genres
769
+ humanized_genres.collect(&:value).should == %w[ballad pop rock]
770
+ humanized_genres.collect(&:humanized).should == ['Ballad', 'Pop music', 'Rock music']
771
+ humanized_genres.collect(&:to_s).should == ['Ballad', 'Pop music', 'Rock music']
772
+
773
+ record.multi_genres = %w[ballad classic]
774
+ save_without_validation(record) # update without validation for the sake of this test
775
+ record.reload.multi_genres.should == %w[ballad classic]
776
+
777
+ humanized_multi_genres = record.humanized_assignable_multi_genres
778
+ humanized_multi_genres.collect(&:value).should == %w[ballad classic pop rock]
779
+ humanized_multi_genres.collect(&:humanized).should == ['Ballad', 'Classic', 'Pop music', 'Rock music']
780
+ humanized_multi_genres.collect(&:to_s).should == ['Ballad', 'Classic', 'Pop music', 'Rock music']
759
781
  end
760
782
 
761
783
  it 'should not prepend a previously saved value to the top of the list if it is still allowed (bugfix)' do
@@ -795,10 +817,28 @@ describe AssignableValues::ActiveRecord do
795
817
  assignable_values_for :genre do
796
818
  %w[pop rock]
797
819
  end
820
+
821
+ assignable_values_for :multi_genres, :multiple => true do
822
+ %w[pop rock]
823
+ end
798
824
  end
799
- record = klass.create!(:genre => 'pop')
825
+ record = klass.create!(:genre => 'pop', :multi_genres => ['rock'])
800
826
  klass.update_all(:genre => 'ballad') # update without validation for the sake of this test
801
827
  record.reload.assignable_genres(:include_old_value => false).should == %w[pop rock]
828
+
829
+ humanized_genres = record.humanized_assignable_genres(:include_old_value => false)
830
+ humanized_genres.collect(&:value).should == %w[pop rock]
831
+ humanized_genres.collect(&:humanized).should == ['Pop music', 'Rock music']
832
+ humanized_genres.collect(&:to_s).should == ['Pop music', 'Rock music']
833
+
834
+ record.multi_genres = %w[ballad classic]
835
+ save_without_validation(record) # update without validation for the sake of this test
836
+ record.reload.multi_genres.should == %w[ballad classic]
837
+
838
+ humanized_multi_genres = record.humanized_assignable_multi_genres(:include_old_value => false)
839
+ humanized_multi_genres.collect(&:value).should == %w[pop rock]
840
+ humanized_multi_genres.collect(&:humanized).should == ['Pop music', 'Rock music']
841
+ humanized_multi_genres.collect(&:to_s).should == ['Pop music', 'Rock music']
802
842
  end
803
843
 
804
844
  it 'should allow omitting a previously saved association' do
@@ -10,7 +10,7 @@ database.rewrite_schema! do
10
10
  t.string :genre
11
11
  t.integer :year
12
12
  t.integer :duration
13
- t.string :genres, :array => true
13
+ t.string :multi_genres, :array => true
14
14
  end
15
15
 
16
16
  create_table :vinyl_recordings do |t|
@@ -15,7 +15,10 @@ en:
15
15
  multi_genres:
16
16
  pop: 'Pop music'
17
17
  rock: 'Rock music'
18
- sub_genre:
18
+ virtual_multi_genres:
19
+ pop: 'Pop music'
20
+ rock: 'Rock music'
21
+ virtual_sub_genre:
19
22
  pop: 'Pop music'
20
23
  rock: 'Rock music'
21
24
  year:
@@ -8,11 +8,11 @@ class Song < ActiveRecord::Base
8
8
 
9
9
  belongs_to :artist
10
10
 
11
- attr_accessor :sub_genre, :sub_genres, :multi_genres
11
+ attr_accessor :virtual_sub_genre, :virtual_sub_genres, :virtual_multi_genres
12
12
 
13
- if ActiveRecord::VERSION::MAJOR < 4 || !Song.new(:genres => ['test']).genres.is_a?(Array)
13
+ if ActiveRecord::VERSION::MAJOR < 4 || !Song.new(:multi_genres => ['test']).multi_genres.is_a?(Array)
14
14
  # Rails 4 or not postgres
15
- serialize :genres
15
+ serialize :multi_genres
16
16
  end
17
17
 
18
18
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: assignable_values
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.0
4
+ version: 0.16.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henning Koch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-20 00:00:00.000000000 Z
11
+ date: 2019-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -48,6 +48,8 @@ files:
48
48
  - Gemfile.5.1.lock
49
49
  - Gemfile.5.1.pg
50
50
  - Gemfile.5.1.pg.lock
51
+ - Gemfile.6.0.pg
52
+ - Gemfile.6.0.pg.lock
51
53
  - Gemfile.lock
52
54
  - LICENSE
53
55
  - README.md
@@ -90,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
90
92
  version: '0'
91
93
  requirements: []
92
94
  rubyforge_project:
93
- rubygems_version: 2.7.6
95
+ rubygems_version: 2.5.1
94
96
  signing_key:
95
97
  specification_version: 4
96
98
  summary: Restrict the values assignable to ActiveRecord attributes or associations