Sha256: 1e676abd3352423ca1c5ebe893642fda5e807042e320052220999a1e778b0c35

Contents?: true

Size: 1.33 KB

Versions: 15

Compression:

Stored size: 1.33 KB

Contents

module Sequel
  module Plugins
    # The update_primary_key plugin allows you to modify an objects
    # primary key and then save the record.  Sequel does not work
    # correctly with primary key modifications by default.  Sequel
    # is designed to work with surrogate primary keys that never need to be
    # modified, but this plugin makes it work correctly with natural
    # primary keys that may need to be modified. Example:
    #
    #   album = Album[1]
    #   album.id = 2
    #   album.save
    # 
    # Usage:
    #
    #   # Make all model subclasses support primary key updates
    #   # (called before loading subclasses)
    #   Sequel::Model.plugin :update_primary_key
    #
    #   # Make the Album class support primary key updates
    #   Album.plugin :update_primary_key
    module UpdatePrimaryKey
      module ClassMethods
        # Cache the pk_hash when loading records
        def load(h)
          r = super(h)
          r.pk_hash
          r
        end
      end

      module InstanceMethods
        # Clear the pk_hash and object dataset cache, and recache
        # the pk_hash
        def after_update
          super
          @pk_hash = nil
          pk_hash
        end

        # Cache the pk_hash instead of generating it every time
        def pk_hash
          @pk_hash ||= super
        end
      end
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
sequel-3.24.1 lib/sequel/plugins/update_primary_key.rb
sequel-3.24.0 lib/sequel/plugins/update_primary_key.rb
sequel-3.23.0 lib/sequel/plugins/update_primary_key.rb
sequel-3.22.0 lib/sequel/plugins/update_primary_key.rb
sequel-3.21.0 lib/sequel/plugins/update_primary_key.rb
sequel-3.20.0 lib/sequel/plugins/update_primary_key.rb
sequel-3.19.0 lib/sequel/plugins/update_primary_key.rb
sequel-3.18.0 lib/sequel/plugins/update_primary_key.rb
sequel-3.17.0 lib/sequel/plugins/update_primary_key.rb
sequel-3.16.0 lib/sequel/plugins/update_primary_key.rb
sequel-3.15.0 lib/sequel/plugins/update_primary_key.rb
sequel-3.14.0 lib/sequel/plugins/update_primary_key.rb
sequel-3.13.0 lib/sequel/plugins/update_primary_key.rb
sequel-3.12.1 lib/sequel/plugins/update_primary_key.rb
sequel-3.12.0 lib/sequel/plugins/update_primary_key.rb