class ParamsReady::Query::JoinStatement

Public Class Methods

new(on: nil, eq: nil, &block) click to toggle source
# File lib/params_ready/query/join_clause.rb, line 29
def initialize(on: nil, eq: nil, &block)
  @conditions = []
  if on
    condition = on(on)
    if eq
      condition.eq(eq)
    end
  else
    raise ParamsReadyError('Parameter :eq unexpected') unless eq.nil?
  end

  instance_eval(&block) unless block.nil?
  raise ParamsReadyError, "Join clause is empty" if @conditions.empty?
end

Public Instance Methods

on(expression, arel_table: nil) click to toggle source
# File lib/params_ready/query/join_clause.rb, line 44
def on(expression, arel_table: nil)
  condition = JoinCondition.new(expression, arel_table: arel_table)
  @conditions << condition
  condition
end
to_arel(base_table, join_table, context, parameter) click to toggle source
# File lib/params_ready/query/join_clause.rb, line 50
def to_arel(base_table, join_table, context, parameter)
  @conditions.reduce(nil) do |result, condition|
    arel = condition.to_arel(base_table, join_table, context, parameter)
    next arel if result.nil?

    result.and(arel)
  end
end