curator 0.2.0 → 0.3.0

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.
@@ -0,0 +1,3 @@
1
+ module Curator::Configuration
2
+ attr_accessor :environment, :migrations_path
3
+ end
@@ -16,7 +16,7 @@ module Curator
16
16
  end
17
17
 
18
18
  def _all_migrations
19
- files = Dir.glob("#{File.join(Curator.migrations_path, @collection_name)}/*.rb")
19
+ files = Dir.glob("#{File.join(Curator.config.migrations_path, @collection_name)}/*.rb")
20
20
 
21
21
  files.map do |file|
22
22
  load file
@@ -1,10 +1,12 @@
1
1
  module Curator
2
2
  class Railtie < Rails::Railtie
3
3
  initializer "railtie.configure_rails_initialization" do |app|
4
- Curator.bucket_prefix = app.class.name.split("::").first.underscore
5
- Curator.environment = Rails.env
6
- Curator.migrations_path = Rails.root.join('db', 'migrate')
7
- Curator.riak_config_file = Rails.root.join('config', 'riak.yml')
4
+ Curator.configure(:riak) do |config|
5
+ config.bucket_prefix = app.class.name.split("::").first.underscore
6
+ config.environment = Rails.env
7
+ config.migrations_path = Rails.root.join('db', 'migrate')
8
+ config.riak_config_file = Rails.root.join('config', 'riak.yml')
9
+ end
8
10
  end
9
11
  end
10
12
  end
@@ -13,7 +13,7 @@ module Curator
13
13
  end
14
14
 
15
15
  def data_store
16
- @data_store ||= Riak::DataStore
16
+ @data_store ||= Curator.data_store
17
17
  end
18
18
 
19
19
  def data_store=(store)
@@ -24,10 +24,6 @@ module Curator
24
24
  data_store.delete(collection_name, object.id)
25
25
  end
26
26
 
27
- def encrypted_entity
28
- @encrypted_entity = true
29
- end
30
-
31
27
  def find_by_created_at(start_time, end_time)
32
28
  _find_by_index(collection_name, :created_at, _format_time_for_index(start_time).._format_time_for_index(end_time))
33
29
  end
@@ -36,6 +32,10 @@ module Curator
36
32
  _find_by_index(collection_name, :updated_at, _format_time_for_index(start_time).._format_time_for_index(end_time))
37
33
  end
38
34
 
35
+ def find_by_version(version)
36
+ _find_by_index(collection_name, :version, version)
37
+ end
38
+
39
39
  def find_by_id(id)
40
40
  if hash = data_store.find_by_key(collection_name, id)
41
41
  _deserialize(hash[:key], hash[:data])
@@ -59,6 +59,11 @@ module Curator
59
59
  end
60
60
 
61
61
  def save(object)
