genghis 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +5 -0
- data/lib/genghis.rb +41 -11
- metadata +11 -4
data/README.rdoc
CHANGED
@@ -37,6 +37,11 @@ If you are using replica pairs, the configuration varies somewhat.
|
|
37
37
|
databases:
|
38
38
|
paperclip : 'paperclip_files'
|
39
39
|
...
|
40
|
+
authorization:
|
41
|
+
paperclip:
|
42
|
+
username: pc
|
43
|
+
password: secretpassword
|
44
|
+
...
|
40
45
|
connection_options:
|
41
46
|
max_retries: 7
|
42
47
|
pool_size: 5
|
data/lib/genghis.rb
CHANGED
@@ -5,15 +5,17 @@ class Genghis
|
|
5
5
|
include Mongo
|
6
6
|
|
7
7
|
def self.config=(path)
|
8
|
-
puts "Setting config to #{path}"
|
9
8
|
@@config_file = path
|
10
9
|
end
|
11
10
|
|
12
11
|
def self.environment=(environment = :development)
|
13
12
|
yaml = YAML.load_file(config_file)
|
13
|
+
puts "YAML: #{yaml.inspect}"
|
14
14
|
@@config = yaml[environment.to_s]
|
15
15
|
@@config.each do |k, v|
|
16
|
+
|
16
17
|
self.class.instance_eval do
|
18
|
+
v = HashWithConsistentAccess.new(v) if v.is_a?(::Hash)
|
17
19
|
define_method(k.to_sym){v}
|
18
20
|
end
|
19
21
|
end
|
@@ -66,7 +68,7 @@ class Genghis
|
|
66
68
|
if self.servers.is_a? Hash
|
67
69
|
servers = self.servers
|
68
70
|
servers = [parse_host(servers['left']), parse_host(servers['right'])]
|
69
|
-
connection = Connection.
|
71
|
+
connection = Connection.multi(servers, opts)
|
70
72
|
else
|
71
73
|
host, port = parse_host(self.servers)
|
72
74
|
connection = Connection.new(host, port, opts)
|
@@ -81,7 +83,7 @@ class Genghis
|
|
81
83
|
end
|
82
84
|
|
83
85
|
def self.symbolize_keys(hash)
|
84
|
-
hash.inject({}){|memo, (k, v)| memo[k.to_sym] = v; memo}
|
86
|
+
hash.inject({}) { |memo, (k, v)| memo[k.to_sym] = v; memo }
|
85
87
|
end
|
86
88
|
|
87
89
|
|
@@ -105,9 +107,9 @@ class Genghis
|
|
105
107
|
@@protected_classes.include? clazz
|
106
108
|
end
|
107
109
|
|
108
|
-
def method_missing(method, *args, &block)
|
110
|
+
def method_missing(method, * args, & block)
|
109
111
|
protect_from_exception do
|
110
|
-
Guardian.make_safe(@protected_class.__send__(method, *args, &block))
|
112
|
+
Guardian.make_safe(@protected_class.__send__(method, * args, & block))
|
111
113
|
end
|
112
114
|
end
|
113
115
|
|
@@ -119,7 +121,7 @@ class Genghis
|
|
119
121
|
true
|
120
122
|
end
|
121
123
|
|
122
|
-
def protect_from_exception(&block)
|
124
|
+
def protect_from_exception(& block)
|
123
125
|
success = false
|
124
126
|
max_retries = Genghis.max_retries
|
125
127
|
retries = 0
|
@@ -148,14 +150,41 @@ class Genghis
|
|
148
150
|
end
|
149
151
|
end
|
150
152
|
|
153
|
+
class HashWithConsistentAccess
|
154
|
+
|
155
|
+
def initialize(proxied={})
|
156
|
+
@proxied = proxied.inject({}) do |memo, (k, v)|
|
157
|
+
memo[k.to_s] = v
|
158
|
+
memo
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
|
163
|
+
def []=(key, value)
|
164
|
+
@proxied[key.to_s] = value
|
165
|
+
end
|
166
|
+
|
167
|
+
def [](key)
|
168
|
+
@proxied[key.to_s]
|
169
|
+
end
|
170
|
+
|
171
|
+
def key?(key)
|
172
|
+
@proxied.key?(key.to_s)
|
173
|
+
end
|
174
|
+
|
175
|
+
def inspect
|
176
|
+
@proxied.inspect
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
151
180
|
|
152
181
|
class Guardian
|
153
182
|
alias_method :old_class, :class
|
154
|
-
instance_methods.each { |m| undef_method m unless m =~ /^__|^old/}
|
183
|
+
instance_methods.each { |m| undef_method m unless m =~ /^__|^old/ }
|
155
184
|
|
156
185
|
include ProxyMethods
|
157
186
|
|
158
|
-
def initialize(*args)
|
187
|
+
def initialize(* args)
|
159
188
|
|
160
189
|
opts = args.extract_options!
|
161
190
|
if opts.empty?
|
@@ -196,10 +225,10 @@ class Genghis
|
|
196
225
|
end
|
197
226
|
|
198
227
|
|
199
|
-
def method_missing(method, *args, &block)
|
228
|
+
def method_missing(method, * args, & block)
|
200
229
|
return true if method == :safe?
|
201
230
|
self.old_class.protect_from_exception do
|
202
|
-
Guardian.make_safe(@protected.__send__(method, *args, &block))
|
231
|
+
Guardian.make_safe(@protected.__send__(method, * args, & block))
|
203
232
|
end
|
204
233
|
end
|
205
234
|
|
@@ -213,4 +242,5 @@ class Genghis
|
|
213
242
|
end
|
214
243
|
end
|
215
244
|
|
216
|
-
|
245
|
+
|
246
|
+
end
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: genghis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 17
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 1
|
7
8
|
- 0
|
8
|
-
-
|
9
|
-
version: 1.0.
|
9
|
+
- 3
|
10
|
+
version: 1.0.3
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Steve Cohen
|
@@ -14,16 +15,18 @@ autorequire: genghis
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2010-
|
18
|
+
date: 2010-08-31 00:00:00 -07:00
|
18
19
|
default_executable:
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
22
|
name: mongo
|
22
23
|
prerelease: false
|
23
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
24
26
|
requirements:
|
25
27
|
- - ">="
|
26
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 45
|
27
30
|
segments:
|
28
31
|
- 0
|
29
32
|
- 19
|
@@ -51,23 +54,27 @@ rdoc_options: []
|
|
51
54
|
require_paths:
|
52
55
|
- lib
|
53
56
|
required_ruby_version: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
54
58
|
requirements:
|
55
59
|
- - ">="
|
56
60
|
- !ruby/object:Gem::Version
|
61
|
+
hash: 3
|
57
62
|
segments:
|
58
63
|
- 0
|
59
64
|
version: "0"
|
60
65
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
61
67
|
requirements:
|
62
68
|
- - ">="
|
63
69
|
- !ruby/object:Gem::Version
|
70
|
+
hash: 3
|
64
71
|
segments:
|
65
72
|
- 0
|
66
73
|
version: "0"
|
67
74
|
requirements: []
|
68
75
|
|
69
76
|
rubyforge_project:
|
70
|
-
rubygems_version: 1.3.
|
77
|
+
rubygems_version: 1.3.7
|
71
78
|
signing_key:
|
72
79
|
specification_version: 3
|
73
80
|
summary: Genghis is a mongoDB configuration and resilience framework
|