module StaticModels::Model

Constants

NumberType

Public Class Methods

new(attributes) click to toggle source
# File lib/static_models.rb, line 13
def initialize(attributes)
  self.attributes = attributes
  attributes.each{|name,value| send("#{name}=", value) }
end
where(*args) click to toggle source

For compatibility with AR relations in ActiveAdmin and others. Feel free to override this.

# File lib/static_models.rb, line 42
def self.where(*args)
  all
end

Public Instance Methods

all() click to toggle source
# File lib/static_models.rb, line 113
def all
  values.values
end
codes() click to toggle source
# File lib/static_models.rb, line 117
def codes
  values.values.map(&:code)
end
find(id) click to toggle source
# File lib/static_models.rb, line 105
def find(id)
  values[id.to_i]
end
find_by_code(code) click to toggle source
# File lib/static_models.rb, line 109
def find_by_code(code)
  all.select{|x| x.code == code.try(:to_sym)}.first 
end
marked_for_destruction?() click to toggle source

Ugly hack to make this compatible with AR validatinos. It's safe to assume a StaticModel is always valid and never destroyed.

# File lib/static_models.rb, line 32
def marked_for_destruction?
  false
end
model_name() click to toggle source
# File lib/static_models.rb, line 121
def model_name
  ActiveModel::Name.new(self)
end
name() click to toggle source
# File lib/static_models.rb, line 18
def name
  send(self.class.code_column)
end
static_models_dense(table) click to toggle source
# File lib/static_models.rb, line 54
def static_models_dense(table)
  columns = table.first
  hashes = table[1..-1].collect do |row|
    Hash[*columns.zip(row).flatten(1)]
  end

  static_models_hashes columns, hashes
end
static_models_hashes(columns, hashes) click to toggle source
# File lib/static_models.rb, line 79
def static_models_hashes(columns, hashes)
  unless columns.all?{|c| c.is_a?(Symbol)}
    raise ValueError.new("Table column names must all be Symbols")
  end

  unless hashes.all?{|h| h[:id].is_a?(NumberType)}
    raise ValueError.new("Ids must be integers")
  end

  unless hashes.all?{|h| h[:code].is_a?(Symbol)}
    raise ValueError.new("Codes must be Symbols")
  end

  attr_accessor *columns
  self.primary_key = columns[0]
  self.code_column = columns[1]

  self.values = {}
  hashes.each do |hash|
    item = new(hash)
    values[item.id] = item
    raise ValueError.new if singleton_methods.include?(item.code)
    define_singleton_method(item.code){ item }
  end
end
static_models_sparse(table) click to toggle source
# File lib/static_models.rb, line 63
def static_models_sparse(table)
  table.each do |row|
    expected = row.size == 2 ? [NumberType, Symbol] : [NumberType, Symbol, Hash]

    if row.collect(&:class) != expected
      raise ValueError.new("Invalid row #{row}, expected #{expected}")
    end
  end

  columns = table.select{|r| r.size == 3}
    .collect{|r| r.last.keys }.flatten(1).uniq

  hashes = table.collect{ |r| (r[2] || {}).merge(id: r[0], code: r[1]) }
  static_models_hashes ([:id, :code] + columns), hashes
end
to_i() click to toggle source
# File lib/static_models.rb, line 26
def to_i
  send(self.class.primary_key)
end
to_s() click to toggle source
# File lib/static_models.rb, line 22
def to_s
  name.to_s
end
valid?() click to toggle source
# File lib/static_models.rb, line 36
def valid?
  true
end