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