class Payload::RailsLoader

Loads dependencies from config/dependencies.rb in Rails applications.

Used by {Railtie} to provide a Rails dependency loader to {RackContainer}.

Public Class Methods

load() click to toggle source

Load dependencies from outside a Rails request. @example

RailsLoader.load[:example_service]

@return [Container] dependencies from config/dependencies.rb

# File lib/payload/rails_loader.rb, line 19
def self.load
  new.load
end
to_proc() click to toggle source

@api private

# File lib/payload/rails_loader.rb, line 11
def self.to_proc
  lambda { load }
end

Public Instance Methods

load() click to toggle source

@api private

# File lib/payload/rails_loader.rb, line 24
def load
  namespace_containers.inject(root_container) do |target, source|
    target.import(source.exports)
  end
end

Private Instance Methods

config_path() click to toggle source
# File lib/payload/rails_loader.rb, line 54
def config_path
  Rails.root.join('config')
end
load_from(path) click to toggle source
# File lib/payload/rails_loader.rb, line 40
def load_from(path)
  container = MutableContainer.new(Container.new(DefinitionList.new))
  container.instance_eval(IO.read(path), path)
  container
end
namespace_config_paths() click to toggle source
# File lib/payload/rails_loader.rb, line 50
def namespace_config_paths
  Dir.glob config_path.join('payload/*.rb').to_s
end
namespace_containers() click to toggle source
# File lib/payload/rails_loader.rb, line 32
def namespace_containers
  namespace_config_paths.map { |path| load_from(path) }
end
root_config_path() click to toggle source
# File lib/payload/rails_loader.rb, line 46
def root_config_path
  config_path.join('dependencies.rb').to_s
end
root_container() click to toggle source
# File lib/payload/rails_loader.rb, line 36
def root_container
  load_from(root_config_path).build
end