Sha256: ed1cc25b1ff3218491ffc15f41be9ff29bcf63d49254fdb68a13699d0e3e5d77

Contents?: true

Size: 1.3 KB

Versions: 5

Compression:

Stored size: 1.3 KB

Contents

# frozen_string_literal: true

module Saasable::Mongoid::ScopedDocument
  def self.included(klass)
    klass.extend ClassMethods
    klass.class_eval do
      # Fields
      field :saas_id, type: BSON::ObjectId, default: -> { Saasable::Mongoid::SaasDocument.active_saas._id }

      # Default scope
      default_scope do
        if Saasable::Mongoid::SaasDocument.active_saas
          where(saas_id: Saasable::Mongoid::SaasDocument.active_saas._id)
        else
          all
        end
      end

      # Indexes
      index(saas_id: 1)
      index({saas_id: 1, _id: 1}, unique: true)

      class << self
        alias_method :index_without_saasable, :index
        alias_method :index, :index_with_saasable
      end
    end
  end

  def saas=(a_saas)
    self.saas_id = a_saas._id
  end

  def saas
    @saas ||= Saasable::Mongoid::SaasDocument.saas_document.find(saas_id) if saas_id
  end

  module ClassMethods
    def validates_uniqueness_of(*args)
      attributes = _merge_attributes(args)
      attributes[:scope] ||= []
      attributes[:scope] << :saas_id unless attributes[:scope].include?(:saas_id)

      validates_with(Mongoid::Validatable::UniquenessValidator, attributes)
    end

    def index_with_saasable(spec, options = {})
      index_without_saasable({saas_id: 1}.merge(spec), options)
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
saasable-6.1.4 lib/saasable/mongoid/scoped_document.rb
saasable-6.1.3 lib/saasable/mongoid/scoped_document.rb
saasable-6.1.2 lib/saasable/mongoid/scoped_document.rb
saasable-6.1.0 lib/saasable/mongoid/scoped_document.rb
saasable-6.0.0 lib/saasable/mongoid/scoped_document.rb