rich_enums 0.1.4 → 0.1.5
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 +4 -4
- data/.github/workflows/ci.yml +2 -0
- data/.ruby-version +1 -1
- data/Gemfile.lock +1 -1
- data/README.md +2 -0
- data/gemfiles/activerecord_7.1.gemfile.lock +72 -0
- data/gemfiles/activerecord_7.2.gemfile +8 -0
- data/gemfiles/activerecord_7.2.gemfile.lock +74 -0
- data/lib/rich_enums/version.rb +1 -1
- data/lib/rich_enums.rb +24 -7
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 23864e56ec97162d3609d1478dd9b42f51eec0a5b1b3ad6fefede47b9f629dfa
|
4
|
+
data.tar.gz: 69522c7f2420aa3135c213b159e871ad2958c20deaced2d02c6f839194369bdf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7a88fcda980a44065ec3c23a9d1871ac800f57ebe2b045e58718cd26095507506c69aec0b97480c0f211f5e117eacab7ace002a4738410339e109c1a001f8f93
|
7
|
+
data.tar.gz: '00880f968a5f479663c987ce2c5991c4cc7f065bdda3701122dd73dcef0283cc93e7cb17521bcc1cbc2d36ca8c8c919ccc48805bca09be7ec2137f53659e602a'
|
data/.github/workflows/ci.yml
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.
|
1
|
+
3.3.4
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -17,6 +17,7 @@ user.role_code # => 'ROLE001'
|
|
17
17
|
user.role_for_database # => 1
|
18
18
|
User.roles # => {"admin"=>1, "user"=>2}
|
19
19
|
User.role_codes # => {"admin"=>"ROLE001", "user"=>"ROLE101"}
|
20
|
+
User.role_alt_name_to_ids # => {"ROLE001"=>1, "ROLE101"=>2}
|
20
21
|
|
21
22
|
```
|
22
23
|
|
@@ -61,6 +62,7 @@ user.role_alt_name # => 'ROLE001'
|
|
61
62
|
user.role_for_database # => 1
|
62
63
|
User.roles # => {"admin"=>1, "user"=>2}
|
63
64
|
User.role_alt_names # => {"admin"=>"ROLE001", "user"=>"ROLE101"}
|
65
|
+
User.role_alt_name_to_ids # => {"ROLE001"=>1, "ROLE101"=>2}
|
64
66
|
ExternalSystem.sync(user.external_id, role_code: user.role_alt_name)
|
65
67
|
```
|
66
68
|
Any arguments other than 'alt' are forwarded to the default enum definition.
|
@@ -0,0 +1,72 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ..
|
3
|
+
specs:
|
4
|
+
rich_enums (0.1.5)
|
5
|
+
activerecord (>= 6.1, < 8.0)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
activemodel (7.1.3.2)
|
11
|
+
activesupport (= 7.1.3.2)
|
12
|
+
activerecord (7.1.3.2)
|
13
|
+
activemodel (= 7.1.3.2)
|
14
|
+
activesupport (= 7.1.3.2)
|
15
|
+
timeout (>= 0.4.0)
|
16
|
+
activesupport (7.1.3.2)
|
17
|
+
base64
|
18
|
+
bigdecimal
|
19
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
20
|
+
connection_pool (>= 2.2.5)
|
21
|
+
drb
|
22
|
+
i18n (>= 1.6, < 2)
|
23
|
+
minitest (>= 5.1)
|
24
|
+
mutex_m
|
25
|
+
tzinfo (~> 2.0)
|
26
|
+
base64 (0.2.0)
|
27
|
+
bigdecimal (3.1.7)
|
28
|
+
concurrent-ruby (1.2.3)
|
29
|
+
connection_pool (2.4.1)
|
30
|
+
diff-lcs (1.5.1)
|
31
|
+
drb (2.2.1)
|
32
|
+
i18n (1.14.4)
|
33
|
+
concurrent-ruby (~> 1.0)
|
34
|
+
minitest (5.22.3)
|
35
|
+
mutex_m (0.2.0)
|
36
|
+
rake (12.3.3)
|
37
|
+
rspec (3.13.0)
|
38
|
+
rspec-core (~> 3.13.0)
|
39
|
+
rspec-expectations (~> 3.13.0)
|
40
|
+
rspec-mocks (~> 3.13.0)
|
41
|
+
rspec-core (3.13.0)
|
42
|
+
rspec-support (~> 3.13.0)
|
43
|
+
rspec-expectations (3.13.0)
|
44
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
45
|
+
rspec-support (~> 3.13.0)
|
46
|
+
rspec-mocks (3.13.0)
|
47
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
48
|
+
rspec-support (~> 3.13.0)
|
49
|
+
rspec-support (3.13.1)
|
50
|
+
sqlite3 (1.7.3-arm64-darwin)
|
51
|
+
sqlite3 (1.7.3-x86_64-darwin)
|
52
|
+
temping (4.1.1)
|
53
|
+
activerecord (>= 6.0, < 7.2)
|
54
|
+
activesupport (>= 6.0, < 7.2)
|
55
|
+
timeout (0.4.1)
|
56
|
+
tzinfo (2.0.6)
|
57
|
+
concurrent-ruby (~> 1.0)
|
58
|
+
|
59
|
+
PLATFORMS
|
60
|
+
arm64-darwin-23
|
61
|
+
x86_64-darwin-21
|
62
|
+
|
63
|
+
DEPENDENCIES
|
64
|
+
activerecord (~> 7.1)
|
65
|
+
rake (~> 12.0)
|
66
|
+
rich_enums!
|
67
|
+
rspec (~> 3.0)
|
68
|
+
sqlite3 (~> 1.4)
|
69
|
+
temping (~> 4.1)
|
70
|
+
|
71
|
+
BUNDLED WITH
|
72
|
+
2.5.16
|
@@ -0,0 +1,74 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ..
|
3
|
+
specs:
|
4
|
+
rich_enums (0.1.5)
|
5
|
+
activerecord (>= 6.1, < 8.0)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
activemodel (7.2.0)
|
11
|
+
activesupport (= 7.2.0)
|
12
|
+
activerecord (7.2.0)
|
13
|
+
activemodel (= 7.2.0)
|
14
|
+
activesupport (= 7.2.0)
|
15
|
+
timeout (>= 0.4.0)
|
16
|
+
activesupport (7.2.0)
|
17
|
+
base64
|
18
|
+
bigdecimal
|
19
|
+
concurrent-ruby (~> 1.0, >= 1.3.1)
|
20
|
+
connection_pool (>= 2.2.5)
|
21
|
+
drb
|
22
|
+
i18n (>= 1.6, < 2)
|
23
|
+
logger (>= 1.4.2)
|
24
|
+
minitest (>= 5.1)
|
25
|
+
securerandom (>= 0.3)
|
26
|
+
tzinfo (~> 2.0, >= 2.0.5)
|
27
|
+
base64 (0.2.0)
|
28
|
+
bigdecimal (3.1.8)
|
29
|
+
concurrent-ruby (1.3.4)
|
30
|
+
connection_pool (2.4.1)
|
31
|
+
diff-lcs (1.5.1)
|
32
|
+
drb (2.2.1)
|
33
|
+
i18n (1.14.5)
|
34
|
+
concurrent-ruby (~> 1.0)
|
35
|
+
logger (1.6.0)
|
36
|
+
minitest (5.25.1)
|
37
|
+
rake (12.3.3)
|
38
|
+
rspec (3.13.0)
|
39
|
+
rspec-core (~> 3.13.0)
|
40
|
+
rspec-expectations (~> 3.13.0)
|
41
|
+
rspec-mocks (~> 3.13.0)
|
42
|
+
rspec-core (3.13.0)
|
43
|
+
rspec-support (~> 3.13.0)
|
44
|
+
rspec-expectations (3.13.2)
|
45
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
46
|
+
rspec-support (~> 3.13.0)
|
47
|
+
rspec-mocks (3.13.1)
|
48
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
49
|
+
rspec-support (~> 3.13.0)
|
50
|
+
rspec-support (3.13.1)
|
51
|
+
securerandom (0.3.1)
|
52
|
+
sqlite3 (1.7.3-arm64-darwin)
|
53
|
+
sqlite3 (1.7.3-x86_64-darwin)
|
54
|
+
temping (4.2.0)
|
55
|
+
activerecord (>= 6.0, < 7.3)
|
56
|
+
activesupport (>= 6.0, < 7.3)
|
57
|
+
timeout (0.4.1)
|
58
|
+
tzinfo (2.0.6)
|
59
|
+
concurrent-ruby (~> 1.0)
|
60
|
+
|
61
|
+
PLATFORMS
|
62
|
+
arm64-darwin-23
|
63
|
+
x86_64-darwin-21
|
64
|
+
|
65
|
+
DEPENDENCIES
|
66
|
+
activerecord (~> 7.2)
|
67
|
+
rake (~> 12.0)
|
68
|
+
rich_enums!
|
69
|
+
rspec (~> 3.0)
|
70
|
+
sqlite3 (~> 1.4)
|
71
|
+
temping (~> 4.1)
|
72
|
+
|
73
|
+
BUNDLED WITH
|
74
|
+
2.5.16
|
data/lib/rich_enums/version.rb
CHANGED
data/lib/rich_enums.rb
CHANGED
@@ -15,6 +15,8 @@ module RichEnums
|
|
15
15
|
# and
|
16
16
|
# 2. Class method "column1_names" that will map the enum values to the full String description
|
17
17
|
# and can be accessed by ClassName.<column>_names which will return a hash like { symbol1: string1, symbol2: string2 ...}
|
18
|
+
# 3. Class method "column1_alt_name_to_ids" will map the enum values the string values and can
|
19
|
+
# be accessed by ClassName.<column>_alt_name_to_ids which will return a hash like { string1: value1, string2: value2 ...}
|
18
20
|
# e.g.
|
19
21
|
# class Enrollment
|
20
22
|
# include RichEnums
|
@@ -31,6 +33,9 @@ module RichEnums
|
|
31
33
|
# Calling learner_payment_path_names returns
|
32
34
|
# {"greenfig_online"=>"GreenFig Online", "partner"=>"Partner", "partner_online"=>"Partner Online",
|
33
35
|
# "po_check"=>"P.O. / Check", "other"=>"Other"}
|
36
|
+
# iii. a class method called learner_payment_path_alt_name_to_ids
|
37
|
+
# Calling learner_payment_path_alt_name_to_ids returns
|
38
|
+
# {"GreenFig Online"=>10, "Partner"=>20, "Partner Online"=>30, "P.O. / Check"=>40, "Other"=>100}
|
34
39
|
# 3. Instance method "column1_name" will return the String associated with the enum value
|
35
40
|
# e = Enrollment.new
|
36
41
|
# e.learner_payment_path_po_check! -> normal enum method to update the object with enum value
|
@@ -57,21 +62,33 @@ module RichEnums
|
|
57
62
|
options = column_symbol_value_string_options
|
58
63
|
# we allow for an option called alt: to allow the users to tag the alternate mapping. Defaults to 'alt_name'
|
59
64
|
alt = options.delete(:alt).to_s || 'alt_name'
|
65
|
+
alt_map_method = 'alt_name_to_ids'
|
60
66
|
|
61
67
|
# create two hashes from the provided input - 1 to be used to define the enum and the other for the name map
|
62
|
-
split_hash = symbol_value_string.each_with_object({ for_enum: {}, for_display: {} }) do |(symbol, value_string), obj|
|
63
|
-
|
64
|
-
|
68
|
+
split_hash = symbol_value_string.each_with_object({ for_enum: {}, for_display: {}, for_filter: {} }) do |(symbol, value_string), obj|
|
69
|
+
value = value_string.is_a?(Array) ? value_string.first : value_string
|
70
|
+
display_string = value_string.is_a?(Array) ? value_string.second : symbol.to_s
|
71
|
+
|
72
|
+
obj[:for_enum][symbol] = value
|
73
|
+
obj[:for_display][symbol.to_s] = display_string
|
74
|
+
obj[:for_filter][display_string] = value
|
65
75
|
end
|
66
76
|
|
67
77
|
# 1. Define the Enum
|
68
|
-
|
78
|
+
if Gem::Version.new(ActiveRecord::VERSION::STRING) >= Gem::Version.new('7.2')
|
79
|
+
enum column, split_hash[:for_enum], **options
|
80
|
+
else
|
81
|
+
enum "#{column}": split_hash[:for_enum], **options
|
82
|
+
end
|
69
83
|
|
70
|
-
# 2. Define our custom class
|
71
|
-
# - the data to be returned by our custom
|
84
|
+
# 2. Define our custom class methods
|
85
|
+
# - the data to be returned by our custom methods is available as a class instance variable
|
72
86
|
instance_variable_set("@#{column}_#{alt.pluralize}", split_hash[:for_display])
|
73
|
-
#
|
87
|
+
instance_variable_set("@#{column}_#{alt_map_method}", split_hash[:for_filter])
|
88
|
+
|
89
|
+
# - the custom methods are just a getter for the class instance variables
|
74
90
|
define_singleton_method("#{column}_#{alt.pluralize}") { instance_variable_get("@#{column}_#{alt.pluralize}") }
|
91
|
+
define_singleton_method("#{column}_#{alt_map_method}") { instance_variable_get("@#{column}_#{alt_map_method}") }
|
75
92
|
|
76
93
|
# 3. Define our custom instance method to show the String associated with the enum value
|
77
94
|
define_method("#{column}_#{alt}") { self.class.send("#{column}_#{alt.pluralize}")[send(column.to_s)] }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rich_enums
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- harunkumars
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2024-
|
12
|
+
date: 2024-08-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sqlite3
|
@@ -86,6 +86,9 @@ files:
|
|
86
86
|
- gemfiles/activerecord_6.1.gemfile
|
87
87
|
- gemfiles/activerecord_7.0.gemfile
|
88
88
|
- gemfiles/activerecord_7.1.gemfile
|
89
|
+
- gemfiles/activerecord_7.1.gemfile.lock
|
90
|
+
- gemfiles/activerecord_7.2.gemfile
|
91
|
+
- gemfiles/activerecord_7.2.gemfile.lock
|
89
92
|
- lib/rich_enums.rb
|
90
93
|
- lib/rich_enums/version.rb
|
91
94
|
- rich_enums.gemspec
|
@@ -112,7 +115,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
112
115
|
- !ruby/object:Gem::Version
|
113
116
|
version: '0'
|
114
117
|
requirements: []
|
115
|
-
rubygems_version: 3.5.
|
118
|
+
rubygems_version: 3.5.11
|
116
119
|
signing_key:
|
117
120
|
specification_version: 4
|
118
121
|
summary: When a simple name to value mapping is not enough
|