Class: Rack::Tracker::Handler
- Inherits:
-
Object
- Object
- Rack::Tracker::Handler
show all
- Includes:
- JavaScriptHelper
- Defined in:
- lib/rack/tracker/handler.rb
Constant Summary
JavaScriptHelper::JS_ESCAPE_MAP
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
#escape_javascript
Constructor Details
#initialize(env, options = {}) ⇒ Handler
Returns a new instance of Handler.
25
26
27
28
29
|
# File 'lib/rack/tracker/handler.rb', line 25
def initialize(env, options = {})
self.env = env
self.options = options
self.position = options[:position] if options.has_key?(:position)
end
|
Instance Attribute Details
#env ⇒ Object
Returns the value of attribute env.
20
21
22
|
# File 'lib/rack/tracker/handler.rb', line 20
def env
@env
end
|
#options ⇒ Object
Returns the value of attribute options.
19
20
21
|
# File 'lib/rack/tracker/handler.rb', line 19
def options
@options
end
|
Class Method Details
.process_track(env, method_name, *args, &block) ⇒ Object
3
4
5
|
# File 'lib/rack/tracker/handler.rb', line 3
def process_track(env, method_name, *args, &block)
new(env).write_event(track(method_name, *args, &block))
end
|
.track(name, *event) ⇒ Object
overwrite me in the handler subclass if you need more control over the event
8
9
10
|
# File 'lib/rack/tracker/handler.rb', line 8
def track(name, *event)
{ name.to_s => [event.last.merge('class_name' => event.first.to_s.classify)] }
end
|
Instance Method Details
#events ⇒ Object
31
32
33
34
|
# File 'lib/rack/tracker/handler.rb', line 31
def events
events = env.fetch('tracker', {})[handler_name] || []
events.map { |ev| "#{self.class}::#{ev['class_name']}".constantize.new(ev.except('class_name')) }
end
|
#handler_name ⇒ Object
59
60
61
|
# File 'lib/rack/tracker/handler.rb', line 59
def handler_name
self.class.name.demodulize.underscore
end
|
#inject(response) ⇒ Object
40
41
42
43
44
45
46
47
48
|
# File 'lib/rack/tracker/handler.rb', line 40
def inject(response)
response.sub! %r{</#{self.position}>} do |m|
self.render << m.to_s
end
response
end
|
#render ⇒ Object
36
37
38
|
# File 'lib/rack/tracker/handler.rb', line 36
def render
Tilt.new(File.join(File.dirname(__FILE__), handler_name, 'template', "#{handler_name}.erb") ).render(self)
end
|
#tracker_options ⇒ Object
63
64
65
66
67
68
69
70
71
|
# File 'lib/rack/tracker/handler.rb', line 63
def tracker_options
@_tracker_options ||= {}.tap do |tracker_options|
options.slice(*allowed_tracker_options).each do |key, value|
if option_value = value.respond_to?(:call) ? value.call(env) : value
tracker_options[tracker_option_key(key)] = tracker_option_value(option_value)
end
end
end
end
|
#write_event(event) ⇒ Object
50
51
52
53
54
55
56
57
|
# File 'lib/rack/tracker/handler.rb', line 50
def write_event(event)
event.deep_stringify_keys!
if env.key?('tracker')
self.env['tracker'].deep_merge!(event) { |key, old, new| Array.wrap(old) + Array.wrap(new) }
else
self.env['tracker'] = event
end
end
|