Module: Grape::DSL::InsideRoute
Instance Method Summary collapse
-
#body(value = nil) ⇒ Object
Allows you to define the response body as something other than the return value.
-
#content_type(val = nil) ⇒ Object
Set response content-type.
-
#cookies ⇒ Object
Set or get a cookie.
-
#declared(params, options = {}, declared_params = nil) ⇒ Object
A filtering method that will return a hash consisting only of keys that have been declared by a
params
statement against the current/target endpoint or parent namespaces. - #entity_class_for_obj(object, options) ⇒ Object
-
#error!(message, status = nil, headers = nil) ⇒ Object
End the request and display an error to the end user with the specified message.
-
#header(key = nil, val = nil) ⇒ Object
Set an individual header or retrieve all headers that have been set.
-
#present(*args) ⇒ Object
Allows you to make use of Grape Entities by setting the response body to the serializable hash of the entity provided in the
:with
option. -
#redirect(url, options = {}) ⇒ Object
Redirect to a new url.
-
#route ⇒ Object
Returns route information for the current request.
-
#status(status = nil) ⇒ Object
Set or retrieve the HTTP status code.
-
#version ⇒ Object
The API version as specified in the URL.
Instance Method Details
#body(value = nil) ⇒ Object
Allows you to define the response body as something other than the return value.
146 147 148 149 150 151 152 |
# File 'lib/grape/dsl/inside_route.rb', line 146 def body(value = nil) if value @body = value else @body end end |
#content_type(val = nil) ⇒ Object
Set response content-type
116 117 118 119 120 121 122 |
# File 'lib/grape/dsl/inside_route.rb', line 116 def content_type(val = nil) if val header('Content-Type', val) else header['Content-Type'] end end |
#cookies ⇒ Object
Set or get a cookie
132 133 134 |
# File 'lib/grape/dsl/inside_route.rb', line 132 def @cookies ||= Cookies.new end |
#declared(params, options = {}, declared_params = nil) ⇒ Object
A filtering method that will return a hash
consisting only of keys that have been declared by a
params
statement against the current/target endpoint or parent
namespaces
options. :include_parent_namespaces
defaults to true, hence must be set to false if
you want only to return params declared against the current/target endpoint
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/grape/dsl/inside_route.rb', line 17 def declared(params, = {}, declared_params = nil) [:include_missing] = true unless .key?(:include_missing) [:include_parent_namespaces] = true unless .key?(:include_parent_namespaces) if declared_params.nil? declared_params = ![:include_parent_namespaces] ? settings[:declared_params] : settings.gather(:declared_params) end unless declared_params raise ArgumentError, "Tried to filter for declared parameters but none exist." end if params.is_a? Array params.map do |param| declared(param || {}, , declared_params) end else declared_params.inject({}) do |hash, key| key = { key => nil } unless key.is_a? Hash key.each_pair do |parent, children| output_key = [:stringify] ? parent.to_s : parent.to_sym if params.key?(parent) || [:include_missing] hash[output_key] = if children declared(params[parent] || {}, , Array(children)) else params[parent] end end end hash end end end |
#entity_class_for_obj(object, options) ⇒ Object
205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 |
# File 'lib/grape/dsl/inside_route.rb', line 205 def entity_class_for_obj(object, ) entity_class = .delete(:with) if entity_class.nil? # entity class not explicitely defined, auto-detect from relation#klass or first object in the collection object_class = if object.respond_to?(:klass) object.klass else object.respond_to?(:first) ? object.first.class : object.class end object_class.ancestors.each do |potential| entity_class ||= (settings[:representations] || {})[potential] end entity_class ||= object_class.const_get(:Entity) if object_class.const_defined?(:Entity) && object_class.const_get(:Entity).respond_to?(:represent) end entity_class end |
#error!(message, status = nil, headers = nil) ⇒ Object
End the request and display an error to the end user with the specified message.
63 64 65 66 |
# File 'lib/grape/dsl/inside_route.rb', line 63 def error!(, status = nil, headers = nil) self.status(status || settings[:default_error_status]) throw :error, message: , status: self.status, headers: headers end |
#header(key = nil, val = nil) ⇒ Object
Set an individual header or retrieve all headers that have been set.
107 108 109 110 111 112 113 |
# File 'lib/grape/dsl/inside_route.rb', line 107 def header(key = nil, val = nil) if key val ? @header[key.to_s] = val : @header.delete(key.to_s) else @header end end |
#present(*args) ⇒ Object
Allows you to make use of Grape Entities by setting
the response body to the serializable hash of the
entity provided in the :with
option. This has the
added benefit of automatically passing along environment
and version information to the serialization, making it
very easy to do conditional exposures. See Entity docs
for more info.
169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 |
# File 'lib/grape/dsl/inside_route.rb', line 169 def present(*args) = args.count > 1 ? args. : {} key, object = if args.count == 2 && args.first.is_a?(Symbol) args else [nil, args.first] end entity_class = entity_class_for_obj(object, ) root = .delete(:root) representation = if entity_class = { env: env } [:version] = env['api.version'] if env['api.version'] entity_class.represent(object, .merge()) else object end representation = { root => representation } if root representation = (@body || {}).merge(key => representation) if key body representation end |
#redirect(url, options = {}) ⇒ Object
Redirect to a new url.
73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/grape/dsl/inside_route.rb', line 73 def redirect(url, = {}) = { permanent: false }.merge() if [:permanent] status 301 else if env['HTTP_VERSION'] == 'HTTP/1.1' && request.request_method.to_s.upcase != "GET" status 303 else status 302 end end header "Location", url body "" end |
#route ⇒ Object
Returns route information for the current request.
201 202 203 |
# File 'lib/grape/dsl/inside_route.rb', line 201 def route env["rack.routing_args"][:route_info] end |
#status(status = nil) ⇒ Object
Set or retrieve the HTTP status code.
91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/grape/dsl/inside_route.rb', line 91 def status(status = nil) if status @status = status else return @status if @status case request.request_method.to_s.upcase when 'POST' 201 else 200 end end end |
#version ⇒ Object
The API version as specified in the URL.
54 55 56 |
# File 'lib/grape/dsl/inside_route.rb', line 54 def version env['api.version'] end |