class RansackGrouping

Attributes

combinator[RW]
conditions[R]
groupings[R]
id[RW]

Public Class Methods

new() { |self| ... } click to toggle source
# File lib/ransack_grouping.rb, line 5
def initialize
  @id = RansackQuery.generate_id
  @combinator = :and
  @conditions = []
  @groupings = []
  yield self if block_given?
end

Public Instance Methods

add_condition(condition=nil) { |new_condition| ... } click to toggle source
# File lib/ransack_grouping.rb, line 13
def add_condition(condition=nil)
  if block_given?
    condition = RansackCondition.new do |new_condition|
      yield new_condition
    end
  end
  conditions << condition.to_condition
  self
end
add_conditions(conditions) click to toggle source
# File lib/ransack_grouping.rb, line 33
def add_conditions(conditions)
  Array(conditions).each {|c| add_condition(c) }
  self
end
add_grouping(grouping=nil) { |new_grouping| ... } click to toggle source
# File lib/ransack_grouping.rb, line 23
def add_grouping(grouping=nil)
  if block_given?
    grouping = RansackGrouping.new do |new_grouping|
      yield new_grouping
    end
  end
  groupings << grouping.to_grouping
  self
end
add_groupings(groupings) click to toggle source
# File lib/ransack_grouping.rb, line 38
def add_groupings(groupings)
  Array(groupings).each {|g| add_grouping(g) }
  self
end
ransackify() click to toggle source
# File lib/ransack_grouping.rb, line 43
def ransackify
  ransack_hash = {
      @id => {
          'm' => @combinator.to_s
      }
  }
  ransackify_conditions(ransack_hash)
  ransackify_groupings(ransack_hash)
  ransack_hash
end
to_grouping() click to toggle source
# File lib/ransack_grouping.rb, line 54
def to_grouping
  self
end

Private Instance Methods

ransackify_conditions(ransack_hash) click to toggle source
# File lib/ransack_grouping.rb, line 60
def ransackify_conditions(ransack_hash)
  return if conditions.empty?
  ransack_hash[@id].merge!({'c' => conditions.reduce({}) { |result, condition| result.merge! condition.ransackify }})
end
ransackify_groupings(ransack_hash) click to toggle source
# File lib/ransack_grouping.rb, line 65
def ransackify_groupings(ransack_hash)
  return if groupings.empty?
  ransack_hash[@id].merge!({'g' => {}})
  groupings.each { |grouping| ransack_hash[@id]['g'].merge!(grouping.ransackify) }
end