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