module Golden::DateTimeAccessor

Public Instance Methods

date_accessor(*attributes) click to toggle source

rubocop:enable Metrics/CyclomaticComplexity

# File lib/golden/attribute_accessors/date_time_accessor.rb, line 41
def date_accessor(*attributes)
  datetime_accessor(*attributes, date_only: true)
end
datetime_accessor(*attributes, date_only: false) click to toggle source

rubocop:disable Metrics/CyclomaticComplexity

# File lib/golden/attribute_accessors/date_time_accessor.rb, line 11
def datetime_accessor(*attributes, date_only: false)
  [*attributes].uniq.each do |attribute_name|
    attr_accessor attribute_name

    class_eval do
      define_method("#{attribute_name}?") do
        instance_variable_get("@#{attribute_name}")
      end

      define_method("#{attribute_name}=") do |value|
        case value
        when ActiveSupport::TimeWithZone
          time = value
        when Date, Time, DateTime
          time = value
        when String
          time = parse_time(value)
        when NilClass
          time = nil
        else
          raise "#{value.class} is unsupported!"
        end
        time = time.to_date if time && date_only
        instance_variable_set("@#{attribute_name}", time)
      end
    end
  end
end
parse_time(string, zone: Golden::AttributeAccessors.default_zone) click to toggle source
# File lib/golden/attribute_accessors/date_time_accessor.rb, line 46
def parse_time(string, zone: Golden::AttributeAccessors.default_zone)
  ActiveSupport::TimeZone.new(zone)&.parse(string)
rescue StandardError
  nil
end