skylight 1.7.2 → 2.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -33
- data/ext/extconf.rb +32 -6
- data/ext/libskylight.yml +6 -9
- data/ext/skylight_native.c +49 -18
- data/lib/skylight.rb +35 -1
- data/lib/skylight/api.rb +4 -2
- data/lib/skylight/cli.rb +1 -1
- data/lib/skylight/cli/doctor.rb +6 -4
- data/lib/skylight/config.rb +149 -518
- data/lib/skylight/data/cacert.pem +236 -812
- data/lib/skylight/helpers.rb +5 -1
- data/lib/skylight/instrumenter.rb +10 -241
- data/lib/skylight/middleware.rb +1 -89
- data/lib/skylight/native.rb +8 -6
- data/lib/skylight/native_ext_fetcher.rb +251 -0
- data/lib/skylight/normalizers/active_job/enqueue_at.rb +2 -20
- data/lib/skylight/probes/sinatra_add_middleware.rb +22 -0
- data/lib/skylight/railtie.rb +11 -131
- data/lib/skylight/sinatra.rb +1 -5
- data/lib/skylight/trace.rb +1 -229
- data/lib/skylight/util/http.rb +3 -3
- data/lib/skylight/vendor/cli/thor/actions/directory.rb +5 -15
- data/lib/skylight/version.rb +1 -1
- metadata +114 -91
- data/lib/skylight/compat.rb +0 -76
- data/lib/skylight/core.rb +0 -149
- data/lib/skylight/deprecation.rb +0 -55
- data/lib/skylight/formatters/http.rb +0 -20
- data/lib/skylight/gc.rb +0 -107
- data/lib/skylight/normalizers.rb +0 -192
- data/lib/skylight/normalizers/action_controller/process_action.rb +0 -50
- data/lib/skylight/normalizers/action_controller/send_file.rb +0 -50
- data/lib/skylight/normalizers/action_view/render_collection.rb +0 -22
- data/lib/skylight/normalizers/action_view/render_partial.rb +0 -21
- data/lib/skylight/normalizers/action_view/render_template.rb +0 -21
- data/lib/skylight/normalizers/active_model_serializers/render.rb +0 -26
- data/lib/skylight/normalizers/active_record/instantiation.rb +0 -17
- data/lib/skylight/normalizers/active_record/sql.rb +0 -55
- data/lib/skylight/normalizers/active_support/cache.rb +0 -51
- data/lib/skylight/normalizers/active_support/cache_clear.rb +0 -16
- data/lib/skylight/normalizers/active_support/cache_decrement.rb +0 -16
- data/lib/skylight/normalizers/active_support/cache_delete.rb +0 -16
- data/lib/skylight/normalizers/active_support/cache_exist.rb +0 -16
- data/lib/skylight/normalizers/active_support/cache_fetch_hit.rb +0 -16
- data/lib/skylight/normalizers/active_support/cache_generate.rb +0 -16
- data/lib/skylight/normalizers/active_support/cache_increment.rb +0 -16
- data/lib/skylight/normalizers/active_support/cache_read.rb +0 -16
- data/lib/skylight/normalizers/active_support/cache_read_multi.rb +0 -16
- data/lib/skylight/normalizers/active_support/cache_write.rb +0 -16
- data/lib/skylight/normalizers/coach/handler_finish.rb +0 -36
- data/lib/skylight/normalizers/coach/middleware_finish.rb +0 -23
- data/lib/skylight/normalizers/couch_potato/query.rb +0 -20
- data/lib/skylight/normalizers/default.rb +0 -27
- data/lib/skylight/normalizers/elasticsearch/request.rb +0 -20
- data/lib/skylight/normalizers/faraday/request.rb +0 -38
- data/lib/skylight/normalizers/grape/endpoint.rb +0 -30
- data/lib/skylight/normalizers/grape/endpoint_render.rb +0 -26
- data/lib/skylight/normalizers/grape/endpoint_run.rb +0 -33
- data/lib/skylight/normalizers/grape/endpoint_run_filters.rb +0 -23
- data/lib/skylight/normalizers/moped/query.rb +0 -100
- data/lib/skylight/probes.rb +0 -129
- data/lib/skylight/probes/action_controller.rb +0 -64
- data/lib/skylight/probes/action_dispatch.rb +0 -30
- data/lib/skylight/probes/action_view.rb +0 -43
- data/lib/skylight/probes/active_model_serializers.rb +0 -55
- data/lib/skylight/probes/elasticsearch.rb +0 -37
- data/lib/skylight/probes/excon.rb +0 -26
- data/lib/skylight/probes/excon/middleware.rb +0 -68
- data/lib/skylight/probes/faraday.rb +0 -22
- data/lib/skylight/probes/grape.rb +0 -88
- data/lib/skylight/probes/httpclient.rb +0 -46
- data/lib/skylight/probes/middleware.rb +0 -68
- data/lib/skylight/probes/mongo.rb +0 -161
- data/lib/skylight/probes/mongoid.rb +0 -21
- data/lib/skylight/probes/moped.rb +0 -39
- data/lib/skylight/probes/net_http.rb +0 -58
- data/lib/skylight/probes/redis.rb +0 -71
- data/lib/skylight/probes/sequel.rb +0 -37
- data/lib/skylight/probes/sinatra.rb +0 -76
- data/lib/skylight/probes/tilt.rb +0 -31
- data/lib/skylight/subscriber.rb +0 -122
- data/lib/skylight/user_config.rb +0 -60
- data/lib/skylight/util.rb +0 -17
- data/lib/skylight/util/allocation_free.rb +0 -26
- data/lib/skylight/util/clock.rb +0 -54
- data/lib/skylight/util/deploy.rb +0 -132
- data/lib/skylight/util/gzip.rb +0 -21
- data/lib/skylight/util/inflector.rb +0 -112
- data/lib/skylight/util/logging.rb +0 -127
- data/lib/skylight/util/multi_io.rb +0 -21
- data/lib/skylight/util/native_ext_fetcher.rb +0 -253
- data/lib/skylight/util/platform.rb +0 -75
- data/lib/skylight/util/proxy.rb +0 -13
- data/lib/skylight/vendor/active_support/notifications.rb +0 -207
- data/lib/skylight/vendor/active_support/notifications/fanout.rb +0 -159
- data/lib/skylight/vendor/active_support/notifications/instrumenter.rb +0 -72
- data/lib/skylight/vendor/active_support/per_thread_registry.rb +0 -52
- data/lib/skylight/vendor/thread_safe.rb +0 -126
- data/lib/skylight/vendor/thread_safe/non_concurrent_cache_backend.rb +0 -133
- data/lib/skylight/vendor/thread_safe/synchronized_cache_backend.rb +0 -76
- data/lib/skylight/vm/gc.rb +0 -70
@@ -1,75 +0,0 @@
|
|
1
|
-
require 'rbconfig'
|
2
|
-
|
3
|
-
# Used from extconf and to load libskylight
|
4
|
-
module Skylight
|
5
|
-
module Util
|
6
|
-
module Platform
|
7
|
-
# Normalize the platform OS
|
8
|
-
OS = case os = RbConfig::CONFIG['host_os'].downcase
|
9
|
-
when /linux/
|
10
|
-
# The official ruby-alpine Docker containers pre-build Ruby. As a result,
|
11
|
-
# Ruby doesn't know that it's on a musl-based platform. `ldd` is the
|
12
|
-
# only reliable way to detect musl that we've found.
|
13
|
-
# See https://github.com/skylightio/skylight-ruby/issues/92
|
14
|
-
if ENV['SKYLIGHT_MUSL'] || `ldd --version 2>&1` =~ /musl/
|
15
|
-
"linux-musl"
|
16
|
-
else
|
17
|
-
"linux"
|
18
|
-
end
|
19
|
-
when /darwin/
|
20
|
-
"darwin"
|
21
|
-
when /freebsd/
|
22
|
-
"freebsd"
|
23
|
-
when /netbsd/
|
24
|
-
"netbsd"
|
25
|
-
when /openbsd/
|
26
|
-
"openbsd"
|
27
|
-
when /sunos|solaris/
|
28
|
-
"solaris"
|
29
|
-
when /mingw|mswin/
|
30
|
-
"windows"
|
31
|
-
else
|
32
|
-
os
|
33
|
-
end
|
34
|
-
|
35
|
-
# Normalize the platform CPU
|
36
|
-
ARCH = case cpu = RbConfig::CONFIG['host_cpu'].downcase
|
37
|
-
when /amd64|x86_64/
|
38
|
-
"x86_64"
|
39
|
-
when /i?86|x86|i86pc/
|
40
|
-
"x86"
|
41
|
-
when /ppc|powerpc/
|
42
|
-
"powerpc"
|
43
|
-
when /^arm/
|
44
|
-
"arm"
|
45
|
-
else
|
46
|
-
cpu
|
47
|
-
end
|
48
|
-
|
49
|
-
LIBEXT = case OS
|
50
|
-
when /darwin/
|
51
|
-
'dylib'
|
52
|
-
when /linux|bsd|solaris/
|
53
|
-
'so'
|
54
|
-
when /windows|cygwin/
|
55
|
-
'dll'
|
56
|
-
else
|
57
|
-
'so'
|
58
|
-
end
|
59
|
-
|
60
|
-
TUPLE = "#{ARCH}-#{OS}"
|
61
|
-
|
62
|
-
def self.tuple
|
63
|
-
TUPLE
|
64
|
-
end
|
65
|
-
|
66
|
-
def self.libext
|
67
|
-
LIBEXT
|
68
|
-
end
|
69
|
-
|
70
|
-
def self.dlext
|
71
|
-
RbConfig::CONFIG['DLEXT']
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
data/lib/skylight/util/proxy.rb
DELETED
@@ -1,207 +0,0 @@
|
|
1
|
-
require 'skylight/vendor/active_support/notifications/instrumenter'
|
2
|
-
require 'skylight/vendor/active_support/notifications/fanout'
|
3
|
-
require 'skylight/vendor/active_support/per_thread_registry'
|
4
|
-
|
5
|
-
module ActiveSupport
|
6
|
-
# = Notifications
|
7
|
-
#
|
8
|
-
# <tt>ActiveSupport::Notifications</tt> provides an instrumentation API for
|
9
|
-
# Ruby.
|
10
|
-
#
|
11
|
-
# == Instrumenters
|
12
|
-
#
|
13
|
-
# To instrument an event you just need to do:
|
14
|
-
#
|
15
|
-
# ActiveSupport::Notifications.instrument('render', extra: :information) do
|
16
|
-
# render text: 'Foo'
|
17
|
-
# end
|
18
|
-
#
|
19
|
-
# That executes the block first and notifies all subscribers once done.
|
20
|
-
#
|
21
|
-
# In the example above +render+ is the name of the event, and the rest is called
|
22
|
-
# the _payload_. The payload is a mechanism that allows instrumenters to pass
|
23
|
-
# extra information to subscribers. Payloads consist of a hash whose contents
|
24
|
-
# are arbitrary and generally depend on the event.
|
25
|
-
#
|
26
|
-
# == Subscribers
|
27
|
-
#
|
28
|
-
# You can consume those events and the information they provide by registering
|
29
|
-
# a subscriber.
|
30
|
-
#
|
31
|
-
# ActiveSupport::Notifications.subscribe('render') do |name, start, finish, id, payload|
|
32
|
-
# name # => String, name of the event (such as 'render' from above)
|
33
|
-
# start # => Time, when the instrumented block started execution
|
34
|
-
# finish # => Time, when the instrumented block ended execution
|
35
|
-
# id # => String, unique ID for this notification
|
36
|
-
# payload # => Hash, the payload
|
37
|
-
# end
|
38
|
-
#
|
39
|
-
# For instance, let's store all "render" events in an array:
|
40
|
-
#
|
41
|
-
# events = []
|
42
|
-
#
|
43
|
-
# ActiveSupport::Notifications.subscribe('render') do |*args|
|
44
|
-
# events << ActiveSupport::Notifications::Event.new(*args)
|
45
|
-
# end
|
46
|
-
#
|
47
|
-
# That code returns right away, you are just subscribing to "render" events.
|
48
|
-
# The block is saved and will be called whenever someone instruments "render":
|
49
|
-
#
|
50
|
-
# ActiveSupport::Notifications.instrument('render', extra: :information) do
|
51
|
-
# render text: 'Foo'
|
52
|
-
# end
|
53
|
-
#
|
54
|
-
# event = events.first
|
55
|
-
# event.name # => "render"
|
56
|
-
# event.duration # => 10 (in milliseconds)
|
57
|
-
# event.payload # => { extra: :information }
|
58
|
-
#
|
59
|
-
# The block in the <tt>subscribe</tt> call gets the name of the event, start
|
60
|
-
# timestamp, end timestamp, a string with a unique identifier for that event
|
61
|
-
# (something like "535801666f04d0298cd6"), and a hash with the payload, in
|
62
|
-
# that order.
|
63
|
-
#
|
64
|
-
# If an exception happens during that particular instrumentation the payload will
|
65
|
-
# have a key <tt>:exception</tt> with an array of two elements as value: a string with
|
66
|
-
# the name of the exception class, and the exception message.
|
67
|
-
#
|
68
|
-
# As the previous example depicts, the class <tt>ActiveSupport::Notifications::Event</tt>
|
69
|
-
# is able to take the arguments as they come and provide an object-oriented
|
70
|
-
# interface to that data.
|
71
|
-
#
|
72
|
-
# It is also possible to pass an object as the second parameter passed to the
|
73
|
-
# <tt>subscribe</tt> method instead of a block:
|
74
|
-
#
|
75
|
-
# module ActionController
|
76
|
-
# class PageRequest
|
77
|
-
# def call(name, started, finished, unique_id, payload)
|
78
|
-
# Rails.logger.debug ['notification:', name, started, finished, unique_id, payload].join(' ')
|
79
|
-
# end
|
80
|
-
# end
|
81
|
-
# end
|
82
|
-
#
|
83
|
-
# ActiveSupport::Notifications.subscribe('process_action.action_controller', ActionController::PageRequest.new)
|
84
|
-
#
|
85
|
-
# resulting in the following output within the logs including a hash with the payload:
|
86
|
-
#
|
87
|
-
# notification: process_action.action_controller 2012-04-13 01:08:35 +0300 2012-04-13 01:08:35 +0300 af358ed7fab884532ec7 {
|
88
|
-
# controller: "Devise::SessionsController",
|
89
|
-
# action: "new",
|
90
|
-
# params: {"action"=>"new", "controller"=>"devise/sessions"},
|
91
|
-
# format: :html,
|
92
|
-
# method: "GET",
|
93
|
-
# path: "/login/sign_in",
|
94
|
-
# status: 200,
|
95
|
-
# view_runtime: 279.3080806732178,
|
96
|
-
# db_runtime: 40.053
|
97
|
-
# }
|
98
|
-
#
|
99
|
-
# You can also subscribe to all events whose name matches a certain regexp:
|
100
|
-
#
|
101
|
-
# ActiveSupport::Notifications.subscribe(/render/) do |*args|
|
102
|
-
# ...
|
103
|
-
# end
|
104
|
-
#
|
105
|
-
# and even pass no argument to <tt>subscribe</tt>, in which case you are subscribing
|
106
|
-
# to all events.
|
107
|
-
#
|
108
|
-
# == Temporary Subscriptions
|
109
|
-
#
|
110
|
-
# Sometimes you do not want to subscribe to an event for the entire life of
|
111
|
-
# the application. There are two ways to unsubscribe.
|
112
|
-
#
|
113
|
-
# WARNING: The instrumentation framework is designed for long-running subscribers,
|
114
|
-
# use this feature sparingly because it wipes some internal caches and that has
|
115
|
-
# a negative impact on performance.
|
116
|
-
#
|
117
|
-
# === Subscribe While a Block Runs
|
118
|
-
#
|
119
|
-
# You can subscribe to some event temporarily while some block runs. For
|
120
|
-
# example, in
|
121
|
-
#
|
122
|
-
# callback = lambda {|*args| ... }
|
123
|
-
# ActiveSupport::Notifications.subscribed(callback, "sql.active_record") do
|
124
|
-
# ...
|
125
|
-
# end
|
126
|
-
#
|
127
|
-
# the callback will be called for all "sql.active_record" events instrumented
|
128
|
-
# during the execution of the block. The callback is unsubscribed automatically
|
129
|
-
# after that.
|
130
|
-
#
|
131
|
-
# === Manual Unsubscription
|
132
|
-
#
|
133
|
-
# The +subscribe+ method returns a subscriber object:
|
134
|
-
#
|
135
|
-
# subscriber = ActiveSupport::Notifications.subscribe("render") do |*args|
|
136
|
-
# ...
|
137
|
-
# end
|
138
|
-
#
|
139
|
-
# To prevent that block from being called anymore, just unsubscribe passing
|
140
|
-
# that reference:
|
141
|
-
#
|
142
|
-
# ActiveSupport::Notifications.unsubscribe(subscriber)
|
143
|
-
#
|
144
|
-
# == Default Queue
|
145
|
-
#
|
146
|
-
# Notifications ships with a queue implementation that consumes and publish events
|
147
|
-
# to log subscribers in a thread. You can use any queue implementation you want.
|
148
|
-
#
|
149
|
-
module Notifications
|
150
|
-
class << self
|
151
|
-
attr_accessor :notifier
|
152
|
-
|
153
|
-
def publish(name, *args)
|
154
|
-
notifier.publish(name, *args)
|
155
|
-
end
|
156
|
-
|
157
|
-
def instrument(name, payload = {})
|
158
|
-
if notifier.listening?(name)
|
159
|
-
instrumenter.instrument(name, payload) { yield payload if block_given? }
|
160
|
-
else
|
161
|
-
yield payload if block_given?
|
162
|
-
end
|
163
|
-
end
|
164
|
-
|
165
|
-
def subscribe(*args, &block)
|
166
|
-
notifier.subscribe(*args, &block)
|
167
|
-
end
|
168
|
-
|
169
|
-
def subscribed(callback, *args, &block)
|
170
|
-
subscriber = subscribe(*args, &callback)
|
171
|
-
yield
|
172
|
-
ensure
|
173
|
-
unsubscribe(subscriber)
|
174
|
-
end
|
175
|
-
|
176
|
-
def unsubscribe(args)
|
177
|
-
notifier.unsubscribe(args)
|
178
|
-
end
|
179
|
-
|
180
|
-
def instrumenter
|
181
|
-
InstrumentationRegistry.instrumenter_for(notifier)
|
182
|
-
end
|
183
|
-
end
|
184
|
-
|
185
|
-
# This class is a registry which holds all of the +Instrumenter+ objects
|
186
|
-
# in a particular thread local. To access the +Instrumenter+ object for a
|
187
|
-
# particular +notifier+, you can call the following method:
|
188
|
-
#
|
189
|
-
# InstrumentationRegistry.instrumenter_for(notifier)
|
190
|
-
#
|
191
|
-
# The instrumenters for multiple notifiers are held in a single instance of
|
192
|
-
# this class.
|
193
|
-
class InstrumentationRegistry # :nodoc:
|
194
|
-
extend ActiveSupport::PerThreadRegistry
|
195
|
-
|
196
|
-
def initialize
|
197
|
-
@registry = {}
|
198
|
-
end
|
199
|
-
|
200
|
-
def instrumenter_for(notifier)
|
201
|
-
@registry[notifier] ||= Instrumenter.new(notifier)
|
202
|
-
end
|
203
|
-
end
|
204
|
-
|
205
|
-
self.notifier = Fanout.new
|
206
|
-
end
|
207
|
-
end
|
@@ -1,159 +0,0 @@
|
|
1
|
-
require 'mutex_m'
|
2
|
-
begin
|
3
|
-
require 'thread_safe'
|
4
|
-
rescue LoadError
|
5
|
-
require 'skylight/vendor/thread_safe'
|
6
|
-
end
|
7
|
-
|
8
|
-
module ActiveSupport
|
9
|
-
module Notifications
|
10
|
-
# This is a default queue implementation that ships with Notifications.
|
11
|
-
# It just pushes events to all registered log subscribers.
|
12
|
-
#
|
13
|
-
# This class is thread safe. All methods are reentrant.
|
14
|
-
class Fanout
|
15
|
-
include Mutex_m
|
16
|
-
|
17
|
-
def initialize
|
18
|
-
@subscribers = []
|
19
|
-
@listeners_for = ThreadSafe::Cache.new
|
20
|
-
super
|
21
|
-
end
|
22
|
-
|
23
|
-
def subscribe(pattern = nil, block = Proc.new)
|
24
|
-
subscriber = Subscribers.new pattern, block
|
25
|
-
synchronize do
|
26
|
-
@subscribers << subscriber
|
27
|
-
@listeners_for.clear
|
28
|
-
end
|
29
|
-
subscriber
|
30
|
-
end
|
31
|
-
|
32
|
-
def unsubscribe(subscriber)
|
33
|
-
synchronize do
|
34
|
-
@subscribers.reject! { |s| s.matches?(subscriber) }
|
35
|
-
@listeners_for.clear
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def start(name, id, payload)
|
40
|
-
listeners_for(name).each { |s| s.start(name, id, payload) }
|
41
|
-
end
|
42
|
-
|
43
|
-
def finish(name, id, payload)
|
44
|
-
listeners_for(name).each { |s| s.finish(name, id, payload) }
|
45
|
-
end
|
46
|
-
|
47
|
-
def publish(name, *args)
|
48
|
-
listeners_for(name).each { |s| s.publish(name, *args) }
|
49
|
-
end
|
50
|
-
|
51
|
-
def listeners_for(name)
|
52
|
-
# this is correctly done double-checked locking (ThreadSafe::Cache's lookups have volatile semantics)
|
53
|
-
@listeners_for[name] || synchronize do
|
54
|
-
# use synchronisation when accessing @subscribers
|
55
|
-
@listeners_for[name] ||= @subscribers.select { |s| s.subscribed_to?(name) }
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def listening?(name)
|
60
|
-
listeners_for(name).any?
|
61
|
-
end
|
62
|
-
|
63
|
-
# This is a sync queue, so there is no waiting.
|
64
|
-
def wait
|
65
|
-
end
|
66
|
-
|
67
|
-
module Subscribers # :nodoc:
|
68
|
-
def self.new(pattern, listener)
|
69
|
-
if listener.respond_to?(:start) and listener.respond_to?(:finish)
|
70
|
-
subscriber = Evented.new pattern, listener
|
71
|
-
else
|
72
|
-
subscriber = Timed.new pattern, listener
|
73
|
-
end
|
74
|
-
|
75
|
-
unless pattern
|
76
|
-
AllMessages.new(subscriber)
|
77
|
-
else
|
78
|
-
subscriber
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
class Evented #:nodoc:
|
83
|
-
def initialize(pattern, delegate)
|
84
|
-
@pattern = pattern
|
85
|
-
@delegate = delegate
|
86
|
-
@can_publish = delegate.respond_to?(:publish)
|
87
|
-
end
|
88
|
-
|
89
|
-
def publish(name, *args)
|
90
|
-
if @can_publish
|
91
|
-
@delegate.publish name, *args
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
def start(name, id, payload)
|
96
|
-
@delegate.start name, id, payload
|
97
|
-
end
|
98
|
-
|
99
|
-
def finish(name, id, payload)
|
100
|
-
@delegate.finish name, id, payload
|
101
|
-
end
|
102
|
-
|
103
|
-
def subscribed_to?(name)
|
104
|
-
@pattern === name.to_s
|
105
|
-
end
|
106
|
-
|
107
|
-
def matches?(subscriber_or_name)
|
108
|
-
self === subscriber_or_name ||
|
109
|
-
@pattern && @pattern === subscriber_or_name
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
class Timed < Evented
|
114
|
-
def initialize(pattern, delegate)
|
115
|
-
@timestack = []
|
116
|
-
super
|
117
|
-
end
|
118
|
-
|
119
|
-
def publish(name, *args)
|
120
|
-
@delegate.call name, *args
|
121
|
-
end
|
122
|
-
|
123
|
-
def start(name, id, payload)
|
124
|
-
@timestack.push Time.now
|
125
|
-
end
|
126
|
-
|
127
|
-
def finish(name, id, payload)
|
128
|
-
started = @timestack.pop
|
129
|
-
@delegate.call(name, started, Time.now, id, payload)
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
class AllMessages # :nodoc:
|
134
|
-
def initialize(delegate)
|
135
|
-
@delegate = delegate
|
136
|
-
end
|
137
|
-
|
138
|
-
def start(name, id, payload)
|
139
|
-
@delegate.start name, id, payload
|
140
|
-
end
|
141
|
-
|
142
|
-
def finish(name, id, payload)
|
143
|
-
@delegate.finish name, id, payload
|
144
|
-
end
|
145
|
-
|
146
|
-
def publish(name, *args)
|
147
|
-
@delegate.publish name, *args
|
148
|
-
end
|
149
|
-
|
150
|
-
def subscribed_to?(name)
|
151
|
-
true
|
152
|
-
end
|
153
|
-
|
154
|
-
alias :matches? :===
|
155
|
-
end
|
156
|
-
end
|
157
|
-
end
|
158
|
-
end
|
159
|
-
end
|