durable_decorator 0.0.6 → 0.0.8
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.
@@ -22,7 +22,7 @@ module DurableDecorator
|
|
22
22
|
return unless old_method = existing_method(clazz, method_name, meta, &block)
|
23
23
|
|
24
24
|
alias_original clazz, method_name
|
25
|
-
alias_definitions clazz, method_name, method_sha(old_method)
|
25
|
+
alias_definitions clazz, method_name, Util.method_sha(old_method)
|
26
26
|
redefine_method clazz, method_name, &block
|
27
27
|
|
28
28
|
store_redefinition clazz, method_name, old_method, block
|
@@ -42,14 +42,10 @@ module DurableDecorator
|
|
42
42
|
def validate_decoration_meta clazz, method_name, old_method, meta
|
43
43
|
return unless meta
|
44
44
|
|
45
|
-
chill_meta =
|
46
|
-
meta.each do |k,v|
|
47
|
-
chill_meta[k.to_sym] = v
|
48
|
-
end
|
45
|
+
chill_meta = Util.symbolized_hash(meta)
|
49
46
|
|
50
47
|
raise InvalidDecorationError, "The hash provided to the decorator is invalid" unless DECORATION_MODES.include? chill_meta[:mode] and chill_meta[:sha] and !chill_meta[:sha].empty?
|
51
|
-
|
52
|
-
raise TamperedDefinitionError, "Method SHA mismatch, the definition has been tampered with" unless method_sha(old_method) == chill_meta[:sha]
|
48
|
+
raise TamperedDefinitionError, "Method SHA mismatch, the definition has been tampered with" unless Util.method_sha(old_method) == chill_meta[:sha]
|
53
49
|
end
|
54
50
|
|
55
51
|
def validate_method_arity clazz, method_name, old_method, &block
|
@@ -90,63 +86,35 @@ module DurableDecorator
|
|
90
86
|
end
|
91
87
|
end
|
92
88
|
|
93
|
-
def class_name clazz
|
94
|
-
name = clazz.name || ''
|
95
|
-
name = clazz.to_s if name.empty?
|
96
|
-
name.to_sym
|
97
|
-
end
|
98
|
-
|
99
|
-
def full_method_name clazz, method_name
|
100
|
-
"#{class_name(clazz)}##{method_name}"
|
101
|
-
end
|
102
89
|
|
103
90
|
def original_redefinition? clazz, method_name
|
104
|
-
!REDEFINITIONS[full_method_name(clazz, method_name)]
|
91
|
+
!REDEFINITIONS[Util.full_method_name(clazz, method_name)]
|
105
92
|
end
|
106
93
|
|
107
94
|
def store_redefinition clazz, name, old_method, new_method
|
108
|
-
methods = REDEFINITIONS[full_method_name(clazz, name)] ||= []
|
95
|
+
methods = REDEFINITIONS[Util.full_method_name(clazz, name)] ||= []
|
109
96
|
|
110
97
|
to_store = [new_method]
|
111
98
|
to_store.unshift(old_method) if original_redefinition?(clazz, name)
|
112
99
|
|
113
100
|
to_store.each do |method|
|
114
|
-
methods << method_hash(name, method)
|
101
|
+
methods << Util.method_hash(name, method)
|
115
102
|
end
|
116
103
|
|
117
104
|
true
|
118
105
|
end
|
119
106
|
|
120
|
-
def method_hash name, method
|
121
|
-
{
|
122
|
-
:name => name,
|
123
|
-
:sha => method_sha(method)
|
124
|
-
}
|
125
|
-
end
|
126
|
-
|
127
|
-
def method_sha method
|
128
|
-
Digest::SHA1.hexdigest(method.source.gsub(/\s+/, ' '))
|
129
|
-
end
|
130
|
-
|
131
107
|
def redefined? clazz, method_name, &block
|
132
108
|
begin
|
133
109
|
result =
|
134
110
|
overrides = REDEFINITIONS[clazz][method_name] and
|
135
|
-
overrides.select{|o| o == method_hash(method_name)}.first and
|
111
|
+
overrides.select{|o| o == Util.method_hash(method_name)}.first and
|
136
112
|
true
|
137
113
|
rescue
|
138
114
|
false
|
139
115
|
end
|
140
116
|
end
|
141
117
|
|
142
|
-
def logger
|
143
|
-
return @logger if @logger
|
144
|
-
|
145
|
-
@logger = Logging.logger(STDOUT)
|
146
|
-
@logger.level = :warn
|
147
|
-
@logger
|
148
|
-
end
|
149
|
-
|
150
118
|
def determine_sha target
|
151
119
|
raise "Please provide a fully qualified method name: Module::Clazz#instance_method or ::clazz_method" unless target.match(/\.|#/)
|
152
120
|
|
@@ -158,7 +126,7 @@ module DurableDecorator
|
|
158
126
|
clazz.method(method_name)
|
159
127
|
end
|
160
128
|
|
161
|
-
method_sha(method)
|
129
|
+
Util.method_sha(method)
|
162
130
|
end
|
163
131
|
end
|
164
132
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module DurableDecorator
|
2
|
+
class Util
|
3
|
+
class << self
|
4
|
+
def symbolized_hash hash
|
5
|
+
chill_hash = {}
|
6
|
+
|
7
|
+
hash.each do |k,v|
|
8
|
+
chill_hash[k.to_sym] = v
|
9
|
+
end
|
10
|
+
|
11
|
+
chill_hash
|
12
|
+
end
|
13
|
+
|
14
|
+
def class_name clazz
|
15
|
+
name = clazz.name || ''
|
16
|
+
name = clazz.to_s if name.empty?
|
17
|
+
name.to_sym
|
18
|
+
end
|
19
|
+
|
20
|
+
def full_method_name clazz, method_name
|
21
|
+
"#{class_name(clazz)}##{method_name}"
|
22
|
+
end
|
23
|
+
|
24
|
+
def method_hash name, method
|
25
|
+
{
|
26
|
+
:name => name,
|
27
|
+
:sha => method_sha(method)
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
def method_sha method
|
32
|
+
Digest::SHA1.hexdigest(method.source.gsub(/\s+/, ' '))
|
33
|
+
end
|
34
|
+
|
35
|
+
def logger
|
36
|
+
return @logger if @logger
|
37
|
+
|
38
|
+
@logger = Logging.logger(STDOUT)
|
39
|
+
@logger.level = :warn
|
40
|
+
@logger
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/durable_decorator.rb
CHANGED
@@ -41,32 +41,32 @@ describe DurableDecorator::Base do
|
|
41
41
|
|
42
42
|
context 'for double decorations' do
|
43
43
|
before do
|
44
|
-
@original_sha = DurableDecorator::Base.determine_sha("ExampleClass#one_param_method")
|
45
|
-
|
46
44
|
ExampleClass.class_eval do
|
47
45
|
durably_decorate :one_param_method do |another_string|
|
48
46
|
"#{one_param_method_935888f04d9e132be458591d5755cb8131fec457('check')} and #{another_string}"
|
49
47
|
end
|
50
48
|
end
|
51
|
-
|
52
|
-
@redef_sha = DurableDecorator::Base.determine_sha("ExampleClass#one_param_method")
|
53
49
|
end
|
54
50
|
|
55
51
|
it 'works with explicit method version invocation' do
|
56
52
|
ExampleClass.class_eval do
|
57
53
|
durably_decorate :one_param_method do |boolean|
|
58
54
|
if boolean
|
59
|
-
one_param_method_original("
|
55
|
+
one_param_method_original("older")
|
60
56
|
else
|
61
|
-
|
57
|
+
# ugly hack due to inconsistent method_source behavior on 1.8.7
|
58
|
+
if /^ruby 1\.8\.7/ =~ RUBY_DESCRIPTION
|
59
|
+
one_param_method_0ec3("newer")
|
60
|
+
else
|
61
|
+
one_param_method_3c39("newer")
|
62
|
+
end
|
62
63
|
end
|
63
64
|
end
|
64
65
|
end
|
65
66
|
|
66
67
|
instance = ExampleClass.new
|
67
|
-
instance.one_param_method(true).should == "original:
|
68
|
-
instance.one_param_method(false).should == '
|
69
|
-
@original_sha.should_not == @redef_sha
|
68
|
+
instance.one_param_method(true).should == "original: older"
|
69
|
+
instance.one_param_method(false).should == 'original: check and newer'
|
70
70
|
end
|
71
71
|
|
72
72
|
it 'work with short explicit method version invocation' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: durable_decorator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
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: 2013-06-
|
12
|
+
date: 2013-06-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: method_source
|
@@ -129,6 +129,7 @@ files:
|
|
129
129
|
- lib/durable_decorator/invalid_decoration_error.rb
|
130
130
|
- lib/durable_decorator/tampered_definition_error.rb
|
131
131
|
- lib/durable_decorator/undefined_method_error.rb
|
132
|
+
- lib/durable_decorator/util.rb
|
132
133
|
- lib/durable_decorator/version.rb
|
133
134
|
- spec/durable_decorator_spec.rb
|
134
135
|
- spec/example_class.rb
|