Class: Apiwork::Contract::Action::Request

Inherits:
Object
  • Object
show all
Defined in:
lib/apiwork/contract/action/request.rb

Overview

Defines query and body for a request.

Returns Object via ‘query` and `body`.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(contract_class, action_name) ⇒ Request

Returns a new instance of Request.



14
15
16
17
18
19
20
# File 'lib/apiwork/contract/action/request.rb', line 14

def initialize(contract_class, action_name)
  @contract_class = contract_class
  @action_name = action_name
  @query = nil
  @body = nil
  @description = nil
end

Instance Attribute Details

#action_nameObject (readonly)



11
12
13
# File 'lib/apiwork/contract/action/request.rb', line 11

def action_name
  @action_name
end

#contract_classObject (readonly)



11
12
13
# File 'lib/apiwork/contract/action/request.rb', line 11

def contract_class
  @contract_class
end

Instance Method Details

#body {|body| ... } ⇒ Contract::Object

Defines the request body for this request.

Body is parsed from the JSON request body.

Examples:

instance_eval style

body do
  string :title
  decimal :amount
end

yield style

body do |body|
  body.string :title
  body.decimal :amount
end

Yields:

  • block for defining body params (instance_eval style)

Yield Parameters:

Returns:



91
92
93
94
95
96
97
# File 'lib/apiwork/contract/action/request.rb', line 91

def body(&block)
  @body ||= Object.new(@contract_class, action_name: @action_name)
  if block
    block.arity.positive? ? yield(@body) : @body.instance_eval(&block)
  end
  @body
end

#description(value = nil) ⇒ String?

The description for this request.

Metadata included in exports.

Examples:

action :create do
  request do
    description 'The invoice to create'
  end
end

Parameters:

  • value (String, nil) (defaults to: nil)

    (nil) The description.

Returns:

  • (String, nil)


37
38
39
40
41
# File 'lib/apiwork/contract/action/request.rb', line 37

def description(value = nil)
  return @description if value.nil?

  @description = value
end

#query {|query| ... } ⇒ Contract::Object

Defines query parameters for this request.

Query parameters are parsed from the URL query string.

Examples:

instance_eval style

query do
  integer? :page
  string? :status, enum: :status
end

yield style

query do |query|
  query.integer? :page
  query.string? :status, enum: :status
end

Yields:

  • block for defining query params (instance_eval style)

Yield Parameters:

Returns:



63
64
65
66
67
68
69
# File 'lib/apiwork/contract/action/request.rb', line 63

def query(&block)
  @query ||= Object.new(@contract_class, action_name: @action_name)
  if block
    block.arity.positive? ? yield(@query) : @query.instance_eval(&block)
  end
  @query
end