class ROM::DynamoDB::Dataset::WhereClause::Clause

Attributes

clauses[R]

Public Class Methods

new(clauses = []) click to toggle source
# File lib/rom/dynamodb/dataset/where_clause.rb, line 8
def initialize(clauses = [])
  @clauses = clauses.is_a?(Array) ? clauses : [clauses]
end

Public Instance Methods

concat(val) click to toggle source
# File lib/rom/dynamodb/dataset/where_clause.rb, line 12
def concat(val)
  @clauses.concat(val.is_a?(Array) ? val : [val])
end
expression_attribute_names() click to toggle source
# File lib/rom/dynamodb/dataset/where_clause.rb, line 20
def expression_attribute_names
  clauses.collect(&method(:to_names)).inject(:merge)
end
expression_attribute_values() click to toggle source
# File lib/rom/dynamodb/dataset/where_clause.rb, line 16
def expression_attribute_values
  clauses.collect(&method(:to_values)).inject(:merge)
end
key_condition_expression() click to toggle source
# File lib/rom/dynamodb/dataset/where_clause.rb, line 24
def key_condition_expression
  clauses.collect(&method(:to_expression)).join(" AND ")
end
to_expression(clause) click to toggle source
# File lib/rom/dynamodb/dataset/where_clause.rb, line 28
def to_expression(clause)
  case clause.operand
  when :between
    "##{clause.key} BETWEEN :#{clause.key}_a AND :#{clause.key}_b"
  when :begins_with
    "begins_with(##{clause.key}, :#{clause.key})"
  when :==
    "##{clause.key} = :#{clause.key}"
  else
    "##{clause.key} #{clause.operand} :#{clause.key}"
  end
end
to_names(clause) click to toggle source
# File lib/rom/dynamodb/dataset/where_clause.rb, line 56
def to_names(clause)
  { "##{clause.key}" => clause.key }
end
to_values(clause) click to toggle source
# File lib/rom/dynamodb/dataset/where_clause.rb, line 41
def to_values(clause)
  case clause.operand
  when :between
    value = clause.val
    min = value.min.is_a?(Operand) ? value.min.val : value.min
    max = value.max.is_a?(Operand) ? value.max.val : value.max
    {
      ":#{clause.key}_a" => min,
      ":#{clause.key}_b" => max
    }
  else
    { ":#{clause.key}" => clause.val }
  end
end