dgilperez/schedule_attributes

View on GitHub
lib/schedule_attributes/active_record.rb

Summary

Maintainability
A
0 mins
Test Coverage
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