Use prepend for Type overrides /ht @jasl closes #179

This commit is contained in:
Adam Meehan 2018-07-02 21:08:15 +10:00
parent af406cdedc
commit 70335cd0ba

View File

@ -9,36 +9,36 @@ module ValidatesTimeliness
end end
end end
ActiveModel::Type::Date.class_eval do ActiveModel::Type::Date.prepend Module.new {
# Module.new do |m| def cast_value(value)
def cast_value(value) return super unless ValidatesTimeliness.use_plugin_parser
return super unless ValidatesTimeliness.use_plugin_parser
if value.is_a?(::String) if value.is_a?(::String)
return if value.empty? return if value.empty?
value = Timeliness::Parser.parse(value, :date) value = Timeliness::Parser.parse(value, :date)
value.to_date if value value.to_date if value
elsif value.respond_to?(:to_date) elsif value.respond_to?(:to_date)
value.to_date value.to_date
else else
value value
end
end end
# end.tap { |mod| include mod } end
end }
ActiveModel::Type::Time.class_eval do ActiveModel::Type::Time.prepend Module.new {
def user_input_in_time_zone(value) def user_input_in_time_zone(value)
if value.is_a?(String) && ValidatesTimeliness.use_plugin_parser return super unless ValidatesTimeliness.use_plugin_parser
if value.is_a?(String)
dummy_time_value = value.sub(/\A(\d\d\d\d-\d\d-\d\d |)/, Date.current.to_s + ' ') dummy_time_value = value.sub(/\A(\d\d\d\d-\d\d-\d\d |)/, Date.current.to_s + ' ')
Timeliness::Parser.parse(dummy_time_value, :datetime, zone: :current) Timeliness::Parser.parse(dummy_time_value, :datetime, zone: :current)
else else
value.in_time_zone value.in_time_zone
end end
end end
end }
ActiveModel::Type::DateTime.class_eval do ActiveModel::Type::DateTime.prepend Module.new {
def user_input_in_time_zone(value) def user_input_in_time_zone(value)
if value.is_a?(String) && ValidatesTimeliness.use_plugin_parser if value.is_a?(String) && ValidatesTimeliness.use_plugin_parser
Timeliness::Parser.parse(value, :datetime, zone: :current) Timeliness::Parser.parse(value, :datetime, zone: :current)
@ -46,4 +46,4 @@ ActiveModel::Type::DateTime.class_eval do
value.in_time_zone value.in_time_zone
end end
end end
end }