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.
21
22
23
24
25
|
# File 'lib/rack/tracker/handler.rb', line 21
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.
16
17
18
|
# File 'lib/rack/tracker/handler.rb', line 16
def env
@env
end
|
#options ⇒ Object
Returns the value of attribute options.
15
16
17
|
# File 'lib/rack/tracker/handler.rb', line 15
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
7
8
9
|
# File 'lib/rack/tracker/handler.rb', line 7
def track(name, event)
raise NotImplementedError.new("class method `#{__callee__}` is not implemented.")
end
|
Instance Method Details
#events ⇒ Object
27
28
29
30
|
# File 'lib/rack/tracker/handler.rb', line 27
def events
events = env.fetch('tracker', {})[self.class.to_s.demodulize.underscore] || []
events.map{ |ev| "#{self.class}::#{ev['class_name']}".constantize.new(ev.except('class_name')) }
end
|
#handler_name ⇒ Object
55
56
57
|
# File 'lib/rack/tracker/handler.rb', line 55
def handler_name
self.class.name.demodulize.underscore
end
|
#inject(response) ⇒ Object
36
37
38
39
40
41
42
43
44
|
# File 'lib/rack/tracker/handler.rb', line 36
def inject(response)
response.sub! %r{</#{self.position}>} do |m|
self.render << m.to_s
end
response
end
|
#render ⇒ Object
32
33
34
|
# File 'lib/rack/tracker/handler.rb', line 32
def render
Tilt.new(File.join(File.dirname(__FILE__), handler_name, 'template', "#{handler_name}.erb") ).render(self)
end
|
#write_event(event) ⇒ Object
46
47
48
49
50
51
52
53
|
# File 'lib/rack/tracker/handler.rb', line 46
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
|