assignable_values 0.12.1 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 862c6116c78266cdb897dccb736eb3a8f52c1059
4
+ data.tar.gz: b7824b4245a5a1bd369ff4ed1e30bcacb64d47f9
5
+ SHA512:
6
+ metadata.gz: a6107dd6fb457c1a7d862086858d5d32b91432102738695f258f646f851143e7d4111c9dfa424de0ada4cc4689443e488555ad7ab6d76a777118e9328513b07f
7
+ data.tar.gz: 573fb9aae2cfa6331328f7953c02e5ed8deae65e8633c50c9af05295da428df0a9fb24025491056c4ee17cdd15e938617cf5cd4b7d1cbe824fb629a31668c8dd
data/.travis.yml CHANGED
@@ -36,6 +36,7 @@ notifications:
36
36
 
37
37
  before_script:
38
38
  - mysql -e 'create database IF NOT EXISTS assignable_values_test;'
39
+ - mysql -e "GRANT ALL PRIVILEGES ON assignable_values_test.* TO 'travis'@'%';"
39
40
 
40
41
  install:
41
42
  # Old Travis CI bundler explodes when lockfile version doesn't match recently bumped version
data/Gemfile ADDED
@@ -0,0 +1 @@
1
+ ./gemfiles/Gemfile.4.2
data/Gemfile.lock ADDED
@@ -0,0 +1 @@
1
+ ./gemfiles/Gemfile.4.2.lock
data/README.md CHANGED
@@ -73,16 +73,6 @@ A good way to populate a `<select>` tag with pairs of internal values and human
73
73
 
74
74
  form.collection_select :genre, form.object.humanized_genres, :value, :humanized
75
75
 
76
- If you don't like to use your I18n dictionary for humanizations, you can also declare them directly in your model like this:
77
-
78
- class Song < ActiveRecord::Base
79
- assignable_values_for :genre do
80
- { 'pop' => 'Pop music',
81
- 'rock' => 'Rock music',
82
- 'electronic' => 'Electronic music' }
83
- end
84
- end
85
-
86
76
 
87
77
  ### Defining default values
88
78
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- assignable_values (0.12.1)
4
+ assignable_values (0.13.0)
5
5
  activerecord (>= 2.3)
6
6
 
7
7
  GEM
@@ -37,4 +37,4 @@ DEPENDENCIES
37
37
  rspec_candy
38
38
 
39
39
  BUNDLED WITH
40
- 1.12.5
40
+ 1.15.4
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- assignable_values (0.12.1)
4
+ assignable_values (0.13.0)
5
5
  activerecord (>= 2.3)
6
6
 
7
7
  GEM
@@ -62,4 +62,4 @@ DEPENDENCIES
62
62
  rspec_candy
63
63
 
64
64
  BUNDLED WITH
65
- 1.12.5
65
+ 1.15.4
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- assignable_values (0.12.1)
4
+ assignable_values (0.13.0)
5
5
  activerecord (>= 2.3)
6
6
 
7
7
  GEM
@@ -67,4 +67,4 @@ DEPENDENCIES
67
67
  rspec_candy
68
68
 
69
69
  BUNDLED WITH
70
- 1.12.5
70
+ 1.15.4
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- assignable_values (0.12.1)
4
+ assignable_values (0.13.0)
5
5
  activerecord (>= 2.3)
6
6
 
7
7
  GEM
@@ -64,4 +64,4 @@ DEPENDENCIES
64
64
  rspec_candy
65
65
 
66
66
  BUNDLED WITH
67
- 1.12.5
67
+ 1.15.4
@@ -49,8 +49,7 @@ module AssignableValues
49
49
 
50
50
  def assignable_values(record, options = {})
51
51
  assignable_values = []
52
- parsed_values = parsed_assignable_values(record)
53
- current_values = parsed_values.delete(:values)
52
+ current_values = assignable_values_from_record_or_delegate(record)
54
53
 
55
54
  if options.fetch(:include_old_value, true) && has_previously_saved_value?(record)
56
55
  old_value = previously_saved_value(record)
@@ -60,9 +59,6 @@ module AssignableValues
60
59
  end
61
60
 
62
61
  assignable_values += current_values
