curator 0.8.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,7 @@ module Curator::Memory
3
3
  include Curator::Configuration
4
4
 
5
5
  def data_store
6
- Curator::Memory::DataStore
6
+ Curator::Memory::DataStore.new
7
7
  end
8
8
  end
9
9
  end
@@ -3,14 +3,15 @@ require 'ostruct'
3
3
  module Curator
4
4
  module Memory
5
5
  class DataStore
6
- def self.remove_all_keys
6
+ def remove_all_keys
7
7
  @data = {}
8
8
  end
9
- class << self
10
- alias :reset! :remove_all_keys
9
+
10
+ def reset!
11
+ remove_all_keys
11
12
  end
12
13
 
13
- def self.save(options)
14
+ def save(options)
14
15
  bucket = _bucket_name(options[:collection_name])
15
16
  object = options[:value]
16
17
  key = options[:key]
@@ -31,7 +32,7 @@ module Curator
31
32
  key
32
33
  end
33
34
 
34
- def self.delete(collection_name, key)
35
+ def delete(collection_name, key)
35
36
  bucket = _bucket_name(collection_name)
36
37
  _records(bucket).delete(key)
37
38
  _indices(bucket).each_key do |name|
@@ -44,17 +45,17 @@ module Curator
44
45
  end
45
46
  end
46
47
 
47
- def self.find_by_key(collection_name, key)
48
+ def find_by_key(collection_name, key)
48
49
  bucket = _bucket_name(collection_name)
49
50
  value = _records(bucket).fetch(key, nil)
50
51
  return if value.nil?
51
52
  {:key => key, :data => value}
52
53
  end
53
54
 
54
- def self.find_by_index(collection_name, index_name, query)
55
+ def find_by_attribute(collection_name, attribute, query)
55
56
  return [] if query.nil?
56
57
  bucket = _bucket_name(collection_name)
57
- index = _index(bucket, index_name)
58
+ index = _index(bucket, attribute)
58
59
  keys = case query
59
60
  when Range
60
61
  keys = index.keys.select do |key|
@@ -69,27 +70,27 @@ module Curator
69
70
  end
70
71
  end
71
72
 
72
- def self._data
73
+ def _data
73
74
  @data ||= {}
74
75
  end
75
76
 
76
- def self._bucket(bucket)
77
+ def _bucket(bucket)
77
78
  _data[bucket] ||= {}
78
79
  end
79
80
 
80
- def self._records(bucket)
81
+ def _records(bucket)
81
82
  _bucket(bucket)[:records] ||= {}
82
83
  end
83
84
 
84
- def self._indices(bucket)
85
+ def _indices(bucket)
85
86
  _bucket(bucket)[:indices] ||= {}
86
87
  end
87
88
 
88
- def self._index(bucket, index_name)
89
+ def _index(bucket, index_name)
89
90
  _indices(bucket)[index_name] ||= {}
90
91
  end
91
92
 
92
- def self._normalized_index_values(indexed_data)
93
+ def _normalized_index_values(indexed_data)
93
94
  if indexed_data.is_a?(Array)
94
95
  indexed_data
95
96
  else
@@ -97,13 +98,13 @@ module Curator
97
98
  end
98
99
  end
99
100
 
100
- def self._generate_key(bucket)
101
+ def _generate_key(bucket)
101
102
  keys = _records(bucket).keys
102
103
  keys = [0] if keys.empty?
103
104
  keys.max.next
104
105
  end
105
106
 
106
- def self._bucket_name(name)
107
+ def _bucket_name(name)
107
108
  "#{Curator.config.environment}:#{name}"
108
109
  end
109
110
  end
@@ -5,7 +5,7 @@ module Curator::Mongo
5
5
  attr_accessor :database, :mongo_config_file
6
6
 
7
7
  def data_store
8
- Curator::Mongo::DataStore
8
+ Curator::Mongo::DataStore.new
9
9
  end
10
10
  end
11
11
  end
@@ -4,23 +4,28 @@ require 'yaml'
4
4
  module Curator
5
5
  module Mongo
6
6
  class DataStore
