Sha256: 9d7569d897526a7e27821a9eafdb0916929800f2336bd97253ccc745770fff5c

Contents?: true

Size: 1.46 KB

Versions: 7

Compression:

Stored size: 1.46 KB

Contents

module GraphitiGql
  class Schema
    class Registry
      include Singleton

      def initialize
        clear
      end

      def get(object, interface: true)
        @data[key_for(object, interface: interface)]
      end

      def set(resource, type, interface: true)
        @data[key_for(resource, interface: interface)] = { resource: resource, type: type, interface: interface }
      end

      def key_for(object, interface: true)
        if object.ancestors.include?(Graphiti::Resource) 
          key = key_for_resource(object)
          if object.polymorphic?
            if !object.polymorphic_child? && interface
              key = "I#{key}"
            end
          end
          key
        else
          raise 'unknown object!'
        end
      end

      def clear
        @data = {}
      end

      def []=(key, value)
        @data[key] = value
      end

      def [](key)
        @data[key]
      end

      def key?(key)
        @data.key?(key)
      end

      def values
        @data.values
      end

      # When polymorphic parent, returns the Interface not the Class
      def resource_types(value_objects: true)
        values
          .select { |v| v.key?(:resource) }
          .reject { |v| v[:interface] }
          .reject { |v| !value_objects && v[:resource].value_object? }
          .map { |registered| get(registered[:resource]) }
      end

      private

      def key_for_resource(resource)
        resource.graphql_name
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
graphiti_gql-0.2.38 lib/graphiti_gql/schema/registry.rb
graphiti_gql-0.2.37 lib/graphiti_gql/schema/registry.rb
graphiti_gql-0.2.36 lib/graphiti_gql/schema/registry.rb
graphiti_gql-0.2.35 lib/graphiti_gql/schema/registry.rb
graphiti_gql-0.2.34 lib/graphiti_gql/schema/registry.rb
graphiti_gql-0.2.33 lib/graphiti_gql/schema/registry.rb
graphiti_gql-0.2.32 lib/graphiti_gql/schema/registry.rb