Sha256: 49b322bb23967ae7470ca4abedd7d5d3e55b5492590a54bb2ea5940a118516cb

Contents?: true

Size: 1.56 KB

Versions: 8

Compression:

Stored size: 1.56 KB

Contents

require "shamu/services"

module Shamu
  module Entities

    # Implements an {EntityLookupService} that works with {OpaqueId} encoded
    # values to obfuscate the contents and type of record identified by the id.
    # Useful for implementing guidelines for globally unique IDs in a GraphQL
    # system.
    #
    # ```
    # Scorpion.prepare do
    #   capture Shamu::Entities::EntityLookupService do |scorpion|
    #     scorpion.new( Shamu::Entities::OpaqueEntityLookupService, { "User" => Users::ExternalUsersService }, {} )
    #   end
    # end
    # ```
    class OpaqueEntityLookupService < EntityLookupService

      # ============================================================================
      # @!group Dependencies
      #

      # @!attribute
      # @return [EntityLookupService] the underlying lookup service to use.
      attr_dependency :lookup_service, EntityLookupService do |scorpion|
        scorpion.new( EntityLookupService, { entity_map: entity_map }, {} )
      end


      #
      # @!endgroup Dependencies

      # (see {EntityLookupService#ids)
      def ids( entities )
        super.map do |id|
          OpaqueId.opaque_id( id )
        end
      end

      # (see {EntityLookupService#record_ids)
      def record_ids( ids )
        super( ids_to_entity_paths( ids ) )
      end

      # (see {EntityLookupService#lookup)
      def lookup( *ids )
        super( *ids_to_entity_paths( ids ) )
      end

      private

        def ids_to_entity_paths( ids )
          Array.wrap( ids ).map { |id| OpaqueId.to_entity_path( id ) }
        end

    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
shamu-0.0.24 lib/shamu/entities/opaque_entity_lookup_service.rb
shamu-0.0.21 lib/shamu/entities/opaque_entity_lookup_service.rb
shamu-0.0.20 lib/shamu/entities/opaque_entity_lookup_service.rb
shamu-0.0.19 lib/shamu/entities/opaque_entity_lookup_service.rb
shamu-0.0.18 lib/shamu/entities/opaque_entity_lookup_service.rb
shamu-0.0.17 lib/shamu/entities/opaque_entity_lookup_service.rb
shamu-0.0.15 lib/shamu/entities/opaque_entity_lookup_service.rb
shamu-0.0.14 lib/shamu/entities/opaque_entity_lookup_service.rb