Class: Praxis::Application
- Inherits:
-
Object
- Object
- Praxis::Application
- Includes:
- Singleton
- Defined in:
- lib/praxis/application.rb
Instance Attribute Summary collapse
-
#app ⇒ Object
readonly
Returns the value of attribute app.
-
#bootloader ⇒ Object
Returns the value of attribute bootloader.
-
#builder ⇒ Object
readonly
Returns the value of attribute builder.
-
#controllers ⇒ Object
readonly
Returns the value of attribute controllers.
-
#error_handler ⇒ Object
Returns the value of attribute error_handler.
-
#file_layout ⇒ Object
Returns the value of attribute file_layout.
-
#handlers ⇒ Object
Returns the value of attribute handlers.
-
#loaded_files ⇒ Object
Returns the value of attribute loaded_files.
-
#logger ⇒ Object
Returns the value of attribute logger.
-
#plugins ⇒ Object
Returns the value of attribute plugins.
-
#resource_definitions ⇒ Object
readonly
Returns the value of attribute resource_definitions.
-
#root ⇒ Object
Returns the value of attribute root.
-
#router ⇒ Object
readonly
Returns the value of attribute router.
-
#validation_handler ⇒ Object
Returns the value of attribute validation_handler.
-
#versioning_scheme ⇒ Object
Returns the value of attribute versioning_scheme.
Class Method Summary collapse
Instance Method Summary collapse
- #call(env) ⇒ Object
- #config(key = nil, type = Attributor::Struct, **opts, &block) ⇒ Object
- #config=(config) ⇒ Object
-
#handler(name, handler) ⇒ Object
Register a media type handler used to transform medias’ structured data to HTTP response entitites with a specific encoding (JSON, XML, etc) and to parse request bodies into structured data.
-
#initialize ⇒ Application
constructor
A new instance of Application.
- #layout(&block) ⇒ Object
- #middleware(middleware, *args, &block) ⇒ Object
- #setup(root: '.') ⇒ Object
Constructor Details
#initialize ⇒ Application
Returns a new instance of Application.
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/praxis/application.rb', line 32 def initialize @controllers = Set.new @resource_definitions = Set.new @error_handler = ErrorHandler.new @validation_handler = ValidationHandler.new @router = Router.new(self) @builder = Rack::Builder.new @app = nil @bootloader = Bootloader.new(self) @file_layout = nil @plugins = Hash.new @handlers = Hash.new @loaded_files = Set.new @config = Config.new @root = nil @logger = Logger.new(STDOUT) end |
Instance Attribute Details
#app ⇒ Object (readonly)
Returns the value of attribute app.
12 13 14 |
# File 'lib/praxis/application.rb', line 12 def app @app end |
#bootloader ⇒ Object
Returns the value of attribute bootloader.
15 16 17 |
# File 'lib/praxis/application.rb', line 15 def bootloader @bootloader end |
#builder ⇒ Object (readonly)
Returns the value of attribute builder.
13 14 15 |
# File 'lib/praxis/application.rb', line 13 def builder @builder end |
#controllers ⇒ Object (readonly)
Returns the value of attribute controllers.
10 11 12 |
# File 'lib/praxis/application.rb', line 10 def controllers @controllers end |
#error_handler ⇒ Object
Returns the value of attribute error_handler.
22 23 24 |
# File 'lib/praxis/application.rb', line 22 def error_handler @error_handler end |
#file_layout ⇒ Object
Returns the value of attribute file_layout.
16 17 18 |
# File 'lib/praxis/application.rb', line 16 def file_layout @file_layout end |
#handlers ⇒ Object
Returns the value of attribute handlers.
20 21 22 |
# File 'lib/praxis/application.rb', line 20 def handlers @handlers end |
#loaded_files ⇒ Object
Returns the value of attribute loaded_files.
17 18 19 |
# File 'lib/praxis/application.rb', line 17 def loaded_files @loaded_files end |
#logger ⇒ Object
Returns the value of attribute logger.
18 19 20 |
# File 'lib/praxis/application.rb', line 18 def logger @logger end |
#plugins ⇒ Object
Returns the value of attribute plugins.
19 20 21 |
# File 'lib/praxis/application.rb', line 19 def plugins @plugins end |
#resource_definitions ⇒ Object (readonly)
Returns the value of attribute resource_definitions.
11 12 13 |
# File 'lib/praxis/application.rb', line 11 def resource_definitions @resource_definitions end |
#root ⇒ Object
Returns the value of attribute root.
21 22 23 |
# File 'lib/praxis/application.rb', line 21 def root @root end |
#router ⇒ Object (readonly)
Returns the value of attribute router.
9 10 11 |
# File 'lib/praxis/application.rb', line 9 def router @router end |
#validation_handler ⇒ Object
Returns the value of attribute validation_handler.
23 24 25 |
# File 'lib/praxis/application.rb', line 23 def validation_handler @validation_handler end |
#versioning_scheme ⇒ Object
Returns the value of attribute versioning_scheme.
25 26 27 |
# File 'lib/praxis/application.rb', line 25 def versioning_scheme @versioning_scheme end |
Class Method Details
.configure {|self.instance| ... } ⇒ Object
28 29 30 |
# File 'lib/praxis/application.rb', line 28 def self.configure yield(self.instance) end |
Instance Method Details
#call(env) ⇒ Object
110 111 112 113 114 115 |
# File 'lib/praxis/application.rb', line 110 def call(env) response = [] Notifications.instrument 'rack.request.all'.freeze, response: response do response.push(*@app.call(env)) end end |
#config(key = nil, type = Attributor::Struct, **opts, &block) ⇒ Object
121 122 123 124 125 126 127 |
# File 'lib/praxis/application.rb', line 121 def config(key=nil, type=Attributor::Struct, **opts, &block) if block_given? || (type==Attributor::Struct && !opts.empty? ) @config.define(key, type, opts, &block) else @config.get end end |
#config=(config) ⇒ Object
129 130 131 |
# File 'lib/praxis/application.rb', line 129 def config=(config) @config.set(config) end |
#handler(name, handler) ⇒ Object
Register a media type handler used to transform medias’ structured data to HTTP response entitites with a specific encoding (JSON, XML, etc) and to parse request bodies into structured data.
97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/praxis/application.rb', line 97 def handler(name, handler) # Construct an instance, if the handler is a class and needs to be initialized. handler = handler.new # Make sure it quacks like a handler. unless handler.respond_to?(:generate) && handler.respond_to?(:parse) raise ArgumentError, "Media type handlers must respond to #generate and #parse" end # Register that thing! @handlers[name.to_s] = handler end |
#layout(&block) ⇒ Object
117 118 119 |
# File 'lib/praxis/application.rb', line 117 def layout(&block) self.file_layout = FileGroup.new(self.root, &block) end |
#middleware(middleware, *args, &block) ⇒ Object
86 87 88 |
# File 'lib/praxis/application.rb', line 86 def middleware(middleware, *args, &block) @builder.use(middleware, *args, &block) end |
#setup(root: '.') ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/praxis/application.rb', line 55 def setup(root: '.') return self unless @app.nil? @root = Pathname.new(root). builtin_handlers = { 'plain' => Praxis::Handlers::Plain, 'json' => Praxis::Handlers::JSON, 'x-www-form-urlencoded' => Praxis::Handlers::WWWForm } # Register built-in handlers unless the app already provided its own builtin_handlers.each_pair do |name, handler| self.handler(name, handler) unless handlers.key?(name) end @bootloader.setup! @builder.run(@router) @app = @builder.to_app Notifications.subscribe 'rack.request.all'.freeze do |name, start, finish, _id, payload| duration = (finish - start) * 1000 Stats.timing(name, duration) status, _, _ = payload[:response] Stats.increment "rack.request.#{status}" end self end |