class Ovto::App

Attributes

main_component[R]

An instance of YourApp::MainComponent (mainly for testing)

state[R]

Public Class Methods

middlewares() click to toggle source

List of installed middleware classes

# File lib/ovto/app.rb, line 4
def self.middlewares
  @middlewares ||= []
end
new() click to toggle source
# File lib/ovto/app.rb, line 18
def initialize
  app_state_class = self.class.const_get('State')
  # Inject middleware states
  app_state_class.item :_middlewares, default_proc: ->{
    Ovto::Middleware.create_middleware_states_class(self.class.middlewares).new
  }
  @state = app_state_class.new
  @wired_action_set = nil
  @main_component = nil
end
run(*args) click to toggle source

Create an App and start it

# File lib/ovto/app.rb, line 9
def self.run(*args)
  new.run(*args)
end
use(middleware_class) click to toggle source

Install a middleware

# File lib/ovto/app.rb, line 14
def self.use(middleware_class)
  self.middlewares.push(middleware_class)
end

Public Instance Methods

_set_state(new_state) click to toggle source

Internal use only

# File lib/ovto/app.rb, line 38
def _set_state(new_state)
  @state = new_state
end
actions() click to toggle source
# File lib/ovto/app.rb, line 33
def actions
  @wired_action_set.app_wired_actions
end
run(*args) click to toggle source

Start this app

# File lib/ovto/app.rb, line 43
def run(*args)
  Ovto.log_error{ _run(*args) }
end
setup() click to toggle source

Called when this app is started

# File lib/ovto/app.rb, line 48
def setup
  # override this if needed
end

Private Instance Methods

_run(id: nil) click to toggle source

Setup runtime and wired_actions

# File lib/ovto/app.rb, line 55
def _run(id: nil)
  runtime = Ovto::Runtime.new(self)
  actions = self.class.const_get('Actions').new
  @wired_action_set = WiredActionSet.new(self, actions, [], self.class.middlewares, runtime)
  actions.wired_actions = @wired_action_set.app_wired_actions
  @main_component = create_view(@wired_action_set)
  if id
    %x{
      document.addEventListener('DOMContentLoaded', function(){
        var container = document.getElementById(id);
        if (!container) {
          throw "Ovto::App#run: tag with id='" + id + "' was not found";
        }
        #{start_application(runtime, `container`)}
      });
    }
  else
    start_application(runtime, nil)
  end
end
create_view(wired_action_set) click to toggle source

Instantiate MyApp::MainComponent

# File lib/ovto/app.rb, line 77
def create_view(wired_action_set)
  begin
    main_component_class = self.class.const_get('MainComponent')
  rescue NameError => orig_ex
    begin
      self.class.const_get('View')
    rescue NameError
      raise orig_ex
    else
      raise "Since Ovto 0.3.0, View is renamed to MainComponent. Please rename "+
            "#{self.class}::View to #{self.class}::MainComponent"
    end
  end
  return main_component_class.new(wired_action_set)
end
start_application(runtime, container) click to toggle source
# File lib/ovto/app.rb, line 93
def start_application(runtime, container)
  Ovto.log_error {
    runtime.run(@main_component, container)
    setup
    self.class.middlewares.each do |m|
      m._run_setup(@wired_action_set[m.name])
    end
  }
end