Class: Joshua::Response

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

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(api) ⇒ Response

Returns a new instance of Response.



15
16
17
18
19
20
# File 'lib/joshua/response.rb', line 15

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

Instance Attribute Details

#errorsObject (readonly)

Returns the value of attribute errors.



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

def errors
  @errors
end

Class Method Details

.auto_format(error) ⇒ Object



7
8
9
10
11
# 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

Instance Method Details

#[]=(key, value) ⇒ Object



22
23
24
# File 'lib/joshua/response.rb', line 22

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

#data(value = :_undefind) ⇒ Object Also known as: data=



80
81
82
83
84
85
86
# File 'lib/joshua/response.rb', line 80

def data value=:_undefind
  if value == :_undefind
    @data
  else
    @data = value
  end
end

#data?Boolean

Returns:

  • (Boolean)


89
90
91
# File 'lib/joshua/response.rb', line 89

def data?
  !@data.nil?
end

#error(text, args = {}) ⇒ Object

add api response error



54
55
56
57
58
59
60
61
62
63
64
65
66
67
# 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?Boolean

Returns:

  • (Boolean)


69
70
71
# File 'lib/joshua/response.rb', line 69

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

#error_detail(name, desc) ⇒ Object



73
74
75
76
77
78
# 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) ⇒ Object

forward header to rack_response.header



27
28
29
30
31
32
33
# 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) ⇒ Object

human readable response message



36
37
38
39
40
41
42
# 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) ⇒ Object

api meta response, any data is allowed



45
46
47
48
49
50
51
# File 'lib/joshua/response.rb', line 45

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

#renderObject

render full api response



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# 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