Class: Dynamoid::Criteria::Chain

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/dynamoid/criteria/chain.rb

Overview

The criteria chain is equivalent to an ActiveRecord relation (and realistically I should change the name from chain to relation). It is a chainable object that builds up a query and eventually executes it by a Query or Scan.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(source) ⇒ Chain

Create a new criteria chain.

Parameters:

  • source (Class)

    the class upon which the ultimate query will be performed.



14
15
16
17
18
19
# File 'lib/dynamoid/criteria/chain.rb', line 14

def initialize(source)
  @query = {}
  @source = source
  @consistent_read = false
  @scan_index_forward = true
end

Instance Attribute Details

#consistent_readObject

Returns the value of attribute consistent_read.



8
9
10
# File 'lib/dynamoid/criteria/chain.rb', line 8

def consistent_read
  @consistent_read
end

#queryObject

Returns the value of attribute query.



8
9
10
# File 'lib/dynamoid/criteria/chain.rb', line 8

def query
  @query
end

#sourceObject

Returns the value of attribute source.



8
9
10
# File 'lib/dynamoid/criteria/chain.rb', line 8

def source
  @source
end

#valuesObject

Returns the value of attribute values.



8
9
10
# File 'lib/dynamoid/criteria/chain.rb', line 8

def values
  @values
end

Instance Method Details

#allObject

Returns all the records matching the criteria.

Since:

  • 0.2.0



45
46
47
# File 'lib/dynamoid/criteria/chain.rb', line 45

def all
  records
end

#batch(batch_size) ⇒ Object



76
77
78
79
# File 'lib/dynamoid/criteria/chain.rb', line 76

def batch(batch_size)
  @batch_size = batch_size
  self
end

#consistentObject



37
38
39
40
# File 'lib/dynamoid/criteria/chain.rb', line 37

def consistent
  @consistent_read = true
  self
end

#consistent_optsObject



98
99
100
# File 'lib/dynamoid/criteria/chain.rb', line 98

def consistent_opts
  { :consistent_read => consistent_read }
end

#destroy_allObject

Destroys all the records matching the criteria.



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/dynamoid/criteria/chain.rb', line 51

def destroy_all
  ids = []

  if key_present?
    ranges = []
    Dynamoid.adapter.query(source.table_name, range_query).collect do |hash|
      ids << hash[source.hash_key.to_sym]
      ranges << hash[source.range_key.to_sym]
    end

    Dynamoid.adapter.delete(source.table_name, ids,{:range_key => ranges})
  else
    Dynamoid.adapter.scan(source.table_name, query, scan_opts).collect do |hash|
      ids << hash[source.hash_key.to_sym]
    end

    Dynamoid.adapter.delete(source.table_name, ids)
  end
end

#each(&block) ⇒ Object

Allows you to use the results of a search as an enumerable over the results found.

Since:

  • 0.2.0



94
95
96
# File 'lib/dynamoid/criteria/chain.rb', line 94

def each(&block)
  records.each(&block)
end

#eval_limit(limit) ⇒ Object



71
72
73
74
# File 'lib/dynamoid/criteria/chain.rb', line 71

def eval_limit(limit)
  @eval_limit = limit
  self
end

#scan_index_forward(scan_index_forward) ⇒ Object



86
87
88
89
# File 'lib/dynamoid/criteria/chain.rb', line 86

def scan_index_forward(scan_index_forward)
  @scan_index_forward = scan_index_forward
  self
end

#start(start) ⇒ Object



81
82
83
84
# File 'lib/dynamoid/criteria/chain.rb', line 81

def start(start)
  @start = start
  self
end

#where(args) ⇒ Object

The workhorse method of the criteria chain. Each key in the passed in hash will become another criteria that the ultimate query must match. A key can either be a symbol or a string, and should be an attribute name or an attribute name with a range operator.

Examples:

A simple criteria

where(:name => 'Josh')

A more complicated criteria

where(:name => 'Josh', 'created_at.gt' => DateTime.now - 1.day)

Since:

  • 0.2.0



32
33
34
35
# File 'lib/dynamoid/criteria/chain.rb', line 32

def where(args)
  args.each {|k, v| query[k.to_sym] = v}
  self
end