eventmachine 0.12.6-x86-mswin32-60 → 0.12.8-x86-mswin32-60
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/{docs/README → README} +21 -13
- data/Rakefile +14 -4
- data/docs/DEFERRABLES +0 -5
- data/docs/INSTALL +2 -4
- data/docs/LEGAL +1 -1
- data/docs/LIGHTWEIGHT_CONCURRENCY +0 -2
- data/docs/PURE_RUBY +0 -2
- data/docs/RELEASE_NOTES +0 -2
- data/docs/SMTP +0 -7
- data/docs/SPAWNED_PROCESSES +0 -4
- data/docs/TODO +0 -2
- data/eventmachine.gemspec +41 -32
- data/examples/ex_channel.rb +43 -0
- data/examples/ex_queue.rb +2 -0
- data/examples/helper.rb +2 -0
- data/ext/cmain.cpp +685 -586
- data/ext/cplusplus.cpp +15 -6
- data/ext/ed.cpp +1732 -1522
- data/ext/ed.h +407 -380
- data/ext/em.cpp +2263 -1937
- data/ext/em.h +223 -186
- data/ext/eventmachine.h +111 -98
- data/ext/eventmachine_cpp.h +1 -0
- data/ext/extconf.rb +4 -0
- data/ext/kb.cpp +81 -82
- data/ext/pipe.cpp +349 -351
- data/ext/project.h +21 -0
- data/ext/rubymain.cpp +1047 -847
- data/ext/ssl.cpp +38 -1
- data/ext/ssl.h +5 -1
- data/java/src/com/rubyeventmachine/Application.java +7 -3
- data/java/src/com/rubyeventmachine/EmReactor.java +16 -1
- data/java/src/com/rubyeventmachine/tests/ConnectTest.java +25 -3
- data/lib/{protocols → em}/buftok.rb +16 -5
- data/lib/em/callback.rb +26 -0
- data/lib/em/channel.rb +57 -0
- data/lib/em/connection.rb +505 -0
- data/lib/em/deferrable.rb +144 -165
- data/lib/em/file_watch.rb +54 -0
- data/lib/em/future.rb +24 -25
- data/lib/em/messages.rb +1 -1
- data/lib/em/process_watch.rb +44 -0
- data/lib/em/processes.rb +119 -113
- data/lib/em/protocols.rb +35 -0
- data/lib/em/protocols/header_and_content.rb +138 -0
- data/lib/em/protocols/httpclient.rb +263 -0
- data/lib/em/protocols/httpclient2.rb +582 -0
- data/lib/{protocols → em/protocols}/line_and_text.rb +2 -2
- data/lib/em/protocols/linetext2.rb +160 -0
- data/lib/{protocols → em/protocols}/memcache.rb +37 -7
- data/lib/em/protocols/object_protocol.rb +39 -0
- data/lib/em/protocols/postgres3.rb +247 -0
- data/lib/em/protocols/saslauth.rb +175 -0
- data/lib/em/protocols/smtpclient.rb +331 -0
- data/lib/em/protocols/smtpserver.rb +547 -0
- data/lib/em/protocols/stomp.rb +200 -0
- data/lib/{protocols → em/protocols}/tcptest.rb +21 -25
- data/lib/em/queue.rb +61 -0
- data/lib/em/spawnable.rb +53 -56
- data/lib/em/streamer.rb +92 -74
- data/lib/em/timers.rb +55 -0
- data/lib/em/version.rb +3 -0
- data/lib/eventmachine.rb +1636 -1926
- data/lib/evma.rb +1 -1
- data/lib/jeventmachine.rb +106 -101
- data/lib/pr_eventmachine.rb +47 -36
- data/tasks/project.rake +2 -1
- data/tests/client.crt +31 -0
- data/tests/client.key +51 -0
- data/tests/test_attach.rb +18 -0
- data/tests/test_basic.rb +285 -231
- data/tests/test_channel.rb +63 -0
- data/tests/test_connection_count.rb +2 -2
- data/tests/test_epoll.rb +162 -163
- data/tests/test_errors.rb +36 -36
- data/tests/test_exc.rb +22 -25
- data/tests/test_file_watch.rb +49 -0
- data/tests/test_futures.rb +77 -93
- data/tests/test_hc.rb +2 -2
- data/tests/test_httpclient.rb +55 -52
- data/tests/test_httpclient2.rb +153 -155
- data/tests/test_inactivity_timeout.rb +30 -0
- data/tests/test_kb.rb +8 -9
- data/tests/test_ltp2.rb +274 -277
- data/tests/test_next_tick.rb +135 -109
- data/tests/test_object_protocol.rb +37 -0
- data/tests/test_process_watch.rb +48 -0
- data/tests/test_processes.rb +128 -95
- data/tests/test_proxy_connection.rb +92 -0
- data/tests/test_pure.rb +1 -5
- data/tests/test_queue.rb +44 -0
- data/tests/test_running.rb +9 -14
- data/tests/test_sasl.rb +32 -34
- data/tests/test_send_file.rb +175 -176
- data/tests/test_servers.rb +37 -41
- data/tests/test_smtpserver.rb +47 -55
- data/tests/test_spawn.rb +284 -291
- data/tests/test_ssl_args.rb +1 -1
- data/tests/test_ssl_methods.rb +1 -1
- data/tests/test_ssl_verify.rb +82 -0
- data/tests/test_timers.rb +81 -88
- data/tests/test_ud.rb +0 -7
- data/tests/testem.rb +1 -1
- metadata +52 -36
- data/lib/em/eventable.rb +0 -39
- data/lib/eventmachine_version.rb +0 -31
- data/lib/protocols/header_and_content.rb +0 -129
- data/lib/protocols/httpcli2.rb +0 -803
- data/lib/protocols/httpclient.rb +0 -270
- data/lib/protocols/linetext2.rb +0 -161
- data/lib/protocols/postgres.rb +0 -261
- data/lib/protocols/saslauth.rb +0 -179
- data/lib/protocols/smtpclient.rb +0 -308
- data/lib/protocols/smtpserver.rb +0 -556
- data/lib/protocols/stomp.rb +0 -153
- data/tests/test_eventables.rb +0 -77
data/tests/test_ssl_args.rb
CHANGED
data/tests/test_ssl_methods.rb
CHANGED
@@ -0,0 +1,82 @@
|
|
1
|
+
$:.unshift "../lib"
|
2
|
+
require 'eventmachine'
|
3
|
+
require 'test/unit'
|
4
|
+
|
5
|
+
class TestSslVerify < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
$dir = File.dirname(File.expand_path(__FILE__)) + '/'
|
9
|
+
$cert_from_file = File.read($dir+'client.crt')
|
10
|
+
end
|
11
|
+
|
12
|
+
module Client
|
13
|
+
def connection_completed
|
14
|
+
start_tls(:private_key_file => $dir+'client.key', :cert_chain_file => $dir+'client.crt')
|
15
|
+
end
|
16
|
+
|
17
|
+
def ssl_handshake_completed
|
18
|
+
$client_handshake_completed = true
|
19
|
+
close_connection
|
20
|
+
end
|
21
|
+
|
22
|
+
def unbind
|
23
|
+
EM.stop_event_loop
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
module AcceptServer
|
28
|
+
def post_init
|
29
|
+
start_tls(:verify_peer => true)
|
30
|
+
end
|
31
|
+
|
32
|
+
def ssl_verify_peer(cert)
|
33
|
+
$cert_from_server = cert
|
34
|
+
true
|
35
|
+
end
|
36
|
+
|
37
|
+
def ssl_handshake_completed
|
38
|
+
$server_handshake_completed = true
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
module DenyServer
|
43
|
+
def post_init
|
44
|
+
start_tls(:verify_peer => true)
|
45
|
+
end
|
46
|
+
|
47
|
+
def ssl_verify_peer(cert)
|
48
|
+
$cert_from_server = cert
|
49
|
+
# Do not accept the peer. This should now cause the connection to shut down without the SSL handshake being completed.
|
50
|
+
false
|
51
|
+
end
|
52
|
+
|
53
|
+
def ssl_handshake_completed
|
54
|
+
$server_handshake_completed = true
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_accept_server
|
59
|
+
$client_handshake_completed, $server_handshake_completed = false, false
|
60
|
+
EM.run {
|
61
|
+
EM.start_server("127.0.0.1", 16784, AcceptServer)
|
62
|
+
EM.connect("127.0.0.1", 16784, Client).instance_variable_get("@signature")
|
63
|
+
}
|
64
|
+
|
65
|
+
assert_equal($cert_from_file, $cert_from_server)
|
66
|
+
assert($client_handshake_completed)
|
67
|
+
assert($server_handshake_completed)
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_deny_server
|
71
|
+
$client_handshake_completed, $server_handshake_completed = false, false
|
72
|
+
EM.run {
|
73
|
+
EM.start_server("127.0.0.1", 16784, DenyServer)
|
74
|
+
EM.connect("127.0.0.1", 16784, Client)
|
75
|
+
}
|
76
|
+
|
77
|
+
assert_equal($cert_from_file, $cert_from_server)
|
78
|
+
assert(!$client_handshake_completed)
|
79
|
+
assert(!$server_handshake_completed)
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
data/tests/test_timers.rb
CHANGED
@@ -29,120 +29,113 @@ $:.unshift "../lib"
|
|
29
29
|
require 'eventmachine'
|
30
30
|
require 'test/unit'
|
31
31
|
|
32
|
-
|
33
32
|
class TestTimers < Test::Unit::TestCase
|
34
33
|
|
35
|
-
def setup
|
36
|
-
end
|
37
|
-
|
38
|
-
def teardown
|
39
|
-
end
|
40
|
-
|
41
34
|
def test_timer_with_block
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
35
|
+
x = false
|
36
|
+
EventMachine.run {
|
37
|
+
EventMachine::Timer.new(0.25) {
|
38
|
+
x = true
|
39
|
+
EventMachine.stop
|
40
|
+
}
|
41
|
+
}
|
42
|
+
assert x
|
50
43
|
end
|
51
44
|
|
52
45
|
def test_timer_with_proc
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
46
|
+
x = false
|
47
|
+
EventMachine.run {
|
48
|
+
EventMachine::Timer.new(0.25, proc {
|
49
|
+
x = true
|
50
|
+
EventMachine.stop
|
51
|
+
})
|
52
|
+
}
|
53
|
+
assert x
|
61
54
|
end
|
62
55
|
|
63
56
|
def test_timer_cancel
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
57
|
+
x = true
|
58
|
+
EventMachine.run {
|
59
|
+
timer = EventMachine::Timer.new(0.25, proc { x = false })
|
60
|
+
timer.cancel
|
61
|
+
EventMachine::Timer.new(0.5, proc {EventMachine.stop})
|
62
|
+
}
|
63
|
+
assert x
|
71
64
|
end
|
72
65
|
|
73
66
|
def test_periodic_timer
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
67
|
+
x = 0
|
68
|
+
EventMachine.run {
|
69
|
+
EventMachine::PeriodicTimer.new(0.1) do
|
70
|
+
x += 1
|
71
|
+
EventMachine.stop if x == 4
|
72
|
+
end
|
73
|
+
}
|
74
|
+
assert( x == 4 )
|
82
75
|
end
|
83
76
|
|
84
77
|
def test_periodic_timer_cancel
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
78
|
+
x = 0
|
79
|
+
EventMachine.run {
|
80
|
+
pt = EventMachine::PeriodicTimer.new(0.25, proc { x += 1 })
|
81
|
+
pt.cancel
|
82
|
+
EventMachine::Timer.new(0.5) {EventMachine.stop}
|
83
|
+
}
|
84
|
+
assert( x == 0 )
|
92
85
|
end
|
93
86
|
|
94
87
|
def test_periodic_timer_self_cancel
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
88
|
+
x = 0
|
89
|
+
EventMachine.run {
|
90
|
+
pt = EventMachine::PeriodicTimer.new(0.1) {
|
91
|
+
x += 1
|
92
|
+
if x == 4
|
93
|
+
pt.cancel
|
94
|
+
EventMachine.stop
|
95
|
+
end
|
96
|
+
}
|
97
|
+
}
|
98
|
+
assert( x == 4 )
|
106
99
|
end
|
107
100
|
|
108
101
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
102
|
+
# This test is only applicable to compiled versions of the reactor.
|
103
|
+
# Pure ruby and java versions have no built-in limit on the number of outstanding timers.
|
104
|
+
#
|
105
|
+
def test_timer_change_max_outstanding
|
106
|
+
ten_thousand_timers = proc {
|
107
|
+
10000.times {
|
108
|
+
EM.add_timer(5) {}
|
109
|
+
}
|
110
|
+
}
|
111
|
+
|
112
|
+
EM.run {
|
113
|
+
if EM.library_type == :pure_ruby
|
114
|
+
ten_thousand_timers.call
|
115
|
+
elsif EM.library_type == :java
|
116
|
+
ten_thousand_timers.call
|
117
|
+
else
|
118
|
+
begin
|
119
|
+
assert_raises( RuntimeError ) {
|
120
|
+
ten_thousand_timers.call
|
121
|
+
}
|
122
|
+
rescue Object
|
123
|
+
p $!
|
124
|
+
assert(false, $!.message)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
EM.stop
|
128
|
+
}
|
135
129
|
|
136
130
|
assert(!EM.reactor_running?, 'Reactor running when it should not be.')
|
137
131
|
assert( EM.get_max_timers != 10001 )
|
138
132
|
EM.set_max_timers( 10001 )
|
139
133
|
assert( EM.get_max_timers == 10001 )
|
140
134
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
135
|
+
EM.run {
|
136
|
+
ten_thousand_timers.call
|
137
|
+
EM.stop
|
138
|
+
}
|
139
|
+
end
|
146
140
|
|
147
141
|
end
|
148
|
-
|
data/tests/test_ud.rb
CHANGED
data/tests/testem.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eventmachine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.12.
|
4
|
+
version: 0.12.8
|
5
5
|
platform: x86-mswin32-60
|
6
6
|
authors:
|
7
7
|
- Francis Cianfrocca
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-05-23 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -19,24 +19,11 @@ executables: []
|
|
19
19
|
|
20
20
|
extensions: []
|
21
21
|
|
22
|
-
extra_rdoc_files:
|
23
|
-
|
24
|
-
- docs/COPYING
|
25
|
-
- docs/DEFERRABLES
|
26
|
-
- docs/EPOLL
|
27
|
-
- docs/GNU
|
28
|
-
- docs/INSTALL
|
29
|
-
- docs/KEYBOARD
|
30
|
-
- docs/LEGAL
|
31
|
-
- docs/LIGHTWEIGHT_CONCURRENCY
|
32
|
-
- docs/PURE_RUBY
|
33
|
-
- docs/README
|
34
|
-
- docs/RELEASE_NOTES
|
35
|
-
- docs/SMTP
|
36
|
-
- docs/SPAWNED_PROCESSES
|
37
|
-
- docs/TODO
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
38
24
|
files:
|
39
25
|
- .gitignore
|
26
|
+
- README
|
40
27
|
- Rakefile
|
41
28
|
- docs/COPYING
|
42
29
|
- docs/ChangeLog
|
@@ -48,12 +35,14 @@ files:
|
|
48
35
|
- docs/LEGAL
|
49
36
|
- docs/LIGHTWEIGHT_CONCURRENCY
|
50
37
|
- docs/PURE_RUBY
|
51
|
-
- docs/README
|
52
38
|
- docs/RELEASE_NOTES
|
53
39
|
- docs/SMTP
|
54
40
|
- docs/SPAWNED_PROCESSES
|
55
41
|
- docs/TODO
|
56
42
|
- eventmachine.gemspec
|
43
|
+
- examples/ex_channel.rb
|
44
|
+
- examples/ex_queue.rb
|
45
|
+
- examples/helper.rb
|
57
46
|
- ext/binder.cpp
|
58
47
|
- ext/binder.h
|
59
48
|
- ext/cmain.cpp
|
@@ -104,15 +93,36 @@ files:
|
|
104
93
|
- java/src/com/rubyeventmachine/tests/TestDatagrams.java
|
105
94
|
- java/src/com/rubyeventmachine/tests/TestServers.java
|
106
95
|
- java/src/com/rubyeventmachine/tests/TestTimers.java
|
96
|
+
- lib/em/buftok.rb
|
97
|
+
- lib/em/callback.rb
|
98
|
+
- lib/em/channel.rb
|
99
|
+
- lib/em/connection.rb
|
107
100
|
- lib/em/deferrable.rb
|
108
|
-
- lib/em/
|
101
|
+
- lib/em/file_watch.rb
|
109
102
|
- lib/em/future.rb
|
110
103
|
- lib/em/messages.rb
|
104
|
+
- lib/em/process_watch.rb
|
111
105
|
- lib/em/processes.rb
|
106
|
+
- lib/em/protocols.rb
|
107
|
+
- lib/em/protocols/header_and_content.rb
|
108
|
+
- lib/em/protocols/httpclient.rb
|
109
|
+
- lib/em/protocols/httpclient2.rb
|
110
|
+
- lib/em/protocols/line_and_text.rb
|
111
|
+
- lib/em/protocols/linetext2.rb
|
112
|
+
- lib/em/protocols/memcache.rb
|
113
|
+
- lib/em/protocols/object_protocol.rb
|
114
|
+
- lib/em/protocols/postgres3.rb
|
115
|
+
- lib/em/protocols/saslauth.rb
|
116
|
+
- lib/em/protocols/smtpclient.rb
|
117
|
+
- lib/em/protocols/smtpserver.rb
|
118
|
+
- lib/em/protocols/stomp.rb
|
119
|
+
- lib/em/protocols/tcptest.rb
|
120
|
+
- lib/em/queue.rb
|
112
121
|
- lib/em/spawnable.rb
|
113
122
|
- lib/em/streamer.rb
|
123
|
+
- lib/em/timers.rb
|
124
|
+
- lib/em/version.rb
|
114
125
|
- lib/eventmachine.rb
|
115
|
-
- lib/eventmachine_version.rb
|
116
126
|
- lib/evma.rb
|
117
127
|
- lib/evma/callback.rb
|
118
128
|
- lib/evma/container.rb
|
@@ -121,43 +131,38 @@ files:
|
|
121
131
|
- lib/evma/reactor.rb
|
122
132
|
- lib/jeventmachine.rb
|
123
133
|
- lib/pr_eventmachine.rb
|
124
|
-
- lib/protocols/buftok.rb
|
125
|
-
- lib/protocols/header_and_content.rb
|
126
|
-
- lib/protocols/httpcli2.rb
|
127
|
-
- lib/protocols/httpclient.rb
|
128
|
-
- lib/protocols/line_and_text.rb
|
129
|
-
- lib/protocols/linetext2.rb
|
130
|
-
- lib/protocols/memcache.rb
|
131
|
-
- lib/protocols/postgres.rb
|
132
|
-
- lib/protocols/saslauth.rb
|
133
|
-
- lib/protocols/smtpclient.rb
|
134
|
-
- lib/protocols/smtpserver.rb
|
135
|
-
- lib/protocols/stomp.rb
|
136
|
-
- lib/protocols/tcptest.rb
|
137
134
|
- setup.rb
|
138
135
|
- tasks/cpp.rake
|
139
136
|
- tasks/project.rake
|
140
137
|
- tasks/tests.rake
|
138
|
+
- tests/client.crt
|
139
|
+
- tests/client.key
|
141
140
|
- tests/test_attach.rb
|
142
141
|
- tests/test_basic.rb
|
142
|
+
- tests/test_channel.rb
|
143
143
|
- tests/test_connection_count.rb
|
144
144
|
- tests/test_defer.rb
|
145
145
|
- tests/test_epoll.rb
|
146
146
|
- tests/test_error_handler.rb
|
147
147
|
- tests/test_errors.rb
|
148
|
-
- tests/test_eventables.rb
|
149
148
|
- tests/test_exc.rb
|
149
|
+
- tests/test_file_watch.rb
|
150
150
|
- tests/test_futures.rb
|
151
151
|
- tests/test_handler_check.rb
|
152
152
|
- tests/test_hc.rb
|
153
153
|
- tests/test_httpclient.rb
|
154
154
|
- tests/test_httpclient2.rb
|
155
|
+
- tests/test_inactivity_timeout.rb
|
155
156
|
- tests/test_kb.rb
|
156
157
|
- tests/test_ltp.rb
|
157
158
|
- tests/test_ltp2.rb
|
158
159
|
- tests/test_next_tick.rb
|
160
|
+
- tests/test_object_protocol.rb
|
161
|
+
- tests/test_process_watch.rb
|
159
162
|
- tests/test_processes.rb
|
163
|
+
- tests/test_proxy_connection.rb
|
160
164
|
- tests/test_pure.rb
|
165
|
+
- tests/test_queue.rb
|
161
166
|
- tests/test_running.rb
|
162
167
|
- tests/test_sasl.rb
|
163
168
|
- tests/test_send_file.rb
|
@@ -167,6 +172,7 @@ files:
|
|
167
172
|
- tests/test_spawn.rb
|
168
173
|
- tests/test_ssl_args.rb
|
169
174
|
- tests/test_ssl_methods.rb
|
175
|
+
- tests/test_ssl_verify.rb
|
170
176
|
- tests/test_timers.rb
|
171
177
|
- tests/test_ud.rb
|
172
178
|
- tests/testem.rb
|
@@ -180,8 +186,18 @@ rdoc_options:
|
|
180
186
|
- --title
|
181
187
|
- EventMachine
|
182
188
|
- --main
|
183
|
-
-
|
189
|
+
- README
|
184
190
|
- --line-numbers
|
191
|
+
- -x
|
192
|
+
- lib/em/version
|
193
|
+
- -x
|
194
|
+
- lib/emva
|
195
|
+
- -x
|
196
|
+
- lib/evma/
|
197
|
+
- -x
|
198
|
+
- lib/pr_eventmachine
|
199
|
+
- -x
|
200
|
+
- lib/jeventmachine
|
185
201
|
require_paths:
|
186
202
|
- lib
|
187
203
|
required_ruby_version: !ruby/object:Gem::Requirement
|