Class: Apiwork::Adapter::Capability::Operation::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/apiwork/adapter/capability/operation/base.rb

Overview

Base class for capability Operation phase.

Operation phase runs on each request. Use it to transform data at runtime.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(data, representation_class, options, request, translation_context: {}) ⇒ Base

Returns a new instance of Base.



92
93
94
95
96
97
98
# File 'lib/apiwork/adapter/capability/operation/base.rb', line 92

def initialize(data, representation_class, options, request, translation_context: {})
  @data = data
  @representation_class = representation_class
  @options = options
  @request = request
  @translation_context = translation_context
end

Instance Attribute Details

#dataObject (readonly)

The data for this operation.

Returns:



33
34
35
# File 'lib/apiwork/adapter/capability/operation/base.rb', line 33

def data
  @data
end

#optionsConfiguration (readonly)

The options for this operation.

Returns:



33
34
35
36
# File 'lib/apiwork/adapter/capability/operation/base.rb', line 33

attr_reader :data,
:options,
:representation_class,
:request

#representation_classClass<Representation::Base> (readonly)

The representation class for this operation.

Returns:



33
34
35
36
# File 'lib/apiwork/adapter/capability/operation/base.rb', line 33

attr_reader :data,
:options,
:representation_class,
:request

#requestObject (readonly)



33
34
35
36
# File 'lib/apiwork/adapter/capability/operation/base.rb', line 33

attr_reader :data,
:options,
:representation_class,
:request

Class Method Details

.metadata_shape(klass = nil) { ... } ⇒ Class<MetadataShape>?

Defines metadata shape for this operation.

Pass a block or a MetadataShape subclass. Blocks are evaluated via instance_exec, providing access to type DSL methods and capability options.

Examples:

With block

 do
  reference(:pagination, to: :offset_pagination)
end

With class

 PaginationShape

Parameters:

  • klass (Class<MetadataShape>, nil) (defaults to: nil)

    (nil) The metadata shape class.

Yields:

  • block that defines metadata structure

Returns:



69
70
71
72
73
74
75
76
# File 'lib/apiwork/adapter/capability/operation/base.rb', line 69

def (klass = nil, &block)
  if klass
    @metadata_shape_class = klass
  elsif block
    @metadata_shape_class = (block)
  end
  @metadata_shape_class
end

.target(value = nil) ⇒ Symbol?

The target for this operation.

Parameters:

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

    (nil) [:collection, :member] The target type.

Returns:

  • (Symbol, nil)


45
46
47
48
# File 'lib/apiwork/adapter/capability/operation/base.rb', line 45

def target(value = nil)
  @target = value if value
  @target
end

Instance Method Details

#applyResult?

Applies this operation to the data.

Override this method to implement transformation logic. Return ‘nil` if no changes are made.

Returns:

Raises:

  • (NotImplementedError)


107
108
109
# File 'lib/apiwork/adapter/capability/operation/base.rb', line 107

def apply
  raise NotImplementedError
end

#result(data: nil, includes: nil, metadata: nil, serialize_options: nil) ⇒ Result

Creates a result object.

Parameters:

  • data (Object, nil) (defaults to: nil)

    (nil) The transformed data.

  • includes (Array, nil) (defaults to: nil)

    (nil) The associations to preload.

  • metadata (Hash, nil) (defaults to: nil)

    (nil) The metadata to add to response.

  • serialize_options (Hash, nil) (defaults to: nil)

    (nil) The options for serialization.

Returns:



123
124
125
126
127
128
129
130
# File 'lib/apiwork/adapter/capability/operation/base.rb', line 123

def result(data: nil, includes: nil, metadata: nil, serialize_options: nil)
  Result.new(
    data:,
    includes:,
    metadata:,
    serialize_options:,
  )
end

#translate(*segments, default: nil) ⇒ String?

Translates a key using the adapter’s i18n convention.

Lookup order:

  1. ‘apiwork.apis.<locale_key>.adapters.<adapter_name>.capabilities.<capability_name>.<segments>`

  2. ‘apiwork.adapters.<adapter_name>.capabilities.<capability_name>.<segments>`

  3. Provided default

Examples:

translate(:issues, :invalid, :detail)
# Tries: apiwork.apis.billing.adapters.standard.capabilities.writing.issues.invalid.detail
# Falls back to: apiwork.adapters.standard.capabilities.writing.issues.invalid.detail

Parameters:

  • segments (Array<Symbol, String>)

    The key path segments.

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

    (nil) The fallback value if no translation found.

Returns:

  • (String, nil)


150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
# File 'lib/apiwork/adapter/capability/operation/base.rb', line 150

def translate(*segments, default: nil)
  adapter_name = @translation_context[:adapter_name]
  capability_name = @translation_context[:capability_name]
  locale_key = @translation_context[:locale_key]
  key_suffix = segments.join('.')

  if locale_key
    api_key = :"apiwork.apis.#{locale_key}.adapters.#{adapter_name}.capabilities.#{capability_name}.#{key_suffix}"
    result = I18n.translate(api_key, default: nil)
    return result if result
  end

  adapter_key = :"apiwork.adapters.#{adapter_name}.capabilities.#{capability_name}.#{key_suffix}"
  result = I18n.translate(adapter_key, default: nil)
  return result if result

  default
end