Sha256: 86e0f3fa65b7039c9e57d2a6ce142210a035b7a70535c94041eb0bed16f1805d
Contents?: true
Size: 1.98 KB
Versions: 13
Compression:
Stored size: 1.98 KB
Contents
require 'active_support' module NinjaModel module QueryMethods extend ActiveSupport::Concern def order(*args) relation = clone relation.ordering += args.flatten unless args.blank? relation end def where(opts, *rest) relation = clone relation.predicates += build_predicates(opts, rest) relation end def limit(value) relation = clone relation.limit_value = value relation end def readonly(value) relation = clone relation.readonly_value = value relation end 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 private 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 end end
Version data entries
13 entries across 13 versions & 1 rubygems