Sha256: a677f93ca66f957f51975ba2b6e67c851b33dcd84213beca552df1fd8df7741b

Contents?: true

Size: 898 Bytes

Versions: 11

Compression:

Stored size: 898 Bytes

Contents

module Toy
  module Identity
    extend ActiveSupport::Concern

    included do
      key Toy.key_factory
    end

    module ClassMethods
      def key(name_or_factory = :uuid)
        @key_factory = if name_or_factory == :uuid
          UUIDKeyFactory.new
        else
          if name_or_factory.respond_to?(:next_key) && name_or_factory.respond_to?(:key_type)
            name_or_factory
          else
            raise InvalidKeyFactory.new(name_or_factory)
          end
        end

        attribute :id, @key_factory.key_type
        @key_factory
      end

      def key_factory
        @key_factory || raise('Set your key_factory using key(...)')
      end

      def key_type
        @key_factory.key_type
      end

      def next_key(object = nil)
        @key_factory.next_key(object).tap do |key|
          raise InvalidKey.new if key.nil?
        end
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
toystore-0.11.0 lib/toy/identity.rb
toystore-0.10.4 lib/toy/identity.rb
toystore-0.10.3 lib/toy/identity.rb
toystore-0.10.2 lib/toy/identity.rb
toystore-0.10.1 lib/toy/identity.rb
toystore-0.10.0 lib/toy/identity.rb
toystore-0.9.0 lib/toy/identity.rb
toystore-0.8.3 lib/toy/identity.rb
toystore-0.8.2 lib/toy/identity.rb
toystore-0.8.1 lib/toy/identity.rb
toystore-0.8.0 lib/toy/identity.rb