require 'markov' # ...? require 'oj' require 'sinatra' require 'thin' module Markov class Server < Sinatra::Base get '/' do "markov processes
" + settings.chains.sort_by(&:name).map do |ch| "#{ch.name}" end.join(" | ") end get '/:chain' do |name| chain = settings.chains.detect { |ch| ch.name == name } if chain stream do |out| out << "
"
          chain.generate!(show: true) do |ch|
            out << ch
          end
          out << "
" end else "No chain found :(" end end end end if __FILE__ == $0 include Markov Server.configure do |config| config.set :chains, Dir.glob(File.join('data','**.json')).map { |f| Oj.load(File.read(f)) } end Server.run!(port: ENV['PORT']) end