assignable_values 0.16.6 → 0.17.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5b8661c6374664b624b4fd0a3e54529ac3783fff619a7d846b9c2836e8839608
4
- data.tar.gz: 2c72259b1eee2a767778975f95a6ac4f08ed02bbda8056426d7e7bca19e004da
3
+ metadata.gz: 8059afed1809ca7277b0db60d77f076f92746d3558bf06ed1713feb6961b053e
4
+ data.tar.gz: 11c933835b82953cc8576c99f23eebf6d686406be75a8566e27a067bb8dd0686
5
5
  SHA512:
6
- metadata.gz: 774ebe2bd0bbee83b66ab01a4a8358068c86688a543fdaea24b8f54220b7b9533de93d163c8d263a35dd33e6cd5855f9eeb4132e9b83a1e2d71f6fbb5bb647ce
7
- data.tar.gz: 1a7e51073af59fe8bcaf86537de1ba7d7c33fd116f5573c0a171915cc00ad975b16062d1e327caeee7f38afc21baee695dbd2a8e7cf09d573d0512f80201be65
6
+ metadata.gz: 6aa60676ebd5d1d21d6b64b0f1df342d3e1cafc540671d0321ed3f0d599b57a5b982d3a736d6b2922c263af5bb362da0e4ffecdb438ec5c547e755ecd36e6c4b
7
+ data.tar.gz: b67a535cb382ffe4f1996b919fc91440a97e758a839d87be98b6df50bffdb6bbf258b733fbceae5c888f05eecfe2327adc41690e101dc6e8a02c9220b4779386
data/CHANGELOG.md CHANGED
@@ -12,11 +12,18 @@ This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html
12
12
 
13
13
  -
14
14
 
15
+ ## 0.17.0 - 2022-07-27
16
+
17
+ ### Compatible changes
18
+
19
+ - Allow to override humanization for inherited assignable_values
20
+
15
21
  ## 0.16.6 - 2022-03-16
16
22
 
17
23
  ### Breaking changes
18
24
 
19
25
  - Remove no longer supported ruby versions (2.3.8, 2.4.2)
26
+ - Activate rubygems MFA
20
27
 
21
28
  ### Compatible changes
22
29
 
data/Gemfile.5.0 CHANGED
@@ -10,7 +10,7 @@ gem 'rake'
10
10
  gem 'database_cleaner'
11
11
  gem 'rspec'
12
12
  gem 'rspec_candy'
13
- gem 'gemika', '>= 0.5.0'
13
+ gem 'gemika'
14
14
 
15
15
  # Gem under test
16
16
  gem 'assignable_values', :path => '.'
data/Gemfile.5.0.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- assignable_values (0.16.5)
4
+ assignable_values (0.17.0)
5
5
  activerecord (>= 2.3)
6
6
 
7
7
  GEM
@@ -22,7 +22,7 @@ GEM
22
22
  concurrent-ruby (1.1.7)
23
23
  database_cleaner (1.8.5)
24
24
  diff-lcs (1.4.4)
25
- gemika (0.5.0)
25
+ gemika (0.7.1)
26
26
  i18n (1.8.5)
27
27
  concurrent-ruby (~> 1.0)
28
28
  minitest (5.14.2)
@@ -57,7 +57,7 @@ DEPENDENCIES
57
57
  activerecord (~> 5.0.0)
58
58
  assignable_values!
59
59
  database_cleaner
60
- gemika (>= 0.5.0)
60
+ gemika
61
61
  i18n
62
62
  mysql2
63
63
  rake
data/Gemfile.5.1 CHANGED
@@ -10,7 +10,7 @@ gem 'rake'
10
10
  gem 'database_cleaner'
11
11
  gem 'rspec'
12
12
  gem 'rspec_candy'
13
- gem 'gemika', '>= 0.5.0'
13
+ gem 'gemika'
14
14
 
15
15
  # Gem under test
16
16
  gem 'assignable_values', :path => '.'
data/Gemfile.5.1.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- assignable_values (0.16.5)
4
+ assignable_values (0.17.0)
5
5
  activerecord (>= 2.3)
6
6
 
7
7
  GEM
@@ -22,7 +22,7 @@ GEM
22
22
  concurrent-ruby (1.1.7)
23
23
  database_cleaner (1.8.5)
24
24
  diff-lcs (1.4.4)
