class Microscope::InstanceMethod::DatetimeInstanceMethod

Public Class Methods

new(*args) click to toggle source
Calls superclass method Microscope::InstanceMethod::new
# File lib/microscope/instance_method/datetime_instance_method.rb, line 4
def initialize(*args)
  super

  @now = 'Time.now'
  @cropped_field_regex = /_at$/
end

Public Instance Methods

apply() click to toggle source
# File lib/microscope/instance_method/datetime_instance_method.rb, line 11
def apply
  @cropped_field = field.name.gsub(@cropped_field_regex, '')

  model.class_eval(apply_methods) if @field.name =~ @cropped_field_regex
end

Protected Instance Methods

apply_aliases() click to toggle source
# File lib/microscope/instance_method/datetime_instance_method.rb, line 63
      def apply_aliases
        <<-RUBY
          alias_method 'mark_as_un#{@cropped_field}!', 'mark_as_not_#{@cropped_field}!'
          alias_method 'mark_as_un#{@cropped_field}', 'mark_as_not_#{@cropped_field}'
          alias_method 'un#{@cropped_field}?', 'not_#{@cropped_field}?'
        RUBY
      end
apply_assignment_methods() click to toggle source
# File lib/microscope/instance_method/datetime_instance_method.rb, line 23
      def apply_assignment_methods
        <<-RUBY
          define_method '#{@cropped_field}=' do |value|
            if Microscope::Utils.value_to_boolean(value)
              self.#{field.name} ||= #{@now}
            else
              self.#{field.name} = nil
            end
          end

          define_method('mark_as_#{@cropped_field}') { self.#{@cropped_field}= true }
          define_method('mark_as_not_#{@cropped_field}') { self.#{@cropped_field}= false }
          RUBY
      end
apply_bang_methods() click to toggle source
# File lib/microscope/instance_method/datetime_instance_method.rb, line 38
      def apply_bang_methods
        <<-RUBY
          define_method 'mark_as_#{@cropped_field}!' do
            mark_as_#{@cropped_field}
            save!
          end

          define_method 'mark_as_not_#{@cropped_field}!' do
            mark_as_not_#{@cropped_field}
            save!
          end
        RUBY
      end
apply_methods() click to toggle source
# File lib/microscope/instance_method/datetime_instance_method.rb, line 19
def apply_methods
  apply_assignment_methods + apply_bang_methods + apply_predicate_methods + apply_aliases
end
apply_predicate_methods() click to toggle source
# File lib/microscope/instance_method/datetime_instance_method.rb, line 52
      def apply_predicate_methods
        <<-RUBY
          define_method '#{@cropped_field}?' do
            value = send('#{field.name}')
            !value.nil? && value <= #{@now}
          end

          define_method('not_#{@cropped_field}?') { !#{@cropped_field}? }
        RUBY
      end