enum_fields 0.0.4 → 0.1.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/README.md +5 -0
- data/lib/enum_fields/enum_field.rb +58 -1
- data/lib/enum_fields/version.rb +1 -1
- metadata +2 -3
- data/___DEPLOY.md +0 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9a282e3cb07038a6db32bfed63217bc85ec6901541b26e373e1c5a78e4ee4106
|
|
4
|
+
data.tar.gz: 26cc2fccb3171185ac16e0edeab889b235c64b7d7b289b9958234c5da7064e73
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b989a5b41c4e07609bf00dd08db9555ee7f544cda58f91ca4db114ba3a66fbeecfd892077ae22f96721bfd40478b609fe77bbea123853e2e5ba4aa10354a1bb4
|
|
7
|
+
data.tar.gz: 2e1c2fbdeee50ee23a328cd160b25ee1d86b52d0e4a42198841c167d1fff231045340171adfbacf0fe5d406ce4bcd83d5a4d151aff63dedeeaf54de9e1dc7832
|
data/README.md
CHANGED
|
@@ -156,6 +156,11 @@ Campaign.stages_values # ['draft', 'scheduled', 'completed']
|
|
|
156
156
|
|
|
157
157
|
# Returns the options for form helpers
|
|
158
158
|
Campaign.stages_options # [['Draft', 'draft'], ['Scheduled', 'scheduled'], ['Completed', 'completed']]
|
|
159
|
+
|
|
160
|
+
# Returns the value for a specific key
|
|
161
|
+
Campaign.draft_stage_value # 'draft'
|
|
162
|
+
Campaign.scheduled_stage_value # 'scheduled'
|
|
163
|
+
Campaign.completed_stage_value # 'completed'
|
|
159
164
|
```
|
|
160
165
|
|
|
161
166
|
#### Instance Getter/Setter
|
|
@@ -11,11 +11,13 @@ module EnumFields
|
|
|
11
11
|
@accessor = accessor.to_sym
|
|
12
12
|
@column_name = options.fetch(:column, @accessor).to_sym
|
|
13
13
|
@definition = Definition.new(definition)
|
|
14
|
+
@options = options
|
|
14
15
|
end
|
|
15
16
|
|
|
16
17
|
def define!
|
|
17
18
|
store_definition!
|
|
18
19
|
define_class_methods!
|
|
20
|
+
define_class_value_accessors!
|
|
19
21
|
define_instance_getter!
|
|
20
22
|
define_instance_setter!
|
|
21
23
|
define_metadata_methods!
|
|
@@ -54,6 +56,18 @@ module EnumFields
|
|
|
54
56
|
end
|
|
55
57
|
end
|
|
56
58
|
|
|
59
|
+
def define_class_value_accessors!
|
|
60
|
+
accessor = @accessor
|
|
61
|
+
|
|
62
|
+
@definition.each do |key, metadata|
|
|
63
|
+
definition_value = metadata[:value]
|
|
64
|
+
|
|
65
|
+
@model_class.define_singleton_method("#{key}_#{accessor}_value") do
|
|
66
|
+
definition_value
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
57
71
|
def define_instance_getter!
|
|
58
72
|
return if @accessor == @column_name
|
|
59
73
|
|
|
@@ -130,13 +144,56 @@ module EnumFields
|
|
|
130
144
|
end
|
|
131
145
|
|
|
132
146
|
def define_validation!
|
|
133
|
-
return
|
|
147
|
+
return unless column_validatable?
|
|
148
|
+
|
|
149
|
+
if column_polymorphic_association_name.present?
|
|
150
|
+
define_polymorphic_validation!
|
|
151
|
+
else
|
|
152
|
+
define_standard_validation!
|
|
153
|
+
end
|
|
154
|
+
end
|
|
134
155
|
|
|
156
|
+
def define_standard_validation!
|
|
135
157
|
valid_values = @definition.values.pluck(:value)
|
|
158
|
+
|
|
136
159
|
@model_class.validates(@column_name, inclusion: {
|
|
137
160
|
in: valid_values,
|
|
138
161
|
allow_nil: true,
|
|
139
162
|
})
|
|
140
163
|
end
|
|
164
|
+
|
|
165
|
+
def define_polymorphic_validation!
|
|
166
|
+
association_name = column_polymorphic_association_name
|
|
167
|
+
column_name = @column_name
|
|
168
|
+
accessor = @accessor
|
|
169
|
+
|
|
170
|
+
@model_class.validate do
|
|
171
|
+
association_obj = respond_to?(association_name) ? public_send(association_name) : nil
|
|
172
|
+
valid_values = self.class.public_send("#{accessor}_values")
|
|
173
|
+
|
|
174
|
+
if association_obj
|
|
175
|
+
errors.add(association_name, "must be one of: #{valid_values.join(', ')}") unless valid_values.include?(association_obj.class.name)
|
|
176
|
+
else
|
|
177
|
+
column_value = attributes[column_name.to_s]
|
|
178
|
+
next if column_value.nil?
|
|
179
|
+
|
|
180
|
+
errors.add(column_name, "must be one of: #{valid_values.join(', ')}") unless valid_values.include?(column_value)
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def column_validatable?
|
|
186
|
+
@definition.present? && @options.fetch(:validate, true)
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
def column_polymorphic_association_name
|
|
190
|
+
return nil unless @model_class.respond_to?(:reflect_on_all_associations)
|
|
191
|
+
|
|
192
|
+
reflection = @model_class.reflect_on_all_associations(:belongs_to).find do |r|
|
|
193
|
+
r.options[:polymorphic] && "#{r.name}_type" == @column_name.to_s
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
reflection&.name
|
|
197
|
+
end
|
|
141
198
|
end
|
|
142
199
|
end
|
data/lib/enum_fields/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: enum_fields
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0
|
|
4
|
+
version: 0.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Kinnell Shah
|
|
@@ -63,7 +63,6 @@ files:
|
|
|
63
63
|
- CHANGELOG.md
|
|
64
64
|
- LICENSE
|
|
65
65
|
- README.md
|
|
66
|
-
- ___DEPLOY.md
|
|
67
66
|
- lib/enum_fields.rb
|
|
68
67
|
- lib/enum_fields/base.rb
|
|
69
68
|
- lib/enum_fields/definition.rb
|
|
@@ -94,7 +93,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
94
93
|
- !ruby/object:Gem::Version
|
|
95
94
|
version: '2.0'
|
|
96
95
|
requirements: []
|
|
97
|
-
rubygems_version:
|
|
96
|
+
rubygems_version: 4.0.3
|
|
98
97
|
specification_version: 4
|
|
99
98
|
summary: Enhanced enum-like fields for ActiveRecord models with metadata support
|
|
100
99
|
test_files: []
|
data/___DEPLOY.md
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
GEM_HOST_API_KEY=rubygems_db84a0b325ee57c261e6377227b29755def62cc2d8201c2e rake release
|