class Atomsphere::Query::GroupingExpression

@see help.boomi.com/atomsphere/GUID-4CAE5616-76EB-4C58-B2E3-4173B65EA7EC.html

Constants

OPERATORS

allowed values for {#operator=}

Attributes

nested_expression[RW]
operator[RW]

Public Class Methods

new(params={}) click to toggle source

@param [Hash] params @option params [:and, :or] :operator query operator @option params [Array<Expression>] :nested_expression one or more {Expression}s

# File lib/atomsphere/query/expression/grouping_expression.rb, line 16
def initialize(params={})
  case params
  when String
  when Symbol
    params = {operator: params}
  end

  params = {
    operator: :and,
    nested_expression: []
  }.merge(params)

  @operator = params[:operator]
  @nested_expression = params[:nested_expression]
end

Public Instance Methods

operator=(arg) click to toggle source
# File lib/atomsphere/query/expression/grouping_expression.rb, line 32
def operator= arg
  unless OPERATORS.include? arg.to_sym
    raise ArgumentError, "operator must be one of: #{OPERATORS.join(', ')}"
  end

  instance_variable_set :@operator, arg.to_sym
end
to_hash() click to toggle source

returns a hash of the expression that will be sent to the boomi api with {Query#to_hash} @see to_json @return [Hash] hash representation of query that will be sent to the boomi api

# File lib/atomsphere/query/expression/grouping_expression.rb, line 52
def to_hash
  {
    expression: {
      operator: operator.to_s,
      nestedExpression: nested_expression.
        map(&:to_hash).
        map{ |h| h[:expression] }
    }
  }
end
validate!() click to toggle source

run all `validate_*!` private methods to ensure validity of expression parameters @return [true, false]

# File lib/atomsphere/query/expression/grouping_expression.rb, line 42
def validate!
  private_methods.select{ |m| m =~ /^validate_[a-z0-9_]+\!$/ }.each{ |v| "#{v}"; send(v) }
  @nested_expression.each(&:validate!)

  true
end

Private Instance Methods

validate_expressions!() click to toggle source
# File lib/atomsphere/query/expression/grouping_expression.rb, line 70
def validate_expressions!
  raise ArgumentError, "nested_expression must be an array" unless @nested_expression.is_a?(Array)

  not_expressions = @nested_expression.map(&:class).map(&:ancestors).reject do |k|
    k.include? Atomsphere::Query::Expression
  end

  if not_expressions.size > 0
    raise ArgumentError,
      "Expressions must be an object of a subclass of Atomsphere::Query::Expression"
  end
end
validate_expressions_size!() click to toggle source
# File lib/atomsphere/query/expression/grouping_expression.rb, line 83
def validate_expressions_size!
  raise ArgumentError, "at least one expression required" if (@nested_expression.size < 1)
end
validate_operators!() click to toggle source
# File lib/atomsphere/query/expression/grouping_expression.rb, line 64
def validate_operators!
  unless OPERATORS.include? @operator
    raise ArgumentError, "operator must be one of #{OPERATORS.join(', ')}"
  end
end