Sha256: 71a801d1d6430656b6509cc56f49062aec7b708483aee8b7154aac867afe601f

Contents?: true

Size: 1.01 KB

Versions: 3

Compression:

Stored size: 1.01 KB

Contents

# frozen_string_literal: true

module Grape
  class Router
    # this could be an OpenStruct, but doesn't work in Ruby 2.3.0, see https://bugs.ruby-lang.org/issues/12251
    class AttributeTranslator
      attr_reader :attributes, :request_method, :requirements

      def initialize(attributes = {})
        @attributes = attributes
        @request_method = attributes[:request_method]
        @requirements = attributes[:requirements]
      end

      def to_h
        attributes
      end

      def method_missing(method_name, *args) # rubocop:disable Style/MethodMissing
        if setter?(method_name[-1])
          attributes[method_name[0..-1]] = *args
        else
          attributes[method_name]
        end
      end

      def respond_to_missing?(method_name, _include_private = false)
        if setter?(method_name[-1])
          true
        else
          @attributes.key?(method_name)
        end
      end

      private

      def setter?(method_name)
        method_name[-1] == '='
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
grape-1.3.2 lib/grape/router/attribute_translator.rb
grape-1.3.1 lib/grape/router/attribute_translator.rb
grape-1.3.0 lib/grape/router/attribute_translator.rb