test_bench-session 2.0.0.0 → 2.1.0.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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/lib/test_bench/session/controls/comment.rb +93 -4
  3. data/lib/test_bench/session/controls/detail.rb +79 -4
  4. data/lib/test_bench/session/controls/event.rb +7 -0
  5. data/lib/test_bench/session/controls/events/commented.rb +91 -10
  6. data/lib/test_bench/session/controls/events/context_finished.rb +49 -11
  7. data/lib/test_bench/session/controls/events/context_skipped.rb +26 -8
  8. data/lib/test_bench/session/controls/events/context_started.rb +44 -9
  9. data/lib/test_bench/session/controls/events/detailed.rb +91 -10
  10. data/lib/test_bench/session/controls/{capture_sink/event.rb → events/event_data.rb} +2 -2
  11. data/lib/test_bench/session/controls/events/failed.rb +27 -15
  12. data/lib/test_bench/session/controls/events/fixture_finished.rb +32 -11
  13. data/lib/test_bench/session/controls/events/fixture_started.rb +26 -8
  14. data/lib/test_bench/session/controls/events/test_finished.rb +49 -11
  15. data/lib/test_bench/session/controls/events/test_skipped.rb +26 -8
  16. data/lib/test_bench/session/controls/events/test_started.rb +44 -9
  17. data/lib/test_bench/session/controls/events.rb +15 -9
  18. data/lib/test_bench/session/controls/exception.rb +28 -10
  19. data/lib/test_bench/session/controls/failure.rb +5 -16
  20. data/lib/test_bench/session/controls/fixture.rb +7 -4
  21. data/lib/test_bench/session/controls/output/detail.rb +29 -0
  22. data/lib/test_bench/session/controls/output.rb +55 -0
  23. data/lib/test_bench/session/controls/random.rb +1 -1
  24. data/lib/test_bench/session/controls/result.rb +15 -4
  25. data/lib/test_bench/session/controls/{capture_sink → substitute}/path.rb +6 -3
  26. data/lib/test_bench/session/controls/title.rb +24 -12
  27. data/lib/test_bench/session/controls.rb +12 -12
  28. data/lib/test_bench/session/events.rb +7 -14
  29. data/lib/test_bench/session/output/get.rb +27 -0
  30. data/lib/test_bench/session/output/writer/buffer/interactive/viewport.rb +164 -0
  31. data/lib/test_bench/session/output/writer/buffer/interactive.rb +139 -0
  32. data/lib/test_bench/session/output/writer/buffer.rb +27 -0
  33. data/lib/test_bench/session/output/writer/defaults.rb +17 -0
  34. data/lib/test_bench/session/output/writer/substitute.rb +17 -0
  35. data/lib/test_bench/session/output/writer.rb +95 -0
  36. data/lib/test_bench/session/output.rb +375 -0
  37. data/lib/test_bench/session/projection.rb +28 -0
  38. data/lib/test_bench/session/session.rb +51 -65
  39. data/lib/test_bench/session/store.rb +59 -0
  40. data/lib/test_bench/session/substitute/path.rb +63 -0
  41. data/lib/test_bench/session/substitute/sink.rb +104 -0
  42. data/lib/test_bench/session/substitute.rb +17 -34
  43. data/lib/test_bench/session.rb +16 -5
  44. metadata +22 -17
  45. data/lib/test_bench/session/controls/capture_sink/record.rb +0 -19
  46. data/lib/test_bench/session/controls/events/aborted.rb +0 -29
  47. data/lib/test_bench/session/controls/events/file_finished.rb +0 -32
  48. data/lib/test_bench/session/controls/events/file_started.rb +0 -29
  49. data/lib/test_bench/session/controls/events/finished.rb +0 -32
  50. data/lib/test_bench/session/controls/events/started.rb +0 -29
  51. data/lib/test_bench/session/controls/file.rb +0 -58
  52. data/lib/test_bench/session/telemetry/capture_sink/path.rb +0 -65
  53. data/lib/test_bench/session/telemetry/capture_sink/record.rb +0 -39
  54. data/lib/test_bench/session/telemetry/capture_sink.rb +0 -63
