class Pilipinas::Base

Attributes

data[RW]
code[R]
name[R]

Public Class Methods

add(region) click to toggle source
# File lib/pilipinas/base.rb, line 63
def add(region)
  self.data ||= []
  self.data << region
end
all() click to toggle source
# File lib/pilipinas/base.rb, line 35
def all
  load_data
end
assoc_collection(options) click to toggle source
# File lib/pilipinas/base.rb, line 16
def assoc_collection(options)
  code = options.fetch(:code)
  dir = options.fetch(:dir)

  load_file(File.join(File.dirname(__FILE__), '..', 'data', dir.to_s, "#{code}.yml"))
end
count() click to toggle source
# File lib/pilipinas/base.rb, line 23
def count
  all.count
end
find_by(options) click to toggle source
# File lib/pilipinas/base.rb, line 43
def find_by(options)
  raise 'invalid hash' if options.empty?
  send "find_by_#{options.keys.first.to_s}", options.values.first.to_s
end
first() click to toggle source
# File lib/pilipinas/base.rb, line 27
def first
  all.first
end
last() click to toggle source
# File lib/pilipinas/base.rb, line 31
def last
  all.last
end
load_data() click to toggle source
# File lib/pilipinas/base.rb, line 39
def load_data
  raise 'Implement load_data'
end
load_file(file) click to toggle source
# File lib/pilipinas/base.rb, line 56
def load_file(file)
  reset_data
  yaml = YAML.load_file(file)
  yaml.each { |hash, _opts| add(new(hash)) } if yaml
  data
end
method_missing(*args) click to toggle source
Calls superclass method
# File lib/pilipinas/base.rb, line 48
def method_missing(*args)
  regex = args.first.to_s.match(/^find_by_(.*)/)
  super if !regex || Regexp.last_match(1).nil?

  load_data unless data
  select_by(Regexp.last_match(1), args[1])
end
parse_attributes(attr, val) click to toggle source
# File lib/pilipinas/base.rb, line 76
def parse_attributes(attr, val)
  raise Pilipinas::UnknownAttribute, "Invalid attribute '#{attr}'." unless %i[code name].include?(attr.to_sym)

  [attr, val]
end
reset_data() click to toggle source
# File lib/pilipinas/base.rb, line 86
def reset_data
  self.data = []
end
select_by(attribute, val) click to toggle source
# File lib/pilipinas/base.rb, line 68
def select_by(attribute, val)
  attr, value = parse_attributes(attribute.downcase, (val ? val.to_s.downcase : val))

  obj = data.select { |c| c.send(attr.to_sym).downcase == value }
  validate(obj)
  obj.first
end
validate(obj) click to toggle source
# File lib/pilipinas/base.rb, line 82
def validate(obj)
  return nil if obj.empty?
end

Private Class Methods

new(options = {}) click to toggle source
# File lib/pilipinas/base.rb, line 8
def initialize(options = {})
  @code = options[:code]
  @name = options[:name]
end