Sha256: d8147a82d471a5ebabb398d69ca76da483fd8e0499952ff8a9d178c67090b2bb

Contents?: true

Size: 932 Bytes

Versions: 24

Compression:

Stored size: 932 Bytes

Contents

module Riveter
  module Query
    extend ActiveSupport::Concern

    attr_reader :query_filter
    attr_reader :options
    attr_reader :relation

    def initialize(query_filter, options={})
      @query_filter = query_filter
      @options = options
      @relation = build_relation(@query_filter)
    end

    # enumerates the resultset in batch mode
    def find_each(&block)
      relation.find_each_with_order(&block) if has_data?
    end

    # override if necessary in derived classes
    def has_data?
      @has_data ||= relation.count() > 0
    end

  protected

    # override in derived classes
    def build_relation(filter)

      #
      # use the given filter to add conditions
      # to produce an ActiveRelation as the query
      #
      # E.g. filter.page #=> Model.all.page(filter.page)
      #

      raise NotImplementedError
    end

    # helper class
    class Base
      include Query
    end
  end
end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
riveter-0.8.3 lib/riveter/query.rb
riveter-0.8.2 lib/riveter/query.rb
riveter-0.8.1 lib/riveter/query.rb
riveter-0.8.0 lib/riveter/query.rb
riveter-0.7.0 lib/riveter/query.rb
riveter-0.6.0 lib/riveter/query.rb
riveter-0.3.0 lib/riveter/query.rb
riveter-0.2.1 lib/riveter/query.rb
riveter-0.2.0 lib/riveter/query.rb
riveter-0.1.1 lib/riveter/query.rb
riveter-0.0.15 lib/riveter/query.rb
riveter-0.0.14 lib/riveter/query.rb
riveter-0.0.13 lib/riveter/query.rb
riveter-0.0.12 lib/riveter/query.rb
riveter-0.0.11 lib/riveter/query.rb
riveter-0.0.10 lib/riveter/query.rb
riveter-0.0.9 lib/riveter/query.rb
riveter-0.0.8 lib/riveter/query.rb
riveter-0.0.7 lib/riveter/query.rb
riveter-0.0.6 lib/riveter/query.rb