Class: Joshua::Response

Inherits:
Object
  • Object
show all
Defined in:
lib/joshua/response.rb

Instance Method Summary collapse

Constructor Details

#initialize(api) ⇒ Response

Returns a new instance of Response.



5
6
7
8
9
10
# File 'lib/joshua/response.rb', line 5

def initialize api
  @api         = api
  @out         = {}
  @meta        = {}
  @errors      = {}
end

Instance Method Details

#[]=(key, value) ⇒ Object



12
13
14
# File 'lib/joshua/response.rb', line 12

def []= key, value
  meta key, value
end

#data(value) ⇒ Object



61
62
63
# File 'lib/joshua/response.rb', line 61

def data value
  @data ||= value
end

#data?Boolean

Returns:

  • (Boolean)


65
66
67
# File 'lib/joshua/response.rb', line 65

def data?
  !@data.nil?
end

#error(*args) ⇒ Object

add api response error



40
41
42
43
44
45
46
47
48
# File 'lib/joshua/response.rb', line 40

def error *args
  return @errors unless args[0]

  desc, code = args.reverse

  @errors[:code]       = code if code
  @errors[:messages] ||= []
  @errors[:messages].push desc unless @errors[:messages].include?(desc)
end

#error?Boolean

Returns:

  • (Boolean)


50
51
52
# File 'lib/joshua/response.rb', line 50

def error?
  !!(@errors[:messages] || @errors[:details])
end

#error_detail(name, desc) ⇒ Object



54
55
56
57
58
59
# File 'lib/joshua/response.rb', line 54

def error_detail name, desc
  error '%s (%s)' % [desc, name]

  @errors[:details]     ||= {}
  @errors[:details][name] = desc
end

#header(*args) ⇒ Object

forward header to rack_response.header



17
18
19
20
21
22
23
# File 'lib/joshua/response.rb', line 17

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) ⇒ Object

human readable response message



26
27
28
# File 'lib/joshua/response.rb', line 26

def message value
  @message = value
end

#meta(key, value = nil) ⇒ Object

api meta response, any data is allowed



31
32
33
34
35
36
37
# File 'lib/joshua/response.rb', line 31

def meta key, value = nil
  if value
    @meta[key] = value
  else
    @meta[key]
  end
end

#renderObject

render full api response



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/joshua/response.rb', line 70

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]  = error? ? 400 : 200
  end
end