Sha256: 0dfda1303bad3dd3ddd216879db59468bad4fb4fd4b3d53f52dc7851850585e5

Contents?: true

Size: 1.41 KB

Versions: 24

Compression:

Stored size: 1.41 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
        values
          .select { |v| v.key?(:resource) && !v[:interface] }
          .map { |registered| get(registered[:resource]) }
      end

      private

      def key_for_resource(resource)
        resource.graphql_name ||
          resource.name.gsub('Resource', '').gsub('::', '')
      end
    end
  end
end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
graphiti_gql-0.2.23 lib/graphiti_gql/schema/registry.rb
graphiti_gql-0.2.22 lib/graphiti_gql/schema/registry.rb
graphiti_gql-0.2.21 lib/graphiti_gql/schema/registry.rb
graphiti_gql-0.2.20 lib/graphiti_gql/schema/registry.rb
graphiti_gql-0.2.19 lib/graphiti_gql/schema/registry.rb
graphiti_gql-0.2.18 lib/graphiti_gql/schema/registry.rb
graphiti_gql-0.2.17 lib/graphiti_gql/schema/registry.rb
graphiti_gql-0.2.16 lib/graphiti_gql/schema/registry.rb
graphiti_gql-0.2.15 lib/graphiti_gql/schema/registry.rb
graphiti_gql-0.2.14 lib/graphiti_gql/schema/registry.rb
graphiti_gql-0.2.12 lib/graphiti_gql/schema/registry.rb
graphiti_gql-0.2.11 lib/graphiti_gql/schema/registry.rb
graphiti_gql-0.2.10 lib/graphiti_gql/schema/registry.rb
graphiti_gql-0.2.9 lib/graphiti_gql/schema/registry.rb
graphiti_gql-0.2.8 lib/graphiti_gql/schema/registry.rb
graphiti_gql-0.2.7 lib/graphiti_gql/schema/registry.rb
graphiti_gql-0.2.6 lib/graphiti_gql/schema/registry.rb
graphiti_gql-0.2.5 lib/graphiti_gql/schema/registry.rb
graphiti_gql-0.2.4 lib/graphiti_gql/schema/registry.rb
graphiti_gql-0.2.3 lib/graphiti_gql/schema/registry.rb