durable_decorator 0.1.2 → 0.2.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.
- 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:
|