62
+ _update_timestamps(object)
63
+ save_without_timestamps(object)
64
+ end
65
+
66
+ def save_without_timestamps(object)
62
67
  hash = {
63
68
  :collection_name => collection_name,
64
69
  :value => _serialize(object),
@@ -110,22 +115,6 @@ module Curator
110
115
  object
111
116
  end
112
117
 
113
- def _encrypted_attributes(object, attributes)
114
- return attributes unless _encrypted_entity?
115
-
116
- encryption_key = EncryptionKeyRepository.find_active
117
- plaintext = attributes.to_json
118
- ciphertext = encryption_key.encrypt(plaintext)
119
- {
120
- :encryption_key_id => encryption_key.id,
121
- :encrypted_data => Base64.encode64(ciphertext)
122
- }
123
- end
124
-
125
- def _encrypted_entity?
126
- @encrypted_entity == true
127
- end
128
-
129
118
  def _format_time_for_index(time)
130
119
  time.to_json.gsub('"', '')
131
120
  end
@@ -138,25 +127,19 @@ module Curator
138
127
  index_values = _indexed_fields.map { |field| [field, object.send(field)] }
139
128
  index_values += [
140
129
  [:created_at, _format_time_for_index(object.send(:created_at))],
141
- [:updated_at, _format_time_for_index(object.send(:updated_at))]
130
+ [:updated_at, _format_time_for_index(object.send(:updated_at))],
131
+ [:version, object.version]
142
132
  ]
143
133
  Hash[index_values]
144
134
  end
145
135
 
146
136
  def _serialize(object)
147
- attributes = serialize(object).reject { |key, val| val.nil? }
148
-
149
- timestamp = Time.now.utc
150
-
151
- updated_at = timestamp
152
- created_at = object.created_at || timestamp
153
-
154
- object.created_at = created_at
155
- object.updated_at = updated_at
156
- attributes[:created_at] = created_at
157
- attributes[:updated_at] = updated_at
137
+ serialize(object).reject { |key, val| val.nil? }
138
+ end
158
139
 
159
- _encrypted_attributes(object, attributes)
140
+ def _update_timestamps(object)
141
+ object.updated_at = Time.now.utc
142
+ object.created_at ||= object.updated_at
160
143
  end
161
144
  end
162
145
  end
@@ -0,0 +1,7 @@
1
+ module Curator::ResettableRiak
2
+ class Configuration < Curator::Riak::Configuration
3
+ def data_store
4
+ Curator::ResettableRiak::DataStore
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,50 @@
1
+ require 'active_support/core_ext/kernel/reporting'
2
+
3
+ module Curator
4
+ module ResettableRiak
5
+ class DataStore < Riak::DataStore
6
+ def self.bucket_prefix
7
+ job = "#{ENV['JOB_NAME'].gsub(/[^[:alnum:]]/, '_')}" if ENV['JOB_NAME'].present?
8
+ [Curator.config.bucket_prefix, job, Curator.config.environment].compact.join(':')
9
+ end
10
+
11
+ def self.exclude_from_reset
12
+ @exclude_from_reset = true
13
+ yield
14
+ @exclude_from_reset = false
15
+ end
16
+
17
+ def self.remove_all_keys
18
+ silence_warnings do
19
+ buckets = client.buckets.select { |bucket| bucket.name.start_with?(DataStore.bucket_prefix) }
20
+ buckets.each do |bucket|
21
+ bucket.keys do |keys|
22
+ keys.each { |key| bucket.delete(key) }
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ def self.reset!
29
+ @bucket_names ||= {}
30
+ deletable_buckets = @bucket_names.each do |bucket_name, keys|
31
+ bucket = _bucket(bucket_name)
32
+ keys.each {|key| bucket.delete(key)}
33
+ end
34
+ @bucket_names = {}
35
+ end
36
+
37
+ def self.save(options)
38
+ result = super
39
+
40
+ unless @exclude_from_reset
41
+ @bucket_names ||= {}
42
+ @bucket_names[options[:collection_name]] ||= []
43
+ @bucket_names[options[:collection_name]] << result.key
44
+ end
45
+
46
+ result
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,11 @@
1
+ module Curator::Riak
2
+ class Configuration
3
+ include Curator::Configuration
4
+
5
+ attr_accessor :bucket_prefix, :riak_config_file
6
+
7
+ def data_store
8
+ Curator::Riak::DataStore
9
+ end
10
+ end
11
+ end
@@ -1,71 +1,73 @@
1
1
  require 'riak'
2
2
  require 'yaml'
3
3
 
4
- module Riak
5
- class DataStore
6
- def self.client
7
- return @client if @client
8
- yml_config = YAML.load(File.read(Curator.riak_config_file))[Curator.environment]
9
- @client = Riak::Client.new(yml_config)
10
- end
4
+ module Curator
5
+ module Riak
6
+ class DataStore
7
+ def self.client
8
+ return @client if @client
9
+ yml_config = YAML.load(File.read(Curator.config.riak_config_file))[Curator.config.environment]
10
+ @client = ::Riak::Client.new(yml_config)
11
+ end
11
12
 
12
- def self.delete(bucket_name, key)
13
- bucket = _bucket(bucket_name)
14
- object = bucket.get(key)
15
- object.delete
16
- end
13
+ def self.delete(bucket_name, key)
14
+ bucket = _bucket(bucket_name)
15
+ object = bucket.get(key)
16
+ object.delete
17
+ end
17
18
 
18
- def self.ping
19
- client.ping
20
- end
19
+ def self.ping
20
+ client.ping
21
+ end
21
22
 
22
- def self.save(options)
23
- bucket = _bucket(options[:collection_name])
24
- object = Riak::RObject.new(bucket, options[:key])
25
- object.content_type = "application/json"
26
- object.data = options[:value]
27
- options.fetch(:index, {}).each do |index_name, index_value|
28
- object.indexes["#{index_name}_bin"] << index_value
23
+ def self.save(options)
24
+ bucket = _bucket(options[:collection_name])
25
+ object = ::Riak::RObject.new(bucket, options[:key])
26
+ object.content_type = "application/json"
27
+ object.data = options[:value]
28
+ options.fetch(:index, {}).each do |index_name, index_value|
29
+ object.indexes["#{index_name}_bin"] << index_value
30
+ end
31
+ object.store
29
32
  end
30
- object.store
31
- end
32
33
 
33
- def self.find_by_key(bucket_name, key)
34
- bucket = _bucket(bucket_name)
35
- begin
36
- object = bucket.get(key)
37
- { :key => object.key, :data => object.data } unless object.data.empty?
38
- rescue Riak::HTTPFailedRequest => failed_request
39
- raise failed_request unless failed_request.not_found?
34
+ def self.find_by_key(bucket_name, key)
35
+ bucket = _bucket(bucket_name)
36
+ begin
37
+ object = bucket.get(key)
38
+ { :key => object.key, :data => object.data } unless object.data.empty?
39
+ rescue ::Riak::HTTPFailedRequest => failed_request
40
+ raise failed_request unless failed_request.not_found?
41
+ end
40
42
  end
41
- end
42
43
 
43
- def self.find_by_index(bucket_name, index_name, query)
44
- return [] if query.nil?
44
+ def self.find_by_index(bucket_name, index_name, query)
45
+ return [] if query.nil?
45
46
 
46
- bucket = _bucket(bucket_name)
47
- begin
48
- keys = _find_key_by_index(bucket, index_name.to_s, query)
49
- keys.map { |key| find_by_key(bucket_name, key) }
50
- rescue Riak::HTTPFailedRequest => failed_request
51
- raise failed_request unless failed_request.not_found?
47
+ bucket = _bucket(bucket_name)
48
+ begin
49
+ keys = _find_key_by_index(bucket, index_name.to_s, query)
50
+ keys.map { |key| find_by_key(bucket_name, key) }
51
+ rescue ::Riak::HTTPFailedRequest => failed_request
52
+ raise failed_request unless failed_request.not_found?
53
+ end
52
54
  end
53
- end
54
55
 
55
- def self._bucket(name)
56
- client.bucket(_bucket_name(name))
57
- end
56
+ def self._bucket(name)
57
+ client.bucket(_bucket_name(name))
58
+ end
58
59
 
59
- def self._bucket_name(name)
60
- bucket_prefix + ":" + name
61
- end
60
+ def self._bucket_name(name)
61
+ bucket_prefix + ":" + name
62
+ end
62
63
 
63
- def self.bucket_prefix
64
- "#{Curator.bucket_prefix}:#{Curator.environment}"
65
- end
64
+ def self.bucket_prefix
65
+ "#{Curator.config.bucket_prefix}:#{Curator.config.environment}"
66
+ end
66
67
 
67
- def self._find_key_by_index(bucket, index_name, query)
68
- bucket.get_index("#{index_name}_bin", query)
68
+ def self._find_key_by_index(bucket, index_name, query)
69
+ bucket.get_index("#{index_name}_bin", query)
70
+ end
69
71
  end
70
72
  end
71
73
  end
data/lib/curator.rb CHANGED
@@ -4,16 +4,32 @@ require 'curator/migration'
4
4
  require 'curator/migrator'
5
5
  require 'curator/model'
6
6
  require 'curator/repository'
7
+ require 'curator/configuration'
8
+ require 'curator/riak/configuration'
7
9
  require 'curator/riak/data_store'
10
+ require 'curator/resettable_riak/configuration'
11
+ require 'curator/resettable_riak/data_store'
8
12
  require 'curator/railtie' if defined?(Rails)
9
13
 
10
14
  module Curator
11
15
  class << self
12
- attr_accessor :bucket_prefix, :environment, :migrations_path, :riak_config_file
16
+ attr_reader :config
13
17
  end
14
18
 
15
- self.bucket_prefix = "curator"
16
- self.environment = "development"
17
- self.migrations_path = File.expand_path(File.dirname(__FILE__) + "/../db/migrate")
18
- self.riak_config_file = File.expand_path(File.dirname(__FILE__) + "/../config/riak.yml")
19
+ def self.configure(data_store, &block)
20
+ path = "curator/#{data_store.to_s}/configuration"
21
+ @config = path.camelize.constantize.new
22
+ yield(@config) if block_given?
23
+ end
24
+
25
+ def self.data_store
26
+ config.data_store
27
+ end
28
+
29
+ self.configure(:riak) do |config|
30
+ config.environment = 'development'
31
+ config.migrations_path = File.expand_path(File.dirname(__FILE__) + "/../db/migrate")
32
+ config.bucket_prefix = 'curator'
33
+ config.riak_config_file = File.expand_path(File.dirname(__FILE__) + "/../config/riak.yml")
34
+ end
19
35
  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.2.0
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-17 00:00:00.000000000 Z
12
+ date: 2012-02-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &70366077009720 !ruby/object:Gem::Requirement
16
+ requirement: &70336976526480 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 3.0.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70366077009720
24
+ version_requirements: *70336976526480
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: activemodel
27
- requirement: &70366077009100 !ruby/object:Gem::Requirement
27
+ requirement: &70336976525860 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 3.0.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70366077009100
35
+ version_requirements: *70336976525860
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: json
38
- requirement: &70366077008100 !ruby/object:Gem::Requirement
38
+ requirement: &70336976525440 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70366077008100
46
+ version_requirements: *70336976525440
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: riak-client
49
- requirement: &70366077006780 !ruby/object:Gem::Requirement
49
+ requirement: &70336976524760 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,18 +54,22 @@ dependencies:
54
54
  version: 1.0.0
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70366077006780
57
+ version_requirements: *70336976524760
58
58
  description: Model and repository framework
59
59
  email: code@getbraintree.com
60
60
  executables: []
61
61
  extensions: []
62
62
  extra_rdoc_files: []
63
63
  files:
64
+ - lib/curator/configuration.rb
64
65
  - lib/curator/migration.rb
65
66
  - lib/curator/migrator.rb
66
67
  - lib/curator/model.rb
67
68
  - lib/curator/railtie.rb
68
69
  - lib/curator/repository.rb
70
+ - lib/curator/resettable_riak/configuration.rb
71
+ - lib/curator/resettable_riak/data_store.rb
72
+ - lib/curator/riak/configuration.rb
69
73
  - lib/curator/riak/data_store.rb
70
74
  - lib/curator.rb
71
75
  homepage: http://github.com/braintree/curator
@@ -88,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
88
92
  version: '0'
89
93
  requirements: []
90
94
  rubyforge_project:
91
- rubygems_version: 1.8.10
95
+ rubygems_version: 1.8.11
92
96
  signing_key:
93
97
  specification_version: 3
94
98
  summary: Model and repository framework