25
- gemika (0.5.0)
25
+ gemika (0.7.1)
26
26
  i18n (1.8.5)
27
27
  concurrent-ruby (~> 1.0)
28
28
  minitest (5.14.2)
@@ -57,7 +57,7 @@ DEPENDENCIES
57
57
  activerecord (~> 5.1.0)
58
58
  assignable_values!
59
59
  database_cleaner
60
- gemika (>= 0.5.0)
60
+ gemika
61
61
  i18n
62
62
  mysql2
63
63
  rake
data/Gemfile.5.1.pg CHANGED
@@ -10,7 +10,7 @@ gem 'rake'
10
10
  gem 'database_cleaner'
11
11
  gem 'rspec'
12
12
  gem 'rspec_candy'
13
- gem 'gemika', '>= 0.5.0'
13
+ gem 'gemika'
14
14
 
15
15
  # Gem under test
16
16
  gem 'assignable_values', :path => '.'
data/Gemfile.5.1.pg.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- assignable_values (0.16.5)
4
+ assignable_values (0.17.0)
5
5
  activerecord (>= 2.3)
6
6
 
7
7
  GEM
@@ -22,7 +22,7 @@ GEM
22
22
  concurrent-ruby (1.0.5)
23
23
  database_cleaner (1.6.1)
24
24
  diff-lcs (1.3)
25
- gemika (0.5.0)
25
+ gemika (0.7.1)
26
26
  i18n (0.9.0)
27
27
  concurrent-ruby (~> 1.0)
28
28
  minitest (5.10.3)
@@ -57,7 +57,7 @@ DEPENDENCIES
57
57
  activerecord (~> 5.1.0)
58
58
  assignable_values!
59
59
  database_cleaner
60
- gemika (>= 0.5.0)
60
+ gemika
61
61
  i18n
62
62
  pg (< 1)
63
63
  rake
data/Gemfile.6.1.pg CHANGED
@@ -10,7 +10,7 @@ gem 'rake'
10
10
  gem 'database_cleaner'
11
11
  gem 'rspec'
12
12
  gem 'rspec_candy'
13
- gem 'gemika', '>= 0.5.0'
13
+ gem 'gemika'
14
14
 
15
15
  # Gem under test
16
16
  gem 'assignable_values', :path => '.'
data/Gemfile.6.1.pg.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- assignable_values (0.16.5)
4
+ assignable_values (0.17.0)
5
5
  activerecord (>= 2.3)
6
6
 
7
7
  GEM
@@ -21,7 +21,7 @@ GEM
21
21
  concurrent-ruby (1.1.5)
22
22
  database_cleaner (1.7.0)
23
23
  diff-lcs (1.3)
24
- gemika (0.5.0)
24
+ gemika (0.7.1)
25
25
  i18n (1.6.0)
26
26
  concurrent-ruby (~> 1.0)
27
27
  minitest (5.14.4)
@@ -56,7 +56,7 @@ DEPENDENCIES
56
56
  activerecord (~> 6.1.3)
57
57
  assignable_values!
58
58
  database_cleaner
59
- gemika (>= 0.5.0)
59
+ gemika
60
60
  i18n
61
61
  pg (= 1.1)
62
62
  rake
data/Gemfile.7.0.pg CHANGED
@@ -10,7 +10,7 @@ gem 'rake'
10
10
  gem 'database_cleaner'
11
11
  gem 'rspec'
12
12
  gem 'rspec_candy'
13
- gem 'gemika', '>= 0.5.0'
13
+ gem 'gemika'
14
14
 
15
15
  # Gem under test
16
16
  gem 'assignable_values', :path => '.'
data/Gemfile.7.0.pg.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- assignable_values (0.16.6)
4
+ assignable_values (0.17.0)
5
5
  activerecord (>= 2.3)
6
6
 
7
7
  GEM
@@ -20,7 +20,7 @@ GEM
20
20
  concurrent-ruby (1.1.5)
21
21
  database_cleaner (1.7.0)
22
22
  diff-lcs (1.3)
23
- gemika (0.5.0)
23
+ gemika (0.7.1)
24
24
  i18n (1.6.0)
25
25
  concurrent-ruby (~> 1.0)
26
26
  minitest (5.15.0)
@@ -54,7 +54,7 @@ DEPENDENCIES
54
54
  activerecord (~> 7.0.0)
