durable_decorator 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +0 -1
- data/README.md +14 -8
- data/durable_decorator.gemspec +2 -0
- data/lib/durable_decorator/base.rb +4 -4
- data/lib/durable_decorator/validator.rb +3 -1
- data/lib/durable_decorator/version.rb +1 -1
- data/spec/durable_decorator_spec.rb +23 -28
- metadata +3 -3
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -24,6 +24,12 @@ And then execute:
|
|
24
24
|
|
25
25
|
$ bundle
|
26
26
|
|
27
|
+
## UPGRADING
|
28
|
+
|
29
|
+
Prior to Version 0.2.0 original methods would have a suffix of original or SHA. A recent change has been made to
|
30
|
+
use prefix rather than suffix in order to be compatible with example! and example? methods. Please review your durably decorated
|
31
|
+
methods when upgrading to Version 0.2.0.
|
32
|
+
|
27
33
|
## Usage
|
28
34
|
|
29
35
|
```ruby
|
@@ -35,7 +41,7 @@ end
|
|
35
41
|
|
36
42
|
ExampleClass.class_eval do
|
37
43
|
durably_decorate :string_method do
|
38
|
-
|
44
|
+
original_string_method + " and new"
|
39
45
|
end
|
40
46
|
end
|
41
47
|
|
@@ -65,7 +71,7 @@ DurableDecorator::Base.determine_sha('ExampleClass#no_param_method')
|
|
65
71
|
|
66
72
|
ExampleClass.class_eval do
|
67
73
|
durably_decorate :string_method, mode: 'strict', sha: 'WRONG-SHA-123456' do
|
68
|
-
|
74
|
+
original_string_method + " and new"
|
69
75
|
end
|
70
76
|
end
|
71
77
|
|
@@ -83,7 +89,7 @@ end
|
|
83
89
|
|
84
90
|
ExampleClass.class_eval do
|
85
91
|
durably_decorate :string_method, mode: 'strict', sha: 'ba3114b2d46caa684b3f7ba38d6f74b2' do |text|
|
86
|
-
|
92
|
+
original_string_method(text) + " and new"
|
87
93
|
end
|
88
94
|
end
|
89
95
|
|
@@ -92,7 +98,7 @@ instance.string_method('test')
|
|
92
98
|
# => "original test and new"
|
93
99
|
```
|
94
100
|
|
95
|
-
DurableDecorator also maintains explicit versions of each method overriden by creating aliases with appended SHAs of the form ```some_method_1234abcd``` so you can always target explicit method versions without relying on ```
|
101
|
+
DurableDecorator also maintains explicit versions of each method overriden by creating aliases with appended SHAs of the form ```some_method_1234abcd``` so you can always target explicit method versions without relying on ```original_some_method```.
|
96
102
|
|
97
103
|
DurableDecorator maintains 3 versions of aliases to previous method versions, 2 of which are short-SHA versions, akin to Github:
|
98
104
|
```ruby
|
@@ -106,14 +112,14 @@ ExampleClass.class_eval do
|
|
106
112
|
end
|
107
113
|
|
108
114
|
# 3 explicit aliases preserve access to the original method based on it's original SHA:
|
109
|
-
# 4-char SHA, 6-char SHA and the full SHA
|
115
|
+
# 4-char SHA, 6-char SHA and the full SHA prefix
|
110
116
|
|
111
117
|
instance = ExampleClass.new
|
112
|
-
instance.
|
118
|
+
instance._ba31_string_method
|
113
119
|
# => "original"
|
114
|
-
instance.
|
120
|
+
instance._ba3114_string_method
|
115
121
|
# => "original"
|
116
|
-
instance.
|
122
|
+
instance._ba3114b2d46caa684b3f7ba38d6f74b2_string_method
|
117
123
|
# => "original"
|
118
124
|
```
|
119
125
|
|
data/durable_decorator.gemspec
CHANGED
@@ -51,9 +51,9 @@ module DurableDecorator
|
|
51
51
|
|
52
52
|
def alias_definitions clazz, method_name, old_sha
|
53
53
|
clazz.class_eval do
|
54
|
-
alias_method("#{
|
55
|
-
alias_method("
|
56
|
-
alias_method("
|
54
|
+
alias_method("_#{old_sha}_#{method_name}", method_name)
|
55
|
+
alias_method("_#{old_sha[0..3]}_#{method_name}", method_name)
|
56
|
+
alias_method("_#{old_sha[0..5]}_#{method_name}", method_name)
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
@@ -61,7 +61,7 @@ module DurableDecorator
|
|
61
61
|
return unless original_redefinition? clazz, method_name
|
62
62
|
|
63
63
|
clazz.class_eval do
|
64
|
-
alias_method("#{method_name}
|
64
|
+
alias_method("original_#{method_name}", method_name)
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
@@ -16,7 +16,9 @@ module DurableDecorator
|
|
16
16
|
provided_sha = chill_meta[:sha]
|
17
17
|
|
18
18
|
raise InvalidDecorationError, "The :mode provided is invalid. Possible modes are: #{DECORATION_MODES.join(", ")}" unless DECORATION_MODES.include? provided_mode
|
19
|
-
|
19
|
+
if provided_mode == 'strict'
|
20
|
+
raise InvalidDecorationError, "The SHA provided appears to be empty" unless provided_sha and !provided_sha.empty?
|
21
|
+
end
|
20
22
|
send("handle_#{chill_meta[:mode]}_fault", clazz, method_name, expected_sha, provided_sha) unless expected_sha == provided_sha
|
21
23
|
end
|
22
24
|
|
@@ -5,10 +5,10 @@ describe DurableDecorator::Base do
|
|
5
5
|
context 'with classes' do
|
6
6
|
# Spec uses ./example_class.rb
|
7
7
|
context 'for existing instance methods' do
|
8
|
-
it 'guarantees access to #
|
8
|
+
it 'guarantees access to #original_method' do
|
9
9
|
ExampleClass.class_eval do
|
10
10
|
durably_decorate :no_param_method do
|
11
|
-
|
11
|
+
original_no_param_method + " and a new string"
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
@@ -27,10 +27,10 @@ describe DurableDecorator::Base do
|
|
27
27
|
end
|
28
28
|
|
29
29
|
context 'for methods with parameters' do
|
30
|
-
it 'guarantees access to #
|
30
|
+
it 'guarantees access to #original_method' do
|
31
31
|
ExampleClass.class_eval do
|
32
32
|
durably_decorate :one_param_method do |another_string|
|
33
|
-
"#{
|
33
|
+
"#{original_one_param_method('check')} and #{another_string}"
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -43,7 +43,7 @@ describe DurableDecorator::Base do
|
|
43
43
|
before do
|
44
44
|
ExampleClass.class_eval do
|
45
45
|
durably_decorate :one_param_method do |another_string|
|
46
|
-
"#{
|
46
|
+
"#{_935888f04d9e132be458591d5755cb8131fec457_one_param_method('check')} and #{another_string}"
|
47
47
|
end
|
48
48
|
end
|
49
49
|
end
|
@@ -52,14 +52,9 @@ describe DurableDecorator::Base do
|
|
52
52
|
ExampleClass.class_eval do
|
53
53
|
durably_decorate :one_param_method do |boolean|
|
54
54
|
if boolean
|
55
|
-
|
55
|
+
original_one_param_method("older")
|
56
56
|
else
|
57
|
-
|
58
|
-
if /^ruby 1\.8\.7/ =~ RUBY_DESCRIPTION
|
59
|
-
one_param_method_0ec3("newer")
|
60
|
-
else
|
61
|
-
one_param_method_3c39("newer")
|
62
|
-
end
|
57
|
+
_b844_one_param_method("newer")
|
63
58
|
end
|
64
59
|
end
|
65
60
|
end
|
@@ -71,8 +66,8 @@ describe DurableDecorator::Base do
|
|
71
66
|
|
72
67
|
it 'work with short explicit method version invocation' do
|
73
68
|
instance = ExampleClass.new
|
74
|
-
instance.
|
75
|
-
instance.
|
69
|
+
instance._9358_one_param_method('').should == "original: "
|
70
|
+
instance._935888_one_param_method('').should == "original: "
|
76
71
|
end
|
77
72
|
|
78
73
|
it 'maintains history of decorations' do
|
@@ -89,7 +84,7 @@ describe DurableDecorator::Base do
|
|
89
84
|
:sha => 'd54f9c7ea2038fac0ae2ff9af49c56f35761725d'
|
90
85
|
}
|
91
86
|
durably_decorate :no_param_method, meta do
|
92
|
-
|
87
|
+
original_no_param_method + " and a new string"
|
93
88
|
end
|
94
89
|
end
|
95
90
|
|
@@ -107,7 +102,7 @@ describe DurableDecorator::Base do
|
|
107
102
|
:sha => '1234wrong'
|
108
103
|
}
|
109
104
|
durably_decorate :no_param_method, meta do
|
110
|
-
|
105
|
+
original_no_param_method + " and a new string"
|
111
106
|
end
|
112
107
|
end
|
113
108
|
}.should raise_error(DurableDecorator::TamperedDefinitionError)
|
@@ -122,7 +117,7 @@ describe DurableDecorator::Base do
|
|
122
117
|
:mode => 'strict'
|
123
118
|
}
|
124
119
|
durably_decorate :no_param_method, meta do
|
125
|
-
|
120
|
+
original_no_param_method + " and a new string"
|
126
121
|
end
|
127
122
|
end
|
128
123
|
}.should raise_error(DurableDecorator::InvalidDecorationError)
|
@@ -132,14 +127,14 @@ describe DurableDecorator::Base do
|
|
132
127
|
|
133
128
|
context 'for soft definitions' do
|
134
129
|
context 'with the correct SHA' do
|
135
|
-
it 'guarantees access to #
|
130
|
+
it 'guarantees access to #original_method' do
|
136
131
|
ExampleClass.class_eval do
|
137
132
|
meta = {
|
138
133
|
:mode => 'soft',
|
139
134
|
:sha => 'd54f9c7ea2038fac0ae2ff9af49c56f35761725d'
|
140
135
|
}
|
141
136
|
durably_decorate :no_param_method, meta do
|
142
|
-
|
137
|
+
original_no_param_method + " and a new string"
|
143
138
|
end
|
144
139
|
end
|
145
140
|
|
@@ -156,7 +151,7 @@ describe DurableDecorator::Base do
|
|
156
151
|
:sha => '1234wrong'
|
157
152
|
}
|
158
153
|
durably_decorate :no_param_method, meta do
|
159
|
-
|
154
|
+
original_no_param_method + " and a new string"
|
160
155
|
end
|
161
156
|
end
|
162
157
|
@log_output.readline.should match(/invalid SHA/)
|
@@ -179,10 +174,10 @@ describe DurableDecorator::Base do
|
|
179
174
|
lambda{
|
180
175
|
ExampleClass.class_eval do
|
181
176
|
meta = {
|
182
|
-
:mode => '
|
177
|
+
:mode => 'strict'
|
183
178
|
}
|
184
179
|
durably_decorate :no_param_method, meta do
|
185
|
-
|
180
|
+
original_no_param_method + " and a new string"
|
186
181
|
end
|
187
182
|
end
|
188
183
|
}.should raise_error(DurableDecorator::InvalidDecorationError)
|
@@ -202,10 +197,10 @@ describe DurableDecorator::Base do
|
|
202
197
|
end
|
203
198
|
|
204
199
|
context 'for existing class methods' do
|
205
|
-
it 'guarantees access to ::
|
200
|
+
it 'guarantees access to ::original_method' do
|
206
201
|
ExampleClass.class_eval do
|
207
202
|
durably_decorate_singleton :clazz_level do
|
208
|
-
|
203
|
+
original_clazz_level + " and a new string"
|
209
204
|
end
|
210
205
|
end
|
211
206
|
|
@@ -223,10 +218,10 @@ describe DurableDecorator::Base do
|
|
223
218
|
end
|
224
219
|
|
225
220
|
context 'for methods with parameters' do
|
226
|
-
it 'guarantees access to ::
|
221
|
+
it 'guarantees access to ::original_method' do
|
227
222
|
ExampleClass.class_eval do
|
228
223
|
durably_decorate_singleton :clazz_level_paramed do |another_string|
|
229
|
-
"#{
|
224
|
+
"#{original_clazz_level_paramed('check')} and #{another_string}"
|
230
225
|
end
|
231
226
|
end
|
232
227
|
|
@@ -249,10 +244,10 @@ describe DurableDecorator::Base do
|
|
249
244
|
context 'with modules' do
|
250
245
|
# Spec uses ./sample_module.rb
|
251
246
|
context 'for existing methods' do
|
252
|
-
it 'guarantees access to #
|
247
|
+
it 'guarantees access to #original_method' do
|
253
248
|
Sample.class_eval do
|
254
249
|
durably_decorate :module_method do
|
255
|
-
|
250
|
+
original_module_method + " and a new string"
|
256
251
|
end
|
257
252
|
end
|
258
253
|
|
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.
|
4
|
+
version: 0.2.0
|
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-
|
12
|
+
date: 2013-09-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: method_source
|
@@ -133,7 +133,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
133
133
|
requirements:
|
134
134
|
- - ! '>='
|
135
135
|
- !ruby/object:Gem::Version
|
136
|
-
version:
|
136
|
+
version: 1.9.2
|
137
137
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
138
138
|
none: false
|
139
139
|
requirements:
|