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