Class: Tanuki::Application
Overview
Tanuki::Application is the starting point for all framework applications. It contains core application functionality like configuration, request handling and view management.
Class Method Summary collapse
-
.configure(env) ⇒ Object
Initializes application settings using configuration for environment
env. -
.configure_middleware(rack_builder) ⇒ Object
Add utilized middleware to a given Rack::Builder instance
rack_builder. -
.discard(middleware) ⇒ Object
Removes all occurences of a given
middlewarefrom the Rack middleware pipeline. -
.environment ⇒ Object
Returns current environment
Symbol, if application is configured. -
.run ⇒ Object
Runs the application with current settings.
-
.use(middleware, *args, &block) ⇒ Object
Adds a given
middlewarewith optionalargsandblockto the Rack middleware pipeline. -
.visitor(sym, &block) ⇒ Object
Adds a template visitor
block.
Class Method Details
.configure(env) ⇒ Object
Initializes application settings using configuration for environment env. These include settings for server, context, and middleware. Returns true, if configuration is successful.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/tanuki/application.rb', line 15 def configure(env) @environment = env begin default_root = File.(File.join('..', '..', '..'), __FILE__) @cfg = Configurator.new(Context, pwd = Dir.pwd) if pwd != default_root @cfg.config_root = File.join(default_root, 'config') @cfg.load_config(([:development, :production].include? env) ? :"#{env}_application" : :common_application) end @cfg.config_root = File.join(pwd, 'config') @cfg.load_config :"#{env}_application", pwd != default_root return true rescue NameError => e if e.name =~ /\AA-Z/ raise NameError, "missing class or module for constant `#{e.name}'", e.backtrace else raise e end end false end |
.configure_middleware(rack_builder) ⇒ Object
Add utilized middleware to a given Rack::Builder instance rack_builder.
38 39 40 |
# File 'lib/tanuki/application.rb', line 38 def configure_middleware(rack_builder) @rack_middleware.each {|item| rack_builder.use(item[0], *item[1], &item[2]) } end |
.discard(middleware) ⇒ Object
Removes all occurences of a given middleware from the Rack middleware pipeline.
43 44 45 |
# File 'lib/tanuki/application.rb', line 43 def discard(middleware) @rack_middleware.delete_if {|item| item[0] == middleware } end |
.environment ⇒ Object
Returns current environment Symbol, if application is configured. Returns nil otherwise.
49 50 51 |
# File 'lib/tanuki/application.rb', line 49 def environment @environment ||= nil end |
.run ⇒ Object
Runs the application with current settings.
54 55 56 57 58 59 60 61 |
# File 'lib/tanuki/application.rb', line 54 def run configure_middleware(rack_builder = Rack::Builder.new) rack_builder.run(rack_app) @context.running_server = available_server puts "A#{'n' if @environment =~ /\A[aeiou]/} #{@environment} Tanuki appears! Press Ctrl-C to set it free.", "You used #{@context.running_server.name.gsub(/.*::/, '')} at #{@context.host}:#{@context.port}." @context.running_server.run rack_builder.to_app, :Host => @context.host, :Port => @context.port end |
.use(middleware, *args, &block) ⇒ Object
Adds a given middleware with optional args and block to the Rack middleware pipeline.
64 65 66 |
# File 'lib/tanuki/application.rb', line 64 def use(middleware, *args, &block) @rack_middleware << [middleware, args, block] end |
.visitor(sym, &block) ⇒ Object
Adds a template visitor block. This block must return a Proc.
visitor :escape do
s = ''
proc {|out| s << CGI.escapeHTML(out.to_s) }
end
visitor :printf do |format|
s = ''
proc {|out| s << format % out.to_s }
end
It can later be used in a template via the visitor syntax.
<_escape escaped_view %>
<_printf('<div>%s</div>') formatted_view %>
83 84 85 |
# File 'lib/tanuki/application.rb', line 83 def visitor(sym, &block) BaseBehavior.instance_eval { define_method "#{sym}_visitor".to_sym, &block } end |