Class: ActiveModel::Type::Helpers::AcceptsMultiparameterTime

Inherits:
Module
  • Object
show all
Defined in:
activemodel/lib/active_model/type/helpers/accepts_multiparameter_time.rb

Constant Summary

Constants inherited from Module

Module::DELEGATION_RESERVED_KEYWORDS, Module::DELEGATION_RESERVED_METHOD_NAMES, Module::RUBY_RESERVED_KEYWORDS

Instance Method Summary collapse

Methods inherited from Module

#alias_attribute, #anonymous?, #attr_internal_accessor, #attr_internal_reader, #attr_internal_writer, #delegate, #delegate_missing_to, #deprecate, #mattr_accessor, #mattr_reader, #mattr_writer, #method_visibility, #module_parent, #module_parent_name, #module_parents, #parent, #parent_name, #parents, #redefine_method, #redefine_singleton_method, #remove_possible_method, #remove_possible_singleton_method, #silence_redefinition_of_method, #thread_mattr_accessor, #thread_mattr_reader, #thread_mattr_writer

Methods included from Module::Concerning

#concern, #concerning

Constructor Details

#initialize(defaults: {}) ⇒ AcceptsMultiparameterTime

Returns a new instance of AcceptsMultiparameterTime.



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
38
39
40
41
# File 'activemodel/lib/active_model/type/helpers/accepts_multiparameter_time.rb', line 7

def initialize(defaults: {})
  define_method(:serialize) do |value|
    super(cast(value))
  end

  define_method(:cast) do |value|
    if value.is_a?(Hash)
      value_from_multiparameter_assignment(value)
    else
      super(value)
    end
  end

  define_method(:assert_valid_value) do |value|
    if value.is_a?(Hash)
      value_from_multiparameter_assignment(value)
    else
      super(value)
    end
  end

  define_method(:value_constructed_by_mass_assignment?) do |value|
    value.is_a?(Hash)
  end

  define_method(:value_from_multiparameter_assignment) do |values_hash|
    defaults.each do |k, v|
      values_hash[k] ||= v
    end
    return unless values_hash[1] && values_hash[2] && values_hash[3]
    values = values_hash.sort.map(&:last)
    ::Time.send(default_timezone, *values)
  end
  private :value_from_multiparameter_assignment
end