Sha256: 525fc650ba1890c7dd9e17e55d816d92a49cc797811baaa362346a0fb6557b93
Contents?: true
Size: 1.68 KB
Versions: 4
Compression:
Stored size: 1.68 KB
Contents
require 'erb' module TimePilot # Rack application displaying member counts class Web def call(env) dup.call!(env) end def call!(env) @request = Rack::Request.new(env) case @request.path_info when '/' dashboard else not_found end end # TODO: use Redis pipelining def dashboard @total_count = TimePilot.features.map do |feature_name| counts = TimePilot.group_classes.map do |klass| [klass.to_s, klass.pilot_feature_cardinality(feature_name)] end.to_h [feature_name, counts] end.to_h erb :index end def not_found [404, { 'Content-Type' => 'text/html' }, ['Not Found']] end def erb(view) [ 200, { 'Content-Type' => 'text/html' }, [ERB.new(read_template(view)).result(binding)] ] end def read_template(view) File.read(File.join(__dir__, '..', '..', 'web', 'views', "#{view}.html.erb")) end def root_path "#{@request.env['SCRIPT_NAME']}/" end class << self def app @app ||= instance end def call(env) app.call(env) end def use(middleware, *args, &block) @app = nil @middleware << [middleware, args, block] end def instance builder = Rack::Builder.new @middleware.each { |c, a, b| builder.use(c, *a, &b) } builder.use Rack::Static, urls: ['/stylesheets'], root: File.join(__dir__, '..', '..', 'web', 'assets') builder.run new builder.to_app end def reset! @middleware = [] end end reset! end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
time_pilot-1.0.2 | lib/time_pilot/web.rb |
time_pilot-1.0.1 | lib/time_pilot/web.rb |
time_pilot-1.0.0 | lib/time_pilot/web.rb |
time_pilot-0.1.1 | lib/time_pilot/web.rb |