@@ -0,0 +1,63 @@
1
+ module TestBench
2
+ class Session
3
+ module Substitute
4
+ class Path
5
+ def segments
6
+ @segments ||= []
7
+ end
8
+ attr_writer :segments
9
+
10
+ def match?(*segments, segment)
11
+ if not segment == self.segments.last
12
+ return false
13
+ end
14
+
15
+ segment_iterator = self.segments.to_enum
16
+
17
+ control_segments = [*segments, segment]
18
+
19
+ control_segments.all? do |control_segment|
20
+ begin
21
+ next_segment = segment_iterator.next
22
+ end until next_segment == control_segment
23
+ true
24
+
25
+ rescue StopIteration
26
+ false
27
+ end
28
+ end
29
+
30
+ def push_segment(segment)
31
+ segments << segment
32
+ end
33
+ alias :push :push_segment
34
+ alias :<< :push
35
+
36
+ def pop_segment(compare_segment=nil)
37
+ segments.pop
38
+ end
39
+ alias :pop :pop_segment
40
+
41
+ def copy(receiver)
42
+ path = self.class.new
43
+
44
+ segments.each do |segment|
45
+ path << segment
46
+ end
47
+
48
+ receiver.path = path
49
+ path
50
+ end
51
+
52
+ def eql?(compare)
53
+ if compare.is_a?(self.class)
54
+ segments == compare.segments
55
+ else
56
+ false
57
+ end
58
+ end
59
+ alias :== :eql?
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,104 @@
1
+ module TestBench
2
+ class Session
3
+ module Substitute
4
+ class Sink
5
+ include Telemetry::Sink
6
+ include Events
7
+
8
+ def records
9
+ @records ||= []
10
+ end
11
+ attr_writer :records
12
+
13
+ def path
14
+ @path ||= Path.new
15
+ end
16
+ attr_writer :path
17
+
18
+ def receive(event_data)
19
+ event_type = event_data.type
20
+
21
+ case event_data.type
22
+ when :TestStarted, :ContextStarted
23
+ title, * = event_data.data
24
+ path.push(title)
25
+ when :TestFinished, :ContextFinished
26
+ title, * = event_data.data
27
+ path.pop(title)
28
+ end
29
+
30
+ record = Record.new(event_data)
31
+ path.copy(record)
32
+
33
+ case event_data.type
34
+ when :TestFinished, :ContextFinished
35
+ title, * = event_data.data
36
+ record.path.push(title)
37
+ when :Commented, :Detailed
38
+ comment_text, * = event_data.data
39
+ record.path.push(comment_text)
40
+ end
41
+
42
+ records.push(record)
43
+
44
+ record
45
+ end
46
+
47
+ def received?(event_data=nil)
48
+ if not event_data.nil?
49
+ records.any? do |record|
50
+ record.event_data == event_data
51
+ end
52
+ else
53
+ records.any?
54
+ end
55
+ end
56
+
57
+ def one_event?(event_class, *path_segments, **attributes)
58
+ event_sink = event_sink(*path_segments)
59
+ event_sink.one_event?(event_class, **attributes)
60
+ end
61
+
62
+ def one_event(event_class, *path_segments, **attributes)
63
+ event_sink = event_sink(*path_segments)
64
+ event_sink.one_event(event_class, **attributes)
65
+ end
66
+
67
+ def any_event?(event_class, *path_segments, **attributes)
68
+ event_sink = event_sink(*path_segments)
69
+ event_sink.any_event?(event_class, **attributes)
70
+ end
71
+ alias :event? :any_event?
72
+
73
+ def events(event_class, *path_segments, **attributes)
74
+ event_sink = event_sink(*path_segments)
75
+ event_sink.events(event_class, **attributes)
76
+ end
77
+
78
+ def event_sink(*path_segments)
79
+ event_sink = Telemetry::Substitute::Sink.new
80
+
81
+ records.each do |record|
82
+ if record.match?(path_segments)
83
+ event_data = record.event_data
84
+
85
+ event_sink.receive(event_data)
86
+ end
87
+ end
88
+
89
+ event_sink
90
+ end
91
+
92
+ Record = Struct.new(:event_data, :path) do
93
+ def match?(path_segments)
94
+ if path_segments.any?
95
+ path.match?(*path_segments)
96
+ else
97
+ true
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
@@ -8,56 +8,45 @@ module TestBench
8
8
  class Session < Session
