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?()
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