class Statements::Server

Public Class Methods

new() click to toggle source
# File lib/statements/server.rb, line 7
def initialize

end
render(template, obj = nil) click to toggle source
# File lib/statements/server.rb, line 46
def self.render(template, obj = nil)
  @templates ||= {}
  @templates[template] ||= ERB.new(File.read File.expand_path("../views/#{template}.erb", __FILE__))
  @templates[template].result (obj || self).instance_eval { binding }
end

Public Instance Methods

call(env) click to toggle source
# File lib/statements/server.rb, line 11
def call(env)
  request = Rack::Request.new(env)
  verb = request.request_method.downcase
  path = request.path_info[1..-1].split('/')
  handler_name = "#{verb}_#{path.first || 'index'}".gsub('.', '_')
  args = [request] + path[1..-1]
  method = respond_to?(handler_name) && method(handler_name)
  if method && method.arity == args.length
    __send__ handler_name, *args
  else
    [404, {}, ['Not found']]
  end
end
get_accounts_js(request) click to toggle source
# File lib/statements/server.rb, line 42
def get_accounts_js(request)
  js "window.accounts = #{Account.to_json}"
end
html(html) click to toggle source
# File lib/statements/server.rb, line 38
def html(html)
  serve 'text/html; charset=UTF-8', html
end
js(script) click to toggle source
# File lib/statements/server.rb, line 34
def js(script)
  serve 'application/x-javascript', script
end
json(data) click to toggle source
# File lib/statements/server.rb, line 30
def json(data)
  serve 'application/json', JSON.generate(data, quirks_mode: true)
end
post_colour_json(request) click to toggle source
# File lib/statements/server.rb, line 56
def post_colour_json(request)
  input = JSON.parse(request.body.read)
  transaction = Transaction.find(input['id']) rescue false
  if transaction
    transaction.colour = input['colour']
    transaction.save
    json success: true
  else
    400
  end
end
post_search_html(request) click to toggle source
# File lib/statements/server.rb, line 52
def post_search_html(request)
  html self.class.render 'search', Search.new(JSON.parse request.body.read)
end
serve(type, str) click to toggle source

noinspection RubyStringKeysInHashInspection

# File lib/statements/server.rb, line 26
def serve(type, str)
  [200, {'Content-Type' => type, 'Content-Length' => str.length.to_s}, [str]]
end