module Matplotlib::IRuby::HookExtension
Public Class Methods
extended(obj)
click to toggle source
# File lib/matplotlib/iruby.rb, line 6 def self.extended(obj) @event_registry ||= {} @event_registry[obj] = {} end
register_event(target, event, hook)
click to toggle source
# File lib/matplotlib/iruby.rb, line 11 def self.register_event(target, event, hook) @event_registry[target][event] ||= [] @event_registry[target][event] << hook end
trigger_event(target, event)
click to toggle source
# File lib/matplotlib/iruby.rb, line 30 def self.trigger_event(target, event) return unless @event_registry[target][event] @event_registry[target][event].each do |hooks| hooks.to_a.each do |hook| hook.call if hook end end rescue Exception $stderr.puts "Error occurred in triggerred event: target=#{target} event=#{event}", $!.to_s, *$!.backtrace end
unregister_event(target, event, hook)
click to toggle source
# File lib/matplotlib/iruby.rb, line 20 def self.unregister_event(target, event, hook) return unless @event_registry[target] return unless @event_registry[target][event] @event_registry[target][event].delete(hook) end
Public Instance Methods
execute_request(msg)
click to toggle source
# File lib/matplotlib/iruby.rb, line 45 def execute_request(msg) code = msg[:content]['code'] @execution_count += 1 if msg[:content]['store_history'] @session.send(:publish, :execute_input, code: code, execution_count: @execution_count) trigger_event(:pre_execute) content = { status: :ok, payload: [], user_expressions: {}, execution_count: @execution_count } result = nil begin result = @backend.eval(code, msg[:content]['store_history']) rescue SystemExit content[:payload] << { source: :ask_exit } rescue Exception => e content = error_content(e) @session.send(:publish, :error, content) end unless result.nil? || msg[:content]['silent'] @session.send(:publish, :execute_result, data: ::IRuby::Display.display(result), metadata: {}, execution_count: @execution_count) end trigger_event(:post_execute) @session.send(:reply, :execute_reply, content) end
register_event(event, hook=nil, &block)
click to toggle source
# File lib/matplotlib/iruby.rb, line 16 def register_event(event, hook=nil, &block) HookExtension.register_event(self, event, [hook, block].compact) end
trigger_event(event)
click to toggle source
# File lib/matplotlib/iruby.rb, line 41 def trigger_event(event) HookExtension.trigger_event(self, event) end
unregister_event(event, hook)
click to toggle source
# File lib/matplotlib/iruby.rb, line 26 def unregister_event(event, hook) HookExtension.unregister_event(self, event, hook) end