class Silicon::App

Attributes

routes[R]

Public Class Methods

new(container = Hypo::Container.new) click to toggle source
# File lib/silicon/app.rb, line 20
def initialize(container = Hypo::Container.new)
  @container = container

  register_dependencies
  load_basic_dependencies
  parse_routes
  add_view_builders
end

Public Instance Methods

call(env) click to toggle source
# File lib/silicon/app.rb, line 29
def call(env)
  request = Request.new(@route_matcher, @container, @chain_factory, @view_factory)
  request.handle(env)
end

Protected Instance Methods

add_view_builder(view_builder, format) click to toggle source
# File lib/silicon/app.rb, line 36
def add_view_builder(view_builder, format)
  @view_builder_registry.add(view_builder, format)
end

Private Instance Methods

add_view_builders() click to toggle source
# File lib/silicon/app.rb, line 42
def add_view_builders
  add_view_builder(ViewBuilders::Json, 'json')
end
load_basic_dependencies() click to toggle source
# File lib/silicon/app.rb, line 78
def load_basic_dependencies
  @chain_factory = @container.resolve(:chain_factory)
  @view_factory = @container.resolve(:view_factory)
  @dependency_loader = @container.resolve(:dependency_loader)
  @view_builder_registry = @container.resolve(:view_builder_registry)
  @route_parser = @container.resolve(:route_parser)

  @dependency_loader.load_components
end
parse_routes() click to toggle source
# File lib/silicon/app.rb, line 88
def parse_routes
  @routes = @route_parser.parse
  @route_matcher = Routing::Matcher.new(@routes)
end
register_dependencies() click to toggle source
# File lib/silicon/app.rb, line 46
def register_dependencies
  instances = {
    config_file_path: 'silicon.yml',
    silicon_env: ENV['SILICON_ENV'] || 'development'
  }

  instances.keys.each do |name|
    @container.register_instance(instances[name], name)
  end

  singletons = {
    silicon_config: Config,
    type_loader: TypeLoader,
    dependency_loader: DependencyLoader,
    template_loader: TemplateLoader,
    template_registry: TemplateRegistry,
    view_builder_registry: ViewBuilderRegistry,
    view_factory: ViewFactory,
    chain_factory: ChainFactory,
    file_reader: Routing::FileReader,
    syntax_parser: SyntaxParser,
    syntax_error_interpreter: Routing::SyntaxErrorInterpreter,
    routes_builder: Routing::Builder,
    route_parser: Routing::Parser
  }

  singletons.keys.each do |name|
    @container.register(singletons[name], name)
      .using_lifetime(:singleton)
  end
end