module ConcertoHardware::TimeAccessible

Provides the time_accessor method, which is useful for creating a virtual parameter of type Time. The time is read and written as a standard Time-parasable string, which makes it possible to have form fields that reference the virtual attribute directly.

Note that it is possible to set as a Time object (to save instantiations). You cannot read the Time object directly, however.

Example

class MyModel
  extend ConcertoHardware::TimeAccessible
  time_accessor :party_time

  def is_it_party_time?
    Time.now > Time.new(self.party_time || "9001")
  end
end

inst = MyModel.new
inst.party_time = "2011-11-11 11:11:11 -0000"
inst.party_time # => "2011-11-11 11:11:11 -0000"

inst.party_time = Time.now + 24*60*60 # the party is tommorrow
inst.party_time # => "2014-10-01 23:01:06 -0400"

Public Instance Methods

time_accessor(*syms) click to toggle source
# File lib/concerto_hardware/time_accessible.rb, line 29
    def time_accessor(*syms)
      syms.each do |sym|
       self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
          def #{sym}
            if @#{sym}_timeobj.is_a? Time
              @#{sym}_timeobj
            else
              nil
            end
          end
          def #{sym}=(val)
            @#{sym}_timeobj = nil
            if val.is_a? Time
              @#{sym}_timeobj = val
            elsif val.is_a? String
              begin
                @#{sym}_timeobj = Time.parse(val)
              rescue ArgumentError => e
                # Example: empty string or not a time
                # Value gets nil, which validations will flag.
              end
            end
          end
        RUBY
      end
    end