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