Sha256: 0213a3d5aa1476e01aa101a2cdfaf6f0d7ae839677548ef4a8dc0c7b1b859aef

Contents?: true

Size: 836 Bytes

Versions: 2

Compression:

Stored size: 836 Bytes

Contents

# encoding: UTF-8

require 'forwardable'
require 'enumerator'

module ArelHelpers
  class QueryBuilder
    extend Forwardable
    include Enumerable

    attr_reader :query
    def_delegators :@query, :to_a, :to_sql, :each

    TERMINAL_METHODS = [:count, :first, :last]
    TERMINAL_METHODS << :pluck if ActiveRecord::VERSION::MAJOR >= 4

    def_delegators :@query, *TERMINAL_METHODS

    def self.not_nil(name)
      mod = Module.new do
        define_method(name) do |*args|
          if (value = super(*args))
            value
          else
            reflect(query)
          end
        end
      end

      prepend mod
      name
    end

    def initialize(query)
      @query = query
    end

    protected

    def reflect(query)
      dup.tap { |obj| obj.instance_variable_set('@query'.freeze, query) }
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
arel-helpers-2.12.0 lib/arel-helpers/query_builder.rb
arel-helpers-2.11.0 lib/arel-helpers/query_builder.rb