enum_fields 0.0.5 → 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/lib/enum_fields/enum_field.rb +45 -1
- data/lib/enum_fields/version.rb +1 -1
- metadata +1 -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
|
|
@@ -11,6 +11,7 @@ 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!
|
|
@@ -143,13 +144,56 @@ module EnumFields
|
|
|
143
144
|
end
|
|
144
145
|
|
|
145
146
|
def define_validation!
|
|
146
|
-
return
|
|
147
|
+
return unless column_validatable?
|
|
147
148
|
|
|
149
|
+
if column_polymorphic_association_name.present?
|
|
150
|
+
define_polymorphic_validation!
|
|
151
|
+
else
|
|
152
|
+
define_standard_validation!
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def define_standard_validation!
|
|
148
157
|
valid_values = @definition.values.pluck(:value)
|
|
158
|
+
|
|
149
159
|
@model_class.validates(@column_name, inclusion: {
|
|
150
160
|
in: valid_values,
|
|
151
161
|
allow_nil: true,
|
|
152
162
|
})
|
|
153
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
|
|
154
198
|
end
|
|
155
199
|
end
|
data/lib/enum_fields/version.rb
CHANGED