55
55
  assignable_values!
56
56
  database_cleaner
57
- gemika (>= 0.5.0)
57
+ gemika
58
58
  i18n
59
59
  pg (= 1.1)
60
60
  rake
data/README.md CHANGED
@@ -73,6 +73,24 @@ 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_assignable_genres, :value, :humanized
75
75
 
76
+ #### Humanized labels and inheritance
77
+
78
+ For models that inherit assignable values you can override the humanized labels:
79
+
80
+ class FunnySong < Song
81
+ ...
82
+ end
83
+
84
+ en:
85
+ assignable_values:
86
+ funny_song:
87
+ genre:
88
+ pop: 'The stuff you hear on mainstream radio all day long'
89
+ rock: 'A lot of electric guitars and drums'
90
+ electronic: 'Whatever David Guetta does'
91
+
92
+ If no humanization is provided for the child model (i.e. the `funny_song.genre` key) humanization will fall back to the
93
+ parent model (`song`).
76
94
 
77
95
  ### Defining default values
78
96
 
@@ -63,8 +63,8 @@ module AssignableValues
63
63
  end
64
64
 
65
65
  if options[:decorate]
66
- current_values = decorate_values(current_values)
67
- additional_assignable_values = decorate_values(additional_assignable_values)
66
+ current_values = decorate_values(current_values, record.class)
67
+ additional_assignable_values = decorate_values(additional_assignable_values, record.class)
68
68
  end
69
69
 
70
70
  if additional_assignable_values.present?
@@ -146,7 +146,7 @@ module AssignableValues
146
146
  raise NotImplementedError
147
147
  end
148
148
 
149
- def decorate_values(values)
149
+ def decorate_values(values, _klass)
150
150
  values
151
151
  end
152
152
 
@@ -10,22 +10,29 @@ module AssignableValues
10
10
  define_humanized_assignable_values_instance_method
11
11
  end
12
12
 
13
- def humanized_value(value)
13
+ def humanized_value(klass, value)
14
14
  if value.present?
15
- dictionary_scope = "assignable_values.#{model.name.underscore}.#{property}"
16
- I18n.t(value, :scope => dictionary_scope, :default => default_humanization_for_value(value))
15
+ humanization_from_i18n(klass, value) || default_humanization_for_value(value)
17
16
  end
18
17
  end
19
18
 
20
19
  def humanized_assignable_values(record, options = {})
21
20
  values = assignable_values(record, options)
22
21
  values.collect do |value|
23
- HumanizedValue.new(value, humanized_value(value))
22
+ HumanizedValue.new(value, humanized_value(record.class, value))
24
23
  end
25
24
  end
26
25
 
27
26
  private
28
27
 
28
+ def humanization_from_i18n(klass, value)
29
+ klass.lookup_ancestors.select(&:name).find do |klass|
30
+ dictionary_scope = :"assignable_values.#{klass.model_name.i18n_key}.#{property}"
31
+ translation = I18n.translate(value, scope: dictionary_scope, default: nil)
32
+ break translation unless translation.nil?
33
+ end
34
+ end
35
+
29
36
  def default_humanization_for_value(value)
30
37
  if value.is_a?(String)
31
38
  value.humanize
@@ -38,7 +45,7 @@ module AssignableValues
38
45
  restriction = self
39
46
  enhance_model_singleton do
40
47
  define_method :"humanized_#{restriction.property.to_s.singularize}" do |given_value|
41
- restriction.humanized_value(given_value)
48
+ restriction.humanized_value(self, given_value)
42
49
  end
43
50
  end
44
51
  end
@@ -53,7 +60,7 @@ module AssignableValues
53
60
  end
54
61
  given_value = args[0]
55
62
  value = given_value || send(restriction.property)
56
- restriction.humanized_value(value)
63
+ restriction.humanized_value(self.class, value)
57
64
  end
58
65
 
59
66
  if multiple
@@ -61,7 +68,7 @@ module AssignableValues
61
68
  values = send(restriction.property)
62
69
  if values.respond_to?(:map)
63
70
  values.map do |value|
64
- restriction.humanized_value(value)
71
+ restriction.humanized_value(self.class, value)
65
72
  end
66
73
  else
67
74
  values
@@ -88,11 +95,11 @@ module AssignableValues
88
95
  end
89
96
  end
90
97
 
