Sha256: beb589064981f44cd0b2097b9377b7bda38fc45faa9301b61aaf567f7afb2885

Contents?: true

Size: 893 Bytes

Versions: 3

Compression:

Stored size: 893 Bytes

Contents

module GraphQL
  class Query
    # Read-only access to values, normalizing all keys to strings
    #
    # {Arguments} recursively wraps the input in {Arguments} instances.
    class Arguments
      extend Forwardable

      def initialize(values)
        @values = values.inject({}) do |memo, (inner_key, inner_value)|
          memo[inner_key.to_s] = wrap_value(inner_value)
          memo
        end
      end

      # @param [String, Symbol] name or index of value to access
      # @return [Object] the argument at that key
      def [](key)
        @values[key.to_s]
      end

      def_delegators :@values, :keys, :values, :each

      private

      def wrap_value(value)
        if value.is_a?(Array)
          value.map { |item| wrap_value(item) }
        elsif value.is_a?(Hash)
          self.class.new(value)
        else
          value
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
graphql-0.10.3 lib/graphql/query/arguments.rb
graphql-0.10.2 lib/graphql/query/arguments.rb
graphql-0.10.1 lib/graphql/query/arguments.rb