rspec-core 2.4.0 → 2.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/Gemfile +9 -4
- data/Guardfile +3 -3
- data/README.md +1 -1
- data/features/.nav +7 -2
- data/features/{README.markdown → Autotest.md} +17 -20
- data/features/Changelog.md +57 -2
- data/features/README.md +17 -0
- data/features/Upgrade.md +8 -66
- data/features/command_line/configure.feature +2 -2
- data/features/command_line/example_name_option.feature +10 -10
- data/features/command_line/exit_status.feature +4 -4
- data/features/command_line/line_number_appended_to_path.feature +11 -11
- data/features/command_line/line_number_option.feature +9 -9
- data/features/command_line/tag.feature +9 -9
- data/features/configuration/custom_settings.feature +3 -3
- data/features/configuration/fail_fast.feature +3 -3
- data/features/configuration/read_options_from_file.feature +4 -4
- data/features/example_groups/shared_example_group.feature +4 -4
- data/features/expectation_framework_integration/configure_expectation_framework.feature +8 -9
- data/features/filtering/exclusion_filters.feature +1 -1
- data/features/filtering/run_all_when_everything_filtered.feature +1 -1
- data/features/formatters/custom_formatter.feature +17 -13
- data/features/helper_methods/arbitrary_methods.feature +40 -0
- data/features/helper_methods/let.feature +50 -0
- data/features/hooks/before_and_after_hooks.feature +10 -10
- data/features/hooks/filtering.feature +37 -20
- data/features/metadata/described_class.feature +1 -1
- data/features/mock_framework_integration/use_flexmock.feature +1 -1
- data/features/mock_framework_integration/use_mocha.feature +1 -1
- data/features/mock_framework_integration/use_rr.feature +1 -1
- data/features/mock_framework_integration/use_rspec.feature +1 -1
- data/features/spec_files/arbitrary_file_suffix.feature +1 -1
- data/features/step_definitions/additional_cli_steps.rb +1 -1
- data/features/subject/attribute_of_subject.feature +2 -2
- data/features/subject/explicit_subject.feature +5 -5
- data/features/subject/implicit_receiver.feature +2 -2
- data/features/subject/implicit_subject.feature +2 -2
- data/lib/autotest/rspec2.rb +63 -13
- data/lib/rspec/core/configuration.rb +0 -1
- data/lib/rspec/core/configuration_options.rb +15 -12
- data/lib/rspec/core/example.rb +14 -6
- data/lib/rspec/core/example_group.rb +5 -4
- data/lib/rspec/core/formatters/base_formatter.rb +1 -1
- data/lib/rspec/core/formatters/documentation_formatter.rb +1 -1
- data/lib/rspec/core/formatters/html_formatter.rb +131 -32
- data/lib/rspec/core/formatters/snippet_extractor.rb +1 -1
- data/lib/rspec/core/hooks.rb +16 -1
- data/lib/rspec/core/option_parser.rb +6 -6
- data/lib/rspec/core/rake_task.rb +1 -1
- data/lib/rspec/core/subject.rb +7 -7
- data/lib/rspec/core/version.rb +1 -1
- data/rspec-core.gemspec +0 -12
- data/script/FullBuildRakeFile +63 -0
- data/script/cucumber +1 -0
- data/script/full_build +1 -0
- data/script/spec +1 -0
- data/spec/autotest/failed_results_re_spec.rb +22 -5
- data/spec/autotest/rspec_spec.rb +132 -16
- data/spec/rspec/core/configuration_options_spec.rb +38 -6
- data/spec/rspec/core/example_group_spec.rb +15 -64
- data/spec/rspec/core/formatters/base_formatter_spec.rb +23 -0
- data/spec/rspec/core/formatters/html_formatted-1.8.6.html +150 -48
- data/spec/rspec/core/formatters/html_formatted-1.8.7-jruby.html +151 -49
- data/spec/rspec/core/formatters/html_formatted-1.8.7.html +150 -48
- data/spec/rspec/core/formatters/html_formatted-1.9.1.html +150 -48
- data/spec/rspec/core/formatters/html_formatted-1.9.2.html +150 -48
- data/spec/rspec/core/formatters/text_mate_formatted-1.8.6.html +150 -48
- data/spec/rspec/core/formatters/text_mate_formatted-1.8.7-jruby.html +151 -49
- data/spec/rspec/core/formatters/text_mate_formatted-1.8.7.html +150 -48
- data/spec/rspec/core/formatters/text_mate_formatted-1.9.1.html +150 -48
- data/spec/rspec/core/formatters/text_mate_formatted-1.9.2.html +150 -48
- data/spec/rspec/core/hooks_filtering_spec.rb +49 -0
- data/spec/rspec/core/rake_task_spec.rb +3 -3
- data/spec/rspec/core/subject_spec.rb +81 -0
- metadata +20 -22
- data/History.markdown +0 -186
- data/Upgrade.markdown +0 -345
@@ -58,7 +58,8 @@ module RSpec
|
|
58
58
|
|
59
59
|
alias_example_to :it
|
60
60
|
alias_example_to :specify
|
61
|
-
alias_example_to :focused, :focused => true
|
61
|
+
alias_example_to :focused, :focused => true, :focus => true
|
62
|
+
alias_example_to :focus, :focused => true, :focus => true
|
62
63
|
alias_example_to :pending, :pending => true
|
63
64
|
alias_example_to :xit, :pending => true
|
64
65
|
|
@@ -172,14 +173,14 @@ module RSpec
|
|
172
173
|
def self.eval_before_alls(example_group_instance)
|
173
174
|
return if descendant_filtered_examples.empty?
|
174
175
|
assign_before_all_ivars(superclass.before_all_ivars, example_group_instance)
|
175
|
-
world.run_hook_filtered(:before, :all, self, example_group_instance)
|
176
|
+
world.run_hook_filtered(:before, :all, self, example_group_instance)
|
176
177
|
run_hook!(:before, :all, example_group_instance)
|
177
178
|
store_before_all_ivars(example_group_instance)
|
178
179
|
end
|
179
180
|
|
180
181
|
def self.eval_around_eachs(example, initial_procsy)
|
181
182
|
example.around_hooks.reverse.inject(initial_procsy) do |procsy, around_hook|
|
182
|
-
Example
|
183
|
+
Example.procsy(procsy.metadata) do
|
183
184
|
example.example_group_instance.instance_eval_with_args(procsy, &around_hook)
|
184
185
|
end
|
185
186
|
end
|
@@ -212,7 +213,7 @@ An error occurred in an after(:all) hook.
|
|
212
213
|
EOS
|
213
214
|
end
|
214
215
|
|
215
|
-
world.run_hook_filtered(:after, :all, self, example_group_instance)
|
216
|
+
world.run_hook_filtered(:after, :all, self, example_group_instance)
|
216
217
|
end
|
217
218
|
|
218
219
|
def self.around_hooks_for(example)
|
@@ -121,7 +121,7 @@ module RSpec
|
|
121
121
|
file_path, line_number = matching_line.match(/(.+?):(\d+)(|:\d+)/)[1..2]
|
122
122
|
|
123
123
|
if File.exist?(file_path)
|
124
|
-
|
124
|
+
File.readlines(file_path)[line_number.to_i - 1]
|
125
125
|
else
|
126
126
|
"Unable to find #{file_path} to read failed line"
|
127
127
|
end
|
@@ -48,9 +48,9 @@ module RSpec
|
|
48
48
|
@output.puts " </dl>"
|
49
49
|
@output.puts "</div>"
|
50
50
|
end
|
51
|
-
@output.puts "<div class=\"example_group\">"
|
51
|
+
@output.puts "<div id=\"div_group_#{example_group_number}\" class=\"example_group passed\">"
|
52
52
|
@output.puts " <dl #{current_indentation}>"
|
53
|
-
@output.puts " <dt id=\"example_group_#{example_group_number}\">#{h(example_group.description)}</dt>"
|
53
|
+
@output.puts " <dt id=\"example_group_#{example_group_number}\" class=\"passed\">#{h(example_group.description)}</dt>"
|
54
54
|
@output.flush
|
55
55
|
end
|
56
56
|
|
@@ -67,24 +67,24 @@ module RSpec
|
|
67
67
|
|
68
68
|
def example_passed(example)
|
69
69
|
move_progress
|
70
|
-
@output.puts " <dd class=\"
|
70
|
+
@output.puts " <dd class=\"example passed\"><span class=\"passed_spec_name\">#{h(example.description)}</span></dd>"
|
71
71
|
@output.flush
|
72
72
|
end
|
73
73
|
|
74
74
|
def example_failed(example)
|
75
|
-
|
75
|
+
super(example)
|
76
76
|
exception = example.metadata[:execution_result][:exception]
|
77
77
|
extra = extra_failure_content(exception)
|
78
|
-
failure_style = 'failed'
|
79
78
|
failure_style = RSpec::Core::PendingExampleFixedError === exception ? 'pending_fixed' : 'failed'
|
80
79
|
@output.puts " <script type=\"text/javascript\">makeRed('rspec-header');</script>" unless @header_red
|
81
80
|
@header_red = true
|
81
|
+
@output.puts " <script type=\"text/javascript\">makeRed('div_group_#{example_group_number}');</script>" unless @example_group_red
|
82
82
|
@output.puts " <script type=\"text/javascript\">makeRed('example_group_#{example_group_number}');</script>" unless @example_group_red
|
83
83
|
@example_group_red = true
|
84
84
|
move_progress
|
85
|
-
@output.puts " <dd class=\"
|
85
|
+
@output.puts " <dd class=\"example #{failure_style}\">"
|
86
86
|
@output.puts " <span class=\"failed_spec_name\">#{h(example.description)}</span>"
|
87
|
-
@output.puts " <div class=\"failure\" id=\"failure_#{
|
87
|
+
@output.puts " <div class=\"failure\" id=\"failure_#{@failed_examples.size}\">"
|
88
88
|
@output.puts " <div class=\"message\"><pre>#{h(exception.message)}</pre></div>" unless exception.nil?
|
89
89
|
@output.puts " <div class=\"backtrace\"><pre>#{format_backtrace(exception.backtrace, example).join("\n")}</pre></div>" if exception
|
90
90
|
@output.puts extra unless extra == ""
|
@@ -96,9 +96,10 @@ module RSpec
|
|
96
96
|
def example_pending(example)
|
97
97
|
message = example.metadata[:execution_result][:pending_message]
|
98
98
|
@output.puts " <script type=\"text/javascript\">makeYellow('rspec-header');</script>" unless @header_red
|
99
|
+
@output.puts " <script type=\"text/javascript\">makeYellow('div_group_#{example_group_number}');</script>" unless @example_group_red
|
99
100
|
@output.puts " <script type=\"text/javascript\">makeYellow('example_group_#{example_group_number}');</script>" unless @example_group_red
|
100
101
|
move_progress
|
101
|
-
@output.puts " <dd class=\"
|
102
|
+
@output.puts " <dd class=\"example not_implemented\"><span class=\"not_implemented_spec_name\">#{h(example.description)} (PENDING: #{h(message)})</span></dd>"
|
102
103
|
@output.flush
|
103
104
|
end
|
104
105
|
|
@@ -135,7 +136,8 @@ module RSpec
|
|
135
136
|
if dry_run?
|
136
137
|
totals = "This was a dry-run"
|
137
138
|
else
|
138
|
-
totals =
|
139
|
+
totals = "#{example_count} example#{'s' unless example_count == 1}, "
|
140
|
+
totals << "#{failure_count} failure#{'s' unless failure_count == 1}"
|
139
141
|
totals << ", #{pending_count} pending" if pending_count > 0
|
140
142
|
end
|
141
143
|
@output.puts "<script type=\"text/javascript\">document.getElementById('duration').innerHTML = \"Finished in <strong>#{duration} seconds</strong>\";</script>"
|
@@ -193,36 +195,97 @@ EOF
|
|
193
195
|
<h1>RSpec Code Examples</h1>
|
194
196
|
</div>
|
195
197
|
|
198
|
+
<div id="display-filters">
|
199
|
+
<input id="passed_checkbox" name="passed_checkbox" type="checkbox" checked onchange="apply_filters()" value="1"> <label for="passed_checkbox">Passed</label>
|
200
|
+
<input id="failed_checkbox" name="failed_checkbox" type="checkbox" checked onchange="apply_filters()" value="2"> <label for="failed_checkbox">Failed</label>
|
201
|
+
<input id="pending_checkbox" name="pending_checkbox" type="checkbox" checked onchange="apply_filters()" value="3"> <label for="pending_checkbox">Pending</label>
|
202
|
+
</div>
|
203
|
+
|
196
204
|
<div id="summary">
|
197
205
|
<p id="totals"> </p>
|
198
206
|
<p id="duration"> </p>
|
199
207
|
</div>
|
200
208
|
</div>
|
201
209
|
|
210
|
+
|
202
211
|
<div class="results">
|
203
212
|
EOF
|
204
213
|
end
|
205
214
|
|
206
215
|
def global_scripts
|
207
216
|
<<-EOF
|
217
|
+
|
218
|
+
function addClass(element_id, classname) {
|
219
|
+
document.getElementById(element_id).className += (" " + classname);
|
220
|
+
}
|
221
|
+
|
222
|
+
function removeClass(element_id, classname) {
|
223
|
+
var elem = document.getElementById(element_id);
|
224
|
+
var classlist = elem.className.replace(classname,'');
|
225
|
+
elem.className = classlist;
|
226
|
+
}
|
227
|
+
|
208
228
|
function moveProgressBar(percentDone) {
|
209
229
|
document.getElementById("rspec-header").style.width = percentDone +"%";
|
210
230
|
}
|
231
|
+
|
211
232
|
function makeRed(element_id) {
|
212
|
-
|
213
|
-
|
233
|
+
removeClass(element_id, 'passed');
|
234
|
+
removeClass(element_id, 'not_implemented');
|
235
|
+
addClass(element_id,'failed');
|
214
236
|
}
|
215
237
|
|
216
238
|
function makeYellow(element_id) {
|
217
|
-
|
218
|
-
{
|
219
|
-
|
220
|
-
|
239
|
+
var elem = document.getElementById(element_id);
|
240
|
+
if (elem.className.indexOf("failed") == -1) { // class doesn't includes failed
|
241
|
+
if (elem.className.indexOf("not_implemented") == -1) { // class doesn't include not_implemented
|
242
|
+
removeClass(element_id, 'passed');
|
243
|
+
addClass(element_id,'not_implemented');
|
244
|
+
}
|
245
|
+
}
|
246
|
+
}
|
247
|
+
|
248
|
+
function apply_filters() {
|
249
|
+
var passed_filter = document.getElementById('passed_checkbox').checked;
|
250
|
+
var failed_filter = document.getElementById('failed_checkbox').checked;
|
251
|
+
var pending_filter = document.getElementById('pending_checkbox').checked;
|
252
|
+
|
253
|
+
assign_display_style("example passed", passed_filter);
|
254
|
+
assign_display_style("example failed", failed_filter);
|
255
|
+
assign_display_style("example not_implemented", pending_filter);
|
256
|
+
|
257
|
+
assign_display_style_for_group("example_group passed", passed_filter);
|
258
|
+
assign_display_style_for_group("example_group not_implemented", pending_filter, pending_filter || passed_filter);
|
259
|
+
assign_display_style_for_group("example_group failed", failed_filter, failed_filter || pending_filter || passed_filter);
|
260
|
+
}
|
261
|
+
|
262
|
+
function get_display_style(display_flag) {
|
263
|
+
var style_mode = 'none';
|
264
|
+
if (display_flag == true) {
|
265
|
+
style_mode = 'block';
|
221
266
|
}
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
267
|
+
return style_mode;
|
268
|
+
}
|
269
|
+
|
270
|
+
function assign_display_style(classname, display_flag) {
|
271
|
+
var style_mode = get_display_style(display_flag);
|
272
|
+
var elems = document.getElementsByClassName(classname)
|
273
|
+
for (var i=0; i<elems.length;i++) {
|
274
|
+
elems[i].style.display = style_mode;
|
275
|
+
}
|
276
|
+
}
|
277
|
+
|
278
|
+
function assign_display_style_for_group(classname, display_flag, subgroup_flag) {
|
279
|
+
var display_style_mode = get_display_style(display_flag);
|
280
|
+
var subgroup_style_mode = get_display_style(subgroup_flag);
|
281
|
+
var elems = document.getElementsByClassName(classname)
|
282
|
+
for (var i=0; i<elems.length;i++) {
|
283
|
+
var style_mode = display_style_mode;
|
284
|
+
if ((display_flag != subgroup_flag) && (elems[i].getElementsByTagName('dt')[0].innerHTML.indexOf(", ") != -1)) {
|
285
|
+
elems[i].style.display = subgroup_style_mode;
|
286
|
+
} else {
|
287
|
+
elems[i].style.display = display_style_mode;
|
288
|
+
}
|
226
289
|
}
|
227
290
|
}
|
228
291
|
EOF
|
@@ -242,13 +305,21 @@ EOF
|
|
242
305
|
position: absolute;
|
243
306
|
}
|
244
307
|
|
308
|
+
#label {
|
309
|
+
float:left;
|
310
|
+
}
|
311
|
+
|
312
|
+
#display-filters {
|
313
|
+
float:left;
|
314
|
+
padding: 28px 0 0 40%;
|
315
|
+
font-family: "Lucida Grande", Helvetica, sans-serif;
|
316
|
+
}
|
317
|
+
|
245
318
|
#summary {
|
246
|
-
|
319
|
+
float:right;
|
320
|
+
padding: 5px 10px;
|
247
321
|
font-family: "Lucida Grande", Helvetica, sans-serif;
|
248
322
|
text-align: right;
|
249
|
-
top: 0px;
|
250
|
-
right: 0px;
|
251
|
-
float:right;
|
252
323
|
}
|
253
324
|
|
254
325
|
#summary p {
|
@@ -281,30 +352,58 @@ dd {
|
|
281
352
|
padding: 3px 3px 3px 18px;
|
282
353
|
}
|
283
354
|
|
284
|
-
|
355
|
+
|
356
|
+
dd.example.passed {
|
285
357
|
border-left: 5px solid #65C400;
|
286
358
|
border-bottom: 1px solid #65C400;
|
287
359
|
background: #DBFFB4; color: #3D7700;
|
288
360
|
}
|
289
361
|
|
290
|
-
dd.
|
291
|
-
border-left: 5px solid #C20000;
|
292
|
-
border-bottom: 1px solid #C20000;
|
293
|
-
color: #C20000; background: #FFFBD3;
|
294
|
-
}
|
295
|
-
|
296
|
-
dd.spec.not_implemented {
|
362
|
+
dd.example.not_implemented {
|
297
363
|
border-left: 5px solid #FAF834;
|
298
364
|
border-bottom: 1px solid #FAF834;
|
299
365
|
background: #FCFB98; color: #131313;
|
300
366
|
}
|
301
367
|
|
302
|
-
dd.
|
368
|
+
dd.example.pending_fixed {
|
303
369
|
border-left: 5px solid #0000C2;
|
304
370
|
border-bottom: 1px solid #0000C2;
|
305
371
|
color: #0000C2; background: #D3FBFF;
|
306
372
|
}
|
307
373
|
|
374
|
+
dd.example.failed {
|
375
|
+
border-left: 5px solid #C20000;
|
376
|
+
border-bottom: 1px solid #C20000;
|
377
|
+
color: #C20000; background: #FFFBD3;
|
378
|
+
}
|
379
|
+
|
380
|
+
|
381
|
+
dt.not_implemented {
|
382
|
+
color: #000000; background: #FAF834;
|
383
|
+
}
|
384
|
+
|
385
|
+
dt.pending_fixed {
|
386
|
+
color: #FFFFFF; background: #C40D0D;
|
387
|
+
}
|
388
|
+
|
389
|
+
dt.failed {
|
390
|
+
color: #FFFFFF; background: #C40D0D;
|
391
|
+
}
|
392
|
+
|
393
|
+
|
394
|
+
#rspec-header.not_implemented {
|
395
|
+
color: #000000; background: #FAF834;
|
396
|
+
}
|
397
|
+
|
398
|
+
#rspec-header.pending_fixed {
|
399
|
+
color: #FFFFFF; background: #C40D0D;
|
400
|
+
}
|
401
|
+
|
402
|
+
#rspec-header.failed {
|
403
|
+
color: #FFFFFF; background: #C40D0D;
|
404
|
+
}
|
405
|
+
|
406
|
+
|
308
407
|
.backtrace {
|
309
408
|
color: #000;
|
310
409
|
font-size: 12px;
|
data/lib/rspec/core/hooks.rb
CHANGED
@@ -53,6 +53,10 @@ module RSpec
|
|
53
53
|
def find_hooks_for(example_or_group)
|
54
54
|
self.class.new(select {|hook| hook.options_apply?(example_or_group)})
|
55
55
|
end
|
56
|
+
|
57
|
+
def without_hooks_for(example_or_group)
|
58
|
+
self.class.new(reject {|hook| hook.options_apply?(example_or_group)})
|
59
|
+
end
|
56
60
|
end
|
57
61
|
|
58
62
|
class BeforeHooks < HookCollection
|
@@ -117,7 +121,18 @@ module RSpec
|
|
117
121
|
end
|
118
122
|
|
119
123
|
def find_hook(hook, scope, example_group_class, example = nil)
|
120
|
-
hooks[hook][scope].find_hooks_for(example || example_group_class)
|
124
|
+
found_hooks = hooks[hook][scope].find_hooks_for(example || example_group_class)
|
125
|
+
|
126
|
+
# ensure we don't re-run :all hooks that were applied to any of the parent groups
|
127
|
+
if scope == :all
|
128
|
+
super_klass = example_group_class.superclass
|
129
|
+
while super_klass != RSpec::Core::ExampleGroup
|
130
|
+
found_hooks = found_hooks.without_hooks_for(super_klass)
|
131
|
+
super_klass = super_klass.superclass
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
found_hooks
|
121
136
|
end
|
122
137
|
|
123
138
|
private
|
@@ -23,7 +23,7 @@ module RSpec::Core
|
|
23
23
|
|
24
24
|
def parser(options)
|
25
25
|
OptionParser.new do |parser|
|
26
|
-
parser.banner = "Usage: rspec [options] [files or directories]"
|
26
|
+
parser.banner = "Usage: rspec [options] [files or directories]\n\n"
|
27
27
|
|
28
28
|
parser.on('-b', '--backtrace', 'Enable full backtrace') do |o|
|
29
29
|
options[:full_backtrace] = true
|
@@ -106,11 +106,7 @@ module RSpec::Core
|
|
106
106
|
options[:drb_port] = o.to_i
|
107
107
|
end
|
108
108
|
|
109
|
-
parser.on('--
|
110
|
-
options[:tty] = true
|
111
|
-
end
|
112
|
-
|
113
|
-
parser.on('--fail-fast', 'Use the fail_fast option to tell RSpec to abort the run on first failure.') do |o|
|
109
|
+
parser.on('--fail-fast', 'Abort the run on first failure.') do |o|
|
114
110
|
options[:fail_fast] = true
|
115
111
|
end
|
116
112
|
|
@@ -126,6 +122,10 @@ module RSpec::Core
|
|
126
122
|
options[filter_type] ||= {}
|
127
123
|
options[filter_type][name] = value
|
128
124
|
end
|
125
|
+
|
126
|
+
parser.on('--tty', 'Used internally by rspec when sending commands to other processes') do |o|
|
127
|
+
options[:tty] = true
|
128
|
+
end
|
129
129
|
end
|
130
130
|
end
|
131
131
|
end
|
data/lib/rspec/core/rake_task.rb
CHANGED
@@ -161,7 +161,7 @@ module RSpec
|
|
161
161
|
cmd_parts << "bundle exec" if gemfile? unless skip_bundler
|
162
162
|
cmd_parts << runner
|
163
163
|
if rcov
|
164
|
-
cmd_parts << ["-Ispec
|
164
|
+
cmd_parts << ["-Ispec#{File::PATH_SEPARATOR}lib", rcov_opts]
|
165
165
|
else
|
166
166
|
cmd_parts << rspec_opts
|
167
167
|
end
|
data/lib/rspec/core/subject.rb
CHANGED
@@ -124,13 +124,13 @@ module RSpec
|
|
124
124
|
example do
|
125
125
|
self.class.class_eval do
|
126
126
|
define_method(:subject) do
|
127
|
-
if super().is_a?(Hash) && attribute.is_a?(Array)
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
127
|
+
@_subject ||= if super().is_a?(Hash) && attribute.is_a?(Array)
|
128
|
+
OpenStruct.new(super()).send(attribute.first)
|
129
|
+
else
|
130
|
+
attribute.to_s.split('.').inject(super()) do |target, method|
|
131
|
+
target.send(method)
|
132
|
+
end
|
133
|
+
end
|
134
134
|
end
|
135
135
|
end
|
136
136
|
instance_eval(&block)
|
data/lib/rspec/core/version.rb
CHANGED
data/rspec-core.gemspec
CHANGED
@@ -22,17 +22,5 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.extra_rdoc_files = [ "README.md" ]
|
23
23
|
s.rdoc_options = ["--charset=UTF-8"]
|
24
24
|
s.require_path = "lib"
|
25
|
-
|
26
|
-
s.post_install_message = %Q{**************************************************
|
27
|
-
|
28
|
-
Thank you for installing #{s.summary}
|
29
|
-
|
30
|
-
Please be sure to look at the upgrade instructions to see what might have
|
31
|
-
changed since the last release:
|
32
|
-
|
33
|
-
http://github.com/rspec/rspec-core/blob/master/Upgrade.markdown
|
34
|
-
|
35
|
-
**************************************************
|
36
|
-
}
|
37
25
|
end
|
38
26
|
|