class Joshua::Response

Attributes

errors[R]

Public Class Methods

auto_format(error) click to toggle source
# File lib/joshua/response.rb, line 7
def self.auto_format error
  response = new nil
  response.error error.message, code: error.is_a?(Joshua::Error) ? 400 : 500
  response.render
end
new(api) click to toggle source
# File lib/joshua/response.rb, line 15
def initialize api
  @api         = api
  @out         = {}
  @meta        = {}
  @errors      = {}
end

Public Instance Methods

[]=(key, value) click to toggle source
# File lib/joshua/response.rb, line 22
def []= key, value
  meta key, value
end
data(value=:_undefind) click to toggle source
# File lib/joshua/response.rb, line 80
def data value=:_undefind
  if value == :_undefind
    @data
  else
    @data = value
  end
end
Also aliased as: data=
data=(value=:_undefind)
Alias for: data
data?() click to toggle source
# File lib/joshua/response.rb, line 89
def data?
  !@data.nil?
end
error(text, args={}) click to toggle source

add api response error

# File lib/joshua/response.rb, line 54
def error text, args={}
  code   = args.delete(:code)
  status = args.delete(:status)

  raise 'Key %s is not supported' % args.keys.first if args.keys.first

  @status ||= status if status

  text = text.to_s

  @errors[:code]     ||= code if code
  @errors[:messages] ||= []
  @errors[:messages].push text unless @errors[:messages].include?(text)
end
error?() click to toggle source
# File lib/joshua/response.rb, line 69
def error?
  !!(@errors[:messages] || @errors[:details])
end
error_detail(name, desc) click to toggle source
# File lib/joshua/response.rb, line 73
def error_detail name, desc
  error '%s (%s)' % [desc, name]

  @errors[:details]     ||= {}
  @errors[:details][name] = desc
end
header(*args) click to toggle source

forward header to rack_response.header

# File lib/joshua/response.rb, line 27
def header *args
  if args.first
    @api.rack_response.header[args.first] = args[1] if @api.rack_response
  else
    @api.rack_response.header
  end
end
message(value, force=false) click to toggle source

human readable response message

# File lib/joshua/response.rb, line 36
def message value, force=false
  if force
    @message = value
  else
    @message ||= value
  end
end
meta(key, value = nil) click to toggle source

api meta response, any data is allowed

# File lib/joshua/response.rb, line 45
def meta key, value = nil
  if value
    @meta[key] = value
  else
    @meta[key]
  end
end
render() click to toggle source

render full api response

# File lib/joshua/response.rb, line 94
def render
  {}.tap do |out|
    if @errors.keys.empty?
      out[:success] = true
    else
      out[:success] = false
      out[:error] = @errors
    end

    out[:meta]    = @meta
    out[:message] = @message if @message
    out[:data]    = @data unless @data.nil?
    out[:status]  = @status || (error? ? 400 : 200)
  end
end