cucumber-core 0.2.0 → 1.0.0.beta.1
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.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/cucumber-core.gemspec +1 -1
- data/lib/cucumber/core.rb +6 -6
- data/lib/cucumber/core/ast/data_table.rb +8 -0
- data/lib/cucumber/core/ast/describes_itself.rb +1 -1
- data/lib/cucumber/core/ast/examples_table.rb +8 -2
- data/lib/cucumber/core/ast/feature.rb +2 -3
- data/lib/cucumber/core/ast/location.rb +11 -6
- data/lib/cucumber/core/ast/names.rb +10 -1
- data/lib/cucumber/core/ast/outline_step.rb +6 -3
- data/lib/cucumber/core/ast/scenario.rb +0 -1
- data/lib/cucumber/core/ast/scenario_outline.rb +2 -3
- data/lib/cucumber/core/ast/step.rb +2 -2
- data/lib/cucumber/core/gherkin/ast_builder.rb +4 -1
- data/lib/cucumber/core/test/case.rb +10 -6
- data/lib/cucumber/core/test/filters/debug_filter.rb +28 -0
- data/lib/cucumber/core/test/filters/tag_filter.rb +1 -1
- data/lib/cucumber/core/test/hooks.rb +76 -0
- data/lib/cucumber/core/test/mapper.rb +101 -19
- data/lib/cucumber/core/test/mapping.rb +15 -4
- data/lib/cucumber/core/test/result.rb +39 -27
- data/lib/cucumber/core/test/runner.rb +76 -81
- data/lib/cucumber/core/test/step.rb +10 -18
- data/lib/cucumber/core/version.rb +1 -1
- data/spec/cucumber/core/ast/data_table_spec.rb +12 -0
- data/spec/cucumber/core/ast/location_spec.rb +8 -1
- data/spec/cucumber/core/ast/outline_step_spec.rb +11 -4
- data/spec/cucumber/core/ast/step_spec.rb +2 -2
- data/spec/cucumber/core/compiler_spec.rb +6 -6
- data/spec/cucumber/core/gherkin/parser_spec.rb +31 -18
- data/spec/cucumber/core/test/case_spec.rb +24 -24
- data/spec/cucumber/core/test/hooks_spec.rb +30 -0
- data/spec/cucumber/core/test/mapper_spec.rb +115 -1
- data/spec/cucumber/core/test/mapping_spec.rb +22 -6
- data/spec/cucumber/core/test/result_spec.rb +0 -8
- data/spec/cucumber/core/test/runner_spec.rb +31 -97
- data/spec/cucumber/core/test/step_spec.rb +24 -16
- data/spec/cucumber/core_spec.rb +109 -16
- data/spec/report_api_spy.rb +24 -0
- metadata +32 -28
- data/lib/cucumber/core/test/hook_compiler.rb +0 -109
- data/spec/cucumber/core/test/hook_compiler_spec.rb +0 -78
data/spec/cucumber/core_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'report_api_spy'
|
1
2
|
require 'cucumber/core'
|
2
3
|
require 'cucumber/core/gherkin/writer'
|
3
4
|
require 'cucumber/core/platform'
|
@@ -28,11 +29,9 @@ module Cucumber
|
|
28
29
|
end
|
29
30
|
|
30
31
|
describe "compiling features to a test suite" do
|
32
|
+
|
31
33
|
it "compiles two scenarios into two test cases" do
|
32
|
-
visitor =
|
33
|
-
expect( visitor ).to receive(:test_case).exactly(2).times.and_yield.ordered
|
34
|
-
expect( visitor ).to receive(:test_step).exactly(5).times.ordered
|
35
|
-
expect( visitor ).to receive(:done).once.ordered
|
34
|
+
visitor = ReportAPISpy.new
|
36
35
|
|
37
36
|
compile([
|
38
37
|
gherkin do
|
@@ -50,6 +49,17 @@ module Cucumber
|
|
50
49
|
end
|
51
50
|
end
|
52
51
|
], visitor)
|
52
|
+
|
53
|
+
expect( visitor.messages ).to eq [
|
54
|
+
:test_case,
|
55
|
+
:test_step,
|
56
|
+
:test_step,
|
57
|
+
:test_case,
|
58
|
+
:test_step,
|
59
|
+
:test_step,
|
60
|
+
:test_step,
|
61
|
+
:done,
|
62
|
+
]
|
53
63
|
end
|
54
64
|
|
55
65
|
it "filters out test cases based on a tag expression" do
|
@@ -214,6 +224,10 @@ module Cucumber
|
|
214
224
|
@test_steps = Core::Test::Result::Summary.new
|
215
225
|
end
|
216
226
|
|
227
|
+
def before_test_case(*)
|
228
|
+
yield if block_given?
|
229
|
+
end
|
230
|
+
|
217
231
|
def after_test_case(test_case, result)
|
218
232
|
result.describe_to test_cases
|
219
233
|
end
|
@@ -275,25 +289,61 @@ module Cucumber
|
|
275
289
|
context "with hooks" do
|
276
290
|
class HookTestMappings
|
277
291
|
Failure = Class.new(StandardError)
|
292
|
+
attr_reader :logger
|
293
|
+
|
294
|
+
def initialize
|
295
|
+
@logger = []
|
296
|
+
end
|
278
297
|
|
279
298
|
def test_case(test_case, mapper)
|
299
|
+
mapper.before { @logger << ['--'] }
|
300
|
+
failing_before = -> do
|
301
|
+
@logger << [:failing_before, test_case.name]
|
302
|
+
raise Failure
|
303
|
+
end
|
304
|
+
passing_after = -> do
|
305
|
+
@logger << [:passing_after, test_case.name]
|
306
|
+
end
|
307
|
+
passing_before = -> do
|
308
|
+
@logger << [:passing_before, test_case.name]
|
309
|
+
end
|
310
|
+
failing_after = -> do
|
311
|
+
@logger << [:failing_after, test_case.name]
|
312
|
+
raise Failure
|
313
|
+
end
|
314
|
+
|
280
315
|
case test_case.name
|
316
|
+
|
281
317
|
when /fail before/
|
282
|
-
mapper.before
|
283
|
-
mapper.after
|
318
|
+
mapper.before( &failing_before )
|
319
|
+
mapper.after( &passing_after )
|
320
|
+
|
284
321
|
when /fail after/
|
285
|
-
mapper.
|
322
|
+
mapper.before( &passing_before )
|
323
|
+
mapper.after( &failing_after )
|
324
|
+
|
325
|
+
else
|
326
|
+
mapper.before( &passing_before )
|
327
|
+
mapper.after( &passing_after )
|
328
|
+
|
286
329
|
end
|
330
|
+
|
287
331
|
self
|
288
332
|
end
|
289
333
|
|
290
|
-
def test_step(
|
291
|
-
mapper.map {} # all steps pass
|
334
|
+
def test_step(test_step, mapper)
|
335
|
+
mapper.map { @logger << [:step, test_step.name] } # all steps pass
|
336
|
+
if test_step.name == 'fail after'
|
337
|
+
mapper.after do
|
338
|
+
@logger << :failing_after_step
|
339
|
+
raise Failure
|
340
|
+
end
|
341
|
+
end
|
292
342
|
self
|
293
343
|
end
|
294
344
|
end
|
295
345
|
|
296
|
-
it "executes the
|
346
|
+
it "executes the steps and hooks in the right order" do
|
297
347
|
gherkin = gherkin do
|
298
348
|
feature do
|
299
349
|
scenario 'fail before' do
|
@@ -304,6 +354,10 @@ module Cucumber
|
|
304
354
|
step 'passing'
|
305
355
|
end
|
306
356
|
|
357
|
+
scenario 'fail step' do
|
358
|
+
step 'fail after'
|
359
|
+
end
|
360
|
+
|
307
361
|
scenario 'passing' do
|
308
362
|
step 'passing'
|
309
363
|
end
|
@@ -314,11 +368,29 @@ module Cucumber
|
|
314
368
|
|
315
369
|
execute [gherkin], mappings, report
|
316
370
|
|
317
|
-
expect( report.test_steps.total ).to eq(
|
318
|
-
expect( report.test_steps.total_failed ).to eq(
|
319
|
-
expect( report.test_cases.total ).to eq(
|
371
|
+
expect( report.test_steps.total ).to eq(17)
|
372
|
+
expect( report.test_steps.total_failed ).to eq(3)
|
373
|
+
expect( report.test_cases.total ).to eq(4)
|
320
374
|
expect( report.test_cases.total_passed ).to eq(1)
|
321
|
-
expect( report.test_cases.total_failed ).to eq(
|
375
|
+
expect( report.test_cases.total_failed ).to eq(3)
|
376
|
+
expect( mappings.logger ).to eq [
|
377
|
+
["--"],
|
378
|
+
[:failing_before, "Scenario: fail before"],
|
379
|
+
[:passing_after, "Scenario: fail before"],
|
380
|
+
["--"],
|
381
|
+
[:passing_before, "Scenario: fail after"],
|
382
|
+
[:step, "passing"],
|
383
|
+
[:failing_after, "Scenario: fail after"],
|
384
|
+
["--"],
|
385
|
+
[:passing_before, "Scenario: fail step"],
|
386
|
+
[:step, "fail after"],
|
387
|
+
:failing_after_step,
|
388
|
+
[:passing_after, "Scenario: fail step"],
|
389
|
+
["--"],
|
390
|
+
[:passing_before, "Scenario: passing"],
|
391
|
+
[:step, "passing"],
|
392
|
+
[:passing_after, "Scenario: passing"]
|
393
|
+
]
|
322
394
|
end
|
323
395
|
end
|
324
396
|
|
@@ -333,10 +405,16 @@ module Cucumber
|
|
333
405
|
def test_case(test_case, mapper)
|
334
406
|
logger = @logger
|
335
407
|
mapper.around do |run_scenario|
|
336
|
-
logger << :
|
408
|
+
logger << :before_all
|
337
409
|
run_scenario.call
|
338
410
|
logger << :middle
|
339
411
|
run_scenario.call
|
412
|
+
logger << :after_all
|
413
|
+
end
|
414
|
+
mapper.before do
|
415
|
+
logger << :before
|
416
|
+
end
|
417
|
+
mapper.after do
|
340
418
|
logger << :after
|
341
419
|
end
|
342
420
|
self
|
@@ -347,6 +425,9 @@ module Cucumber
|
|
347
425
|
mapper.map do
|
348
426
|
logger << :during
|
349
427
|
end
|
428
|
+
mapper.after do
|
429
|
+
logger << :after_step
|
430
|
+
end
|
350
431
|
self
|
351
432
|
end
|
352
433
|
end
|
@@ -367,7 +448,19 @@ module Cucumber
|
|
367
448
|
expect( report.test_cases.total ).to eq 1
|
368
449
|
expect( report.test_cases.total_passed ).to eq 1
|
369
450
|
expect( report.test_cases.total_failed ).to eq 0
|
370
|
-
expect( mappings.logger ).to eq [
|
451
|
+
expect( mappings.logger ).to eq [
|
452
|
+
:before_all,
|
453
|
+
:before,
|
454
|
+
:during,
|
455
|
+
:after_step,
|
456
|
+
:after,
|
457
|
+
:middle,
|
458
|
+
:before,
|
459
|
+
:during,
|
460
|
+
:after_step,
|
461
|
+
:after,
|
462
|
+
:after_all
|
463
|
+
]
|
371
464
|
end
|
372
465
|
end
|
373
466
|
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class ReportAPISpy
|
2
|
+
def initialize
|
3
|
+
@result = []
|
4
|
+
end
|
5
|
+
|
6
|
+
def test_case(*args)
|
7
|
+
@result << [:test_case, *args]
|
8
|
+
yield self if block_given?
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_step(*args)
|
12
|
+
@result << [:test_step, *args]
|
13
|
+
yield self if block_given?
|
14
|
+
end
|
15
|
+
|
16
|
+
def done(*args)
|
17
|
+
@result << [:done, *args]
|
18
|
+
yield self if block_given?
|
19
|
+
end
|
20
|
+
|
21
|
+
def messages
|
22
|
+
@result.map(&:first)
|
23
|
+
end
|
24
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cucumber-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0.beta.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aslak Hellesøy
|
@@ -12,90 +12,90 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2014-
|
15
|
+
date: 2014-08-22 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: gherkin
|
19
19
|
requirement: !ruby/object:Gem::Requirement
|
20
20
|
requirements:
|
21
|
-
- - ~>
|
21
|
+
- - "~>"
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: 2.12.0
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
27
27
|
requirements:
|
28
|
-
- - ~>
|
28
|
+
- - "~>"
|
29
29
|
- !ruby/object:Gem::Version
|
30
30
|
version: 2.12.0
|
31
31
|
- !ruby/object:Gem::Dependency
|
32
32
|
name: bundler
|
33
33
|
requirement: !ruby/object:Gem::Requirement
|
34
34
|
requirements:
|
35
|
-
- -
|
35
|
+
- - ">="
|
36
36
|
- !ruby/object:Gem::Version
|
37
37
|
version: 1.3.5
|
38
38
|
type: :development
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
41
|
requirements:
|
42
|
-
- -
|
42
|
+
- - ">="
|
43
43
|
- !ruby/object:Gem::Version
|
44
44
|
version: 1.3.5
|
45
45
|
- !ruby/object:Gem::Dependency
|
46
46
|
name: rake
|
47
47
|
requirement: !ruby/object:Gem::Requirement
|
48
48
|
requirements:
|
49
|
-
- -
|
49
|
+
- - ">="
|
50
50
|
- !ruby/object:Gem::Version
|
51
51
|
version: 0.9.2
|
52
52
|
type: :development
|
53
53
|
prerelease: false
|
54
54
|
version_requirements: !ruby/object:Gem::Requirement
|
55
55
|
requirements:
|
56
|
-
- -
|
56
|
+
- - ">="
|
57
57
|
- !ruby/object:Gem::Version
|
58
58
|
version: 0.9.2
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: rspec
|
61
61
|
requirement: !ruby/object:Gem::Requirement
|
62
62
|
requirements:
|
63
|
-
- -
|
63
|
+
- - "~>"
|
64
64
|
- !ruby/object:Gem::Version
|
65
|
-
version: '
|
65
|
+
version: '3'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
68
|
version_requirements: !ruby/object:Gem::Requirement
|
69
69
|
requirements:
|
70
|
-
- -
|
70
|
+
- - "~>"
|
71
71
|
- !ruby/object:Gem::Version
|
72
|
-
version: '
|
72
|
+
version: '3'
|
73
73
|
- !ruby/object:Gem::Dependency
|
74
74
|
name: unindent
|
75
75
|
requirement: !ruby/object:Gem::Requirement
|
76
76
|
requirements:
|
77
|
-
- -
|
77
|
+
- - ">="
|
78
78
|
- !ruby/object:Gem::Version
|
79
79
|
version: '1.0'
|
80
80
|
type: :development
|
81
81
|
prerelease: false
|
82
82
|
version_requirements: !ruby/object:Gem::Requirement
|
83
83
|
requirements:
|
84
|
-
- -
|
84
|
+
- - ">="
|
85
85
|
- !ruby/object:Gem::Version
|
86
86
|
version: '1.0'
|
87
87
|
- !ruby/object:Gem::Dependency
|
88
88
|
name: coveralls
|
89
89
|
requirement: !ruby/object:Gem::Requirement
|
90
90
|
requirements:
|
91
|
-
- - ~>
|
91
|
+
- - "~>"
|
92
92
|
- !ruby/object:Gem::Version
|
93
93
|
version: '0.7'
|
94
94
|
type: :development
|
95
95
|
prerelease: false
|
96
96
|
version_requirements: !ruby/object:Gem::Requirement
|
97
97
|
requirements:
|
98
|
-
- - ~>
|
98
|
+
- - "~>"
|
99
99
|
- !ruby/object:Gem::Version
|
100
100
|
version: '0.7'
|
101
101
|
description: Core library for the Cucumber BDD app
|
@@ -104,10 +104,10 @@ executables: []
|
|
104
104
|
extensions: []
|
105
105
|
extra_rdoc_files: []
|
106
106
|
files:
|
107
|
-
- .coveralls.yml
|
108
|
-
- .rspec
|
109
|
-
- .ruby-gemset
|
110
|
-
- .travis.yml
|
107
|
+
- ".coveralls.yml"
|
108
|
+
- ".rspec"
|
109
|
+
- ".ruby-gemset"
|
110
|
+
- ".travis.yml"
|
111
111
|
- Gemfile
|
112
112
|
- LICENSE
|
113
113
|
- README.md
|
@@ -141,8 +141,9 @@ files:
|
|
141
141
|
- lib/cucumber/core/platform.rb
|
142
142
|
- lib/cucumber/core/test/case.rb
|
143
143
|
- lib/cucumber/core/test/filters.rb
|
144
|
+
- lib/cucumber/core/test/filters/debug_filter.rb
|
144
145
|
- lib/cucumber/core/test/filters/tag_filter.rb
|
145
|
-
- lib/cucumber/core/test/
|
146
|
+
- lib/cucumber/core/test/hooks.rb
|
146
147
|
- lib/cucumber/core/test/mapper.rb
|
147
148
|
- lib/cucumber/core/test/mapping.rb
|
148
149
|
- lib/cucumber/core/test/result.rb
|
@@ -163,7 +164,7 @@ files:
|
|
163
164
|
- spec/cucumber/core/gherkin/parser_spec.rb
|
164
165
|
- spec/cucumber/core/gherkin/writer_spec.rb
|
165
166
|
- spec/cucumber/core/test/case_spec.rb
|
166
|
-
- spec/cucumber/core/test/
|
167
|
+
- spec/cucumber/core/test/hooks_spec.rb
|
167
168
|
- spec/cucumber/core/test/mapper_spec.rb
|
168
169
|
- spec/cucumber/core/test/mapping_spec.rb
|
169
170
|
- spec/cucumber/core/test/result_spec.rb
|
@@ -172,31 +173,32 @@ files:
|
|
172
173
|
- spec/cucumber/core/test/timer_spec.rb
|
173
174
|
- spec/cucumber/core_spec.rb
|
174
175
|
- spec/cucumber/initializer_spec.rb
|
176
|
+
- spec/report_api_spy.rb
|
175
177
|
homepage: http://cukes.info
|
176
178
|
licenses:
|
177
179
|
- MIT
|
178
180
|
metadata: {}
|
179
181
|
post_install_message:
|
180
182
|
rdoc_options:
|
181
|
-
- --charset=UTF-8
|
183
|
+
- "--charset=UTF-8"
|
182
184
|
require_paths:
|
183
185
|
- lib
|
184
186
|
required_ruby_version: !ruby/object:Gem::Requirement
|
185
187
|
requirements:
|
186
|
-
- -
|
188
|
+
- - ">="
|
187
189
|
- !ruby/object:Gem::Version
|
188
190
|
version: 1.9.3
|
189
191
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
190
192
|
requirements:
|
191
|
-
- -
|
193
|
+
- - ">"
|
192
194
|
- !ruby/object:Gem::Version
|
193
|
-
version:
|
195
|
+
version: 1.3.1
|
194
196
|
requirements: []
|
195
197
|
rubyforge_project:
|
196
198
|
rubygems_version: 2.0.14
|
197
199
|
signing_key:
|
198
200
|
specification_version: 4
|
199
|
-
summary: cucumber-core-0.
|
201
|
+
summary: cucumber-core-1.0.0.beta.1
|
200
202
|
test_files:
|
201
203
|
- spec/capture_warnings.rb
|
202
204
|
- spec/coverage.rb
|
@@ -210,7 +212,7 @@ test_files:
|
|
210
212
|
- spec/cucumber/core/gherkin/parser_spec.rb
|
211
213
|
- spec/cucumber/core/gherkin/writer_spec.rb
|
212
214
|
- spec/cucumber/core/test/case_spec.rb
|
213
|
-
- spec/cucumber/core/test/
|
215
|
+
- spec/cucumber/core/test/hooks_spec.rb
|
214
216
|
- spec/cucumber/core/test/mapper_spec.rb
|
215
217
|
- spec/cucumber/core/test/mapping_spec.rb
|
216
218
|
- spec/cucumber/core/test/result_spec.rb
|
@@ -219,3 +221,5 @@ test_files:
|
|
219
221
|
- spec/cucumber/core/test/timer_spec.rb
|
220
222
|
- spec/cucumber/core_spec.rb
|
221
223
|
- spec/cucumber/initializer_spec.rb
|
224
|
+
- spec/report_api_spy.rb
|
225
|
+
has_rdoc:
|
@@ -1,109 +0,0 @@
|
|
1
|
-
require 'cucumber/initializer'
|
2
|
-
|
3
|
-
module Cucumber
|
4
|
-
module Core
|
5
|
-
module Test
|
6
|
-
class HookStep
|
7
|
-
def initialize(source, &block)
|
8
|
-
@mapping = Test::Mapping.new(&block)
|
9
|
-
@source = source
|
10
|
-
end
|
11
|
-
|
12
|
-
def describe_to(visitor, *args)
|
13
|
-
visitor.test_step(self, *args)
|
14
|
-
end
|
15
|
-
|
16
|
-
def describe_source_to(visitor, *args)
|
17
|
-
visitor.hook(*args)
|
18
|
-
end
|
19
|
-
|
20
|
-
def execute
|
21
|
-
@mapping.execute
|
22
|
-
end
|
23
|
-
|
24
|
-
def skip
|
25
|
-
execute
|
26
|
-
end
|
27
|
-
|
28
|
-
def map
|
29
|
-
self
|
30
|
-
end
|
31
|
-
|
32
|
-
def match_locations?(locations)
|
33
|
-
false
|
34
|
-
end
|
35
|
-
|
36
|
-
def inspect
|
37
|
-
"#{self.class}"
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
class HookCompiler
|
42
|
-
include Cucumber.initializer(:mappings, :receiver)
|
43
|
-
|
44
|
-
def done
|
45
|
-
receiver.done
|
46
|
-
self
|
47
|
-
end
|
48
|
-
|
49
|
-
def test_case(test_case, &descend)
|
50
|
-
@before_hooks, @after_hooks, @around_hooks, @steps = [], [], [], []
|
51
|
-
mapper = HookMapper.new(self, test_case.source)
|
52
|
-
test_case.describe_to mappings, mapper
|
53
|
-
descend.call
|
54
|
-
test_case.
|
55
|
-
with_steps(@before_hooks + @steps + @after_hooks).
|
56
|
-
with_around_hooks(@around_hooks).
|
57
|
-
describe_to(receiver)
|
58
|
-
end
|
59
|
-
|
60
|
-
def before_hook(hook)
|
61
|
-
@before_hooks << hook
|
62
|
-
end
|
63
|
-
|
64
|
-
def after_hook(hook)
|
65
|
-
@after_hooks << hook
|
66
|
-
end
|
67
|
-
|
68
|
-
def around_hook(hook)
|
69
|
-
@around_hooks << hook
|
70
|
-
end
|
71
|
-
|
72
|
-
def test_step(step)
|
73
|
-
@steps << step
|
74
|
-
end
|
75
|
-
|
76
|
-
class HookMapper
|
77
|
-
include Cucumber.initializer(:compiler, :source)
|
78
|
-
|
79
|
-
def before(&block)
|
80
|
-
compiler.before_hook HookStep.new(source, &block)
|
81
|
-
end
|
82
|
-
|
83
|
-
def after(&block)
|
84
|
-
compiler.after_hook HookStep.new(source, &block)
|
85
|
-
end
|
86
|
-
|
87
|
-
def around(&block)
|
88
|
-
compiler.around_hook AroundHook.new(source, &block)
|
89
|
-
end
|
90
|
-
|
91
|
-
class AroundHook
|
92
|
-
def initialize(source, &block)
|
93
|
-
@source = source
|
94
|
-
@block = block
|
95
|
-
end
|
96
|
-
|
97
|
-
def call(continue)
|
98
|
-
@block.call(continue)
|
99
|
-
end
|
100
|
-
|
101
|
-
def describe_to(visitor, *args, &continue)
|
102
|
-
visitor.around_hook(self, *args, &continue)
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|