module ActsAsBytefield::ClassMethods

Public Instance Methods

acts_as_bytefield(column, options = {}) click to toggle source
# File lib/acts_as_bytefield.rb, line 10
def acts_as_bytefield(column, options = {})
  fail(
    ArgumentError,
    "Hash expected, got #{options.class.name}"
  ) unless options.is_a?(Hash) || options.empty?

  declare_class_accessors
  column = column.to_sym
  bytefields[column] = create_field_hash(options[:keys])
  define_bytefield_methods(column)

  include ActsAsBytefield::InstanceMethods
end

Private Instance Methods

create_field_hash(fields) click to toggle source
# File lib/acts_as_bytefield.rb, line 32
def create_field_hash(fields)
  attrs = {}
  fields.inject(0) do |index, key|
    attrs[key] = index
    index += 1
  end
  attrs
end
declare_class_accessors() click to toggle source
# File lib/acts_as_bytefield.rb, line 26
def declare_class_accessors
  return nil if respond_to?(:bytefields)
  class_eval { cattr_accessor :bytefields }
  self.bytefields = {}
end
define_bytefield_methods(column) click to toggle source
# File lib/acts_as_bytefield.rb, line 41
def define_bytefield_methods(column)
  bytefields[column].keys.each do |key|
    define_method(key) { bytefield_value(column, key) }
    define_method("#{key}=") { |value| set_bytefield_value(column, key, value) }
  end
end