Sha256: 3ceccd5a1e24ad86ca62fdf1c85e55e3e0908de766fcf15e1b96bcf8e7ebdc23

Contents?: true

Size: 667 Bytes

Versions: 1

Compression:

Stored size: 667 Bytes

Contents

module ClassyEnum
  module Attributes

    def classy_enum_attr(klass, method=nil)

      method ||= klass

      klass = klass.to_s.camelize.constantize

      # Add ActiveRecord validation to ensure it won't be saved unless it's an option
      self.send(:validates_inclusion_of, method, :in => klass.all, :allow_nil => true)

      self.instance_eval do

        # Define getter method
        define_method method do
          klass.new(super())
        end

        # Define setter method
        define_method "#{method}=" do |value|
          super(value.to_s)
        end

      end

    end

  end
end

ActiveRecord::Base.send :extend, ClassyEnum::Attributes

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
classy_enum-0.5.0 lib/classy_enum/attributes.rb