Sha256: 1ea20ce1a509522adce15a391da5e359781ff2dbb4db380d8083d3f276162676

Contents?: true

Size: 1.25 KB

Versions: 46

Compression:

Stored size: 1.25 KB

Contents

module WithUsages
  extend ActiveSupport::Concern

  included do
    has_many :usages, as: :item
    before_destroy :ensure_unused!
    organic_on :usages
  end

  def usage_in_organization(organization = Organization.current)
    usages_in_organization(organization).first.try(:parent_item)
  end

  def usage_in_organization_of_type(type, organization = Organization.current)
    item = usage_in_organization(organization)
    item.is_a?(type) ? item : nil
  end

  def navigable_content_in(organization = Organization.current)
    self if used_in?(organization)
  end

  def content_used_in?(organization)
    navigable_content_in(organization).present?
  end

  def used_in?(organization)
    usage_in_organization(organization).present?
  end

  class_methods do
    def aggregate_of(association)
      super

      revamp "rebuild_#{association}!" do |_, this, children, hyper|
        old_children = this.send association
        added_children = children - old_children
        hyper.(children)
        this.usages.each { |it| it.index_children!(added_children) }

        this
      end
    end
  end

  private

  def ensure_unused!
    if usages.present?
      errors.add :base, :in_use, organization: usages.first.organization.name
      throw :abort
    end
  end
end

Version data entries

46 entries across 46 versions & 1 rubygems

Version Path
mumuki-domain-9.23.0 app/models/concerns/with_usages.rb
mumuki-domain-9.22.1 app/models/concerns/with_usages.rb
mumuki-domain-9.22.0 app/models/concerns/with_usages.rb
mumuki-domain-9.21.0 app/models/concerns/with_usages.rb
mumuki-domain-9.20.0 app/models/concerns/with_usages.rb
mumuki-domain-9.19.0 app/models/concerns/with_usages.rb
mumuki-domain-9.18.0 app/models/concerns/with_usages.rb
mumuki-domain-9.17.0 app/models/concerns/with_usages.rb
mumuki-domain-9.16.0 app/models/concerns/with_usages.rb
mumuki-domain-9.15.0 app/models/concerns/with_usages.rb
mumuki-domain-9.14.1 app/models/concerns/with_usages.rb
mumuki-domain-9.14.0 app/models/concerns/with_usages.rb
mumuki-domain-9.13.1 app/models/concerns/with_usages.rb
mumuki-domain-9.13.0 app/models/concerns/with_usages.rb
mumuki-domain-9.12.0 app/models/concerns/with_usages.rb
mumuki-domain-9.11.0 app/models/concerns/with_usages.rb
mumuki-domain-9.10.0 app/models/concerns/with_usages.rb
mumuki-domain-9.9.0 app/models/concerns/with_usages.rb
mumuki-domain-9.8.1 app/models/concerns/with_usages.rb
mumuki-domain-9.8.0 app/models/concerns/with_usages.rb