eventmachine 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,7 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.0.2 (March 8, 2013)
4
+ * binary win32 gems now include fastfilereader shim [#222]
5
+ * fix long-standing connection timeout issues [27fdd5b, igrigorik/em-http-request#222]
6
+ * http and line protocol cleanups [#193, #151]
7
+ * reactor return value cleanup [#225]
8
+ * fix double require from gemspec [#284]
9
+ * fix smtp server reset behavior [#351]
10
+ * fix EM.system argument handling [#322]
11
+ * ruby 1.9 compat in smtp server and stomp protocols [#349, #315]
12
+ * fix pause from post_init [#380]
13
+
3
14
  ## 1.0.1 (February 27, 2013)
4
- * use rb_wait_for_single_fd() on ruby 2.0 to fix rb_thread_select() deprecation
15
+ * use rb_wait_for_single_fd() on ruby 2.0 to fix rb_thread_select() deprecation [#363]
5
16
  * fix epoll/kqueue mode in ruby 2.0 by removing calls to rb_enable_interrupt() [#248, #389]
6
17
  * fix memory leak when verifying ssl cerificates [#403]
7
18
  * fix initial connection delay [#393, #374]
19
+ * fix build on windows [#371]
data/eventmachine.gemspec CHANGED
@@ -1,5 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
- require File.expand_path('../lib/em/version', __FILE__)
2
+ $:.unshift File.expand_path("../lib", __FILE__)
3
+ require "em/version"
4
+
3
5
 
4
6
  Gem::Specification.new do |s|
5
7
  s.name = 'eventmachine'
data/ext/ed.cpp CHANGED
@@ -460,8 +460,7 @@ ConnectionDescriptor::SetConnectPending
460
460
  void ConnectionDescriptor::SetConnectPending(bool f)
461
461
  {
462
462
  bConnectPending = f;
463
- if (f == false && NextHeartbeat)
464
- MyEventMachine->ClearHeartbeat(NextHeartbeat, this);
463
+ MyEventMachine->QueueHeartbeat(this);
465
464
  _UpdateEvents();
466
465
  }
467
466
 
@@ -1447,14 +1446,16 @@ void AcceptorDescriptor::Read()
1447
1446
  (*EventCallback) (GetBinding(), EM_CONNECTION_ACCEPTED, NULL, cd->GetBinding());
1448
1447
  }
1449
1448
  #ifdef HAVE_EPOLL
1450
- cd->GetEpollEvent()->events = EPOLLIN | (cd->SelectForWrite() ? EPOLLOUT : 0);
1449
+ cd->GetEpollEvent()->events =
1450
+ (cd->SelectForRead() ? EPOLLIN : 0) | (cd->SelectForWrite() ? EPOLLOUT : 0);
1451
1451
  #endif
1452
1452
  assert (MyEventMachine);
1453
1453
  MyEventMachine->Add (cd);
1454
1454
  #ifdef HAVE_KQUEUE
1455
1455
  if (cd->SelectForWrite())
1456
1456
  MyEventMachine->ArmKqueueWriter (cd);
1457
- MyEventMachine->ArmKqueueReader (cd);
1457
+ if (cd->SelectForRead())
1458
+ MyEventMachine->ArmKqueueReader (cd);
1458
1459
  #endif
1459
1460
  }
1460
1461
 
data/ext/em.cpp CHANGED
@@ -482,8 +482,7 @@ void EventMachine_t::Run()
482
482
  _AddNewDescriptors();
483
483
  _ModifyDescriptors();
484
484
 
485
- if (!_RunOnce())
486
- break;
485
+ _RunOnce();
487
486
  if (bTerminateSignalReceived)
488
487
  break;
489
488
  }
@@ -494,27 +493,24 @@ void EventMachine_t::Run()
494
493
  EventMachine_t::_RunOnce
495
494
  ************************/
496
495
 
497
- bool EventMachine_t::_RunOnce()
496
+ void EventMachine_t::_RunOnce()
498
497
  {
499
- bool ret;
500
498
  if (bEpoll)
501
- ret = _RunEpollOnce();
499
+ _RunEpollOnce();
502
500
  else if (bKqueue)
503
- ret = _RunKqueueOnce();
501
+ _RunKqueueOnce();
504
502
  else
505
- ret = _RunSelectOnce();
503
+ _RunSelectOnce();
506
504
  _DispatchHeartbeats();
507
505
  _CleanupSockets();
508
- return ret;
509
506
  }
510
507
 
511
508
 
512
-
513
509
  /*****************************
514
510
  EventMachine_t::_RunEpollOnce
515
511
  *****************************/
516
512
 
517
- bool EventMachine_t::_RunEpollOnce()
513
+ void EventMachine_t::_RunEpollOnce()
518
514
  {
519
515
  #ifdef HAVE_EPOLL
520
516
  assert (epfd != -1);
@@ -539,7 +535,7 @@ bool EventMachine_t::_RunEpollOnce()
539
535
  assert(errno != EINVAL);
540
536
  assert(errno != EBADF);
541
537
  }
542
- return true;
538
+ return;
543
539
  }
544
540
 
545
541
  TRAP_BEG;
@@ -577,8 +573,6 @@ bool EventMachine_t::_RunEpollOnce()
577
573
  timeval tv = {0, ((errno == EINTR) ? 5 : 50) * 1000};
578
574
  EmSelect (0, NULL, NULL, NULL, &tv);
579
575
  }
580
-
581
- return true;
582
576
  #else
583
577
  throw std::runtime_error ("epoll is not implemented on this platform");
584
578
  #endif
@@ -589,7 +583,7 @@ bool EventMachine_t::_RunEpollOnce()
589
583
  EventMachine_t::_RunKqueueOnce
590
584
  ******************************/
591
585
 
592
- bool EventMachine_t::_RunKqueueOnce()
586
+ void EventMachine_t::_RunKqueueOnce()
593
587
  {
594
588
  #ifdef HAVE_KQUEUE
595
589
  assert (kqfd != -1);
@@ -618,7 +612,7 @@ bool EventMachine_t::_RunKqueueOnce()
618
612
  assert(errno != EINVAL);
619
613
  assert(errno != EBADF);
620
614
  }
621
- return true;
615
+ return;
622
616
  }
623
617
 
624
618
  TRAP_BEG;
@@ -669,8 +663,6 @@ bool EventMachine_t::_RunKqueueOnce()
669
663
  rb_thread_schedule();
670
664
  }
671
665
  #endif
672
-
673
- return true;
674
666
  #else
675
667
  throw std::runtime_error ("kqueue is not implemented on this platform");
676
668
  #endif
@@ -843,37 +835,17 @@ int SelectData_t::_Select()
843
835
  EventMachine_t::_RunSelectOnce
844
836
  ******************************/
845
837
 
846
- bool EventMachine_t::_RunSelectOnce()
838
+ void EventMachine_t::_RunSelectOnce()
847
839
  {
848
840
  // Crank the event machine once.
849
841
  // If there are no descriptors to process, then sleep
850
842
  // for a few hundred mills to avoid busy-looping.
851
- // Return T/F to indicate whether we should continue.
852
843
  // This is based on a select loop. Alternately provide epoll
853
844
  // if we know we're running on a 2.6 kernel.
854
845
  // epoll will be effective if we provide it as an alternative,
855
846
  // however it has the same problem interoperating with Ruby
856
847
  // threads that select does.
857
848
 
858
- //cerr << "X";
859
-
860
- /* This protection is now obsolete, because we will ALWAYS
861
- * have at least one descriptor (the loop-breaker) to read.
862
- */
863
- /*
864
- if (Descriptors.size() == 0) {
865
- #ifdef OS_UNIX
866
- timeval tv = {0, 200 * 1000};
867
- EmSelect (0, NULL, NULL, NULL, &tv);
868
- return true;
869
- #endif
870
- #ifdef OS_WIN32
871
- Sleep (200);
872
- return true;
873
- #endif
874
- }
875
- */
876
-
877
849
  SelectData_t SelectData;
878
850
  /*
879
851
  fd_set fdreads, fdwrites;
@@ -975,8 +947,6 @@ bool EventMachine_t::_RunSelectOnce()
975
947
  }
976
948
  }
977
949
  }
978
-
979
- return true;
980
950
  }
981
951
 
982
952
  void EventMachine_t::_CleanBadDescriptors()
data/ext/em.h CHANGED
@@ -145,7 +145,7 @@ class EventMachine_t
145
145
  uint64_t GetRealTime();
146
146
 
147
147
  private:
148
- bool _RunOnce();
148
+ void _RunOnce();
149
149
  void _RunTimers();
150
150
  void _UpdateTime();
151
151
  void _AddNewDescriptors();
@@ -153,9 +153,9 @@ class EventMachine_t
153
153
  void _InitializeLoopBreaker();
154
154
  void _CleanupSockets();
155
155
 
156
- bool _RunSelectOnce();
157
- bool _RunEpollOnce();
158
- bool _RunKqueueOnce();
156
+ void _RunSelectOnce();
157
+ void _RunEpollOnce();
158
+ void _RunKqueueOnce();
159
159
 
160
160
  void _ModifyEpollEvent (EventableDescriptor*);
161
161
  void _DispatchHeartbeats();
data/lib/em/processes.rb CHANGED
@@ -114,7 +114,7 @@ module EventMachine
114
114
  init = args.pop if args.last.is_a? Proc
115
115
 
116
116
  # merge remaining arguments into the command
117
- cmd = ([cmd] + args.map{|a|a.to_s.dump}).join(' ')
117
+ cmd = [cmd, *args]
118
118
 
119
119
  EM.get_subprocess_pid(EM.popen(cmd, SystemCmd, cb) do |c|
120
120
  init[c] if init
data/lib/em/protocols.rb CHANGED
@@ -32,5 +32,6 @@ module EventMachine
32
32
  autoload :Postgres3, 'em/protocols/postgres3'
33
33
  autoload :ObjectProtocol, 'em/protocols/object_protocol'
34
34
  autoload :Socks4, 'em/protocols/socks4'
35
+ autoload :LineProtocol, 'em/protocols/line_protocol'
35
36
  end
36
37
  end
@@ -127,7 +127,7 @@ module EventMachine
127
127
  # Allow an override for the host header if it's not the connect-string.
128
128
  host = args[:host_header] || args[:host] || "_"
129
129
  # For now, ALWAYS tuck in the port string, although we may want to omit it if it's the default.
130
- port = args[:port]
130
+ port = args[:port].to_i != 80 ? ":#{args[:port]}" : ""
131
131
 
132
132
  # POST items.
133
133
  postcontenttype = args[:contenttype] || "application/octet-stream"
@@ -138,7 +138,7 @@ module EventMachine
138
138
  # TODO: We ASSUME the caller wants to send a 1.1 request. May not be a good assumption.
139
139
  req = [
140
140
  "#{verb} #{request}#{qs} HTTP/#{version}",
141
- "Host: #{host}:#{port}",
141
+ "Host: #{host}#{port}",
142
142
  "User-agent: Ruby EventMachine",
143
143
  ]
144
144
 
@@ -15,8 +15,8 @@ module EventMachine
15
15
  def receive_data data
16
16
  (@buf ||= '') << data
17
17
 
18
- while line = @buf.slice!(/(.*)\r?\n/)
19
- receive_line(line)
18
+ while @buf.slice!(/(.*?)\r?\n/)
19
+ receive_line($1)
20
20
  end
21
21
  end
22
22
 
@@ -506,11 +506,13 @@ module EventMachine
506
506
  # Since we clear the chunk array every time we submit it, the caller needs to be
507
507
  # aware to do things like dup it if he wants to keep it around across calls.
508
508
  #
509
- # DON'T reset the transaction upon disposition of the incoming message.
510
- # This means another DATA command can be accepted with the same sender and recipients.
511
- # If the client wants to reset, he can call RSET.
512
- # Not sure whether the standard requires a transaction-reset at this point, but it
513
- # appears not to.
509
+ # Resets the transaction upon disposition of the incoming message.
510
+ # RFC5321 says this about the MAIL FROM command:
511
+ # "This command tells the SMTP-receiver that a new mail transaction is
512
+ # starting and to reset all its state tables and buffers, including any
513
+ # recipients or mail data."
514
+ #
515
+ # Equivalent behaviour is implemented by resetting after a completed transaction.
514
516
  #
515
517
  # User-written code can return a Deferrable as a response from receive_message.
516
518
  #
@@ -524,11 +526,12 @@ module EventMachine
524
526
 
525
527
  succeeded = proc {
526
528
  send_data "250 Message accepted\r\n"
529
+ reset_protocol_state
527
530
  }
528
531
  failed = proc {
529
532
  send_data "550 Message rejected\r\n"
533
+ reset_protocol_state
530
534
  }
531
-
532
535
  d = receive_message
533
536
 
534
537
  if d.respond_to?(:set_deferred_status)
@@ -541,7 +544,7 @@ module EventMachine
541
544
  @state.delete :data
542
545
  else
543
546
  # slice off leading . if any
544
- ln.slice!(0...1) if ln[0] == 46
547
+ ln.slice!(0...1) if ln[0] == ?.
545
548
  @databuffer << ln
546
549
  if @databuffer.length > @@parms[:chunksize]
547
550
  receive_data_chunk @databuffer
@@ -104,12 +104,15 @@ module EventMachine
104
104
 
105
105
  # @private
106
106
  def send_frame verb, headers={}, body=""
107
+ body = body.to_s
107
108
  ary = [verb, "\n"]
109
+ body_bytesize = body.bytesize if body.respond_to? :bytesize
110
+ body_bytesize ||= body.size
108
111
  headers.each {|k,v| ary << "#{k}:#{v}\n" }
109
- ary << "content-length: #{body.to_s.length}\n"
112
+ ary << "content-length: #{body_bytesize}\n"
110
113
  ary << "content-type: text/plain; charset=UTF-8\n" unless headers.has_key? 'content-type'
111
114
  ary << "\n"
112
- ary << body.to_s
115
+ ary << body
113
116
  ary << "\0"
114
117
  send_data ary.join
115
118
  end
data/lib/em/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module EventMachine
2
- VERSION = "1.0.1"
2
+ VERSION = "1.0.2"
3
3
  end
data/lib/eventmachine.rb CHANGED
@@ -1156,7 +1156,12 @@ module EventMachine
1156
1156
  # Perhaps misnamed since the underlying function uses socketpair and is full-duplex.
1157
1157
 
1158
1158
  klass = klass_from_handler(Connection, handler, *args)
1159
- w = Shellwords::shellwords( cmd )
1159
+ w = case cmd
1160
+ when Array
1161
+ cmd
1162
+ when String
1163
+ Shellwords::shellwords( cmd )
1164
+ end
1160
1165
  w.unshift( w.first ) if w.first
1161
1166
  s = invoke_popen( w )
1162
1167
  c = klass.new s, *args
data/rakelib/package.rake CHANGED
@@ -26,24 +26,29 @@ else
26
26
  unless RUBY_PLATFORM =~ /mswin|mingw/
27
27
  ext.cross_compile = true
28
28
  ext.cross_platform = ['x86-mingw32', 'x86-mswin32-60']
29
-
30
- # inject 1.8/1.9 pure-ruby entry point
31
- ext.cross_compiling do |spec|
32
- spec.files += ["lib/#{ext.name}.rb"]
33
- end
29
+ end
30
+ end
31
+ def hack_cross_compilation(ext)
32
+ # inject 1.8/1.9 pure-ruby entry point
33
+ # HACK: add these dependencies to the task instead of using cross_compiling
34
+ ext.cross_platform.each do |platform|
35
+ Rake::Task["native:#{GEMSPEC.name}:#{platform}"].prerequisites.unshift "lib/#{ext.name}.rb"
34
36
  end
35
37
  end
36
38
 
37
- Rake::ExtensionTask.new("rubyeventmachine", GEMSPEC) do |ext|
39
+ em = Rake::ExtensionTask.new("rubyeventmachine", GEMSPEC) do |ext|
38
40
  ext.ext_dir = 'ext'
39
41
  ext.source_pattern = '*.{h,c,cpp}'
40
42
  setup_cross_compilation(ext)
41
43
  end
42
- Rake::ExtensionTask.new("fastfilereaderext", GEMSPEC) do |ext|
44
+ hack_cross_compilation em
45
+
46
+ ff = Rake::ExtensionTask.new("fastfilereaderext", GEMSPEC) do |ext|
43
47
  ext.ext_dir = 'ext/fastfilereader'
44
48
  ext.source_pattern = '*.{h,c,cpp}'
45
49
  setup_cross_compilation(ext)
46
50
  end
51
+ hack_cross_compilation ff
47
52
  end
48
53
 
49
54
  # Setup shim files that require 1.8 vs 1.9 extensions in win32 bin gems
@@ -0,0 +1,33 @@
1
+ require 'em_test_helper'
2
+
3
+ class TestLineProtocol < Test::Unit::TestCase
4
+ class LineProtocolTestClass
5
+ include EM::Protocols::LineProtocol
6
+
7
+ def lines
8
+ @lines ||= []
9
+ end
10
+
11
+ def receive_line(line)
12
+ lines << line
13
+ end
14
+ end
15
+
16
+ def setup
17
+ @proto = LineProtocolTestClass.new
18
+ end
19
+
20
+ def test_simple_split_line
21
+ @proto.receive_data("this is")
22
+ assert_equal([], @proto.lines)
23
+
24
+ @proto.receive_data(" a test\n")
25
+ assert_equal(["this is a test"], @proto.lines)
26
+ end
27
+
28
+ def test_simple_lines
29
+ @proto.receive_data("aaa\nbbb\r\nccc\nddd")
30
+ assert_equal(%w(aaa bbb ccc), @proto.lines)
31
+ end
32
+
33
+ end
@@ -0,0 +1,37 @@
1
+ require 'em_test_helper'
2
+
3
+ class TestStomp < Test::Unit::TestCase
4
+ CONTENT_LENGTH_REGEX = /^content-length: (\d+)$/
5
+
6
+ def bytesize(str)
7
+ str = str.to_s
8
+ size = str.bytesize if str.respond_to?(:bytesize) # bytesize added in 1.9
9
+ size || str.size
10
+ end
11
+
12
+ def test_content_length_in_bytes
13
+ connection = Object.new
14
+ connection.instance_eval do
15
+ extend EM::P::Stomp
16
+
17
+ def last_sent_content_length
18
+ @sent && Integer(@sent[CONTENT_LENGTH_REGEX, 1])
19
+ end
20
+
21
+ def send_data(string)
22
+ @sent = string
23
+ end
24
+ end
25
+
26
+ queue = "queue"
27
+ failure_message = "header content-length is not the byte size of last sent body"
28
+
29
+ body = "test"
30
+ connection.send queue, body
31
+ assert_equal bytesize(body), connection.last_sent_content_length, failure_message
32
+
33
+ body = "test\u221A"
34
+ connection.send queue, body
35
+ assert_equal bytesize(body), connection.last_sent_content_length, failure_message
36
+ end
37
+ end
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ require 'em_test_helper'
3
+
4
+ class TestSystem < Test::Unit::TestCase
5
+ def setup
6
+ @filename = File.expand_path("../я манал dump.txt", __FILE__)
7
+ @test_data = 'a' * 100
8
+ File.open(@filename, 'w'){|f| f.write(@test_data)}
9
+ end
10
+
11
+ def test_system
12
+ result = nil
13
+ status = nil
14
+ EM.run {
15
+ EM.system('cat', @filename){|out, state|
16
+ result = out
17
+ status = state.exitstatus
18
+ EM.stop
19
+ }
20
+ }
21
+ assert_equal(0, status)
22
+ assert_equal(@test_data, result)
23
+ end
24
+
25
+ def teardown
26
+ File.unlink(@filename)
27
+ end
28
+ end
metadata CHANGED
@@ -1,49 +1,70 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: eventmachine
3
- version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 1.0.1
3
+ version: !ruby/object:Gem::Version
4
+ hash: 19
5
+ prerelease:
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 2
10
+ version: 1.0.2
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Francis Cianfrocca
9
14
  - Aman Gupta
10
- autorequire:
15
+ autorequire:
11
16
  bindir: bin
12
17
  cert_chain: []
13
- date: 2013-02-28 00:00:00.000000000 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
18
+
19
+ date: 2013-03-08 00:00:00 Z
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
16
22
  name: rake-compiler
17
- version_requirements: !ruby/object:Gem::Requirement
18
- requirements:
19
- - - "~>"
20
- - !ruby/object:Gem::Version
21
- version: 0.8.3
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
22
25
  none: false
23
- requirement: !ruby/object:Gem::Requirement
24
- requirements:
25
- - - "~>"
26
- - !ruby/object:Gem::Version
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 57
30
+ segments:
31
+ - 0
32
+ - 8
33
+ - 3
27
34
  version: 0.8.3
28
- none: false
29
- prerelease: false
30
35
  type: :development
31
- - !ruby/object:Gem::Dependency
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
32
38
  name: yard
33
- version_requirements: !ruby/object:Gem::Requirement
34
- requirements:
35
- - - ">="
36
- - !ruby/object:Gem::Version
37
- version: 0.8.5.2
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
38
41
  none: false
39
- requirement: !ruby/object:Gem::Requirement
40
- requirements:
42
+ requirements:
41
43
  - - ">="
42
- - !ruby/object:Gem::Version
44
+ - !ruby/object:Gem::Version
45
+ hash: 31
46
+ segments:
47
+ - 0
48
+ - 8
49
+ - 5
50
+ - 2
43
51
  version: 0.8.5.2
44
- none: false
52
+ type: :development
53
+ version_requirements: *id002
54
+ - !ruby/object:Gem::Dependency
55
+ name: bluecloth
45
56
  prerelease: false
57
+ requirement: &id003 !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ hash: 3
63
+ segments:
64
+ - 0
65
+ version: "0"
46
66
  type: :development
67
+ version_requirements: *id003
47
68
  description: |-
48
69
  EventMachine implements a fast, single-threaded engine for arbitrary network
49
70
  communications. It's extremely easy to use in Ruby. EventMachine wraps all
@@ -55,14 +76,15 @@ description: |-
55
76
  are provided with the package, primarily to serve as examples. The real goal
56
77
  of EventMachine is to enable programs to easily interface with other programs
57
78
  using TCP/IP, especially if custom protocols are required.
58
- email:
79
+ email:
59
80
  - garbagecat10@gmail.com
60
81
  - aman@tmm1.net
61
82
  executables: []
62
- extensions:
83
+
84
+ extensions:
63
85
  - ext/extconf.rb
64
86
  - ext/fastfilereader/extconf.rb
65
- extra_rdoc_files:
87
+ extra_rdoc_files:
66
88
  - README.md
67
89
  - docs/DocumentationGuidesIndex.md
68
90
  - docs/GettingStarted.md
@@ -78,10 +100,10 @@ extra_rdoc_files:
78
100
  - docs/old/SMTP
79
101
  - docs/old/SPAWNED_PROCESSES
80
102
  - docs/old/TODO
81
- files:
82
- - ".gitignore"
83
- - ".travis.yml"
84
- - ".yardopts"
103
+ files:
104
+ - .gitignore
105
+ - .travis.yml
106
+ - .yardopts
85
107
  - CHANGELOG.md
86
108
  - GNU
87
109
  - Gemfile
@@ -211,6 +233,7 @@ files:
211
233
  - tests/test_idle_connection.rb
212
234
  - tests/test_inactivity_timeout.rb
213
235
  - tests/test_kb.rb
236
+ - tests/test_line_protocol.rb
214
237
  - tests/test_ltp.rb
215
238
  - tests/test_ltp2.rb
216
239
  - tests/test_next_tick.rb
@@ -236,6 +259,8 @@ files:
236
259
  - tests/test_ssl_args.rb
237
260
  - tests/test_ssl_methods.rb
238
261
  - tests/test_ssl_verify.rb
262
+ - tests/test_stomp.rb
263
+ - tests/test_system.rb
239
264
  - tests/test_threaded_resource.rb
240
265
  - tests/test_tick_loop.rb
241
266
  - tests/test_timers.rb
@@ -243,42 +268,43 @@ files:
243
268
  - tests/test_unbind_reason.rb
244
269
  homepage: http://rubyeventmachine.com
245
270
  licenses: []
246
- post_install_message:
247
- rdoc_options:
248
- - "--title"
271
+
272
+ post_install_message:
273
+ rdoc_options:
274
+ - --title
249
275
  - EventMachine
250
- - "--main"
276
+ - --main
251
277
  - README.md
252
- - "-x"
278
+ - -x
253
279
  - lib/em/version
254
- - "-x"
280
+ - -x
255
281
  - lib/jeventmachine
256
- require_paths:
282
+ require_paths:
257
283
  - lib
258
- required_ruby_version: !ruby/object:Gem::Requirement
259
- requirements:
284
+ required_ruby_version: !ruby/object:Gem::Requirement
285
+ none: false
286
+ requirements:
260
287
  - - ">="
261
- - !ruby/object:Gem::Version
262
- segments:
288
+ - !ruby/object:Gem::Version
289
+ hash: 3
290
+ segments:
263
291
  - 0
264
- hash: 2
265
- version: !binary |-
266
- MA==
292
+ version: "0"
293
+ required_rubygems_version: !ruby/object:Gem::Requirement
267
294
  none: false
268
- required_rubygems_version: !ruby/object:Gem::Requirement
269
- requirements:
295
+ requirements:
270
296
  - - ">="
271
- - !ruby/object:Gem::Version
272
- segments:
297
+ - !ruby/object:Gem::Version
298
+ hash: 3
299
+ segments:
273
300
  - 0
274
- hash: 2
275
- version: !binary |-
276
- MA==
277
- none: false
301
+ version: "0"
278
302
  requirements: []
303
+
279
304
  rubyforge_project: eventmachine
280
305
  rubygems_version: 1.8.24
281
- signing_key:
306
+ signing_key:
282
307
  specification_version: 3
283
308
  summary: Ruby/EventMachine library
284
309
  test_files: []
310
+