Module: ValidatesDateTime::MultiparameterAttributes

Defined in:
lib/multiparameter_attributes.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



3
4
5
# File 'lib/multiparameter_attributes.rb', line 3

def self.included(base)
  base.alias_method_chain :execute_callstack_for_multiparameter_attributes, :temporal_error_handling
end

Instance Method Details

#execute_callstack_for_multiparameter_attributes_with_temporal_error_handling(callstack) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/multiparameter_attributes.rb', line 7

def execute_callstack_for_multiparameter_attributes_with_temporal_error_handling(callstack)
  errors = []
  callstack.each do |name, values|
    klass = (self.class.reflect_on_aggregation(name.to_sym) || column_for_attribute(name)).klass
    
    if values.empty?
      send("#{name}=", nil)
    else
      column = column_for_attribute(name)
      
      if [:date, :time, :datetime].include?(column.type)
        values = values.map(&:to_s)
        
        result = case column.type
          when :date
            extract_date_from_multiparameter_attributes(values)
          when :time
            extract_time_from_multiparameter_attributes(values)
          when :datetime
            date_values, time_values = values.slice!(0, 3), values
            extract_date_from_multiparameter_attributes(date_values) + " " + extract_time_from_multiparameter_attributes(time_values)
        end
               
        send("#{name}=", result)
      end
    end
  end
  unless errors.empty?
    raise ActiveRecord::MultiparameterAssignmentErrors.new(errors), "#{errors.size} error(s) on assignment of multiparameter attributes"
  end
end

#extract_date_from_multiparameter_attributes(values) ⇒ Object



39
40
41
# File 'lib/multiparameter_attributes.rb', line 39

def extract_date_from_multiparameter_attributes(values)
  [values[0], *values.slice(1, 2).map { |s| s.rjust(2, "0") }].join("-")
end

#extract_time_from_multiparameter_attributes(values) ⇒ Object



43
44
45
# File 'lib/multiparameter_attributes.rb', line 43

def extract_time_from_multiparameter_attributes(values)
  values.last(3).map { |s| s.rjust(2, "0") }.join(":")
end