Class: Curator::Memory::DataStore

Inherits:
Object
  • Object
show all
Defined in:
lib/curator/memory/data_store.rb

Instance Method Summary collapse

Instance Method Details

#_bucket(bucket) ⇒ Object



77
78
79
# File 'lib/curator/memory/data_store.rb', line 77

def _bucket(bucket)
  _data[bucket] ||= {}
end

#_bucket_name(name) ⇒ Object



107
108
109
# File 'lib/curator/memory/data_store.rb', line 107

def _bucket_name(name)
  "#{Curator.config.environment}:#{name}"
end

#_dataObject



73
74
75
# File 'lib/curator/memory/data_store.rb', line 73

def _data
  @data ||= {}
end

#_generate_key(bucket) ⇒ Object



101
102
103
104
105
# File 'lib/curator/memory/data_store.rb', line 101

def _generate_key(bucket)
  keys = _records(bucket).keys
  keys = [0] if keys.empty?
  keys.max.next
end

#_index(bucket, index_name) ⇒ Object



89
90
91
# File 'lib/curator/memory/data_store.rb', line 89

def _index(bucket, index_name)
  _indices(bucket)[index_name] ||= {}
end

#_indices(bucket) ⇒ Object



85
86
87
# File 'lib/curator/memory/data_store.rb', line 85

def _indices(bucket)
  _bucket(bucket)[:indices] ||= {}
end

#_normalized_index_values(indexed_data) ⇒ Object



93
94
95
96
97
98
99
# File 'lib/curator/memory/data_store.rb', line 93

def _normalized_index_values(indexed_data)
  if indexed_data.is_a?(Array)
    indexed_data
  else
    [indexed_data]
  end
end

#_records(bucket) ⇒ Object



81
82
83
# File 'lib/curator/memory/data_store.rb', line 81

def _records(bucket)
  _bucket(bucket)[:records] ||= {}
end

#delete(collection_name, key) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/curator/memory/data_store.rb', line 35

def delete(collection_name, key)
  bucket = _bucket_name(collection_name)
  _records(bucket).delete(key)
  _indices(bucket).each_key do |name|
    index = _index(bucket, name)
    index.each do |value, keys|
      next unless keys.include?(key)
      index[value].delete(key)
    end
    index.delete_if { |value, keys| keys.empty? }
  end
end

#find_by_attribute(collection_name, attribute, query) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/curator/memory/data_store.rb', line 55

def find_by_attribute(collection_name, attribute, query)
  return [] if query.nil?
  bucket = _bucket_name(collection_name)
  index = _index(bucket, attribute)
  keys = case query
         when Range
           keys = index.keys.select do |key|
             key.between?(query.first, query.last)
           end
           index.values_at(*keys).flatten
         else
           index.fetch(query, [])
         end
  keys.map do |key|
    find_by_key(collection_name, key)
  end
end

#find_by_key(collection_name, key) ⇒ Object



48
49
50
51
52
53
# File 'lib/curator/memory/data_store.rb', line 48

def find_by_key(collection_name, key)
  bucket = _bucket_name(collection_name)
  value = _records(bucket).fetch(key, nil)
  return if value.nil?
  {:key => key, :data => value}
end

#remove_all_keysObject



6
7
8
# File 'lib/curator/memory/data_store.rb', line 6

def remove_all_keys
  @data = {}
end

#reset!Object



10
11
12
# File 'lib/curator/memory/data_store.rb', line 10

def reset!
  remove_all_keys
end

#save(options) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/curator/memory/data_store.rb', line 14

def save(options)
  bucket = _bucket_name(options[:collection_name])
  object = options[:value]
  key = options[:key]
  indexes = options.fetch(:index, {})

  key = _generate_key(bucket) unless key

  _records(bucket).store(key, object)
  indexes.each do |index_name, index_data|
    index = _index(bucket, index_name)

    _normalized_index_values(index_data).each do |index_value|
      index[index_value] ||= []
      index[index_value] << key unless index[index_value].include?(key)
    end
  end

  key
end