sidekick-client 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (162) hide show
  1. data/VERSION +1 -1
  2. data/lib/sidekick/client/sidekick_client.rb +0 -3
  3. data/lib/sidekick/shared/sidekick_queue_publisher.rb +1 -1
  4. data/sidekick-client.gemspec +1 -158
  5. metadata +1 -158
  6. data/lib/ext/eventmachine-0.12.10/.gitignore +0 -14
  7. data/lib/ext/eventmachine-0.12.10/README +0 -82
  8. data/lib/ext/eventmachine-0.12.10/Rakefile +0 -374
  9. data/lib/ext/eventmachine-0.12.10/docs/COPYING +0 -60
  10. data/lib/ext/eventmachine-0.12.10/docs/ChangeLog +0 -211
  11. data/lib/ext/eventmachine-0.12.10/docs/DEFERRABLES +0 -133
  12. data/lib/ext/eventmachine-0.12.10/docs/EPOLL +0 -141
  13. data/lib/ext/eventmachine-0.12.10/docs/GNU +0 -281
  14. data/lib/ext/eventmachine-0.12.10/docs/INSTALL +0 -13
  15. data/lib/ext/eventmachine-0.12.10/docs/KEYBOARD +0 -38
  16. data/lib/ext/eventmachine-0.12.10/docs/LEGAL +0 -25
  17. data/lib/ext/eventmachine-0.12.10/docs/LIGHTWEIGHT_CONCURRENCY +0 -70
  18. data/lib/ext/eventmachine-0.12.10/docs/PURE_RUBY +0 -75
  19. data/lib/ext/eventmachine-0.12.10/docs/RELEASE_NOTES +0 -94
  20. data/lib/ext/eventmachine-0.12.10/docs/SMTP +0 -2
  21. data/lib/ext/eventmachine-0.12.10/docs/SPAWNED_PROCESSES +0 -89
  22. data/lib/ext/eventmachine-0.12.10/docs/TODO +0 -8
  23. data/lib/ext/eventmachine-0.12.10/eventmachine.gemspec +0 -40
  24. data/lib/ext/eventmachine-0.12.10/examples/ex_channel.rb +0 -43
  25. data/lib/ext/eventmachine-0.12.10/examples/ex_queue.rb +0 -2
  26. data/lib/ext/eventmachine-0.12.10/examples/helper.rb +0 -2
  27. data/lib/ext/eventmachine-0.12.10/ext/binder.cpp +0 -125
  28. data/lib/ext/eventmachine-0.12.10/ext/binder.h +0 -46
  29. data/lib/ext/eventmachine-0.12.10/ext/cmain.cpp +0 -827
  30. data/lib/ext/eventmachine-0.12.10/ext/cplusplus.cpp +0 -202
  31. data/lib/ext/eventmachine-0.12.10/ext/ed.cpp +0 -1893
  32. data/lib/ext/eventmachine-0.12.10/ext/ed.h +0 -424
  33. data/lib/ext/eventmachine-0.12.10/ext/em.cpp +0 -2282
  34. data/lib/ext/eventmachine-0.12.10/ext/em.h +0 -232
  35. data/lib/ext/eventmachine-0.12.10/ext/emwin.cpp +0 -300
  36. data/lib/ext/eventmachine-0.12.10/ext/emwin.h +0 -94
  37. data/lib/ext/eventmachine-0.12.10/ext/epoll.cpp +0 -26
  38. data/lib/ext/eventmachine-0.12.10/ext/epoll.h +0 -25
  39. data/lib/ext/eventmachine-0.12.10/ext/eventmachine.h +0 -122
  40. data/lib/ext/eventmachine-0.12.10/ext/eventmachine_cpp.h +0 -96
  41. data/lib/ext/eventmachine-0.12.10/ext/extconf.rb +0 -148
  42. data/lib/ext/eventmachine-0.12.10/ext/fastfilereader/extconf.rb +0 -83
  43. data/lib/ext/eventmachine-0.12.10/ext/fastfilereader/mapper.cpp +0 -214
  44. data/lib/ext/eventmachine-0.12.10/ext/fastfilereader/mapper.h +0 -59
  45. data/lib/ext/eventmachine-0.12.10/ext/fastfilereader/rubymain.cpp +0 -127
  46. data/lib/ext/eventmachine-0.12.10/ext/files.cpp +0 -94
  47. data/lib/ext/eventmachine-0.12.10/ext/files.h +0 -65
  48. data/lib/ext/eventmachine-0.12.10/ext/kb.cpp +0 -81
  49. data/lib/ext/eventmachine-0.12.10/ext/page.cpp +0 -107
  50. data/lib/ext/eventmachine-0.12.10/ext/page.h +0 -51
  51. data/lib/ext/eventmachine-0.12.10/ext/pipe.cpp +0 -349
  52. data/lib/ext/eventmachine-0.12.10/ext/project.h +0 -151
  53. data/lib/ext/eventmachine-0.12.10/ext/rubymain.cpp +0 -1166
  54. data/lib/ext/eventmachine-0.12.10/ext/sigs.cpp +0 -89
  55. data/lib/ext/eventmachine-0.12.10/ext/sigs.h +0 -32
  56. data/lib/ext/eventmachine-0.12.10/ext/ssl.cpp +0 -460
  57. data/lib/ext/eventmachine-0.12.10/ext/ssl.h +0 -94
  58. data/lib/ext/eventmachine-0.12.10/java/.classpath +0 -8
  59. data/lib/ext/eventmachine-0.12.10/java/.project +0 -17
  60. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EmReactor.java +0 -570
  61. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EmReactorException.java +0 -40
  62. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EventableChannel.java +0 -69
  63. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EventableDatagramChannel.java +0 -189
  64. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EventableSocketChannel.java +0 -364
  65. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/Application.java +0 -194
  66. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/Connection.java +0 -74
  67. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/ConnectionFactory.java +0 -37
  68. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/DefaultConnectionFactory.java +0 -46
  69. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/PeriodicTimer.java +0 -38
  70. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/Timer.java +0 -54
  71. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/ApplicationTest.java +0 -109
  72. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/ConnectTest.java +0 -148
  73. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/EMTest.java +0 -80
  74. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/TestDatagrams.java +0 -53
  75. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/TestServers.java +0 -75
  76. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/TestTimers.java +0 -90
  77. data/lib/ext/eventmachine-0.12.10/lib/em/buftok.rb +0 -138
  78. data/lib/ext/eventmachine-0.12.10/lib/em/callback.rb +0 -26
  79. data/lib/ext/eventmachine-0.12.10/lib/em/channel.rb +0 -57
  80. data/lib/ext/eventmachine-0.12.10/lib/em/connection.rb +0 -564
  81. data/lib/ext/eventmachine-0.12.10/lib/em/deferrable.rb +0 -192
  82. data/lib/ext/eventmachine-0.12.10/lib/em/file_watch.rb +0 -54
  83. data/lib/ext/eventmachine-0.12.10/lib/em/future.rb +0 -61
  84. data/lib/ext/eventmachine-0.12.10/lib/em/messages.rb +0 -66
  85. data/lib/ext/eventmachine-0.12.10/lib/em/process_watch.rb +0 -44
  86. data/lib/ext/eventmachine-0.12.10/lib/em/processes.rb +0 -119
  87. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/header_and_content.rb +0 -138
  88. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/httpclient.rb +0 -263
  89. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/httpclient2.rb +0 -590
  90. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/line_and_text.rb +0 -125
  91. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/linetext2.rb +0 -161
  92. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/memcache.rb +0 -323
  93. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/object_protocol.rb +0 -45
  94. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/postgres3.rb +0 -247
  95. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/saslauth.rb +0 -175
  96. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/smtpclient.rb +0 -357
  97. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/smtpserver.rb +0 -547
  98. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/socks4.rb +0 -66
  99. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/stomp.rb +0 -200
  100. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/tcptest.rb +0 -53
  101. data/lib/ext/eventmachine-0.12.10/lib/em/protocols.rb +0 -36
  102. data/lib/ext/eventmachine-0.12.10/lib/em/queue.rb +0 -61
  103. data/lib/ext/eventmachine-0.12.10/lib/em/spawnable.rb +0 -85
  104. data/lib/ext/eventmachine-0.12.10/lib/em/streamer.rb +0 -130
  105. data/lib/ext/eventmachine-0.12.10/lib/em/timers.rb +0 -56
  106. data/lib/ext/eventmachine-0.12.10/lib/em/version.rb +0 -3
  107. data/lib/ext/eventmachine-0.12.10/lib/eventmachine.rb +0 -1592
  108. data/lib/ext/eventmachine-0.12.10/lib/evma/callback.rb +0 -32
  109. data/lib/ext/eventmachine-0.12.10/lib/evma/container.rb +0 -75
  110. data/lib/ext/eventmachine-0.12.10/lib/evma/factory.rb +0 -77
  111. data/lib/ext/eventmachine-0.12.10/lib/evma/protocol.rb +0 -87
  112. data/lib/ext/eventmachine-0.12.10/lib/evma/reactor.rb +0 -48
  113. data/lib/ext/eventmachine-0.12.10/lib/evma.rb +0 -32
  114. data/lib/ext/eventmachine-0.12.10/lib/jeventmachine.rb +0 -257
  115. data/lib/ext/eventmachine-0.12.10/lib/pr_eventmachine.rb +0 -1022
  116. data/lib/ext/eventmachine-0.12.10/setup.rb +0 -1585
  117. data/lib/ext/eventmachine-0.12.10/tasks/cpp.rake_example +0 -77
  118. data/lib/ext/eventmachine-0.12.10/tests/client.crt +0 -31
  119. data/lib/ext/eventmachine-0.12.10/tests/client.key +0 -51
  120. data/lib/ext/eventmachine-0.12.10/tests/test_attach.rb +0 -126
  121. data/lib/ext/eventmachine-0.12.10/tests/test_basic.rb +0 -284
  122. data/lib/ext/eventmachine-0.12.10/tests/test_channel.rb +0 -63
  123. data/lib/ext/eventmachine-0.12.10/tests/test_connection_count.rb +0 -35
  124. data/lib/ext/eventmachine-0.12.10/tests/test_defer.rb +0 -47
  125. data/lib/ext/eventmachine-0.12.10/tests/test_epoll.rb +0 -160
  126. data/lib/ext/eventmachine-0.12.10/tests/test_error_handler.rb +0 -35
  127. data/lib/ext/eventmachine-0.12.10/tests/test_errors.rb +0 -82
  128. data/lib/ext/eventmachine-0.12.10/tests/test_exc.rb +0 -55
  129. data/lib/ext/eventmachine-0.12.10/tests/test_file_watch.rb +0 -49
  130. data/lib/ext/eventmachine-0.12.10/tests/test_futures.rb +0 -198
  131. data/lib/ext/eventmachine-0.12.10/tests/test_get_sock_opt.rb +0 -30
  132. data/lib/ext/eventmachine-0.12.10/tests/test_handler_check.rb +0 -37
  133. data/lib/ext/eventmachine-0.12.10/tests/test_hc.rb +0 -218
  134. data/lib/ext/eventmachine-0.12.10/tests/test_httpclient.rb +0 -218
  135. data/lib/ext/eventmachine-0.12.10/tests/test_httpclient2.rb +0 -153
  136. data/lib/ext/eventmachine-0.12.10/tests/test_inactivity_timeout.rb +0 -50
  137. data/lib/ext/eventmachine-0.12.10/tests/test_kb.rb +0 -60
  138. data/lib/ext/eventmachine-0.12.10/tests/test_ltp.rb +0 -182
  139. data/lib/ext/eventmachine-0.12.10/tests/test_ltp2.rb +0 -317
  140. data/lib/ext/eventmachine-0.12.10/tests/test_next_tick.rb +0 -133
  141. data/lib/ext/eventmachine-0.12.10/tests/test_object_protocol.rb +0 -37
  142. data/lib/ext/eventmachine-0.12.10/tests/test_pause.rb +0 -70
  143. data/lib/ext/eventmachine-0.12.10/tests/test_pending_connect_timeout.rb +0 -48
  144. data/lib/ext/eventmachine-0.12.10/tests/test_process_watch.rb +0 -48
  145. data/lib/ext/eventmachine-0.12.10/tests/test_processes.rb +0 -128
  146. data/lib/ext/eventmachine-0.12.10/tests/test_proxy_connection.rb +0 -92
  147. data/lib/ext/eventmachine-0.12.10/tests/test_pure.rb +0 -125
  148. data/lib/ext/eventmachine-0.12.10/tests/test_queue.rb +0 -44
  149. data/lib/ext/eventmachine-0.12.10/tests/test_running.rb +0 -42
  150. data/lib/ext/eventmachine-0.12.10/tests/test_sasl.rb +0 -72
  151. data/lib/ext/eventmachine-0.12.10/tests/test_send_file.rb +0 -242
  152. data/lib/ext/eventmachine-0.12.10/tests/test_servers.rb +0 -76
  153. data/lib/ext/eventmachine-0.12.10/tests/test_smtpclient.rb +0 -83
  154. data/lib/ext/eventmachine-0.12.10/tests/test_smtpserver.rb +0 -85
  155. data/lib/ext/eventmachine-0.12.10/tests/test_spawn.rb +0 -322
  156. data/lib/ext/eventmachine-0.12.10/tests/test_ssl_args.rb +0 -79
  157. data/lib/ext/eventmachine-0.12.10/tests/test_ssl_methods.rb +0 -50
  158. data/lib/ext/eventmachine-0.12.10/tests/test_ssl_verify.rb +0 -82
  159. data/lib/ext/eventmachine-0.12.10/tests/test_timers.rb +0 -162
  160. data/lib/ext/eventmachine-0.12.10/tests/test_ud.rb +0 -36
  161. data/lib/ext/eventmachine-0.12.10/tests/testem.rb +0 -31
  162. data/lib/ext/eventmachine-0.12.10/web/whatis +0 -7
