Sha256: 9b511f8223c7d4b58914b7238d634677b47bf8489bc1c45a86ea26be53a4e3df
Contents?: true
Size: 1.78 KB
Versions: 2
Compression:
Stored size: 1.78 KB
Contents
class Herder class Model class Query attr_accessor :model, :params def initialize model self.model = model self.params = {} end def where *prms params.merge!(sanitize prms) self end def each &block query.each &block end def to_s query.to_s end protected COMPARATORS = { "=" => "=", "!=" => "!=", "~" => "~", "!~" => "!~", "is" => "=", "isnt" => "!=", "was" => "~", "wasnt" => "!~" }.freeze def query @query ||= model.find(:all, params: params) end def sanitize params case params.class.name when "Hash" return params.stringify_keys when "String" return hashify params when "Array" if params.first.is_a?(Hash) return params.first.stringify_keys else return hashify(parameterize params) end end end def hashify params subqueries = params.split(/and/i) return subqueries.inject(Hash.new) do |results, subquery| tokens = subquery.strip.split(" ", 3) tokens[2].gsub!(/\A"|'/m, "") tokens[2].gsub!(/"|'\Z/m, "") append_param results, tokens results end end def parameterize params return params unless params.is_a?(Array) params[0].gsub(/ \?/, " %s") % params[1..-1] end def append_param results, tokens if tokens[0].starts_with? "interactions." comparator = COMPARATORS[tokens[1]] || tokens[1] results["#{tokens[0]} #{comparator}"] = tokens[2] else results[tokens[0]] = tokens[2] end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
herder-0.0.5 | lib/herder/model/query.rb |
herder-0.0.4 | lib/herder/model/query.rb |