Class: Joshua::Response
- Inherits:
-
Object
- Object
- Joshua::Response
- Defined in:
- lib/joshua/response.rb
Instance Attribute Summary collapse
-
#errors ⇒ Object
readonly
Returns the value of attribute errors.
Class Method Summary collapse
Instance Method Summary collapse
- #[]=(key, value) ⇒ Object
- #data(value = :_undefind) ⇒ Object (also: #data=)
- #data? ⇒ Boolean
-
#error(messages, args = {}) ⇒ Object
add api response error.
- #error? ⇒ Boolean
- #error_detail(name, desc) ⇒ Object
-
#header(*args) ⇒ Object
forward header to rack_response.header.
-
#initialize(api) ⇒ Response
constructor
A new instance of Response.
-
#message(value, force = false) ⇒ Object
human readable response message.
-
#meta(key, value = nil) ⇒ Object
api meta response, any data is allowed.
-
#render ⇒ Object
render full api response.
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
#errors ⇒ Object (readonly)
Returns the value of attribute errors.
5 6 7 |
# File 'lib/joshua/response.rb', line 5 def errors @errors end |
Class Method Details
Instance Method Details
#[]=(key, value) ⇒ Object
22 23 24 |
# File 'lib/joshua/response.rb', line 22 def []= key, value key, value end |
#data(value = :_undefind) ⇒ Object Also known as: data=
89 90 91 92 93 94 95 |
# File 'lib/joshua/response.rb', line 89 def data value=:_undefind if value == :_undefind @data else @data = value end end |
#data? ⇒ Boolean
98 99 100 |
# File 'lib/joshua/response.rb', line 98 def data? !@data.nil? end |
#error(messages, args = {}) ⇒ Object
add api response error
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/joshua/response.rb', line 56 def error , 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 @errors[:code] ||= code if code @errors[:messages] ||= [] unless .class == Array = [.to_s] end for text in if text.present? && text[0, 2] != '["' && !@errors[:messages].include?(text) @errors[:messages].push text end end end |
#error? ⇒ Boolean
78 79 80 |
# File 'lib/joshua/response.rb', line 78 def error? !!(@errors[:messages] || @errors[:details]) end |
#error_detail(name, desc) ⇒ Object
82 83 84 85 86 87 |
# File 'lib/joshua/response.rb', line 82 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 43 44 |
# File 'lib/joshua/response.rb', line 36 def value, force=false if force @message = value else @message ||= value end nil end |
#meta(key, value = nil) ⇒ Object
api meta response, any data is allowed
47 48 49 50 51 52 53 |
# File 'lib/joshua/response.rb', line 47 def key, value = nil if value @meta[key] = value else @meta[key] end end |
#render ⇒ Object
render full api response
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/joshua/response.rb', line 103 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 |