91
- def decorate_values(values)
98
+ def decorate_values(values, klass)
92
99
  restriction = self
93
100
  values.collect do |value|
94
101
  if value.is_a?(String)
95
- humanization = restriction.humanized_value(value)
102
+ humanization = restriction.humanized_value(klass, value)
96
103
  value = HumanizableString.new(value, humanization)
97
104
  end
98
105
  value
@@ -111,8 +118,6 @@ module AssignableValues
111
118
  value_was(record)
112
119
  end
113
120
 
114
- private
115
-
116
121
  def value_was(record)
117
122
  if record.respond_to?(:attribute_in_database)
118
123
  record.attribute_in_database(:"#{property}") # Rails >= 5.1
@@ -1,3 +1,3 @@
1
1
  module AssignableValues
2
- VERSION = '0.16.6'
2
+ VERSION = '0.17.0'
3
3
  end
@@ -1011,7 +1011,7 @@ describe AssignableValues::ActiveRecord do
1011
1011
  end
1012
1012
  years = klass.new.humanized_assignable_years
1013
1013
  years.collect(&:value).should == [1977, 1980, 1983]
1014
- years.collect(&:humanized).should == ['The year a new hope was born', 'The year the Empire stroke back', 'The year the Jedi returned']
1014
+ years.collect(&:humanized).should == ['The year a new hope was born', 'The year the Empire struck back', 'The year the Jedi returned']
1015
1015
  end
1016
1016
 
1017
1017
  it 'should properly look up humanizations for namespaced models' do
@@ -1021,7 +1021,37 @@ describe AssignableValues::ActiveRecord do
1021
1021
  end
1022
1022
  end
1023
1023
  years = klass.new.humanized_assignable_years
1024
- years.collect(&:humanized).should == ['The year a new hope was born', 'The year the Empire stroke back', 'The year the Jedi returned']
1024
+ years.collect(&:humanized).should == ['The year a new hope was born', 'The year the Empire struck back', 'The year the Jedi returned']
1025
+ end
1026
+
1027
+ context 'when inheriting from a model with defined assignable_values' do
1028
+
1029
+ let(:base_class) do
1030
+ Class.new(Song) do
1031
+ assignable_values_for :year do
1032
+ [1977, 1980, 1983]
1033
+ end
1034
+ end
1035
+ end
1036
+
1037
+ it 'allows to override humanization for inherited values' do
1038
+ Song::SeriousRepresentation = Class.new(base_class)
1039
+
1040
+ years = Song::SeriousRepresentation.new.humanized_assignable_years
1041
+ years.collect(&:humanized).should == ['year 1977', 'year 1980', 'year 1983']
1042
+ end
1043
+
1044
+ it 'looks up humanization in parent classes if the translation is not overridden' do
1045
+ Song::Extension = Class.new(base_class)
1046
+ Song::ExtendedExtension = Class.new(Song::Extension)
1047
+
1048
+ years_1 = Song::Extension.new.humanized_assignable_years
1049
+ years_1.collect(&:humanized).should == ['The year a new hope was born', 'The year the Empire struck back', 'The year the Jedi returned']
1050
+
1051
+ years_2 = Song::ExtendedExtension.new.humanized_assignable_years
1052
+ years_2.collect(&:humanized).should == ['The year a new hope was born', 'The year the Empire struck back', 'The year the Jedi returned']
1053
+ end
1054
+
1025
1055
  end
1026
1056
 
1027
1057
  context 'legacy methods for API compatibility' do
@@ -23,10 +23,15 @@ en:
23
23
  rock: 'Rock music'
24
24
  year:
25
25
  '1977': 'The year a new hope was born'
26
- '1980': 'The year the Empire stroke back'
26
+ '1980': 'The year the Empire struck back'
27
27
  '1983': 'The year the Jedi returned'
28
+ song/serious_representation:
29
+ year:
30
+ '1977': 'year 1977'
31
+ '1980': 'year 1980'
32
+ '1983': 'year 1983'
28
33
  recording/vinyl:
29
34
  year:
30
35
  '1977': 'The year a new hope was born'
31
- '1980': 'The year the Empire stroke back'
36
+ '1980': 'The year the Empire struck back'
32
37
  '1983': 'The year the Jedi returned'
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.6
4
+ version: 0.17.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henning Koch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-16 00:00:00.000000000 Z
11
+ date: 2022-07-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord