Class: Innate::MiddlewareCompiler
- Inherits:
-
Object
- Object
- Innate::MiddlewareCompiler
- Defined in:
- lib/innate/middleware_compiler.rb
Constant Summary collapse
- COMPILED =
{}
Instance Attribute Summary collapse
-
#middlewares ⇒ Object
readonly
Returns the value of attribute middlewares.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
Class Method Summary collapse
Instance Method Summary collapse
- #apps(*middlewares) ⇒ Object
- #call(env) ⇒ Object
- #cascade(*apps) ⇒ Object
- #compile ⇒ Object
- #compile! ⇒ Object
-
#initialize(name) {|_self| ... } ⇒ MiddlewareCompiler
constructor
A new instance of MiddlewareCompiler.
-
#innate(app = Innate::DynaMap, options = Innate.options) ⇒ Object
Default application for Innate.
- #run(app) ⇒ Object
- #use(middleware, *args, &block) ⇒ Object
Constructor Details
#initialize(name) {|_self| ... } ⇒ MiddlewareCompiler
Returns a new instance of MiddlewareCompiler.
15 16 17 18 19 20 |
# File 'lib/innate/middleware_compiler.rb', line 15 def initialize(name) @name = name.to_sym @middlewares = [] @compiled = nil yield(self) if block_given? end |
Instance Attribute Details
#middlewares ⇒ Object (readonly)
Returns the value of attribute middlewares.
13 14 15 |
# File 'lib/innate/middleware_compiler.rb', line 13 def middlewares @middlewares end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
13 14 15 |
# File 'lib/innate/middleware_compiler.rb', line 13 def name @name end |
Class Method Details
.build(name, &block) ⇒ Object
5 6 7 |
# File 'lib/innate/middleware_compiler.rb', line 5 def self.build(name, &block) COMPILED[name] ||= new(name, &block) end |
.build!(name, &block) ⇒ Object
9 10 11 |
# File 'lib/innate/middleware_compiler.rb', line 9 def self.build!(name, &block) COMPILED[name] = new(name, &block) end |
Instance Method Details
#apps(*middlewares) ⇒ Object
26 27 28 |
# File 'lib/innate/middleware_compiler.rb', line 26 def apps(*middlewares) @middlewares.concat(middlewares.map{|mw| [mw, [], nil]}) end |
#call(env) ⇒ Object
50 51 52 53 |
# File 'lib/innate/middleware_compiler.rb', line 50 def call(env) compile @compiled.call(env) end |
#cascade(*apps) ⇒ Object
34 35 36 |
# File 'lib/innate/middleware_compiler.rb', line 34 def cascade(*apps) @app = Rack::Cascade.new(apps, [404, 405]) end |
#compile ⇒ Object
55 56 57 |
# File 'lib/innate/middleware_compiler.rb', line 55 def compile @compiled ? self : compile! end |
#compile! ⇒ Object
59 60 61 62 63 64 |
# File 'lib/innate/middleware_compiler.rb', line 59 def compile! @compiled = @middlewares.reverse. inject(@app){|app, (middleware, args, block)| middleware.new(app, *args, &block) } self end |
#innate(app = Innate::DynaMap, options = Innate.options) ⇒ Object
Default application for Innate
39 40 41 42 43 44 45 46 47 48 |
# File 'lib/innate/middleware_compiler.rb', line 39 def innate(app = Innate::DynaMap, = Innate.) roots, publics = [:roots], [:publics] joined = roots.map{|root| publics.map{|public| ::File.join(root, public)}} apps = joined.flatten.map{|public_root| RackFileWrapper.new(public_root) } apps << Current.new(Route.new(app), Rewrite.new(app)) cascade(*apps) end |
#run(app) ⇒ Object
30 31 32 |
# File 'lib/innate/middleware_compiler.rb', line 30 def run(app) @app = app end |
#use(middleware, *args, &block) ⇒ Object
22 23 24 |
# File 'lib/innate/middleware_compiler.rb', line 22 def use(middleware, *args, &block) @middlewares << [middleware, args, block] end |