7
- def self.client
7
+ def client
8
8
  return @client if @client
9
9
  config = YAML.load(File.read(Curator.config.mongo_config_file))[Curator.config.environment]
10
10
  host = config.delete(:host)
11
11
  port = config.delete(:port)
12
+ password = config.delete(:password)
13
+ username = config.delete(:username)
14
+ @database_name = config.delete(:database) || default_db_name
12
15
  @client = ::Mongo::Connection.new(host, port, config)
16
+ @client.add_auth(@database_name, username, password) if username and password
17
+ @client
13
18
  end
14
19
 
15
- def self.remove_all_keys
20
+ def remove_all_keys
16
21
  self.reset!
17
22
  end
18
23
 
19
- def self.reset!
24
+ def reset!
20
25
  _db.collections.each {|coll| coll.drop unless coll.name =~ /system/ }
21
26
  end
22
27
 
23
- def self.save(options)
28
+ def save(options)
24
29
  collection = _collection options[:collection_name]
25
30
  key = options.delete(:key)
26
31
  document = options[:value]
@@ -31,12 +36,12 @@ module Curator
31
36
  collection.save document
32
37
  end
33
38
 
34
- def self.delete(collection_name, id)
39
+ def delete(collection_name, id)
35
40
  collection = _collection(collection_name)
36
41
  collection.remove(:_id => id)
37
42
  end
38
43
 
39
- def self.find_by_index(collection_name, field, query)
44
+ def find_by_attribute(collection_name, field, query)
40
45
  return [] if query.nil?
41
46
 
42
47
  exp = {}
@@ -46,34 +51,34 @@ module Curator
46
51
  documents.map {|doc| normalize_document(doc) }
47
52
  end
48
53
 
49
- def self.find_by_key(collection_name, id)
54
+ def find_by_key(collection_name, id)
50
55
  collection = _collection(collection_name)
51
56
  document = collection.find_one({:_id => id})
52
57
  normalize_document(document) unless document.nil?
53
58
  end
54
59
 
55
- def self._collection(name)
60
+ def _collection(name)
56
61
  _db.collection(name)
57
62
  end
58
63
 
59
- def self._collection_name(name)
60
- _db.collection(name).name
61
- end
62
-
63
- def self._db
64
+ def _db
64
65
  client.db(_db_name)
65
66
  end
66
67
 
67
- def self._db_name
68
+ def default_db_name
68
69
  "#{Curator.config.database}:#{Curator.config.environment}"
69
70
  end
70
71
 
71
- def self.normalize_document(doc)
72
+ def _db_name
73
+ @database_name
74
+ end
75
+
76
+ def normalize_document(doc)
72
77
  key = doc.delete '_id'
73
78
  Hash[:key => key, :data => doc]
74
79
  end
75
80
 
76
- def self._normalize_query(query)
81
+ def _normalize_query(query)
77
82
  query.inject({}) do |hash, (key, value)|
78
83
  case value
79
84
  when Range
@@ -34,15 +34,15 @@ module Curator
34
34
  end
35
35
 
36
36
  def find_by_created_at(start_time, end_time)
37
- _find_by_index(collection_name, :created_at, _format_time_for_index(start_time).._format_time_for_index(end_time))
37
+ _find_by_attribute(:created_at, _format_time_for_index(start_time).._format_time_for_index(end_time))
38
38
  end
39
39
 
40
40
  def find_by_updated_at(start_time, end_time)
41
- _find_by_index(collection_name, :updated_at, _format_time_for_index(start_time).._format_time_for_index(end_time))
41
+ _find_by_attribute(:updated_at, _format_time_for_index(start_time).._format_time_for_index(end_time))
42
42
  end
43
43
 
44
44
  def find_by_version(version)
45
- _find_by_index(collection_name, :version, version)
45
+ _find_by_attribute(:version, version)
46
46
  end
47
47
 
48
48
  def find_by_id(id)
@@ -93,20 +93,20 @@ module Curator
93
93
  object.instance_values
94
94
  end
95
95
 
96
- def _build_finder_methods(field_name)
96
+ def _build_finder_methods(attribute)
97
97
  eigenclass = class << self; self; end
