module SplitDateTime::Splitter::ClassMethods

Public Instance Methods

define_concatenation_callback(field, prefix) click to toggle source
# 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) click to toggle source
# 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 = {}) click to toggle source
# File lib/split_date_time/splitter.rb, line 36
def split_date_time(field, options = {})
  define_split_accessors(field, options[:prefix], options[:date_format], options[:time_format])
  define_concatenation_callback(field, options[:prefix])
end