63
- parsed_values.each do |meta_name, meta_content|
64
- assignable_values.singleton_class.send(:define_method, meta_name) { meta_content }
65
- end
66
62
  if options[:decorate]
67
63
  assignable_values = decorate_values(assignable_values)
68
64
  end
@@ -97,10 +93,6 @@ module AssignableValues
97
93
  end
98
94
  end
99
95
 
100
- def parse_values(values)
101
- { :values => Array(values) }
102
- end
103
-
104
96
  def current_value(record)
105
97
  record.send(property)
106
98
  end
@@ -202,13 +194,12 @@ module AssignableValues
202
194
  end
203
195
  end
204
196
 
205
- def parsed_assignable_values(record)
197
+ def assignable_values_from_record_or_delegate(record)
206
198
  if delegate?
207
- values = assignable_values_from_delegate(record)
199
+ assignable_values_from_delegate(record).to_a
208
200
  else
209
- values = record.instance_exec(&@values)
201
+ record.instance_exec(&@values).to_a
210
202
  end
211
- parse_values(values)
212
203
  end
213
204
 
214
205
  def delegate(record)
@@ -10,21 +10,17 @@ module AssignableValues
10
10
  define_humanized_values_instance_method
11
11
  end
12
12
 
13
- def humanized_value(values, value) # we take the values because that contains the humanizations in case humanizations are hard-coded as a hash
13
+ def humanized_value(value)
14
14
  if value.present?
15
- if values && values.respond_to?(:humanizations)
16
- values.humanizations[value]
17
- else
18
- dictionary_scope = "assignable_values.#{model.name.underscore}.#{property}"
19
- I18n.t(value, :scope => dictionary_scope, :default => default_humanization_for_value(value))
20
- end
15
+ dictionary_scope = "assignable_values.#{model.name.underscore}.#{property}"
16
+ I18n.t(value, :scope => dictionary_scope, :default => default_humanization_for_value(value))
21
17
  end
22
18
  end
23
19
 
24
20
  def humanized_values(record)
25
21
  values = assignable_values(record)
26
22
  values.collect do |value|
27
- HumanizedValue.new(value, humanized_value(values, value))
23
+ HumanizedValue.new(value, humanized_value(value))
28
24
  end
29
25
  end
30
26
 
@@ -38,20 +34,11 @@ module AssignableValues
38
34
  end
39
35
  end
40
36
 
41
- def parse_values(values)
42
- if values.is_a?(Hash)
43
- { :values => values.keys,
44
- :humanizations => values }
45
- else
46
- super
47
- end
48
- end
49
-
50
37
  def define_humanized_value_class_method
51
38
  restriction = self
52
39
  enhance_model_singleton do
53
40
  define_method :"humanized_#{restriction.property}" do |given_value|
54
- restriction.humanized_value(nil, given_value)
41
+ restriction.humanized_value(given_value)
55
42
  end
56
43
  end
57
44
  end
@@ -60,10 +47,9 @@ module AssignableValues
60
47
  restriction = self
61
48
  enhance_model do
62
49
  define_method :"humanized_#{restriction.property}" do |*args|
63
- values = restriction.assignable_values(self)
64
50
  given_value = args[0]
65
51
  value = given_value || send(restriction.property)
66
- restriction.humanized_value(values, value)
52
+ restriction.humanized_value(value)
67
53
  end
68
54
  end
69
55
  end
@@ -81,7 +67,7 @@ module AssignableValues
81
67
  restriction = self
82
68
  values.collect do |value|
83
69
  if value.is_a?(String)
84
- humanization = restriction.humanized_value(values, value)
70
+ humanization = restriction.humanized_value(value)
85
71
  value = HumanizableString.new(value, humanization)
86
72
  end
87
73
  value
@@ -1,3 +1,3 @@
1
1
  module AssignableValues
2
- VERSION = '0.12.1'
2
+ VERSION = '0.13.0'
3
3
  end
@@ -373,14 +373,20 @@ describe AssignableValues::ActiveRecord do
373
373
  klass.new.assignable_years.should == [1977, 1980, 1983]
374
374
  end
375
375
 
