class Minimo::Base

Constants

CONTENT_TYPE
CREATED_METHOD
NO_CONTENT_METHOD

Attributes

fixture_path[RW]
headers[RW]
log_path[RW]

Public Class Methods

new() click to toggle source
# File lib/minimo.rb, line 16
def initialize
  @headers = default_header
  @fixture_path = './response'.freeze
end

Public Instance Methods

call(env) click to toggle source
# File lib/minimo.rb, line 27
def call(env)
  response_body = []
  $stdout.sync = true

  @request = Rack::Request.new(env)
  verb = @request.request_method
  file_path = fixture_path(verb)

  response = Rack::Response.new do |r|
    r.status = status_code(verb)
  end

  CONTENT_TYPE.keys.push(nil).each do |ext|
    break if file_path.nil?
    separator = ext.nil? ? '' : '.'
    file = [file_path, ext].join(separator)
    if File.exist? file
      response_body << File.read(file)
      @headers['Content-Type'] = header_content_type(ext)
      break
    end
  end

  if response_body.empty?
    response.status = 404
    @headers['Content-Type'] = header_content_type(:text)
    response_body << "Oops! No route for #{verb} #{@request.path_info}"
  end

  @headers.map { |k,v| response.set_header(k,v) }
  response.write response_body.join("\n")

  if @log_dir
    logger = Minimo::Logger.new @log_dir
    msg = "#{verb} #{@request.path_info} #{env['SERVER_PROTOCOL']} #{response.status}"
    logger.write msg
  end

  response.finish
end
set(key, value) click to toggle source
# File lib/minimo.rb, line 23
def set(key, value)
  instance_variable_set "@#{key.to_s}", value
end
version() click to toggle source
# File lib/minimo.rb, line 68
def version
  VERSION
end

Private Instance Methods

default_header() click to toggle source
# File lib/minimo.rb, line 84
def default_header
  headers = {}
  headers['Server']                 = "minimo #{version}"
  headers['X-UA-Compatible']        = 'IE=Edge,chrome=1'
  headers['X-Content-Type-Options'] = 'nosniff'

  headers
end
header_content_type(type = nil) click to toggle source
# File lib/minimo.rb, line 93
def header_content_type(type = nil)
  type = :text if type.nil?
  CONTENT_TYPE[type]
end
status_code(verb) click to toggle source
# File lib/minimo.rb, line 74
def status_code(verb)
  if NO_CONTENT_METHOD.include? verb
    204
  elsif CREATED_METHOD.include? verb
    201
  else
    200
  end
end