class Koromo::SQL

Public Class Methods

shared_instance() click to toggle source
# File lib/koromo/sql.rb, line 12
def self.shared_instance
  @sql ||= SQL.new
end

Public Instance Methods

config() click to toggle source
# File lib/koromo/sql.rb, line 24
def config
  @config
end
config_for_resource(name) click to toggle source
# File lib/koromo/sql.rb, line 28
def config_for_resource(name)
  name = name.to_sym
  c = config[:resources][name]
  c[:limit] ||= 10
  c
end
get_resource(name, **args) click to toggle source
# File lib/koromo/sql.rb, line 48
def get_resource(name, **args)
  return nil unless model = model_for_resource(name)
  p args[:params]
  conf = config_for_resource(name)
  set = model.select(*conf[:columns])
  if args[:id]
    array = set.where(conf[:key] => args[:id]).all
  else
    if args[:params]
      p_limit = args[:params][:limit]
      p_limit = p_limit.to_i if p_limit.class == String
      p_order = args[:params][:order]
      p_desc = true if args[:params][:desc]
      p_desc = false if args[:params][:asc]
    end
    p_limit ||= conf[:limit]
    p_order ||= conf[:order]
    p_desc ||= conf[:desc]
    set = set.limit(p_limit)
    set = (p_desc ? set.reverse_order(p_order) : set.order(p_order))
    p set.sql
    array = set.all
  end
  return nil if array.empty?
  case conf[:get][:class]
  when 'Hash'
    result = {}
    key = conf[:key]
    val = conf[:get][:value]
    array.each do |r|
      rec = r.values
      result.store(rec.delete(key), val ? rec[val] : rec)
    end
  when 'Array'
    result = array.map{ |r| r.values }
  end
  return result[0] if args[:id] && result.class == Array
  result
end
model_for_resource(name) click to toggle source

Get model classes

# File lib/koromo/sql.rb, line 36
def model_for_resource(name)
  name = name.to_sym
  @models ||= {}
  return nil unless rc = config_for_resource(name)
  if @models[name].nil?
    m = Class.new(Sequel::Model)
    m.set_dataset(rc[:table])
    @models[name] = m
  end
  @models[name]
end
setup(conf) click to toggle source
# File lib/koromo/sql.rb, line 16
def setup(conf)
  @config = conf
  # Sequel connection setup
  # Sequel.application_timezone = :local
  # Sequel.database_timezone = :utc
  Sequel::Model.db = Sequel.connect({adapter: 'tinytds'}.merge(config[:mssql]))
end