Sha256: 2b84f0819fba67677aa242233b4a4688fc924f5f9cef7f6cfe70cca103730006

Contents?: true

Size: 902 Bytes

Versions: 1

Compression:

Stored size: 902 Bytes

Contents

module Uuids

  # Creates required `#uuids` attribute of the ActiveRecord model.
  module Base

    def self.included(klass)
      fail unless klass.ancestors.include? ActiveRecord::Base

      klass.has_many :uuids, uuids_params

      klass.before_create  :add_default_uuid
      klass.before_destroy :prevent_destruction

      klass.validates :uuids, presence: true, on: :update
    end

    private

    # Parameters for uuid associations
    def self.uuids_params
      { class_name: "Uuids::Uuid", as: :record, validate: false }
    end

    # Creates the uuids by default preventing a record from being ureferrable
    def add_default_uuid
      uuids.present? || uuids.new
    end

    # Prevents destruction of a record before its uuids assigned to another one
    def prevent_destruction
      return true if uuids.blank?
      errors.add :base, :uuids_present
      false
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
uuids-0.2.0 lib/uuids/base.rb