class APIGatewayDSL::Operation

Attributes

context[R]
cors[R]
description[RW]
integrations[R]
parameters[R]
path[R]
responses[R]
summary[RW]

Public Class Methods

new(context, method, path, **options, &block) click to toggle source
# File lib/api_gateway_dsl/operation.rb, line 7
def initialize(context, method, path, **options, &block)
  @context = context.dup

  @method = method
  @path   = path

  @cors     = options[:cors]
  @security = options[:security]

  @parameters   = Parameter::Collection.new
  @integrations = Integration::Collection.new
  @responses    = Response::Collection.new

  DSL::OperationNode.new(self, &block)
end

Public Instance Methods

as_json() click to toggle source

rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity

# File lib/api_gateway_dsl/operation.rb, line 43
def as_json
  {}.tap do |result|
    result[:summary]     = summary                     if summary
    result[:description] = description.strip_heredoc   if description
    result[:security]    = [@security => []]           if @security

    if (produces = responses.content_types).present?
      result[:produces] = produces
    end
    result[:responses] = responses.as_json

    if (integration = integrations.first)
      if (consumes = integration.templates.content_types).present?
        result[:consumes] = consumes
      end
      if (params = parameters_with_body.as_json).present?
        result[:parameters] = params
      end
      result[:'x-amazon-apigateway-integration'] = integration.as_json
    end
  end
end
cors_method() click to toggle source
# File lib/api_gateway_dsl/operation.rb, line 38
def cors_method
  @method # not downcased
end
method() click to toggle source
# File lib/api_gateway_dsl/operation.rb, line 31
def method
  case @method
  when 'ANY' then 'x-amazon-apigateway-any-method'
  else            @method.downcase
  end
end
parameters_with_body() click to toggle source
# File lib/api_gateway_dsl/operation.rb, line 23
def parameters_with_body
  Parameter::Collection.new.concat(parameters).tap do |result|
    if (integration = integrations.first)
      result.concat(integration.templates.parameters)
    end
  end
end