Module: ValidatesDateTime::MultiparameterAttributes
- Defined in:
- lib/multiparameter_attributes.rb
Class Method Summary collapse
Instance Method Summary collapse
- #execute_callstack_for_multiparameter_attributes_with_temporal_error_handling(callstack) ⇒ Object
- #extract_date_from_multiparameter_attributes(values) ⇒ Object
- #extract_time_from_multiparameter_attributes(values) ⇒ Object
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 |