assignable_values 0.16.0 → 0.16.1

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
- 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