Sha256: 547214963fce49e8240bc6ebef886bc4df49e4740a2784ae7e4c2a3faab1807e

Contents?: true

Size: 1.3 KB

Versions: 6

Compression:

Stored size: 1.3 KB

Contents

require 'schedule_attributes/core'
require 'schedule_attributes/serializer'

module ScheduleAttributes::ActiveRecord
  extend ActiveSupport::Concern
  include ScheduleAttributes::Core

  module ClassMethods
    attr_accessor :schedule_field
    attr_accessor :default_schedule

    def default_schedule
      @default_schedule || ScheduleAttributes.default_schedule
    end
  end

  module Sugar
    def has_schedule_attributes(options={:column_name => :schedule})
      options[:column_name] ||= ScheduleAttributes::DEFAULT_ATTRIBUTE_KEY
      @schedule_field = options[:column_name]
      @default_schedule = options[:default_schedule] if options.has_key?(:default_schedule)
      serialize @schedule_field, ScheduleAttributes::Serializer
      include ScheduleAttributes::ActiveRecord
    end
  end

  private

  def initialize(*args)
    super
    self[self.class.schedule_field] ||= default_schedule
  end

  def read_schedule_field
    self[self.class.schedule_field] or default_schedule
  end

  def write_schedule_field(value)
    self[self.class.schedule_field] = value
  end

  def default_schedule
    self.class.default_schedule
  end
end

# Injects the has_schedule_attributes method when loading without Rails
if defined? ActiveRecord::Base
  ActiveRecord::Base.send :extend, ScheduleAttributes::ActiveRecord::Sugar
end

Version data entries

6 entries across 6 versions & 2 rubygems

Version Path
dgp-schedule_attributes-0.5.3 lib/schedule_attributes/active_record.rb
dgp-schedule_attributes-0.5.2 lib/schedule_attributes/active_record.rb
dgp-schedule_attributes-0.5.1 lib/schedule_attributes/active_record.rb
dgp-schedule_attributes-0.5.0 lib/schedule_attributes/active_record.rb
dgp-schedule_attributes-0.4.0 lib/schedule_attributes/active_record.rb
schedule_attributes-0.3.0 lib/schedule_attributes/active_record.rb