98
98
  eigenclass.class_eval do
99
- define_method("find_by_#{field_name}") do |value|
100
- _find_by_index(collection_name, field_name, value)
99
+ define_method("find_by_#{attribute}") do |value|
100
+ _find_by_attribute(attribute, value)
101
101
  end
102
- define_method("find_first_by_#{field_name}") do |value|
103
- _find_by_index(collection_name, field_name, value).first
102
+ define_method("find_first_by_#{attribute}") do |value|
103
+ _find_by_attribute(attribute, value).first
104
104
  end
105
105
  end
106
106
  end
107
107
 
108
- def _find_by_index(collection_name, field_name, value)
109
- if results = data_store.find_by_index(collection_name, field_name, value)
108
+ def _find_by_attribute(attribute, value)
109
+ if results = data_store.find_by_attribute(collection_name, attribute, value)
110
110
  results.map do |hash|
111
111
  _deserialize(hash[:key], hash[:data])
112
112
  end
@@ -121,8 +121,6 @@ module Curator
121
121
  attributes = data.with_indifferent_access
122
122
  migrated_attributes = migrator.migrate(attributes)
123
123
  migrated_attributes[:id] = id
124
- migrated_attributes[:created_at] = Time.parse(migrated_attributes[:created_at]) if migrated_attributes[:created_at]
125
- migrated_attributes[:updated_at] = Time.parse(migrated_attributes[:updated_at]) if migrated_attributes[:updated_at]
126
124
  deserialize(migrated_attributes)
127
125
  end
128
126
 
@@ -1,7 +1,9 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../riak/configuration')
2
+
1
3
  module Curator::ResettableRiak
2
4
  class Configuration < Curator::Riak::Configuration
3
5
  def data_store
4
- Curator::ResettableRiak::DataStore
6
+ Curator::ResettableRiak::DataStore.new
5
7
  end
6
8
  end
7
9
  end
@@ -1,22 +1,24 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../riak/data_store')
1
2
  require 'active_support/core_ext/kernel/reporting'
2
3
 
3
4
  module Curator
4
5
  module ResettableRiak
5
6
  class DataStore < Riak::DataStore
6
- def self.bucket_prefix
7
+ def bucket_prefix
7
8
  job = "#{ENV['JOB_NAME'].gsub(/[^[:alnum:]]/, '_')}" if ENV['JOB_NAME'].present?
8
9
  [Curator.config.bucket_prefix, job, Curator.config.environment].compact.join(':')
9
10
  end
10
11
 
11
- def self.exclude_from_reset
12
+ def exclude_from_reset(&block)
12
13
  @exclude_from_reset = true
13
14
  yield
15
+ ensure
14
16
  @exclude_from_reset = false
15
17
  end
16
18
 
17
- def self.remove_all_keys
19
+ def remove_all_keys
18
20
  silence_warnings do
19
- buckets = client.buckets.select { |bucket| bucket.name.start_with?(DataStore.bucket_prefix) }
21
+ buckets = client.buckets.select { |bucket| bucket.name.start_with?(bucket_prefix) }
20
22
  buckets.each do |bucket|
21
23
  bucket.keys do |keys|
22
24
  keys.each { |key| bucket.delete(key) }
@@ -25,7 +27,7 @@ module Curator
25
27
  end
26
28
  end
27
29
 
28
- def self.reset!
30
+ def reset!
29
31
  @bucket_names ||= {}
30
32
  deletable_buckets = @bucket_names.each do |bucket_name, keys|
31
33
  bucket = _bucket(bucket_name)
@@ -34,7 +36,7 @@ module Curator
34
36
  @bucket_names = {}
35
37
  end
36
38
 
37
- def self.save(options)
39
+ def save(options)
38
40
  key = super
39
41
 
40
42
  unless @exclude_from_reset
@@ -11,7 +11,7 @@ module Curator::Riak
11
11
  end
12
12
 
13
13
  def data_store
14
- Curator::Riak::DataStore
14
+ Curator::Riak::DataStore.new
15
15
  end
16
16
  end
