Sha256: 30b9c4521955ef213e9eca42433f1359e9f9ac5ed2563d903de9d2e2be21c4ad

Contents?: true

Size: 1.66 KB

Versions: 17

Compression:

Stored size: 1.66 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

    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

17 entries across 17 versions & 1 rubygems

Version Path
ninja-model-0.8.1 lib/ninja_model/relation/query_methods.rb
ninja-model-0.8.0 lib/ninja_model/relation/query_methods.rb
ninja-model-0.7.3 lib/ninja_model/relation/query_methods.rb
ninja-model-0.7.2 lib/ninja_model/relation/query_methods.rb
ninja-model-0.7.1 lib/ninja_model/relation/query_methods.rb
ninja-model-0.7.0 lib/ninja_model/relation/query_methods.rb
ninja-model-0.6.2 lib/ninja_model/relation/query_methods.rb
ninja-model-0.6.1 lib/ninja_model/relation/query_methods.rb
ninja-model-0.6.0 lib/ninja_model/relation/query_methods.rb
ninja-model-0.5.7 lib/ninja_model/relation/query_methods.rb
ninja-model-0.5.6 lib/ninja_model/relation/query_methods.rb
ninja-model-0.5.5 lib/ninja_model/relation/query_methods.rb
ninja-model-0.5.4 lib/ninja_model/relation/query_methods.rb
ninja-model-0.5.3 lib/ninja_model/relation/query_methods.rb
ninja-model-0.5.2 lib/ninja_model/relation/query_methods.rb
ninja-model-0.5.1 lib/ninja_model/relation/query_methods.rb
ninja-model-0.4.2 lib/ninja_model/relation/query_methods.rb