Class: Mihari::App
- Inherits:
-
Object
- Object
- Mihari::App
- Defined in:
- lib/mihari/web/app.rb
Class Method Summary collapse
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize ⇒ App
constructor
A new instance of App.
Constructor Details
#initialize ⇒ App
Returns a new instance of App.
19 20 21 22 23 24 25 26 |
# File 'lib/mihari/web/app.rb', line 19 def initialize @filenames = ["", ".html", "index.html", "/index.html"] @rack_static = ::Rack::Static.new( -> { [404, {}, []] }, root: File.("./public", __dir__), urls: ["/"] ) end |
Class Method Details
.instance ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/mihari/web/app.rb', line 29 def instance @instance ||= Rack::Builder.new do use Rack::Cors do allow do origins "*" resource "*", headers: :any, methods: [:get, :post, :put, :delete, :options] end end use Middleware::ConnectionAdapter use Middleware::ErrorNotificationAdapter run App.new end.to_app end |
.run!(port: 9292, host: "localhost", threads: "1:1", verbose: false) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/mihari/web/app.rb', line 45 def run!(port: 9292, host: "localhost", threads: "1:1", verbose: false) url = "http://#{host}:#{port}" # set maximum number of threads to use as PARALLEL_PROCESSOR_COUNT (if it is not set) # ref. https://github.com/grosser/parallel#tips # TODO: is this the best way? _min_thread, max_thread = threads.split(":") ENV["PARALLEL_PROCESSOR_COUNT"] = max_thread if ENV["PARALLEL_PROCESSOR_COUNT"].nil? Rack::Handler::Puma.run(instance, Port: port, Host: host, Threads: threads, Verbose: verbose) do |_launcher| Launchy.open(url) if ENV["RACK_ENV"] != "development" rescue Launchy::CommandNotFoundError # ref. https://github.com/ninoseki/mihari/issues/477 # do nothing end end |
Instance Method Details
#call(env) ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/mihari/web/app.rb', line 63 def call(env) # api api_response = API.call(env) # Check if the App wants us to pass the response along to others if api_response[1]["X-Cascade"] == "pass" # static files request_path = env["PATH_INFO"] @filenames.each do |path| response = @rack_static.call(env.merge("PATH_INFO" => request_path + path)) return response if response[0] != 404 end end api_response end |