enumbler 0.9.2 → 0.10.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 +4 -4
- data/.github/workflows/ruby.yml +35 -30
- data/.rubocop.yml +10 -1
- data/.ruby-version +1 -0
- data/AGENTS.md +13 -0
- data/Gemfile +22 -0
- data/Gemfile.lock +92 -61
- data/Gemfile.rails6.0 +28 -0
- data/Gemfile.rails6.0.lock +99 -0
- data/Gemfile.rails6.1 +28 -0
- data/Gemfile.rails6.1.lock +98 -0
- data/Gemfile.rails7.0 +28 -0
- data/Gemfile.rails7.0.lock +96 -0
- data/Gemfile.rails7.1 +28 -0
- data/Gemfile.rails7.1.lock +114 -0
- data/Gemfile.rails7.2 +28 -0
- data/Gemfile.rails7.2.lock +112 -0
- data/Gemfile.rails8.0 +28 -0
- data/Gemfile.rails8.0.lock +112 -0
- data/README.md +12 -3
- data/bin/pre_commit_rubocop.rb +12 -3
- data/enumbler.gemspec +4 -11
- data/lib/enumbler/collection.rb +2 -2
- data/lib/enumbler/core_ext/symbol/case_equality_operator.rb +2 -2
- data/lib/enumbler/enabler.rb +23 -15
- data/lib/enumbler/version.rb +1 -1
- data/lib/enumbler.rb +3 -3
- metadata +27 -113
data/lib/enumbler/enabler.rb
CHANGED
@@ -7,6 +7,13 @@ module Enumbler
|
|
7
7
|
module Enabler
|
8
8
|
extend ActiveSupport::Concern
|
9
9
|
|
10
|
+
# This idea sourced lovingly from ActiveRecord::Enum
|
11
|
+
ENUMBLER_CONFLICT_MESSAGE = <<~TEXT
|
12
|
+
You tried to define the enumble :%<enum>s on the model %<klass>s, but
|
13
|
+
this will generate a %<type>s method `%<method>s`, which is already defined
|
14
|
+
by %<source>s.
|
15
|
+
TEXT
|
16
|
+
|
10
17
|
# The Enumble definition that this record defined.
|
11
18
|
# @return [Enumbler::Enumble]
|
12
19
|
def enumble
|
@@ -39,7 +46,7 @@ module Enumbler
|
|
39
46
|
|
40
47
|
def to_enumble_attribute(attribute)
|
41
48
|
enumble = self.class.find_enumble(id)
|
42
|
-
|
49
|
+
enumble.send(attribute) if enumble.present?
|
43
50
|
end
|
44
51
|
|
45
52
|
# These ClassMethods can be included in any model that you wish to
|
@@ -104,7 +111,7 @@ module Enumbler
|
|
104
111
|
|
105
112
|
# By default, the Enumbler is expecting a table with an underlying column
|
106
113
|
# named `label` that represents the enum in the database. You can change
|
107
|
-
# this by calling `
|
114
|
+
# this by calling `enumlber_label_column_name` before you `enumble`!
|
108
115
|
#
|
109
116
|
# ActiveRecord::Schema.define do
|
110
117
|
# create_table :feelings, force: true do |t|
|
@@ -407,13 +414,6 @@ module Enumbler
|
|
407
414
|
end
|
408
415
|
end
|
409
416
|
|
410
|
-
# This idea sourced lovingly from ActiveRecord::Enum
|
411
|
-
ENUMBLER_CONFLICT_MESSAGE = <<~TEXT.squish
|
412
|
-
You tried to define the enumble :%<enum>s on the model %<klass>s, but
|
413
|
-
this will generate a %<type>s method `%<method>s`, which is already defined
|
414
|
-
by %<source>s.
|
415
|
-
TEXT
|
416
|
-
|
417
417
|
def detect_enumbler_conflict(enumble_name, method_name, klass_method: false)
|
418
418
|
if klass_method && dangerous_class_method?(method_name)
|
419
419
|
raise_conflict_error(enumble_name, method_name, type: "class")
|
@@ -452,17 +452,25 @@ module Enumbler
|
|
452
452
|
|
453
453
|
return if unsupported_attrs.blank?
|
454
454
|
|
455
|
-
|
455
|
+
# The method .check_all_pending! was introduced in Rails 7.1
|
456
|
+
if ActiveRecord::Migration.respond_to?(:check_all_pending!)
|
457
|
+
ActiveRecord::Migration.check_all_pending!
|
458
|
+
else
|
459
|
+
ActiveRecord::Migration.check_pending!
|
460
|
+
end
|
456
461
|
|
457
462
|
raise Enumbler::Error,
|
458
463
|
"The model #{self} does not support the attribute(s): #{unsupported_attrs.keys.map(&:to_s).to_sentence}"
|
459
464
|
rescue ActiveRecord::PendingMigrationError
|
460
|
-
warn "[Enumbler Warning] => The model #{self} does not currently support the attribute(s):
|
461
|
-
|
462
|
-
|
465
|
+
warn "[Enumbler Warning] => The model #{self} does not currently support the attribute(s): " \
|
466
|
+
"#{unsupported_attrs.keys.map(&:to_s).to_sentence}. " \
|
467
|
+
"You have a pending migration which hopefully would remedy this! " \
|
468
|
+
"If not, you need to add a migration for this attibrute or " \
|
469
|
+
"remove it from the Enumbler."
|
463
470
|
rescue ActiveRecord::StatementInvalid
|
464
|
-
warn "[Enumbler Warning] => Unable to find a table for #{self}."\
|
465
|
-
|
471
|
+
warn "[Enumbler Warning] => Unable to find a table for #{self}." \
|
472
|
+
"This is to be expected if there is a pending migration; " \
|
473
|
+
"however, if there is not then something is amiss."
|
466
474
|
end
|
467
475
|
end
|
468
476
|
end
|
data/lib/enumbler/version.rb
CHANGED
data/lib/enumbler.rb
CHANGED
@@ -61,8 +61,8 @@ module Enumbler
|
|
61
61
|
enumbled_model = class_name.constantize
|
62
62
|
|
63
63
|
unless enumbled_model.respond_to?(:enumbles)
|
64
|
-
raise Error, "The model #{class_name} does not have any enumbles defined."\
|
65
|
-
|
64
|
+
raise Error, "The model #{class_name} does not have any enumbles defined. " \
|
65
|
+
"You can add them via `#{class_name}.enumble :blue, 1`."
|
66
66
|
end
|
67
67
|
|
68
68
|
belongs_to(name, scope, **options)
|
@@ -100,7 +100,7 @@ module Enumbler
|
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
103
|
-
# Add the
|
103
|
+
# Add the attributes:
|
104
104
|
#
|
105
105
|
# house.color_label #=> 'black'
|
106
106
|
# house.color_enum #=> :black
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: enumbler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Damon Timm
|
8
|
-
autorequire:
|
9
8
|
bindir: exe
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: activerecord
|
@@ -16,138 +15,40 @@ dependencies:
|
|
16
15
|
requirements:
|
17
16
|
- - ">="
|
18
17
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
18
|
+
version: '6.0'
|
20
19
|
- - "<"
|
21
20
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
21
|
+
version: '9'
|
23
22
|
type: :runtime
|
24
23
|
prerelease: false
|
25
24
|
version_requirements: !ruby/object:Gem::Requirement
|
26
25
|
requirements:
|
27
26
|
- - ">="
|
28
27
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
28
|
+
version: '6.0'
|
30
29
|
- - "<"
|
31
30
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
31
|
+
version: '9'
|
33
32
|
- !ruby/object:Gem::Dependency
|
34
33
|
name: activesupport
|
35
34
|
requirement: !ruby/object:Gem::Requirement
|
36
35
|
requirements:
|
37
36
|
- - ">="
|
38
37
|
- !ruby/object:Gem::Version
|
39
|
-
version:
|
38
|
+
version: '6.0'
|
40
39
|
- - "<"
|
41
40
|
- !ruby/object:Gem::Version
|
42
|
-
version: '
|
41
|
+
version: '9'
|
43
42
|
type: :runtime
|
44
43
|
prerelease: false
|
45
44
|
version_requirements: !ruby/object:Gem::Requirement
|
46
45
|
requirements:
|
47
46
|
- - ">="
|
48
47
|
- !ruby/object:Gem::Version
|
49
|
-
version:
|
48
|
+
version: '6.0'
|
50
49
|
- - "<"
|
51
50
|
- !ruby/object:Gem::Version
|
52
|
-
version: '
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
|
-
name: database_cleaner-active_record
|
55
|
-
requirement: !ruby/object:Gem::Requirement
|
56
|
-
requirements:
|
57
|
-
- - "~>"
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
version: 1.8.0
|
60
|
-
type: :development
|
61
|
-
prerelease: false
|
62
|
-
version_requirements: !ruby/object:Gem::Requirement
|
63
|
-
requirements:
|
64
|
-
- - "~>"
|
65
|
-
- !ruby/object:Gem::Version
|
66
|
-
version: 1.8.0
|
67
|
-
- !ruby/object:Gem::Dependency
|
68
|
-
name: fuubar
|
69
|
-
requirement: !ruby/object:Gem::Requirement
|
70
|
-
requirements:
|
71
|
-
- - "~>"
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
version: '2.5'
|
74
|
-
type: :development
|
75
|
-
prerelease: false
|
76
|
-
version_requirements: !ruby/object:Gem::Requirement
|
77
|
-
requirements:
|
78
|
-
- - "~>"
|
79
|
-
- !ruby/object:Gem::Version
|
80
|
-
version: '2.5'
|
81
|
-
- !ruby/object:Gem::Dependency
|
82
|
-
name: pry
|
83
|
-
requirement: !ruby/object:Gem::Requirement
|
84
|
-
requirements:
|
85
|
-
- - ">="
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
version: '0'
|
88
|
-
type: :development
|
89
|
-
prerelease: false
|
90
|
-
version_requirements: !ruby/object:Gem::Requirement
|
91
|
-
requirements:
|
92
|
-
- - ">="
|
93
|
-
- !ruby/object:Gem::Version
|
94
|
-
version: '0'
|
95
|
-
- !ruby/object:Gem::Dependency
|
96
|
-
name: rake
|
97
|
-
requirement: !ruby/object:Gem::Requirement
|
98
|
-
requirements:
|
99
|
-
- - "~>"
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
version: '12.0'
|
102
|
-
type: :development
|
103
|
-
prerelease: false
|
104
|
-
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
requirements:
|
106
|
-
- - "~>"
|
107
|
-
- !ruby/object:Gem::Version
|
108
|
-
version: '12.0'
|
109
|
-
- !ruby/object:Gem::Dependency
|
110
|
-
name: rspec
|
111
|
-
requirement: !ruby/object:Gem::Requirement
|
112
|
-
requirements:
|
113
|
-
- - "~>"
|
114
|
-
- !ruby/object:Gem::Version
|
115
|
-
version: 3.9.0
|
116
|
-
type: :development
|
117
|
-
prerelease: false
|
118
|
-
version_requirements: !ruby/object:Gem::Requirement
|
119
|
-
requirements:
|
120
|
-
- - "~>"
|
121
|
-
- !ruby/object:Gem::Version
|
122
|
-
version: 3.9.0
|
123
|
-
- !ruby/object:Gem::Dependency
|
124
|
-
name: rubocop
|
125
|
-
requirement: !ruby/object:Gem::Requirement
|
126
|
-
requirements:
|
127
|
-
- - "~>"
|
128
|
-
- !ruby/object:Gem::Version
|
129
|
-
version: 0.91.0
|
130
|
-
type: :development
|
131
|
-
prerelease: false
|
132
|
-
version_requirements: !ruby/object:Gem::Requirement
|
133
|
-
requirements:
|
134
|
-
- - "~>"
|
135
|
-
- !ruby/object:Gem::Version
|
136
|
-
version: 0.91.0
|
137
|
-
- !ruby/object:Gem::Dependency
|
138
|
-
name: sqlite3
|
139
|
-
requirement: !ruby/object:Gem::Requirement
|
140
|
-
requirements:
|
141
|
-
- - "~>"
|
142
|
-
- !ruby/object:Gem::Version
|
143
|
-
version: 1.4.0
|
144
|
-
type: :development
|
145
|
-
prerelease: false
|
146
|
-
version_requirements: !ruby/object:Gem::Requirement
|
147
|
-
requirements:
|
148
|
-
- - "~>"
|
149
|
-
- !ruby/object:Gem::Version
|
150
|
-
version: 1.4.0
|
51
|
+
version: '9'
|
151
52
|
description: A more complete description is forthcoming.
|
152
53
|
email:
|
153
54
|
- damon@linguabee.com
|
@@ -159,9 +60,23 @@ files:
|
|
159
60
|
- ".gitignore"
|
160
61
|
- ".rspec"
|
161
62
|
- ".rubocop.yml"
|
63
|
+
- ".ruby-version"
|
162
64
|
- ".solargraph.yml"
|
65
|
+
- AGENTS.md
|
163
66
|
- Gemfile
|
164
67
|
- Gemfile.lock
|
68
|
+
- Gemfile.rails6.0
|
69
|
+
- Gemfile.rails6.0.lock
|
70
|
+
- Gemfile.rails6.1
|
71
|
+
- Gemfile.rails6.1.lock
|
72
|
+
- Gemfile.rails7.0
|
73
|
+
- Gemfile.rails7.0.lock
|
74
|
+
- Gemfile.rails7.1
|
75
|
+
- Gemfile.rails7.1.lock
|
76
|
+
- Gemfile.rails7.2
|
77
|
+
- Gemfile.rails7.2.lock
|
78
|
+
- Gemfile.rails8.0
|
79
|
+
- Gemfile.rails8.0.lock
|
165
80
|
- LICENSE.txt
|
166
81
|
- README.md
|
167
82
|
- Rakefile
|
@@ -184,7 +99,7 @@ metadata:
|
|
184
99
|
homepage_uri: https://github.com/linguabee/enumbler
|
185
100
|
source_code_uri: https://github.com/linguabee/enumbler
|
186
101
|
changelog_uri: https://github.com/linguabee/enumbler
|
187
|
-
|
102
|
+
rubygems_mfa_required: 'true'
|
188
103
|
rdoc_options: []
|
189
104
|
require_paths:
|
190
105
|
- lib
|
@@ -192,15 +107,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
192
107
|
requirements:
|
193
108
|
- - ">="
|
194
109
|
- !ruby/object:Gem::Version
|
195
|
-
version:
|
110
|
+
version: '3.1'
|
196
111
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
197
112
|
requirements:
|
198
113
|
- - ">="
|
199
114
|
- !ruby/object:Gem::Version
|
200
115
|
version: '0'
|
201
116
|
requirements: []
|
202
|
-
rubygems_version: 3.
|
203
|
-
signing_key:
|
117
|
+
rubygems_version: 3.6.7
|
204
118
|
specification_version: 4
|
205
119
|
summary: Enums are terrific, but lack integrity. Let's add some!
|
206
120
|
test_files: []
|