module NinjaModel::QueryMethods
Public Instance Methods
extending(*modules)
click to toggle source
# File lib/ninja_model/relation/query_methods.rb, line 31 def extending(*modules) modules << Module.new(&Proc.new) if block_given? return self if modules.empty? relation = clone relation.send(:apply_modules, modules.flatten) relation end
limit(value)
click to toggle source
# File lib/ninja_model/relation/query_methods.rb, line 19 def limit(value) relation = clone relation.limit_value = value relation end
order(*args)
click to toggle source
# File lib/ninja_model/relation/query_methods.rb, line 7 def order(*args) relation = clone relation.ordering += args.flatten unless args.blank? relation end
readonly(value)
click to toggle source
# File lib/ninja_model/relation/query_methods.rb, line 25 def readonly(value) relation = clone relation.readonly_value = value relation end
where(opts, *rest)
click to toggle source
# File lib/ninja_model/relation/query_methods.rb, line 13 def where(opts, *rest) relation = clone relation.predicates += build_predicates(opts, rest) relation end
Private Instance Methods
build_predicates(opts, other = [])
click to toggle source
# File lib/ninja_model/relation/query_methods.rb, line 43 def build_predicates(opts, other = []) case opts when String raise ArgumentError, "NinjaModel doesn't work with strings...yet. You'll need to use a predicate (see NinjaModel::Predicate::PREDICATES for a list)." when Array opts.collect do |o| build_predicates(o) end.flatten! when Hash opts.to_a.map do |o| raise ArgumentError, "Not sure what to do with #{o}" unless o.length.eql?(2) k = o[0] v = o[1] case k when NinjaModel::Predicate k.value = klass.model_attributes_hash[k.attribute].convert(v) k when Symbol, String raise ArgumentError, "#{klass} doesn't have an attribute #{k}." unless klass.attribute_method?(k) p = NinjaModel::Predicate.new(k.to_sym, :eq) p.value = klass.model_attributes_hash[p.attribute].convert(v) p else raise ArgumentError, "#{k} isn't a predicate or a symbol." end end when NinjaModel::Predicate [opts] else raise ArgumentError, "Unknown argument to #{self}.where: #{opts.inspect}" end end