module MultiPartDate
Constants
- VERSION
Public Instance Methods
create_date_values_methods_for(key)
click to toggle source
# File lib/multi_part_date.rb, line 85 def create_date_values_methods_for(key) %i(day month year).each do |type| define_method(:"#{key}_#{type}_value") do send(:"#{key}_#{type}").to_i end end end
create_getters_for(field_name, key, discard_options)
click to toggle source
Calls superclass method
# File lib/multi_part_date.rb, line 37 def create_getters_for(field_name, key, discard_options) %i(day month year).each do |type| if discard_options[:"discard_#{type}"] define_method(:"#{key}_#{type}") do 1 end else define_method(:"#{key}_#{type}") do if send(field_name) send(field_name).send(type) if send(field_name).respond_to?(type) else super() end end end end end
create_methods_for(field_name, key, discard_options)
click to toggle source
# File lib/multi_part_date.rb, line 30 def create_methods_for(field_name, key, discard_options) create_date_values_methods_for(key) create_getters_for(field_name, key, discard_options) create_setters_for(field_name, key) create_validation_helper_methods_for(field_name, key) end
create_parts_present_method_for(field_name, key)
click to toggle source
# File lib/multi_part_date.rb, line 109 def create_parts_present_method_for(field_name, key) define_method(:"#{field_name}_parts_present?") do send(:"#{field_name}=", nil) [ send(:"#{key}_year_value"), send(:"#{key}_month_value"), send(:"#{key}_day_value") ].all?(&:present?) end end
create_setters_for(field_name, key)
click to toggle source
Calls superclass method
# File lib/multi_part_date.rb, line 55 def create_setters_for(field_name, key) %i(day month year).each do |type| define_method(:"#{key}_#{type}=") do |value| super(value) send(:"set_#{field_name}") if send(:"#{field_name}_parts_present?") end end define_method(:"set_#{field_name}") do return nil unless send(:"valid_#{field_name}_date?") date = Date.new( send(:"#{key}_year_value"), send(:"#{key}_month_value"), send(:"#{key}_day_value") ) send(:"#{field_name}=", date) end end
create_valid_date_method_for(field_name, key)
click to toggle source
# File lib/multi_part_date.rb, line 99 def create_valid_date_method_for(field_name, key) define_method(:"valid_#{field_name}_date?") do Date.valid_date?( send(:"#{key}_year_value"), send(:"#{key}_month_value"), send(:"#{key}_day_value") ) end end
create_validate_date_method_for(field_name)
click to toggle source
# File lib/multi_part_date.rb, line 121 def create_validate_date_method_for(field_name) define_method(:"validate_#{field_name}_date") do return true if send(:"valid_#{field_name}_date?") errors.add(field_name, 'is not a valid date') end end
create_validation_helper_methods_for(field_name, key)
click to toggle source
# File lib/multi_part_date.rb, line 93 def create_validation_helper_methods_for(field_name, key) create_valid_date_method_for(field_name, key) create_parts_present_method_for(field_name, key) create_validate_date_method_for(field_name) end
multi_part_date(field_name, options = {})
click to toggle source
# File lib/multi_part_date.rb, line 14 def multi_part_date(field_name, options = {}) key = options[:as] || field_name discard_options = options.slice(:discard_day, :discard_month, :discard_year) on_options = options.slice(:on) type = options[:type] || Date create_methods_for(field_name, key, discard_options) property :"#{key}_month", { type: Integer, virtual: true }.merge(on_options) property :"#{key}_day", { type: Integer, virtual: true }.merge(on_options) property :"#{key}_year", { type: Integer, virtual: true }.merge(on_options) property field_name, { type: type }.merge(on_options) validate_if_required(field_name, options[:validate_if]) end
validate_if_required(field_name, validate_if_option)
click to toggle source
# File lib/multi_part_date.rb, line 77 def validate_if_required(field_name, validate_if_option) if validate_if_option validate :"validate_#{field_name}_date", if: validate_if_option else validate :"validate_#{field_name}_date" end end