Sha256: 20ab8a8ddd3cb765850ca453627e3537e274fbbc057d0f58cc2e4a08bd4c27d3

Contents?: true

Size: 1.26 KB

Versions: 1

Compression:

Stored size: 1.26 KB

Contents

# frozen_string_literal: true

require 'forwardable'

class Roda
  module Endpoints
    # Generic HTTP endpoint abstraction.
    class Endpoint
      # Accessing data inside of endpoint.
      module Verbs
        extend Forwardable

        # @param [<Symbol>] only
        # @param [<Symbol>] except
        # @param attributes [{Symbol=>Object}]
        def initialize(only: implemented_verbs, except: [], **attributes)
          only = Array(only).flatten
          except = Array(except).flatten
          if ((unknown_only = only - implemented_verbs) +
              (unknown_except = except - implemented_verbs)).any?
            params = { only: unknown_only, except: unknown_except }
            raise ArgumentError, "unknown verbs in params: #{params}"
          end
          @verbs = only - except
          super(**attributes)
        end

        # @return [<Symbol>]
        def implemented_verbs
          self.class.verbs.to_a
        end

        # @return [<Symbol>]
        attr_reader :verbs

        def verb(name, **kwargs, &block)
          key = "operations.#{ns}.#{name}"
          container.register key, &block
          singleton_class.verb(name, **kwargs, &container[key])
        end
        def_delegator :singleton_class, :verb
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
roda-endpoints-0.1.0 lib/roda/endpoints/endpoint/verbs.rb