Module: SplitDateTime::Splitter::ClassMethods

Defined in:
lib/split_date_time/splitter.rb

Instance Method Summary collapse

Instance Method Details

#define_concatenation_callback(field, prefix) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/split_date_time/splitter.rb', line 58

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) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/split_date_time/splitter.rb', line 41

def define_split_accessors(field, prefix = nil)
  define_method Naming.time_getter(field, prefix) do
    field_val = send(field)
    field_val.strftime('%H:%M') 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('%m/%d/%Y') 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, options = {})
  define_split_accessors(field, options[:prefix])
  define_concatenation_callback(field, options[:prefix])
end