Module: Volt::ServerSetup::App

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#app_urlObject (readonly)

The app url is where the app folder (and sprockets) is mounted



16
17
18
# File 'lib/volt/volt/server_setup/app.rb', line 16

def app_url
  @app_url
end

#root_urlObject (readonly)

The root url is where the volt app is mounted



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

def root_url
  @root_url
end

Instance Method Details

#load_app_codeObject



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

def load_app_code
  setup_router
  require_http_controllers

  @root_url = '/'
  @app_url = '/app'
end

#require_componentsObject



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

def require_components
  @component_paths.require_in_components(self)
end

#require_http_controllersObject



49
50
51
52
53
54
55
56
57
58
# File 'lib/volt/volt/server_setup/app.rb', line 49

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



87
88
89
90
91
92
93
94
95
96
97
# File 'lib/volt/volt/server_setup/app.rb', line 87

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.



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/volt/volt/server_setup/app.rb', line 68

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



61
62
63
64
# File 'lib/volt/volt/server_setup/app.rb', line 61

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

#setup_pathsObject



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

def setup_paths
  # Load component paths
  @component_paths = ComponentPaths.new(@app_path)
  @component_paths.setup_load_paths
end

#setup_postboot_middlewareObject



45
46
47
# File 'lib/volt/volt/server_setup/app.rb', line 45

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

#setup_preboot_middlewareObject



40
41
42
43
# File 'lib/volt/volt/server_setup/app.rb', line 40

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

#setup_routerObject



36
37
38
# File 'lib/volt/volt/server_setup/app.rb', line 36

def setup_router
  @router = Routes.new
end

#start_message_busObject



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'lib/volt/volt/server_setup/app.rb', line 99

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