376
- it 'should skip the validation if that method returns nil' do
377
- klass = Song.disposable_copy do
378
- assignable_values_for :genre, :through => :delegate
379
- def delegate
380
- nil
376
+ context 'when the delegation method returns nil' do
377
+ let(:klass) do
378
+ Song.disposable_copy do
379
+ assignable_values_for :genre, :through => proc { nil }
381
380
  end
382
381
  end
383
- klass.new(:genre => 'pop').should be_valid
382
+
383
+ it 'should skip the validation' do
384
+ klass.new(:genre => 'pop').should be_valid
385
+ end
386
+
387
+ it 'should still be able to humanize values on the instance' do
388
+ klass.new(:genre => 'pop').humanized_genre.should == 'Pop music'
389
+ end
384
390
  end
385
391
 
386
392
  end
@@ -652,30 +658,6 @@ describe AssignableValues::ActiveRecord do
652
658
  years.collect(&:humanized).should == ['The year a new hope was born', 'The year the Empire stroke back', 'The year the Jedi returned']
653
659
  end
654
660
 
655
- context 'hardcoded humanizations' do
656
-
657
- it 'should allow to directly declare humanized values by passing a hash to assignable_values_for' do
658
- klass = Song.disposable_copy do
659
- assignable_values_for :genre do
660
- { 'pop' => 'Pop music', 'rock' => 'Rock music' }
661
- end
662
- end
663
- klass.new.humanized_genres.collect(&:humanized).sort.should =~ ['Pop music', 'Rock music']
664
- end
665
-
666
- it "should correctly humanize values if the humanizations were declared using a hash, the values are not strings, and the list of humanized values hasn't been called before (bugfix)" do
667
- klass = Song.disposable_copy do
668
- assignable_values_for :duration do
669
- { 60 => '1:00',
670
- 90 => '1:30' }
671
- end
672
- end
673
- klass.new(:duration => 60).humanized_duration.should == '1:00'
674
- klass.new(:duration => 90).humanized_duration.should == '1:30'
675
- end
676
-
677
- end
678
-
679
661
  it 'should properly look up humanizations for namespaced models' do
680
662
  klass = Recording::Vinyl.disposable_copy do
681
663
  assignable_values_for :year do
metadata CHANGED
@@ -1,50 +1,39 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: assignable_values
3
- version: !ruby/object:Gem::Version
4
- hash: 45
5
- prerelease:
6
- segments:
7
- - 0
8
- - 12
9
- - 1
10
- version: 0.12.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.13.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Henning Koch
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2016-11-14 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
11
+ date: 2017-09-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
21
14
  name: activerecord
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
26
17
  - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 5
29
- segments:
30
- - 2
31
- - 3
32
- version: "2.3"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.3'
33
20
  type: :runtime
34
- version_requirements: *id001
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '2.3'
35
27
  description: Restrict the values assignable to ActiveRecord attributes or associations
36
28
  email: henning.koch@makandra.de
37
29
  executables: []
38
-
39
30
  extensions: []
40
-
41
31
  extra_rdoc_files: []
42
-
43
- files:
44
- - .gitignore
45
- - .rspec
46
- - .ruby-version
47
- - .travis.yml
32
+ files:
33
+ - ".gitignore"
34
+ - ".rspec"
35
+ - ".ruby-version"
36
+ - ".travis.yml"
48
37
  - Gemfile
49
38
  - Gemfile.lock
50
39
  - LICENSE
@@ -77,39 +66,30 @@ files:
77
66
  - spec/support/i18n.yml
78
67
  - spec/support/models.rb
79
68
  homepage: https://github.com/makandra/assignable_values
80
- licenses:
69
+ licenses:
81
70
  - MIT
71
+ metadata: {}
82
72
  post_install_message:
83
73
  rdoc_options: []
84
-
85
- require_paths:
74
+ require_paths:
86
75
  - lib
87
- required_ruby_version: !ruby/object:Gem::Requirement
88
- none: false
89
- requirements:
76
+ required_ruby_version: !ruby/object:Gem::Requirement
77
+ requirements:
90
78
  - - ">="
91
- - !ruby/object:Gem::Version
92
- hash: 3
93
- segments:
94
- - 0
95
- version: "0"
96
- required_rubygems_version: !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ requirements:
99
83
  - - ">="
