curator 0.10.0 → 0.11.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.
- checksums.yaml +7 -0
- data/lib/curator.rb +8 -0
- data/lib/curator/memory/data_store.rb +9 -0
- data/lib/curator/mongo/data_store.rb +8 -0
- data/lib/curator/railtie.rb +5 -0
- data/lib/curator/repository.rb +20 -2
- data/lib/curator/repository/settings.rb +50 -0
- data/lib/curator/riak/data_store.rb +12 -11
- data/lib/curator/settings_updater.rb +62 -0
- metadata +22 -35
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 37a4d7f18c7aa69e15d24937296c753cd601068a
|
4
|
+
data.tar.gz: a914c1ad69c6ec5b6035eb85e5736cc7a32f3ba2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e15781810ecbf8b29894188a0962c0e17ed815a9e84abc9f6faad062e7ffd29e4c2d31f687724bc2c7b0a7f5b937eb8f2bd3fdd794e14272f2b5cdc771bccbcc
|
7
|
+
data.tar.gz: 334bd6659e11c125a6553f22bbdae0d7b788320dc7f84b70c32618bcc3a696809bfe76f9ac4c673b5fd580992dd742f5fccb5d4e0269dc7fc2d0b65df63dc187
|
data/lib/curator.rb
CHANGED
@@ -12,6 +12,14 @@ module Curator
|
|
12
12
|
attr_reader :config
|
13
13
|
end
|
14
14
|
|
15
|
+
def self.repositories
|
16
|
+
@repositories ||= Set.new
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.repositories=(repositories)
|
20
|
+
@repositories = repositories
|
21
|
+
end
|
22
|
+
|
15
23
|
def self.configure(data_store, &block)
|
16
24
|
configuration_path = "curator/#{data_store.to_s}/configuration"
|
17
25
|
require configuration_path
|
@@ -34,6 +34,14 @@ module Curator
|
|
34
34
|
@client
|
35
35
|
end
|
36
36
|
|
37
|
+
def settings(collection_name)
|
38
|
+
raise StandardError, "Not implemented yet"
|
39
|
+
end
|
40
|
+
|
41
|
+
def update_settings!(collection_name, updated_settings)
|
42
|
+
raise StandardError, "Not implemented yet"
|
43
|
+
end
|
44
|
+
|
37
45
|
def remove_all_keys
|
38
46
|
self.reset!
|
39
47
|
end
|
data/lib/curator/railtie.rb
CHANGED
data/lib/curator/repository.rb
CHANGED
@@ -1,13 +1,22 @@
|
|
1
1
|
require 'active_support/inflector'
|
2
2
|
require 'active_support/core_ext/object/instance_variables'
|
3
3
|
require 'active_support/core_ext/hash/indifferent_access'
|
4
|
+
require 'active_support/core_ext/module/delegation'
|
5
|
+
require 'curator/repository/settings'
|
4
6
|
require 'json'
|
5
7
|
|
6
8
|
module Curator
|
7
9
|
module Repository
|
8
10
|
extend ActiveSupport::Concern
|
9
11
|
|
12
|
+
def self.included(klass)
|
13
|
+
Curator.repositories << klass
|
14
|
+
end
|
15
|
+
|
10
16
|
module ClassMethods
|
17
|
+
delegate :enable, :disable, :set, :to => :settings
|
18
|
+
delegate :uncommitted?, :to => :settings, :prefix => true
|
19
|
+
|
11
20
|
def all
|
12
21
|
data_store.find_all(collection_name).map do |result|
|
13
22
|
_deserialize(result[:key], result[:data])
|
@@ -99,6 +108,15 @@ module Curator
|
|
99
108
|
HashWithIndifferentAccess.new(object.instance_values)
|
100
109
|
end
|
101
110
|
|
111
|
+
def settings
|
112
|
+
@settings ||= Settings.new(data_store.settings(collection_name))
|
113
|
+
end
|
114
|
+
|
115
|
+
def apply_settings!
|
116
|
+
settings.apply!(:data_store => data_store,
|
117
|
+
:collection_name => collection_name)
|
118
|
+
end
|
119
|
+
|
102
120
|
def _build_finder_methods(attribute)
|
103
121
|
eigenclass = class << self; self; end
|
104
122
|
eigenclass.class_eval do
|
@@ -114,8 +132,8 @@ module Curator
|
|
114
132
|
def _find_by_attribute(attribute, value)
|
115
133
|
if results = data_store.find_by_attribute(collection_name, attribute, value)
|
116
134
|
results.map do |hash|
|
117
|
-
_deserialize(hash[:key], hash[:data])
|
118
|
-
end
|
135
|
+
_deserialize(hash[:key], hash[:data]) if hash
|
136
|
+
end.compact
|
119
137
|
end
|
120
138
|
end
|
121
139
|
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'curator/repository'
|
2
|
+
require 'active_support/core_ext/hash/indifferent_access'
|
3
|
+
|
4
|
+
module Curator
|
5
|
+
module Repository
|
6
|
+
class Settings
|
7
|
+
attr_reader :all, :changed
|
8
|
+
alias_method :to_hash, :all
|
9
|
+
|
10
|
+
def initialize(current_settings = {})
|
11
|
+
@all = HashWithIndifferentAccess.new(current_settings)
|
12
|
+
clear_dirty!
|
13
|
+
end
|
14
|
+
|
15
|
+
def set(property, value)
|
16
|
+
original_value = all[property]
|
17
|
+
unless value == original_value
|
18
|
+
all[property] = value
|
19
|
+
changed[property] = value
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def enable(property)
|
24
|
+
set(property, true)
|
25
|
+
end
|
26
|
+
|
27
|
+
def disable(property)
|
28
|
+
set(property, false)
|
29
|
+
end
|
30
|
+
|
31
|
+
def [](property)
|
32
|
+
all[property]
|
33
|
+
end
|
34
|
+
|
35
|
+
def uncommitted?
|
36
|
+
changed.any?
|
37
|
+
end
|
38
|
+
|
39
|
+
def clear_dirty!
|
40
|
+
@changed = HashWithIndifferentAccess.new
|
41
|
+
end
|
42
|
+
|
43
|
+
def apply!(opts = {})
|
44
|
+
data_store = opts.fetch(:data_store)
|
45
|
+
collection_name = opts.fetch(:collection_name)
|
46
|
+
clear_dirty! if data_store.update_settings!(collection_name, changed)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -26,13 +26,22 @@ module Curator
|
|
26
26
|
client.ping
|
27
27
|
end
|
28
28
|
|
29
|
+
def settings(bucket_name)
|
30
|
+
_bucket(bucket_name).props.dup.freeze
|
31
|
+
end
|
32
|
+
|
33
|
+
def update_settings!(bucket_name, updated_settings)
|
34
|
+
return true if updated_settings.empty?
|
35
|
+
_bucket(bucket_name).props = updated_settings
|
36
|
+
end
|
37
|
+
|
29
38
|
def save(options)
|
30
39
|
bucket = _bucket(options[:collection_name])
|
31
40
|
object = ::Riak::RObject.new(bucket, options[:key])
|
32
41
|
object.content_type = options.fetch(:content_type, "application/json")
|
33
42
|
object.data = options[:value]
|
34
43
|
options.fetch(:index, {}).each do |index_name, index_data|
|
35
|
-
object.indexes["#{index_name}_bin"]
|
44
|
+
object.indexes["#{index_name}_bin"].merge(Array(index_data))
|
36
45
|
end
|
37
46
|
result = object.store
|
38
47
|
result.key
|
@@ -48,7 +57,7 @@ module Curator
|
|
48
57
|
begin
|
49
58
|
object = bucket.get(key)
|
50
59
|
{ :key => object.key, :data => _deserialize(object.data) } unless object.data.empty?
|
51
|
-
rescue ::Riak::HTTPFailedRequest => failed_request
|
60
|
+
rescue ::Riak::HTTPFailedRequest, ::Riak::ProtobuffsFailedRequest => failed_request
|
52
61
|
raise failed_request unless failed_request.not_found?
|
53
62
|
end
|
54
63
|
end
|
@@ -60,7 +69,7 @@ module Curator
|
|
60
69
|
begin
|
61
70
|
keys = _find_key_by_index(bucket, index_name.to_s, query)
|
62
71
|
keys.map { |key| find_by_key(bucket_name, key) }
|
63
|
-
rescue ::Riak::HTTPFailedRequest => failed_request
|
72
|
+
rescue ::Riak::HTTPFailedRequest, ::Riak::ProtobuffsFailedRequest => failed_request
|
64
73
|
raise failed_request unless failed_request.not_found?
|
65
74
|
end
|
66
75
|
end
|
@@ -83,14 +92,6 @@ module Curator
|
|
83
92
|
def _find_key_by_index(bucket, index_name, query)
|
84
93
|
bucket.get_index("#{index_name}_bin", query)
|
85
94
|
end
|
86
|
-
|
87
|
-
def _normalized_index_data(index_data)
|
88
|
-
if index_data.is_a?(Array)
|
89
|
-
index_data.join(", ")
|
90
|
-
else
|
91
|
-
index_data
|
92
|
-
end
|
93
|
-
end
|
94
95
|
end
|
95
96
|
end
|
96
97
|
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module Curator
|
2
|
+
class SettingsUpdater
|
3
|
+
attr_reader :repositories
|
4
|
+
attr_accessor :counter
|
5
|
+
|
6
|
+
def initialize(repositories = Curator.repositories, options = {})
|
7
|
+
@repositories = repositories
|
8
|
+
@verbose = options.fetch(:verbose, true)
|
9
|
+
@logger = options.fetch(:logger, STDOUT)
|
10
|
+
@counter = 0
|
11
|
+
end
|
12
|
+
|
13
|
+
def run!
|
14
|
+
announce "Preparing to apply settings to all repositories..."
|
15
|
+
repositories.each do |repository|
|
16
|
+
next unless repository.settings_uncommitted?
|
17
|
+
announce " * Updating settings for #{repository}...", :finish => false,
|
18
|
+
:header => false
|
19
|
+
if repository.apply_settings!
|
20
|
+
finish
|
21
|
+
else
|
22
|
+
finish "Failed."
|
23
|
+
end
|
24
|
+
self.counter += 1
|
25
|
+
end
|
26
|
+
complete!
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
attr_reader :logger
|
31
|
+
|
32
|
+
def complete!
|
33
|
+
if any_run?
|
34
|
+
announce "Done!"
|
35
|
+
else
|
36
|
+
announce "Nothing to do."
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def announce(msg, options = {})
|
41
|
+
return unless verbose?
|
42
|
+
finish = options.fetch(:finish, true)
|
43
|
+
header = options.fetch(:header, true)
|
44
|
+
logger.write "[Curator] " if header
|
45
|
+
logger.write msg
|
46
|
+
logger.write "\n" if finish
|
47
|
+
end
|
48
|
+
|
49
|
+
def finish(msg = "Done!")
|
50
|
+
return unless verbose?
|
51
|
+
logger.write " #{msg}\n"
|
52
|
+
end
|
53
|
+
|
54
|
+
def verbose?
|
55
|
+
@verbose
|
56
|
+
end
|
57
|
+
|
58
|
+
def any_run?
|
59
|
+
counter > 0
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
metadata
CHANGED
@@ -1,86 +1,78 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: curator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.11.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Braintree
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-10-30 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: activesupport
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 3.0.0
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: 3.0.0
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: activemodel
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - ">="
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: 3.0.0
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - ">="
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: 3.0.0
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: json
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - ">="
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - ">="
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: riak-client
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - "~>"
|
68
60
|
- !ruby/object:Gem::Version
|
69
|
-
version: 1.
|
61
|
+
version: 1.4.3
|
70
62
|
type: :runtime
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - "~>"
|
76
67
|
- !ruby/object:Gem::Version
|
77
|
-
version: 1.
|
68
|
+
version: 1.4.3
|
78
69
|
description: Model and repository framework
|
79
70
|
email: code@getbraintree.com
|
80
71
|
executables: []
|
81
72
|
extensions: []
|
82
73
|
extra_rdoc_files: []
|
83
74
|
files:
|
75
|
+
- lib/curator.rb
|
84
76
|
- lib/curator/configuration.rb
|
85
77
|
- lib/curator/memory/configuration.rb
|
86
78
|
- lib/curator/memory/data_store.rb
|
@@ -91,43 +83,38 @@ files:
|
|
91
83
|
- lib/curator/mongo/data_store.rb
|
92
84
|
- lib/curator/railtie.rb
|
93
85
|
- lib/curator/repository.rb
|
86
|
+
- lib/curator/repository/settings.rb
|
94
87
|
- lib/curator/resettable_riak/configuration.rb
|
95
88
|
- lib/curator/resettable_riak/data_store.rb
|
96
89
|
- lib/curator/riak/configuration.rb
|
97
90
|
- lib/curator/riak/data_store.rb
|
98
|
-
- lib/curator.rb
|
91
|
+
- lib/curator/settings_updater.rb
|
99
92
|
- lib/rails/generators/curator/model/model_generator.rb
|
100
93
|
- lib/rails/generators/curator/model/templates/model.rb
|
101
94
|
- lib/rails/generators/curator/repository/repository_generator.rb
|
102
95
|
- lib/rails/generators/curator/repository/templates/repository.rb
|
103
96
|
homepage: http://github.com/braintree/curator
|
104
|
-
licenses:
|
97
|
+
licenses:
|
98
|
+
- MIT
|
99
|
+
metadata: {}
|
105
100
|
post_install_message:
|
106
101
|
rdoc_options: []
|
107
102
|
require_paths:
|
108
103
|
- lib
|
109
104
|
required_ruby_version: !ruby/object:Gem::Requirement
|
110
|
-
none: false
|
111
105
|
requirements:
|
112
|
-
- -
|
106
|
+
- - ">="
|
113
107
|
- !ruby/object:Gem::Version
|
114
108
|
version: '0'
|
115
|
-
segments:
|
116
|
-
- 0
|
117
|
-
hash: 12316657956024539
|
118
109
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
119
|
-
none: false
|
120
110
|
requirements:
|
121
|
-
- -
|
111
|
+
- - ">="
|
122
112
|
- !ruby/object:Gem::Version
|
123
113
|
version: '0'
|
124
|
-
segments:
|
125
|
-
- 0
|
126
|
-
hash: 12316657956024539
|
127
114
|
requirements: []
|
128
115
|
rubyforge_project:
|
129
|
-
rubygems_version:
|
116
|
+
rubygems_version: 2.2.1
|
130
117
|
signing_key:
|
131
|
-
specification_version:
|
118
|
+
specification_version: 4
|
132
119
|
summary: Model and repository framework
|
133
120
|
test_files: []
|