Module: Volt::ServerSetup::App

Included in:
App
Defined in:
lib/volt/volt/server_setup/app.rb

Instance Method Summary collapse

Instance Method Details

#load_app_codeObject



19
20
21
22
# File 'lib/volt/volt/server_setup/app.rb', line 19

def load_app_code
  setup_router
  require_http_controllers
end

#require_http_controllersObject



38
39
40
41
42
43
44
45
46
47
# File 'lib/volt/volt/server_setup/app.rb', line 38

def require_http_controllers
  @component_paths.app_folders do |app_folder|
    # Sort so we get consistent load order across platforms
    Dir["#{app_folder}/*/controllers/server/*.rb"].each do |ruby_file|
      # path = ruby_file.gsub(/^#{app_folder}\//, '')[0..-4]
      # require(path)
      require(ruby_file)
    end
  end
end

#reset_query_pool!Object



76
77
78
79
80
81
82
83
84
85
86
# File 'lib/volt/volt/server_setup/app.rb', line 76

def reset_query_pool!
  if RUBY_PLATFORM != 'opal'
    # The load path isn't setup at the top of app.rb, so we wait to require
    require 'volt/tasks/live_query/live_query_pool'

    # Setup LiveQueryPool for the app
    @database = Volt::DataStore.fetch
    @live_query_pool = LiveQueryPool.new(@database, self)
    @channel_live_queries = {}
  end
end

#run_app_and_initializersObject

Load in all .rb files in the initializers folders and the config/app.rb file.



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/volt/volt/server_setup/app.rb', line 57

def run_app_and_initializers
  files = []

  # Include the root initializers
  files += Dir[Volt.root + '/config/initializers/*.rb']
  files += Dir[Volt.root + '/config/initializers/server/*.rb']

  # Get initializers for each component
  component_paths.app_folders do |app_folder|
    files += Dir["#{app_folder}/*/config/initializers/*.rb"]
    files += Dir["#{app_folder}/*/config/initializers/server/*.rb"]
  end

  files.each do |initializer|
    require(initializer)
  end
end

#run_configObject

This config needs to run earlier than others



50
51
52
53
# File 'lib/volt/volt/server_setup/app.rb', line 50

def run_config
  path = "#{Volt.root}/config/app.rb"
  require(path) if File.exists?(path)
end

#setup_pathsObject



13
14
15
16
17
# File 'lib/volt/volt/server_setup/app.rb', line 13

def setup_paths
  # Load component paths
  @component_paths = ComponentPaths.new(@app_path)
  @component_paths.require_in_components(@page || $page)
end

#setup_postboot_middlewareObject



34
35
36
# File 'lib/volt/volt/server_setup/app.rb', line 34

def setup_postboot_middleware
  DefaultMiddlewareStack.postboot_setup(self, @middleware)
end

#setup_preboot_middlewareObject



29
30
31
32
# File 'lib/volt/volt/server_setup/app.rb', line 29

def setup_preboot_middleware
  @middleware = MiddlewareStack.new
  DefaultMiddlewareStack.preboot_setup(self, @middleware)
end

#setup_routerObject



24
25
26
# File 'lib/volt/volt/server_setup/app.rb', line 24

def setup_router
  @router = Routes.new
end

#start_message_busObject



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/volt/volt/server_setup/app.rb', line 88

def start_message_bus
  return if ENV['NO_MESSAGE_BUS']

  unless RUBY_PLATFORM == 'opal'

    # Don't run in test env, since you probably only have one set of tests
    # running at a time, and even if you have multiple, they shouldn't be
    # updating each other.
    unless Volt.env.test?
      # Start the message bus
      bus_name = Volt.config.message_bus.try(:bus_name) || 'peer_to_peer'
      begin
        message_bus_class = MessageBus.const_get(bus_name.camelize)
      rescue NameError => e
        raise "message bus name #{bus_name} was not found, be sure its "
              + "gem is included in the gemfile."
      end

      @message_bus = message_bus_class.new(self)

      Thread.new do
        # Handle incoming messages in a new thread
        @message_bus.subscribe('volt_collection_update') do |collection_name|
          # update a collection, don't resend since we're coming from
          # the message bus.
          live_query_pool.updated_collection(collection_name, nil, true)
        end
      end
    end
  end
end