9
9
  attr_accessor :result
10
10
 
11
+ def sink
12
+ @sink ||= Sink.new
13
+ end
14
+ attr_writer :sink
15
+
11
16
  def self.build
12
17
  instance = new
13
18
 
14
19
  telemetry = instance.telemetry
15
- Telemetry::CaptureSink.configure(telemetry, attr_name: :sink)
16
-
17
- telemetry.register(telemetry.sink)
20
+ telemetry.register(instance.sink)
18
21
 
19
22
  instance
20
23
  end
21
24
 
22
- def file(path)
23
- telemetry.record(Events::FileStarted.new(path))
24
-
25
- telemetry.record(Events::FileFinished.new(path, result))
26
-
27
- result
28
- end
29
-
30
25
  Events.each_type do |event_type|
31
- event_type_method_cased = TestBench::Telemetry::Event::Type.method_cased(event_type)
26
+ event_name = TestBench::Telemetry::Event::EventName.get(event_type)
32
27
 
33
28
  event_class = Events.const_get(event_type, false)
34
29
 
35
30
  module_eval(<<~RUBY, __FILE__, __LINE__)
36
- def one_#{event_type_method_cased}_event?(...)
31
+ def one_#{event_name}_event?(...)
37
32
  one_event?(#{event_class}, ...)
38
33
  end
39
34
 
40
- def one_#{event_type_method_cased}_event(...)
35
+ def one_#{event_name}_event(...)
41
36
  one_event(#{event_class}, ...)
42
37
  end
43
38
 
44
- def any_#{event_type_method_cased}_event?(...)
39
+ def any_#{event_name}_event?(...)
45
40
  any_event?(#{event_class}, ...)
46
41
  end
47
- alias :#{event_type_method_cased}_event? :any_#{event_type_method_cased}_event?
42
+ alias :#{event_name}_event? :any_#{event_name}_event?
48
43
 
49
- def #{event_type_method_cased}_events(...)
44
+ def #{event_name}_events(...)
50
45
  events(#{event_class}, ...)
51
46
  end
52
47
  RUBY
53
48
  end
54
49
 
55
- def one_event?(...) = telemetry.one_event?(...)
56
- def one_event(...) = telemetry.one_event(...)
57
- def any_event?(...) = telemetry.any_event?(...)
58
- alias :event? :any_event?
59
- def events(...) = telemetry.events(...)
60
-
61
50
  alias :failure? :failed_event?
62
51
  alias :one_failure? :one_failed_event?
63
52
 
@@ -76,17 +65,11 @@ module TestBench
76
65
  alias :fixture? :fixture_finished_event?
77
66
  alias :one_fixture? :one_fixture_finished_event?
78
67
 
79
- alias :file? :file_finished_event?
80
- alias :one_file? :one_file_finished_event?
81
-
82
- alias :started? :started_event?
83
- alias :one_started? :one_started_event?
84
-
85
- alias :finished? :finished_event?
86
- alias :one_finished? :one_finished_event?
87
-
88
- alias :aborted? :aborted_event?
89
- alias :one_aborted? :one_aborted_event?
68
+ def one_event?(...) = sink.one_event?(...)
69
+ def one_event(...) = sink.one_event(...)
70
+ def any_event?(...) = sink.any_event?(...)
71
+ alias :event? :any_event?
72
+ def events(...) = sink.events(...)
90
73
  end
91
74
  end
92
75
  end
@@ -1,11 +1,22 @@
1
- require 'test_bench/telemetry'
1
+ require 'test_bench/output'
2
2
 
3
3
  require 'test_bench/session/events'
4
4
 
5
5
  require 'test_bench/session/session'
6
6
 
7
- require 'test_bench/session/telemetry/capture_sink/path'
8
- require 'test_bench/session/telemetry/capture_sink/record'
9
- require 'test_bench/session/telemetry/capture_sink'
10
-
7
+ require 'test_bench/session/substitute/path'
8
+ require 'test_bench/session/substitute/sink'
11
9
  require 'test_bench/session/substitute'
10
+
11
+ require 'test_bench/session/projection'
12
+
13
+ require 'test_bench/session/output/writer'
14
+ require 'test_bench/session/output/writer/defaults'
15
+ require 'test_bench/session/output/writer/substitute'
16
+ require 'test_bench/session/output/writer/buffer/interactive/viewport'
17
+ require 'test_bench/session/output/writer/buffer/interactive'
18
+ require 'test_bench/session/output/writer/buffer'
19
+ require 'test_bench/session/output'
20
+ require 'test_bench/session/output/get'
21
+
22
+ require 'test_bench/session/store'
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: test_bench-session
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.0
4
+ version: 2.1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Ladd
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-10 00:00:00.000000000 Z
11
+ date: 2023-07-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: test_bench-telemetry
14
+ name: test_bench-output
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: test_bench-bootstrap
28
+ name: test_bench-isolated
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -46,43 +46,48 @@ extra_rdoc_files: []
46
46
  files:
47
47
  - lib/test_bench/session.rb
48
48
  - lib/test_bench/session/controls.rb
49
- - lib/test_bench/session/controls/capture_sink/event.rb
50
- - lib/test_bench/session/controls/capture_sink/path.rb
51
- - lib/test_bench/session/controls/capture_sink/record.rb
52
49
  - lib/test_bench/session/controls/comment.rb
53
50
  - lib/test_bench/session/controls/detail.rb
51
+ - lib/test_bench/session/controls/event.rb
54
52
  - lib/test_bench/session/controls/events.rb
55
- - lib/test_bench/session/controls/events/aborted.rb
56
53
  - lib/test_bench/session/controls/events/commented.rb
57
54
  - lib/test_bench/session/controls/events/context_finished.rb
58
55
  - lib/test_bench/session/controls/events/context_skipped.rb
59
56
  - lib/test_bench/session/controls/events/context_started.rb
60
57
  - lib/test_bench/session/controls/events/detailed.rb
58
+ - lib/test_bench/session/controls/events/event_data.rb
61
59
  - lib/test_bench/session/controls/events/failed.rb
62
- - lib/test_bench/session/controls/events/file_finished.rb
63
- - lib/test_bench/session/controls/events/file_started.rb
64
- - lib/test_bench/session/controls/events/finished.rb
65
60
  - lib/test_bench/session/controls/events/fixture_finished.rb
66
61
  - lib/test_bench/session/controls/events/fixture_started.rb
67
- - lib/test_bench/session/controls/events/started.rb
68
62
  - lib/test_bench/session/controls/events/test_finished.rb
69
63
  - lib/test_bench/session/controls/events/test_skipped.rb
70
64
  - lib/test_bench/session/controls/events/test_started.rb
71
65
  - lib/test_bench/session/controls/exception.rb
72
66
  - lib/test_bench/session/controls/failure.rb
73
- - lib/test_bench/session/controls/file.rb
74
67
  - lib/test_bench/session/controls/fixture.rb
68
+ - lib/test_bench/session/controls/output.rb
69
+ - lib/test_bench/session/controls/output/detail.rb
75
70
  - lib/test_bench/session/controls/process_id.rb
76
71
  - lib/test_bench/session/controls/random.rb
77
72
  - lib/test_bench/session/controls/result.rb
73
+ - lib/test_bench/session/controls/substitute/path.rb
78
74
  - lib/test_bench/session/controls/time.rb
79
75
  - lib/test_bench/session/controls/title.rb
80
76
  - lib/test_bench/session/events.rb
77
+ - lib/test_bench/session/output.rb
78
+ - lib/test_bench/session/output/get.rb
79
+ - lib/test_bench/session/output/writer.rb
80
+ - lib/test_bench/session/output/writer/buffer.rb
81
+ - lib/test_bench/session/output/writer/buffer/interactive.rb
82
+ - lib/test_bench/session/output/writer/buffer/interactive/viewport.rb
83
+ - lib/test_bench/session/output/writer/defaults.rb
84
+ - lib/test_bench/session/output/writer/substitute.rb
85
+ - lib/test_bench/session/projection.rb
81
86
  - lib/test_bench/session/session.rb
87
+ - lib/test_bench/session/store.rb
82
88
  - lib/test_bench/session/substitute.rb
83
- - lib/test_bench/session/telemetry/capture_sink.rb
84
- - lib/test_bench/session/telemetry/capture_sink/path.rb
85
- - lib/test_bench/session/telemetry/capture_sink/record.rb
89
+ - lib/test_bench/session/substitute/path.rb
90
+ - lib/test_bench/session/substitute/sink.rb
86
91
  homepage: https://github.com/test-bench/test-bench-session
87
92
  licenses:
88
93
  - MIT
@@ -102,7 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
107
  - !ruby/object:Gem::Version
103
108
  version: '0'
104
109
  requirements: []
105
- rubygems_version: 3.3.23
110
+ rubygems_version: 3.4.10
106
111
  signing_key:
107
112
  specification_version: 4
108
113
  summary: Test session for TestBench
@@ -1,19 +0,0 @@
1
- module TestBench
2
- class Session
3
- module Controls
4
- module CaptureSink
5
- module Record
6
- def self.example(event: nil, path: nil)
7
- event ||= self.event
8
- path ||= self.path
9
-
10
- TestBench::Session::Telemetry::CaptureSink::Record.new(event, path)
11
- end
12
-
13
- def self.event = Event.example
14
- def self.path = Path.example
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,29 +0,0 @@
1
- module TestBench
2
- class Session
3
- module Controls
4
- module Events
5
- module Aborted
6
- def self.example(abort_process_id: nil, process_id: nil, time: nil)
7
- abort_process_id ||= self.abort_process_id
8
- process_id ||= self.process_id
9
- time ||= self.time
10
-
11
- Session::Events::Aborted.new(abort_process_id, process_id, time)
12
- end
13
-
14
- def self.random
15
- abort_process_id = Random.integer
16
- process_id = ProcessID.random
17
- time = Time.random
18
-
19
- example(abort_process_id:, process_id:, time:)
20
- end
21
-
22
- def self.abort_process_id = ProcessID.other
23
- def self.process_id = ProcessID.example
24
- def self.time = Time.example
25
- end
26
- end
27
- end
28
- end
29
- end
@@ -1,32 +0,0 @@
1
- module TestBench
2
- class Session
3
- module Controls
4
- module Events
5
- module FileFinished
6
- def self.example(path: nil, result: nil, process_id: nil, time: nil)
7
- path ||= self.path
8
- result ||= self.result
9
- process_id ||= self.process_id
10
- time ||= self.time
11
-
12
- Session::Events::FileFinished.new(path, result, process_id, time)
13
- end
14
-
15
- def self.random
16
- path = File::Path.random
17
- result = Result.random
18
- process_id = ProcessID.random
19
- time = Time.random
20
-
21
- example(path:, result:, process_id:, time:)
22
- end
23
-
24
- def self.path = File::Path.example
25
- def self.result = Result.example
26
- def self.process_id = ProcessID.example
27
- def self.time = Time.example
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,29 +0,0 @@
1
- module TestBench
2
- class Session
3
- module Controls
4
- module Events
5
- module FileStarted
6
- def self.example(path: nil, process_id: nil, time: nil)
7
- path ||= self.path
8
- process_id ||= self.process_id
9
- time ||= self.time
10
-
11
- Session::Events::FileStarted.new(path, process_id, time)
12
- end
13
-
14
- def self.random
15
- path = File::Path.random
16
- process_id = ProcessID.random
17
- time = Time.random
18
-
19
- example(path:, process_id:, time:)
20
- end
21
-
22
- def self.path = File::Path.example
23
- def self.process_id = ProcessID.example
24
- def self.time = Time.example
25
- end
26
- end
27
- end
28
- end
29
- end
@@ -1,32 +0,0 @@
1
- module TestBench
2
- class Session
3
- module Controls
4
- module Events
5
- module Finished
6
- def self.example(result: nil, process_count: nil, process_id: nil, time: nil)
7
- result ||= self.result
8
- process_count ||= self.process_count
9
- process_id ||= self.process_id
10
- time ||= self.time
11
-
12
- Session::Events::Finished.new(result, process_count, process_id, time)
13
- end
14
-
15
- def self.random
16
- result = Result.random
17
- process_count = Random.integer
18
- process_id = ProcessID.random
19
- time = Time.random
20
-
21
- example(result:, process_count:, process_id:, time:)
22
- end
23
-
24
- def self.result = Result.example
25
- def self.process_count = Started.process_count
26
- def self.process_id = ProcessID.example
27
- def self.time = Time.example
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,29 +0,0 @@
1
- module TestBench
2
- class Session
3
- module Controls
4
- module Events
5
- module Started
6
- def self.example(process_count: nil, process_id: nil, time: nil)
7
- process_count ||= self.process_count
8
- process_id ||= self.process_id
9
- time ||= self.time
10
-
11
- Session::Events::Started.new(process_count, process_id, time)
12
- end
13
-
14
- def self.random
15
- process_count = Random.integer
16
- process_id = ProcessID.random
17
- time = Time.random
18
-
19
- example(process_count:, process_id:, time:)
20
- end
21
-
22
- def self.process_count = 11
23
- def self.process_id = ProcessID.example
24
- def self.time = Time.example
25
- end
26
- end
27
- end
28
- end
29
- end
@@ -1,58 +0,0 @@
1
- module TestBench
2
- class Session
3
- module Controls
4
- module File
5
- def self.example(contents=nil)
6
- contents ||= self.contents
7
-
8
- path = TestBench::Telemetry::Controls::File::Temporary.example
9
-
10
- ::File.write(path, contents)
11
-
12
- path
13
- end
14
-
15
- def self.contents = Pass.contents
16
-
17
- module Failure
18
- def self.example(session: nil)
19
- contents = contents(session:)
20
-
21
- File.example(contents)
22
- end
23
-
24
- def self.contents(session: nil)
25
- session ||= Session.new
26
-
27
- <<~RUBY
28
- session = ObjectSpace._id2ref(#{session.object_id})
29
- session.assert(false, __FILE__, __LINE__)
30
- RUBY
31
- end
32
- end
33
-
34
- module Pass
35
- def self.example
36
- File.example(contents)
37
- end
38
-
39
- def self.contents
40
- ''
41
- end
42
- end
43
-
44
- module Path
45
- def self.example(suffix=nil)
46
- extension = '.rb'
47
-
48
- filename = TestBench::Telemetry::Controls::File::Name.example(suffix, extension:)
49
-
50
- ::File.join('some_dir', 'some_other_dir', filename)
51
- end
52
-
53
- def self.random = example(Random.string)
54
- end
55
- end
56
- end
57
- end
58
- end
@@ -1,65 +0,0 @@
1
- module TestBench
2
- class Session
3
- module Telemetry
4
- class CaptureSink
5
- class Path
6
- def segments
7
- @segments ||= []
8
- end
9
- attr_writer :segments
10
-
11
- def match?(*segments, segment)
12
- if not segment == self.segments.last
13
- return false
14
- end
15
-
16
- segment_iterator = self.segments.to_enum
17
-
18
- control_segments = [*segments, segment]
19
-
20
- control_segments.all? do |control_segment|
21
- begin
22
- next_segment = segment_iterator.next
23
- end until next_segment == control_segment
24
- true
25
-
26
- rescue StopIteration
27
- false
28
- end
29
- end
30
-
31
- def push_segment(segment)
32
- segments << segment
33
- end
34
- alias :push :push_segment
35
- alias :<< :push
36
-
37
- def pop_segment(compare_segment=nil)
38
- segments.pop
39
- end
40
- alias :pop :pop_segment
41
-
42
- def copy(receiver)
43
- path = self.class.new
44
-
45
- segments.each do |segment|
46
- path << segment
47
- end
48
-
49
- receiver.path = path
50
- path
51
- end
52
-
53
- def eql?(compare)
54
- if compare.is_a?(self.class)
55
- segments == compare.segments
56
- else
57
- false
58
- end
59
- end
60
- alias :== :eql?
61
- end
62
- end
63
- end
64
- end
65
- end