100
- - !ruby/object:Gem::Version
101
- hash: 3
102
- segments:
103
- - 0
104
- version: "0"
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
105
86
  requirements: []
106
-
107
87
  rubyforge_project:
108
- rubygems_version: 1.8.29
88
+ rubygems_version: 2.6.13
109
89
  signing_key:
110
- specification_version: 3
90
+ specification_version: 4
111
91
  summary: Restrict the values assignable to ActiveRecord attributes or associations
112
- test_files:
92
+ test_files:
113
93
  - spec/assignable_values/active_record_spec.rb
114
94
  - spec/assignable_values/humanized_value_spec.rb
115
95
  - spec/spec_helper.rb
@@ -118,4 +98,3 @@ test_files:
118
98
  - spec/support/database.travis.yml
119
99
  - spec/support/i18n.yml
120
100
  - spec/support/models.rb
121
- has_rdoc:
data/Gemfile DELETED
@@ -1,16 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Runtime dependencies
4
- gem 'activerecord', '~>4.2.0'
5
- gem 'i18n', '~>0.7.0'
6
- gem 'mysql2', '~> 0.3.17'
7
-
8
- # Development dependencies
9
- gem 'rake'
10
- gem 'database_cleaner'
11
- gem 'rspec', '~> 3.4'
12
- gem 'rspec_candy'
13
- gem 'gemika'
14
-
15
- # Gem under test
16
- gem 'assignable_values', :path => '..'
data/Gemfile.lock DELETED
@@ -1,70 +0,0 @@
1
- PATH
2
- remote: ..
3
- specs:
4
- assignable_values (0.12.1)
5
- activerecord (>= 2.3)
6
-
7
- GEM
8
- remote: https://rubygems.org/
9
- specs:
10
- activemodel (4.2.7.1)
11
- activesupport (= 4.2.7.1)
12
- builder (~> 3.1)
13
- activerecord (4.2.7.1)
14
- activemodel (= 4.2.7.1)
15
- activesupport (= 4.2.7.1)
16
- arel (~> 6.0)
17
- activesupport (4.2.7.1)
18
- i18n (~> 0.7)
19
- json (~> 1.7, >= 1.7.7)
20
- minitest (~> 5.1)
21
- thread_safe (~> 0.3, >= 0.3.4)
22
- tzinfo (~> 1.1)
23
- arel (6.0.3)
24
- builder (3.2.2)
25
- database_cleaner (1.5.3)
26
- diff-lcs (1.2.5)
27
- gemika (0.3.2)
28
- i18n (0.7.0)
29
- json (1.8.3)
30
- minitest (5.9.1)
31
- mysql2 (0.3.20)
32
- rake (10.3.2)
33
- rspec (3.5.0)
34
- rspec-core (~> 3.5.0)
35
- rspec-expectations (~> 3.5.0)
36
- rspec-mocks (~> 3.5.0)
37
- rspec-core (3.5.4)
38
- rspec-support (~> 3.5.0)
39
- rspec-expectations (3.5.0)
40
- diff-lcs (>= 1.2.0, < 2.0)
41
- rspec-support (~> 3.5.0)
42
- rspec-mocks (3.5.0)
43
- diff-lcs (>= 1.2.0, < 2.0)
44
- rspec-support (~> 3.5.0)
45
- rspec-support (3.5.0)
46
- rspec_candy (0.3.1)
47
- rspec
48
- sneaky-save
49
- sneaky-save (0.0.5)
50
- activerecord (>= 3.2.0)
51
- thread_safe (0.3.5)
52
- tzinfo (1.2.2)
53
- thread_safe (~> 0.1)
54
-
55
- PLATFORMS
56
- ruby
57
-
58
- DEPENDENCIES
59
- activerecord (~> 4.2.0)
60
- assignable_values!
61
- database_cleaner
62
- gemika
63
- i18n (~> 0.7.0)
64
- mysql2 (~> 0.3.17)
65
- rake
66
- rspec (~> 3.4)
67
- rspec_candy
68
-
69
- BUNDLED WITH
70
- 1.12.5