class StaticRecord::Base

Class that immutable model instances can inherit from

Constants

KNOWN_TYPES
RESERVED_ATTRIBUTES

Public Class Methods

attribute(name, value) click to toggle source
# File lib/static_record/models/base.rb, line 34
def self.attribute(name, value)
  err = RESERVED_ATTRIBUTES.include?("@@#{name}".to_sym)
  raise StaticRecord::ReservedAttributeName, "#{name} is a reserved name" if err
  class_variable_set("@@#{name}", value)
end
columns(cols) click to toggle source
# File lib/static_record/models/base.rb, line 61
def self.columns(cols)
  class_variable_set('@@_columns', cols)
  create_store
end
get_column_type(column) click to toggle source
# File lib/static_record/models/base.rb, line 66
def self.get_column_type(column)
  class_variable_get(:@@_columns)[column]
end
new() click to toggle source
Calls superclass method
# File lib/static_record/models/base.rb, line 24
def initialize
  attributes.each do |attr, value|
    instance_variable_set "@#{attr}", value
    self.class.class_eval do
      attr_accessor :"#{attr}"
    end
  end
  super
end
reference(name, value) click to toggle source
# File lib/static_record/models/base.rb, line 40
def self.reference(name, value)
  attribute(name, value)
  unless value.class < StaticRecord::Base
    err = 'Reference only accepts StaticRecords'
    raise StaticRecord::ClassError, err
  end
  tables = superclass.bound_static_tables
  tables[value.class.store.to_sym] = name
  superclass.bound_static_tables = tables
end

Public Instance Methods

attributes() click to toggle source
# File lib/static_record/models/base.rb, line 51
def attributes
  attrs = {}
  klass = self.class
  klass.class_variables.each do |var|
    next if RESERVED_ATTRIBUTES.include?(var)
    attrs[var.to_s.sub(/@@/, '').to_sym] = klass.class_variable_get(var)
  end
  default_attributes(attrs)
end

Private Instance Methods

default?(column) click to toggle source
# File lib/static_record/models/base.rb, line 88
def default?(column)
  self.class.respond_to?("default_#{column}")
end
default_attributes(attrs) click to toggle source
# File lib/static_record/models/base.rb, line 72
def default_attributes(attrs)
  klass = self.class
  klass.class_variable_get(:@@_columns).each do |column, _ctype|
    column_defined = attrs.key?(column)
    unless column_defined || default?(column)
      err = "You must define attribute '#{column}' for #{klass.name}"
      raise StaticRecord::MissingAttribute, err
    end

    v = column_defined ? attrs[column] : klass.send(:"default_#{column}")
    v = klass.send(:"override_#{column}", v) if override?(column)
    attrs[column] = v
  end
  attrs
end
override?(column) click to toggle source
# File lib/static_record/models/base.rb, line 92
def override?(column)
  self.class.respond_to?("override_#{column}")
end