Class: Evil::Client::Schema::Operation
- Inherits:
-
Evil::Client::Schema
- Object
- Evil::Client::Schema
- Evil::Client::Schema::Operation
- Defined in:
- lib/evil/client/schema/operation.rb
Overview
Mutable container of operation definitions with DSL to configure both settings and parts of request/response.
Direct Known Subclasses
Instance Attribute Summary
Attributes inherited from Evil::Client::Schema
Instance Method Summary collapse
-
#body(value = nil, &block) ⇒ self
Adds body definition to the schema.
-
#definitions ⇒ Hash<Symbol, [Proc, Hash<Integer, Proc>]>
Definitions for the current operation.
-
#format(value = nil, &block) ⇒ self
Adds format for request body.
-
#headers(value = nil, &block) ⇒ self
Adds request headers definition to the schema.
-
#http_method(value = nil, &block) ⇒ self
Adds http method definition to the schema.
-
#leaf? ⇒ true
Tells that this is a schema for end route (operation).
-
#middleware(value = nil, &block) ⇒ self
Adds list of middleware to the schema.
-
#path(value = nil, &block) ⇒ self
Adds path definition to the schema.
-
#query(value = nil, &block) ⇒ self
Adds query definition to the schema.
-
#response(*codes, **_kwargs, &block) ⇒ self
(also: #responses)
Adds response handler definition to the schema.
-
#security(value = nil, &block) ⇒ self
Adds security definition to the schema.
Methods inherited from Evil::Client::Schema
#let, #option, #settings, #to_s, #validate
Instance Method Details
#body(value = nil, &block) ⇒ self
Adds body definition to the schema
It is expected the body to correspond to [#format].
When a format is :json, the body should be convertible to json When a format is :text, the body should be stringified When a format is :form, the body should be a hash When a format is :multipart, the body can be object or array of objects
Unlike queries, previous body definitions aren’t inherited. The body defined for root scope can be fully reloaded at subscope/operation level without any merging.
133 134 135 |
# File 'lib/evil/client/schema/operation.rb', line 133 def body(value = nil, &block) __define__(:body, value, block) end |
#definitions ⇒ Hash<Symbol, [Proc, Hash<Integer, Proc>]>
Definitions for the current operation
19 20 21 |
# File 'lib/evil/client/schema/operation.rb', line 19 def definitions @definitions ||= { responses: {} } end |
#format(value = nil, &block) ⇒ self
Adds format for request body
54 55 56 |
# File 'lib/evil/client/schema/operation.rb', line 54 def format(value = nil, &block) __define__(:format, value, block) end |
#headers(value = nil, &block) ⇒ self
Adds request headers definition to the schema
Headers should be hash of header-value pairs. Values should be either stringified values or array of stringified values.
Nested definition will be merged to the root one(s), so that you can add headers step-by-step from root of the client to its scopes and operations.
To reset previous settings you can either set all headers to ‘nil`, or assign nil to custom headers. All headers with empty values will be ignored.
97 98 99 |
# File 'lib/evil/client/schema/operation.rb', line 97 def headers(value = nil, &block) __define__(:headers, value, block) end |
#http_method(value = nil, &block) ⇒ self
Adds http method definition to the schema
44 45 46 |
# File 'lib/evil/client/schema/operation.rb', line 44 def http_method(value = nil, &block) __define__(:http_method, value, block) end |
#leaf? ⇒ true
Tells that this is a schema for end route (operation)
11 12 13 |
# File 'lib/evil/client/schema/operation.rb', line 11 def leaf? true end |
#middleware(value = nil, &block) ⇒ self
Adds list of middleware to the schema
New middleware are added to previously defined (by root). This means the operation-specific middleware will handle the request after a root-specific one, and will handle the response before a roog-specific middleware.
Values should be either a Rack middleware class, or array of Rack middleware classes.
151 152 153 |
# File 'lib/evil/client/schema/operation.rb', line 151 def middleware(value = nil, &block) __define__(:middleware, value, block) end |
#path(value = nil, &block) ⇒ self
Adds path definition to the schema
Root path should be a valid URL for HTTP(S) protocol
31 32 33 |
# File 'lib/evil/client/schema/operation.rb', line 31 def path(value = nil, &block) __define__(:path, value, block) end |
#query(value = nil, &block) ⇒ self
Adds query definition to the schema
Query should be a nested hash. When subscope or operation reloads previously defined query, new definition are merged deeply to older one. You can populate a query step-by-step from client root to an operation.
112 113 114 |
# File 'lib/evil/client/schema/operation.rb', line 112 def query(value = nil, &block) __define__(:query, value, block) end |
#response(*codes, **_kwargs, &block) ⇒ self Also known as: responses
Adds response handler definition to the schema
161 162 163 164 165 166 |
# File 'lib/evil/client/schema/operation.rb', line 161 def response(*codes, **_kwargs, &block) codes.flatten.map(&:to_i).each do |code| definitions[:responses][code] = block || proc { |*response| response } end self end |
#security(value = nil, &block) ⇒ self
Adds security definition to the schema
The definition should be nested hash with a root keys :headers, or :query.
Inside the block we provide several helpers for standard authentication schemas, namely ‘basic_auth`, `token_auth`, and `key_auth`. Those are preferred ways to define a security schema:
76 77 78 |
# File 'lib/evil/client/schema/operation.rb', line 76 def security(value = nil, &block) __define__(:security, value, block) end |