@@ -1,192 +0,0 @@
1
- #--
2
- #
3
- # Author:: Francis Cianfrocca (gmail: blackhedd)
4
- # Homepage:: http://rubyeventmachine.com
5
- # Date:: 16 Jul 2006
6
- #
7
- # See EventMachine and EventMachine::Connection for documentation and
8
- # usage examples.
9
- #
10
- #----------------------------------------------------------------------------
11
- #
12
- # Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
13
- # Gmail: blackhedd
14
- #
15
- # This program is free software; you can redistribute it and/or modify
16
- # it under the terms of either: 1) the GNU General Public License
17
- # as published by the Free Software Foundation; either version 2 of the
18
- # License, or (at your option) any later version; or 2) Ruby's License.
19
- #
20
- # See the file COPYING for complete licensing information.
21
- #
22
- #---------------------------------------------------------------------------
23
- #
24
- #
25
-
26
- module EventMachine
27
- module Deferrable
28
-
29
- # Specify a block to be executed if and when the Deferrable object receives
30
- # a status of :succeeded. See #set_deferred_status for more information.
31
- #
32
- # Calling this method on a Deferrable object whose status is not yet known
33
- # will cause the callback block to be stored on an internal list.
34
- # If you call this method on a Deferrable whose status is :succeeded, the
35
- # block will be executed immediately, receiving the parameters given to the
36
- # prior #set_deferred_status call.
37
- #
38
- #--
39
- # If there is no status, add a callback to an internal list.
40
- # If status is succeeded, execute the callback immediately.
41
- # If status is failed, do nothing.
42
- #
43
- def callback &block
44
- return unless block
45
- @deferred_status ||= :unknown
46
- if @deferred_status == :succeeded
47
- block.call(*@deferred_args)
48
- elsif @deferred_status != :failed
49
- @callbacks ||= []
50
- @callbacks.unshift block # << block
51
- end
52
- end
53
-
54
- # Specify a block to be executed if and when the Deferrable object receives
55
- # a status of :failed. See #set_deferred_status for more information.
56
- #--
57
- # If there is no status, add an errback to an internal list.
58
- # If status is failed, execute the errback immediately.
59
- # If status is succeeded, do nothing.
60
- #
61
- def errback &block
62
- return unless block
63
- @deferred_status ||= :unknown
64
- if @deferred_status == :failed
65
- block.call(*@deferred_args)
66
- elsif @deferred_status != :succeeded
67
- @errbacks ||= []
68
- @errbacks.unshift block # << block
69
- end
70
- end
71
-
72
- # Sets the "disposition" (status) of the Deferrable object. See also the large set of
73
- # sugarings for this method.
74
- # Note that if you call this method without arguments,
75
- # no arguments will be passed to the callback/errback.
76
- # If the user has coded these with arguments, then the
77
- # user code will throw an argument exception.
78
- # Implementors of deferrable classes <b>must</b>
79
- # document the arguments they will supply to user callbacks.
80
- #
81
- # OBSERVE SOMETHING VERY SPECIAL here: you may call this method even
82
- # on the INSIDE of a callback. This is very useful when a previously-registered
83
- # callback wants to change the parameters that will be passed to subsequently-registered
84
- # ones.
85
- #
86
- # You may give either :succeeded or :failed as the status argument.
87
- #
88
- # If you pass :succeeded, then all of the blocks passed to the object using the #callback
89
- # method (if any) will be executed BEFORE the #set_deferred_status method returns. All of the blocks
90
- # passed to the object using #errback will be discarded.
91
- #
92
- # If you pass :failed, then all of the blocks passed to the object using the #errback
93
- # method (if any) will be executed BEFORE the #set_deferred_status method returns. All of the blocks
94
- # passed to the object using # callback will be discarded.
95
- #
96
- # If you pass any arguments to #set_deferred_status in addition to the status argument,
97
- # they will be passed as arguments to any callbacks or errbacks that are executed.
98
- # It's your responsibility to ensure that the argument lists specified in your callbacks and
99
- # errbacks match the arguments given in calls to #set_deferred_status, otherwise Ruby will raise
100
- # an ArgumentError.
101
- #
102
- #--
103
- # We're shifting callbacks off and discarding them as we execute them.
104
- # This is valid because by definition callbacks are executed no more than
105
- # once. It also has the magic effect of permitting recursive calls, which
106
- # means that a callback can call #set_deferred_status and change the parameters
107
- # that will be sent to subsequent callbacks down the chain.
108
- #
109
- # Changed @callbacks and @errbacks from push/shift to unshift/pop, per suggestion
110
- # by Kirk Haines, to work around the memory leak bug that still exists in many Ruby
111
- # versions.
112
- #
113
- # Changed 15Sep07: after processing callbacks or errbacks, CLEAR the other set of
114
- # handlers. This gets us a little closer to the behavior of Twisted's "deferred,"
115
- # which only allows status to be set once. Prior to making this change, it was possible
116
- # to "succeed" a Deferrable (triggering its callbacks), and then immediately "fail" it,
117
- # triggering its errbacks! That is clearly undesirable, but it's just as undesirable
118
- # to raise an exception is status is set more than once on a Deferrable. The latter
119
- # behavior would invalidate the idiom of resetting arguments by setting status from
120
- # within a callback or errback, but more seriously it would cause spurious errors
121
- # if a Deferrable was timed out and then an attempt was made to succeed it. See the
122
- # comments under the new method #timeout.
123
- #
124
- def set_deferred_status status, *args
125
- cancel_timeout
126
- @errbacks ||= nil
127
- @callbacks ||= nil
128
- @deferred_status = status
129
- @deferred_args = args
130
- case @deferred_status
131
- when :succeeded
132
- if @callbacks
133
- while cb = @callbacks.pop
134
- cb.call(*@deferred_args)
135
- end
136
- end
137
- @errbacks.clear if @errbacks
138
- when :failed
139
- if @errbacks
140
- while eb = @errbacks.pop
141
- eb.call(*@deferred_args)
142
- end
143
- end
144
- @callbacks.clear if @callbacks
145
- end
146
- end
147
-
148
-
149
- # Setting a timeout on a Deferrable causes it to go into the failed state after
150
- # the Timeout expires (passing no arguments to the object's errbacks).
151
- # Setting the status at any time prior to a call to the expiration of the timeout
152
- # will cause the timer to be cancelled.
153
- def timeout seconds
154
- cancel_timeout
155
- me = self
156
- @deferred_timeout = EventMachine::Timer.new(seconds) {me.fail}
157
- end
158
-
159
- # Cancels an outstanding timeout if any. Undoes the action of #timeout.
160
- #
161
- def cancel_timeout
162
- @deferred_timeout ||= nil
163
- if @deferred_timeout
164
- @deferred_timeout.cancel
165
- @deferred_timeout = nil
166
- end
167
- end
168
-
169
-
170
- # Sugar for set_deferred_status(:succeeded, ...)
171
- #
172
- def succeed *args
173
- set_deferred_status :succeeded, *args
174
- end
175
- alias set_deferred_success succeed
176
-
177
- # Sugar for set_deferred_status(:failed, ...)
178
- #
179
- def fail *args
180
- set_deferred_status :failed, *args
181
- end
182
- alias set_deferred_failure fail
183
- end
184
-
185
-
186
- # DefaultDeferrable is an otherwise empty class that includes Deferrable.
187
- # This is very useful when you just need to return a Deferrable object
188
- # as a way of communicating deferred status to some other part of a program.
189
- class DefaultDeferrable
190
- include Deferrable
191
- end
192
- end
@@ -1,54 +0,0 @@
1
- module EventMachine
2
-
3
- # This is subclassed from EventMachine::Connection for use with the file monitoring API. Read the
4
- # documentation on the instance methods of this class, and for a full explanation see EventMachine.watch_file.
5
- class FileWatch < Connection
6
- # :stopdoc:
7
- Cmodified = 'modified'.freeze
8
- Cdeleted = 'deleted'.freeze
9
- Cmoved = 'moved'.freeze
10
- # :startdoc:
11
-
12
- def receive_data(data) #:nodoc:
13
- case data
14
- when Cmodified
15
- file_modified
16
- when Cdeleted
17
- file_deleted
18
- when Cmoved
19
- file_moved
20
- end
21
- end
22
-
23
- # Returns the path that EventMachine::watch_file was originally called with. The current implementation
24
- # does not pick up on the new filename after a rename occurs.
25
- def path
26
- @path
27
- end
28
-
29
- # Should be redefined with the user's custom callback that will be fired when the file is modified.
30
- def file_modified
31
- end
32
-
33
- # Should be redefined with the user's custom callback that will be fired when the file is deleted.
34
- # When the file is deleted, stop_watching will be called after this to make sure everything is
35
- # cleaned up correctly.
36
- #
37
- # Note that on linux (with inotify), file_deleted will not be called until all open file descriptors to
38
- # the file have been closed.
39
- def file_deleted
40
- end
41
-
42
- # Should be redefined with the user's custom callback that will be fired when the file is moved or renamed.
43
- def file_moved
44
- end
45
-
46
- # Discontinue monitoring of the file.
47
- # This involves cleaning up the underlying monitoring details with kqueue/inotify, and in turn firing unbind.
48
- # This will be called automatically when a file is deleted. User code may call it as well.
49
- def stop_watching
50
- EventMachine::unwatch_filename(@signature)
51
- end
52
- end
53
-
54
- end
@@ -1,61 +0,0 @@
1
- #--
2
- #
3
- # Author:: Francis Cianfrocca (gmail: blackhedd)
4
- # Homepage:: http://rubyeventmachine.com
5
- # Date:: 16 Jul 2006
6
- #
7
- # See EventMachine and EventMachine::Connection for documentation and
8
- # usage examples.
9
- #
10
- #----------------------------------------------------------------------------
11
- #
12
- # Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
13
- # Gmail: blackhedd
14
- #
15
- # This program is free software; you can redistribute it and/or modify
16
- # it under the terms of either: 1) the GNU General Public License
17
- # as published by the Free Software Foundation; either version 2 of the
18
- # License, or (at your option) any later version; or 2) Ruby's License.
19
- #
20
- # See the file COPYING for complete licensing information.
21
- #
22
- #---------------------------------------------------------------------------
23
- #
24
- #
25
-
26
- #--
27
- # This defines EventMachine::Deferrable#future, which requires
28
- # that the rest of EventMachine::Deferrable has already been seen.
29
- # (It's in deferrable.rb.)
30
-
31
- module EventMachine
32
- module Deferrable
33
-
34
- # A future is a sugaring of a typical deferrable usage.
35
- #--
36
- # Evaluate arg (which may be an expression or a block).
37
- # What's the class of arg?
38
- # If arg is an ordinary expression, then return it.
39
- # If arg is deferrable (responds to :set_deferred_status),
40
- # then look at the arguments. If either callback or errback
41
- # are defined, then use them. If neither are defined, then
42
- # use the supplied block (if any) as the callback.
43
- # Then return arg.
44
- def self.future arg, cb=nil, eb=nil, &blk
45
- arg = arg.call if arg.respond_to?(:call)
46
-
47
- if arg.respond_to?(:set_deferred_status)
48
- if cb || eb
49
- arg.callback(&cb) if cb
50
- arg.errback(&eb) if eb
51
- else
52
- arg.callback(&blk) if blk
53
- end
54
- end
55
-
56
- arg
57
- end
58
-
59
- end
60
- end
61
-
@@ -1,66 +0,0 @@
1
- #--
2
- #
3
- # Author:: Francis Cianfrocca (gmail: blackhedd)
4
- # Homepage:: http://rubyeventmachine.com
5
- # Date:: 16 Jul 2006
6
- #
7
- # See EventMachine and EventMachine::Connection for documentation and
8
- # usage examples.
9
- #
10
- #----------------------------------------------------------------------------
11
- #
12
- # Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
13
- # Gmail: blackhedd
14
- #
15
- # This program is free software; you can redistribute it and/or modify
16
- # it under the terms of either: 1) the GNU General Public License
17
- # as published by the Free Software Foundation; either version 2 of the
18
- # License, or (at your option) any later version; or 2) Ruby's License.
19
- #
20
- # See the file COPYING for complete licensing information.
21
- #
22
- #---------------------------------------------------------------------------
23
- #
24
- #
25
-
26
- =begin
27
-
28
- Message Routing in EventMachine.
29
-
30
- The goal here is to enable "routing points," objects that can send and receive
31
- "messages," which are delimited streams of bytes. The boundaries of a message
32
- are preserved as it passes through the reactor system.
33
-
34
- There will be several module methods defined in EventMachine to create route-point
35
- objects (which will probably have a base class of EventMachine::MessageRouter
36
- until someone suggests a better name).
37
-
38
- As with I/O objects, routing objects will receive events by having the router
39
- core call methods on them. And of course user code can and will define handlers
40
- to deal with events of interest.
41
-
42
- The message router base class only really needs a receive_message method. There will
43
- be an EM module-method to send messages, in addition to the module methods to create
44
- the various kinds of message receivers.
45
-
46
- The simplest kind of message receiver object can receive messages by being named
47
- explicitly in a parameter to EM#send_message. More sophisticated receivers can define
48
- pub-sub selectors and message-queue names. And they can also define channels for
49
- route-points in other processes or even on other machines.
50
-
51
- A message is NOT a marshallable entity. Rather, it's a chunk of flat content more like
52
- an Erlang message. Initially, all content submitted for transmission as a message will
53
- have the to_s method called on it. Eventually, we'll be able to transmit certain structured
54
- data types (XML and YAML documents, Structs within limits) and have them reconstructed
55
- on the other end.
56
-
57
- A fundamental goal of the message-routing capability is to interoperate seamlessly with
58
- external systems, including non-Ruby systems like ActiveMQ. We will define various protocol
59
- handlers for things like Stomp and possibly AMQP, but these will be wrapped up and hidden
60
- from the users of the basic routing capability.
61
-
62
- As with Erlang, a critical goal is for programs that are built to use message-passing to work
63
- WITHOUT CHANGE when the code is re-based on a multi-process system.
64
-
65
- =end
66
-
@@ -1,44 +0,0 @@
1
- module EventMachine
2
-
3
- # This is subclassed from EventMachine::Connection for use with the process monitoring API. Read the
4
- # documentation on the instance methods of this class, and for a full explanation see EventMachine.watch_process.
5
- class ProcessWatch < Connection
6
- # :stopdoc:
7
- Cfork = 'fork'.freeze
8
- Cexit = 'exit'.freeze
9
- # :startdoc:
10
-
11
- def receive_data(data) # :nodoc:
12
- case data
13
- when Cfork
14
- process_forked
15
- when Cexit
16
- process_exited
17
- end
18
- end
19
-
20
- # Returns the pid that EventMachine::watch_process was originally called with.
21
- def pid
22
- @pid
23
- end
24
-
25
- # Should be redefined with the user's custom callback that will be fired when the prcess is forked.
26
- #
27
- # There is currently not an easy way to get the pid of the forked child.
28
- def process_forked
29
- end
30
-
31
- # Should be redefined with the user's custom callback that will be fired when the process exits.
32
- #
33
- # stop_watching is called automatically after this callback
34
- def process_exited
35
- end
36
-
37
- # Discontinue monitoring of the process.
38
- # This will be called automatically when a process dies. User code may call it as well.
39
- def stop_watching
40
- EventMachine::unwatch_pid(@signature)
41
- end
42
- end
43
-
44
- end
@@ -1,119 +0,0 @@
1
- #--
2
- #
3
- # Author:: Francis Cianfrocca (gmail: blackhedd)
4
- # Homepage:: http://rubyeventmachine.com
5
- # Date:: 13 Dec 07
6
- #
7
- # See EventMachine and EventMachine::Connection for documentation and
8
- # usage examples.
9
- #
10
- #----------------------------------------------------------------------------
11
- #
12
- # Copyright (C) 2006-08 by Francis Cianfrocca. All Rights Reserved.
13
- # Gmail: blackhedd
14
- #
15
- # This program is free software; you can redistribute it and/or modify
16
- # it under the terms of either: 1) the GNU General Public License
17
- # as published by the Free Software Foundation; either version 2 of the
18
- # License, or (at your option) any later version; or 2) Ruby's License.
19
- #
20
- # See the file COPYING for complete licensing information.
21
- #
22
- #---------------------------------------------------------------------------
23
- #
24
- #
25
-
26
-
27
- module EventMachine
28
-
29
- # EM::DeferrableChildProcess is a sugaring of a common use-case
30
- # involving EM::popen.
31
- # Call the #open method on EM::DeferrableChildProcess, passing
32
- # a command-string. #open immediately returns an EM::Deferrable
33
- # object. It also schedules the forking of a child process, which
34
- # will execute the command passed to #open.
35
- # When the forked child terminates, the Deferrable will be signalled
36
- # and execute its callbacks, passing the data that the child process
37
- # wrote to stdout.
38
- #
39
- class DeferrableChildProcess < EventMachine::Connection
40
- include EventMachine::Deferrable
41
-
42
- def initialize # :nodoc:
43
- super
44
- @data = []
45
- end
46
-
47
- # Sugars a common use-case involving forked child processes.
48
- # #open takes a String argument containing an shell command
49
- # string (including arguments if desired). #open immediately
50
- # returns an EventMachine::Deferrable object, without blocking.
51
- #
52
- # It also invokes EventMachine#popen to run the passed-in
53
- # command in a forked child process.
54
- #
55
- # When the forked child terminates, the Deferrable that
56
- # #open calls its callbacks, passing the data returned
57
- # from the child process.
58
- #
59
- def self.open cmd
60
- EventMachine.popen( cmd, DeferrableChildProcess )
61
- end
62
-
63
- def receive_data data # :nodoc:
64
- @data << data
65
- end
66
-
67
- def unbind # :nodoc:
68
- succeed( @data.join )
69
- end
70
- end
71
-
72
- class SystemCmd < EventMachine::Connection # :nodoc:
73
- def initialize cb
74
- @cb = cb
75
- @output = []
76
- end
77
- def receive_data data
78
- @output << data
79
- end
80
- def unbind
81
- @cb.call @output.join(''), get_status if @cb
82
- end
83
- end
84
-
85
- # EM::system is a simple wrapper for EM::popen. It is similar to Kernel::system, but requires a
86
- # single string argument for the command and performs no shell expansion.
87
- #
88
- # The block or proc passed to EM::system is called with two arguments: the output generated by the command,
89
- # and a Process::Status that contains information about the command's execution.
90
- #
91
- # EM.run{
92
- # EM.system('ls'){ |output,status| puts output if status.exitstatus == 0 }
93
- # }
94
- #
95
- # You can also supply an additional proc to send some data to the process:
96
- #
97
- # EM.run{
98
- # EM.system('sh', proc{ |process|
99
- # process.send_data("echo hello\n")
100
- # process.send_data("exit\n")
101
- # }, proc{ |out,status|
102
- # puts(out)
103
- # })
104
- # }
105
- #
106
- # Like EventMachine.popen, EventMachine.system currently does not work on windows.
107
- # It returns the pid of the spawned process.
108
- def EventMachine::system cmd, *args, &cb
109
- cb ||= args.pop if args.last.is_a? Proc
110
- init = args.pop if args.last.is_a? Proc
111
-
112
- # merge remaining arguments into the command
113
- cmd = ([cmd] + args.map{|a|a.to_s.dump}).join(' ')
114
-
115
- EM.get_subprocess_pid(EM.popen(cmd, SystemCmd, cb) do |c|
116
- init[c] if init
117
- end.signature)
118
- end
119
- end
@@ -1,138 +0,0 @@
1
- #--
2
- #
3
- # Author:: Francis Cianfrocca (gmail: blackhedd)
4
- # Homepage:: http://rubyeventmachine.com
5
- # Date:: 15 Nov 2006
6
- #
7
- # See EventMachine and EventMachine::Connection for documentation and
8
- # usage examples.
9
- #
10
- #----------------------------------------------------------------------------
11
- #
12
- # Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
13
- # Gmail: blackhedd
14
- #
15
- # This program is free software; you can redistribute it and/or modify
16
- # it under the terms of either: 1) the GNU General Public License
17
- # as published by the Free Software Foundation; either version 2 of the
18
- # License, or (at your option) any later version; or 2) Ruby's License.
19
- #
20
- # See the file COPYING for complete licensing information.
21
- #
22
- #---------------------------------------------------------------------------
23
- #
24
- #
25
-
26
- module EventMachine
27
- module Protocols
28
-
29
- # === Usage
30
- #
31
- # class RequestHandler < EM::P::HeaderAndContentProtocol
32
- # def receive_request headers, content
33
- # p [:request, headers, content]
34
- # end
35
- # end
36
- #
37
- # EM.run{
38
- # EM.start_server 'localhost', 80, RequestHandler
39
- # }
40
- #
41
- #--
42
- # Originally, this subclassed LineAndTextProtocol, which in
43
- # turn relies on BufferedTokenizer, which doesn't gracefully
44
- # handle the transitions between lines and binary text.
45
- # Changed 13Sep08 by FCianfrocca.
46
- class HeaderAndContentProtocol < Connection
47
- include LineText2
48
-
49
- ContentLengthPattern = /Content-length:\s*(\d+)/i
50
-
51
- def initialize *args
52
- super
53
- init_for_request
54
- end
55
-
56
- def receive_line line
57
- case @hc_mode
58
- when :discard_blanks
59
- unless line == ""
60
- @hc_mode = :headers
61
- receive_line line
62
- end
63
- when :headers
64
- if line == ""
65
- raise "unrecognized state" unless @hc_headers.length > 0
66
- if respond_to?(:receive_headers)
67
- receive_headers @hc_headers
68
- end
69
- # @hc_content_length will be nil, not 0, if there was no content-length header.
70
- if @hc_content_length.to_i > 0
71
- set_binary_mode @hc_content_length
72
- else
73
- dispatch_request
74
- end
75
- else
76
- @hc_headers << line
77
- if ContentLengthPattern =~ line
78
- # There are some attacks that rely on sending multiple content-length
79
- # headers. This is a crude protection, but needs to become tunable.
80
- raise "extraneous content-length header" if @hc_content_length
81
- @hc_content_length = $1.to_i
82
- end
83
- if @hc_headers.length == 1 and respond_to?(:receive_first_header_line)
84
- receive_first_header_line line
85
- end
86
- end
87
- else
88
- raise "internal error, unsupported mode"
89
- end
90
- end
91
-
92
- def receive_binary_data text
93
- @hc_content = text
94
- dispatch_request
95
- end
96
-
97
- def dispatch_request
98
- if respond_to?(:receive_request)
99
- receive_request @hc_headers, @hc_content
100
- end
101
- init_for_request
102
- end
103
- private :dispatch_request
104
-
105
- def init_for_request
106
- @hc_mode = :discard_blanks
107
- @hc_headers = []
108
- # originally was @hc_headers ||= []; @hc_headers.clear to get a performance
109
- # boost, but it's counterproductive because a subclassed handler will have to
110
- # call dup to use the header array we pass in receive_headers.
111
-
112
- @hc_content_length = nil
113
- @hc_content = ""
114
- end
115
- private :init_for_request
116
-
117
- # Basically a convenience method. We might create a subclass that does this
118
- # automatically. But it's such a performance killer.
119
- def headers_2_hash hdrs
120
- self.class.headers_2_hash hdrs
121
- end
122
-
123
- class << self
124
- def headers_2_hash hdrs
125
- hash = {}
126
- hdrs.each {|h|
127
- if /\A([^\s:]+)\s*:\s*/ =~ h
128
- tail = $'.dup
129
- hash[ $1.downcase.gsub(/-/,"_").intern ] = tail
130
- end
131
- }
132
- hash
133
- end
134
- end
135
-
136
- end
137
- end
138
- end