Class: JupyterOnRails::Initializer

Inherits:
Object
  • Object
show all
Defined in:
lib/jupyter_on_rails/initializer.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(root:, sandbox:) ⇒ Initializer

Returns a new instance of Initializer.



9
10
11
12
# File 'lib/jupyter_on_rails/initializer.rb', line 9

def initialize(root:, sandbox:)
  @root = root
  @sandbox = sandbox
end

Instance Attribute Details

#rootObject (readonly)

Returns the value of attribute root.



14
15
16
# File 'lib/jupyter_on_rails/initializer.rb', line 14

def root
  @root
end

#sandboxObject (readonly)

Returns the value of attribute sandbox.



14
15
16
# File 'lib/jupyter_on_rails/initializer.rb', line 14

def sandbox
  @sandbox
end

Class Method Details

.run(**opts) ⇒ Object



5
6
7
# File 'lib/jupyter_on_rails/initializer.rb', line 5

def self.run(**opts)
  new(**opts).run
end

Instance Method Details

#load_rails_environmentObject



56
57
58
59
60
61
# File 'lib/jupyter_on_rails/initializer.rb', line 56

def load_rails_environment
  app_file = File.expand_path('config/environment.rb', root)
  Dir.chdir(root) do
    require app_file
  end
end

#runObject



16
17
18
19
20
21
# File 'lib/jupyter_on_rails/initializer.rb', line 16

def run
  setup_daru
  load_rails_environment
  setup_console_methods
  setup_sandbox_transaction if sandbox
end

#setup_console_methodsObject



63
64
65
66
67
68
69
70
# File 'lib/jupyter_on_rails/initializer.rb', line 63

def setup_console_methods
  require 'rails/console/app'
  IRuby::Kernel
    .instance
    .instance_variable_get(:@backend)
    .instance_variable_get(:@main)
    .extend(Rails::ConsoleMethods)
end

#setup_daruObject



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/jupyter_on_rails/initializer.rb', line 23

def setup_daru
  require 'active_support/lazy_load_hooks'

  ActiveSupport.on_load(:active_record) do
    # Load Daru extensions

    require 'daru'
  rescue LoadError
  else
    require 'jupyter_on_rails/daru/active_record_ext'
    require 'jupyter_on_rails/daru/data_frame_ext'

    include ::JupyterOnRails::Daru::ActiveRecordExt

    ::Daru::DataFrame.instance_eval do
      include ::JupyterOnRails::Daru::DataFrameExt
    end

    IRuby::Display::Registry.instance_eval do
      match do |obj|
        obj.is_a?(ActiveRecord::Relation) ||
          obj.is_a?(::Class) && obj < ActiveRecord::Base && !obj.abstract_class
      end
      priority 100
      format 'text/html' do |obj|
        n = 10
        puts "finding top #{n}"
        obj.limit(n).to_df.to_html
      end
    end
  end
end

#setup_sandbox_transactionObject



72
73
74
75
76
77
# File 'lib/jupyter_on_rails/initializer.rb', line 72

def setup_sandbox_transaction
  ActiveRecord::Base.connection.begin_transaction(joinable: false)
  at_exit do
    ActiveRecord::Base.connection.rollback_transaction
  end
end