lib/hanami/configuration.rb in hanami-1.0.0.beta2 vs lib/hanami/configuration.rb in hanami-1.0.0.beta3

- old
+ new

@@ -3,63 +3,165 @@ require 'hanami/application' require 'hanami/utils/class' require 'hanami/utils/string' module Hanami + # @api private class Configuration + # @api private class App < SimpleDelegator + # @api private attr_reader :path_prefix + # @api private def initialize(app, path_prefix) super(app) @path_prefix = path_prefix end end + # @api private def initialize(&blk) @settings = Concurrent::Map.new instance_eval(&blk) end + # Mount a Hanami::Application or a Rack app + # + # @param app [#call] an application compatible with Rack SPEC + # @param options [Hash] a set of options + # @option :at [String] options the mount point + # + # @since 0.9.0 + # + # @example + # # config/environment.rb + # # ... + # Hanami.configure do + # mount Web::Application, at: '/' + # + # # ... + # end def mount(app, options) mounted[app] = App.new(app, options.fetch(:at)) end + # Configure database + # + # @param blk [Proc] the database configuration + # + # @see Hanami::Model.configure + # + # @example + # # config/environment.rb + # # ... + # Hanami.configure do + # model do + # adapter :sql, ENV['DATABASE_URL'] + # + # migrations 'db/migrations' + # schema 'db/schema.sql' + # end + # + # # ... + # end def model(&blk) if block_given? settings.put_if_absent(:model, blk) else settings.fetch(:model) end end + # Configure mailer + # + # @param blk [Proc] the mailer configuration + # + # @see Hanami::Mailer.configure + # + # @example + # # config/environment.rb + # # ... + # Hanami.configure do + # mailer do + # root 'lib/bookshelf/mailers' + # + # # See http://hanamirb.org/guides/mailers/delivery + # delivery :test + # end + # + # # ... + # end def mailer(&blk) settings.put_if_absent(:mailer, blk) end + # @since 0.9.0 + # @api private def mounted settings.fetch_or_store(:mounted, {}) end + # @since 0.9.0 + # @api private def apps mounted.each_pair do |klass, app| yield(app) if klass.ancestors.include?(Hanami::Application) end end + # Configure logger + # + # @since 1.0.0.beta1 + # + # @param options [Hash] a set of options + # + # @see Hanami.logger + # @see Hanami::Logger + # + # @example + # # config/environment.rb + # # ... + # Hanami.configure do + # # ... + # environment :development do + # logger level: :debug + # end + # end def logger(options = nil) if options.nil? settings.fetch(:logger, nil) else settings[:logger] = options end end + # Configure settings for the current environment + # @since 1.0.0.beta1 + # + # @param name [Symbol] the name of the Hanami environment + # + # @see Hanami.env + # + # @example Configure Logging for Different Environments + # # config/environment.rb + # # ... + # Hanami.configure do + # # ... + # environment :development do + # logger level: :debug + # end + # + # environment :production do + # logger level: :info, formatter: :json + # end + # end def environment(name) yield if ENV['HANAMI_ENV'] == name.to_s end private + # @api private attr_reader :settings end end