Sha256: 465baf719ce83aaf233a549659d8939152a5683a8ce5e55a91f63cbd5b409f12

Contents?: true

Size: 1.26 KB

Versions: 66

Compression:

Stored size: 1.26 KB

Contents

module CassandraObject
  module Identity
    extend ActiveSupport::Concern
    extend ActiveSupport::Autoload

    autoload :Key
    autoload :AbstractKeyFactory
    autoload :UUIDKeyFactory
    autoload :NaturalKeyFactory
    autoload :HashedNaturalKeyFactory
    autoload :CustomKeyFactory

    module ClassMethods
      # Indicate what kind of key the model will have: uuid or natural
      #
      # @param [:uuid, :natural] the type of key
      # @param the options you want to pass along to the key factory (like :attributes => :name, for a natural key).
      # 
      def key(name_or_factory = :uuid, *options)
        @key_factory = case name_or_factory
        when :uuid
          UUIDKeyFactory.new
        when :natural
          NaturalKeyFactory.new(*options)
        when :custom
          CustomKeyFactory.new(*options)
        else
          name_or_factory
        end
      end

      def next_key(object = nil)
        @key_factory.next_key(object).tap do |key|
          raise "Keys may not be nil" if key.nil?
        end
      end

      def parse_key(string)
        @key_factory.parse(string)
      end
    end

    def id
      key.try(:to_s)
    end
    alias :quoted_id :id

    def id=(key)
      self.key = self.class.parse_key(key)
      id
    end
  end
end

Version data entries

66 entries across 66 versions & 1 rubygems

Version Path
sessionm-cassandra_object-4.0.32 lib/cassandra_object/identity.rb
sessionm-cassandra_object-4.0.31 lib/cassandra_object/identity.rb
sessionm-cassandra_object-4.0.30 lib/cassandra_object/identity.rb
sessionm-cassandra_object-4.0.29 lib/cassandra_object/identity.rb
sessionm-cassandra_object-4.0.28 lib/cassandra_object/identity.rb
sessionm-cassandra_object-4.0.27 lib/cassandra_object/identity.rb
sessionm-cassandra_object-4.0.26 lib/cassandra_object/identity.rb
sessionm-cassandra_object-4.0.25 lib/cassandra_object/identity.rb
sessionm-cassandra_object-4.0.24 lib/cassandra_object/identity.rb
sessionm-cassandra_object-4.0.23 lib/cassandra_object/identity.rb
sessionm-cassandra_object-4.0.22 lib/cassandra_object/identity.rb
sessionm-cassandra_object-4.0.21 lib/cassandra_object/identity.rb
sessionm-cassandra_object-4.0.20 lib/cassandra_object/identity.rb
sessionm-cassandra_object-2.7.5 lib/cassandra_object/identity.rb
sessionm-cassandra_object-2.7.4 lib/cassandra_object/identity.rb
sessionm-cassandra_object-4.0.18 lib/cassandra_object/identity.rb
sessionm-cassandra_object-4.0.17 lib/cassandra_object/identity.rb
sessionm-cassandra_object-4.0.16 lib/cassandra_object/identity.rb
sessionm-cassandra_object-4.0.15 lib/cassandra_object/identity.rb
sessionm-cassandra_object-4.0.14 lib/cassandra_object/identity.rb