Class: Apiwork::Request

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

Overview

Immutable value object representing a request.

Encapsulates query and body parameters. Transformations return new instances, preserving immutability.

Examples:

Creating a request

request = Request.new(query: { page: 1 }, body: { title: "Hello" })
request.query # => { page: 1 }
request.body # => { title: "Hello" }

Transforming keys

request.transform { |data| normalize(data) }

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(body:, query:) ⇒ Request

Creates a new request context.

Parameters:

  • body (Hash)

    The body parameters.

  • query (Hash)

    The query parameters.



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

def initialize(body:, query:)
  @query = query
  @body = body
end

Instance Attribute Details

#bodyHash (readonly)

The body for this request.

Returns:

  • (Hash)


28
29
30
# File 'lib/apiwork/request.rb', line 28

def body
  @body
end

#queryObject (readonly)



28
29
# File 'lib/apiwork/request.rb', line 28

attr_reader :body,
:query

Instance Method Details

#transform {|Hash| ... } ⇒ Request

Transforms both query and body with the same block.

Examples:

request.transform { |data| normalize(data) }

Yields:

  • (Hash)

    each field (query, then body)

Returns:



51
52
53
# File 'lib/apiwork/request.rb', line 51

def transform
  self.class.new(body: yield(body), query: yield(query))
end

#transform_body {|Hash| ... } ⇒ Request

Transforms only the body.

Examples:

request.transform_body { |body| prepare(body) }

Yields:

  • (Hash)

    the body parameters

Returns:



75
76
77
# File 'lib/apiwork/request.rb', line 75

def transform_body
  self.class.new(body: yield(body), query: query)
end

#transform_query {|Hash| ... } ⇒ Request

Transforms only the query.

Examples:

request.transform_query { |query| normalize(query) }

Yields:

  • (Hash)

    the query parameters

Returns:



63
64
65
# File 'lib/apiwork/request.rb', line 63

def transform_query
  self.class.new(body: body, query: yield(query))
end