class Opi::Context
Attributes
env[R]
error[R]
logger[R]
request[R]
response[R]
route[R]
Public Class Methods
new(env, logger, route, request, response)
click to toggle source
# File lib/opi/context.rb, line 6 def initialize(env, logger, route, request, response) @env = env @logger = logger @route = route @request = request @response = response @error = nil end
Public Instance Methods
error!(message, status)
click to toggle source
# File lib/opi/context.rb, line 19 def error!(message, status) @error = {:message => message, :status => status} end
params()
click to toggle source
# File lib/opi/context.rb, line 15 def params {}.tap {|h| @request.params.each{|x| h[x.first.to_sym] = x.last}} end
run()
click to toggle source
# File lib/opi/context.rb, line 23 def run skip = route.options[:skip] || [] skip = [skip] unless skip.is_a? Array route_before = route.options[:before] || [] route_before = [route_before] unless route_before.is_a? Array (route.before + route_before).each do |before| next if skip.include? before self.send before # execute before filter if self.error response.body = ["{\"error\":\"#{error[:message]}\"}", "\n"] response.status = error[:status] return response end end # before filters must have succeeded action = instance_eval &route.block if action.respond_to? :success? if action.success? response.status = 200 response.body = [action.result.to_json, "\n"] else response.status = 400 response.body = [action.errors.symbolic.to_json, "\n"] logger.error "Reponse: #{action.errors.symbolic.to_json}".red end else response.status = 200 response.body = [action.to_json, "\n"] end if self.error response.status = error[:status] response.body = [error[:message].to_json, "\n"] end response end