class Koromo::SQL
Public Class Methods
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