17
17
  end
@@ -4,23 +4,27 @@ require 'yaml'
4
4
  module Curator
5
5
  module Riak
6
6
  class DataStore
7
- def self.client
7
+ def client
8
8
  return @client if @client
9
9
  yml_config = YAML.load(File.read(Curator.config.riak_config_file))[Curator.config.environment]
10
10
  @client = ::Riak::Client.new(yml_config)
11
11
  end
12
12
 
13
- def self.delete(bucket_name, key)
13
+ def bucket_prefix
14
+ "#{Curator.config.bucket_prefix}:#{Curator.config.environment}"
15
+ end
16
+
17
+ def delete(bucket_name, key)
14
18
  bucket = _bucket(bucket_name)
15
19
  object = bucket.get(key)
16
20
  object.delete
17
21
  end
18
22
 
19
- def self.ping
23
+ def ping
20
24
  client.ping
21
25
  end
22
26
 
23
- def self.save(options)
27
+ def save(options)
24
28
  bucket = _bucket(options[:collection_name])
25
29
  object = ::Riak::RObject.new(bucket, options[:key])
26
30
  object.content_type = options.fetch(:content_type, "application/json")
@@ -32,17 +36,17 @@ module Curator
32
36
  result.key
33
37
  end
34
38
 
35
- def self.find_by_key(bucket_name, key)
39
+ def find_by_key(bucket_name, key)
36
40
  bucket = _bucket(bucket_name)
37
41
  begin
38
42
  object = bucket.get(key)
39
- { :key => object.key, :data => object.data } unless object.data.empty?
43
+ { :key => object.key, :data => _deserialize(object.data) } unless object.data.empty?
40
44
  rescue ::Riak::HTTPFailedRequest => failed_request
41
45
  raise failed_request unless failed_request.not_found?
42
46
  end
43
47
  end
44
48
 
45
- def self.find_by_index(bucket_name, index_name, query)
49
+ def find_by_attribute(bucket_name, index_name, query)
46
50
  return [] if query.nil?
47
51
 
48
52
  bucket = _bucket(bucket_name)
@@ -54,23 +58,26 @@ module Curator
54
58
  end
55
59
  end
56
60
 
57
- def self._bucket(name)
61
+ def _bucket(name)
58
62
  client.bucket(_bucket_name(name))
59
63
  end
60
64
 
61
- def self._bucket_name(name)
65
+ def _bucket_name(name)
62
66
  bucket_prefix + ":" + name
63
67
  end
64
68
 
65
- def self.bucket_prefix
66
- "#{Curator.config.bucket_prefix}:#{Curator.config.environment}"
69
+ def _deserialize(data)
70
+ deserialized_data = data.dup
71
+ deserialized_data["created_at"] = Time.parse(data["created_at"]) if data["created_at"]
72
+ deserialized_data["updated_at"] = Time.parse(data["updated_at"]) if data["updated_at"]
73
+ deserialized_data
67
74
  end
68
75
 
69
- def self._find_key_by_index(bucket, index_name, query)
76
+ def _find_key_by_index(bucket, index_name, query)
70
77
  bucket.get_index("#{index_name}_bin", query)
71
78
  end
72
79
 
73
- def self._normalized_index_data(index_data)
80
+ def _normalized_index_data(index_data)
74
81
  if index_data.is_a?(Array)
75
82
  index_data.join(", ")
76
83
  else
data/lib/curator.rb CHANGED
@@ -21,13 +21,6 @@ module Curator
21
21
  end
22
22
 
23
23
  def self.data_store
24
- config.data_store
25
- end
26
-
27
- self.configure(:riak) do |config|
28
- config.environment = 'development'
29
- config.migrations_path = File.expand_path(File.dirname(__FILE__) + "/../db/migrate")
30
- config.bucket_prefix = 'curator'
31
- config.riak_config_file = File.expand_path(File.dirname(__FILE__) + "/../config/riak.yml")
24
+ @data_store ||= config.data_store
32
25
  end
33
26
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: curator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.8.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-08 00:00:00.000000000 Z
12
+ date: 2012-06-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport