Module: SplitDateTime::Splitter::ClassMethods
- Defined in:
- lib/split_date_time/splitter.rb
Instance Method Summary collapse
- #define_concatenation_callback(field, prefix) ⇒ Object
- #define_split_accessors(field, prefix = nil, date_format = nil, time_format = nil) ⇒ Object
- #split_date_time(field, options = {}) ⇒ Object
Instance Method Details
#define_concatenation_callback(field, prefix) ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/split_date_time/splitter.rb', line 61 def define_concatenation_callback(field, prefix) if self.kind_of? ActiveRecord::Base before_validation :"concatenate_#{field}", if: :"#{field}_modified?" end define_method :"concatenate_#{field}" do time_variable = instance_variable_get(:"@#{Naming.time_getter(field, prefix)}") time_variable ||= send("#{Naming.time_getter(field, prefix)}") date_variable = instance_variable_get(:"@#{Naming.date_getter(field, prefix)}") date_variable ||= send("#{Naming.date_getter(field, prefix)}") self.send "#{field}=", DateTime.parse("#{date_variable} #{time_variable}") end define_method :"#{field}_modified?" do time_variable = instance_variable_get(:"@#{Naming.time_getter(field, prefix)}") date_variable = instance_variable_get(:"@#{Naming.date_getter(field, prefix)}") time_variable.present? || date_variable.present? end end |
#define_split_accessors(field, prefix = nil, date_format = nil, time_format = nil) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/split_date_time/splitter.rb', line 41 def define_split_accessors(field, prefix = nil, date_format = nil, time_format = nil) time_format ||= '%H:%M' date_format ||= '%m/%d/%Y' define_method Naming.time_getter(field, prefix) do field_val = send(field) field_val.strftime(time_format) if field_val.present? end define_method Naming.time_setter(field, prefix) do |val| instance_variable_set :"@#{Naming.time_getter(field, prefix)}", val end define_method Naming.date_getter(field, prefix) do field_val = send(field) field_val.strftime(date_format) if field_val.present? end define_method Naming.date_setter(field, prefix) do |val| instance_variable_set :"@#{Naming.date_getter(field, prefix)}", val end end |
#split_date_time(field, options = {}) ⇒ Object
36 37 38 39 |
# File 'lib/split_date_time/splitter.rb', line 36 def split_date_time(field, = {}) define_split_accessors(field, [:prefix], [:date_format], [:time_format]) define_concatenation_callback(field, [:prefix]) end |