Class: ROM::DynamoDB::Dataset::WhereClause::Clause

Inherits:
Object
  • Object
show all
Defined in:
lib/rom/dynamodb/dataset/where_clause.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(clauses = []) ⇒ Clause

Returns a new instance of Clause.



8
9
10
# File 'lib/rom/dynamodb/dataset/where_clause.rb', line 8

def initialize(clauses = [])
  @clauses = clauses.is_a?(Array) ? clauses : [clauses]
end

Instance Attribute Details

#clausesObject (readonly)

Returns the value of attribute clauses.



6
7
8
# File 'lib/rom/dynamodb/dataset/where_clause.rb', line 6

def clauses
  @clauses
end

Instance Method Details

#concat(val) ⇒ Object



12
13
14
# File 'lib/rom/dynamodb/dataset/where_clause.rb', line 12

def concat(val)
  @clauses.concat(val.is_a?(Array) ? val : [val])
end

#expression_attribute_namesObject



20
21
22
# File 'lib/rom/dynamodb/dataset/where_clause.rb', line 20

def expression_attribute_names
  clauses.collect(&method(:to_names)).inject(:merge)
end

#expression_attribute_valuesObject



16
17
18
# File 'lib/rom/dynamodb/dataset/where_clause.rb', line 16

def expression_attribute_values
  clauses.collect(&method(:to_values)).inject(:merge)
end

#key_condition_expressionObject



24
25
26
# 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) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
# 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) ⇒ Object



56
57
58
# File 'lib/rom/dynamodb/dataset/where_clause.rb', line 56

def to_names(clause)
  { "##{clause.key}" => clause.key }
end

#to_values(clause) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
# 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