lib/saasable/mongoid/saas_document.rb in saasable-4.0.2 vs lib/saasable/mongoid/saas_document.rb in saasable-5.0.0
- old
+ new
@@ -10,81 +10,64 @@
klass.extend ClassMethods
klass.send(:include, InstanceMethods)
klass.class_eval do
# Fields
- field :hosts, :type => Array
+ field :hosts, type: Array, default: []
# Validations
validates_uniqueness_of :hosts
# Indexes
index({hosts: 1})
end
- klass.instance_variable_set("@_active_saas", nil)
klass.instance_variable_set("@_after_activate_chain", [])
klass.instance_variable_set("@_after_deactivate_chain", [])
end
def self.saas_document
@saas_document
end
+ def self.active_saas
+ @saas_document.active_saas
+ end
+
module InstanceMethods
def activate!
- Saasable::Mongoid::ScopedDocument.scoped_documents.each do |klass|
- saasble_criteria = Mongoid::Criteria.new(klass).where(saas_id: self._id)
- klass.default_scoping = klass.default_scoping? ? saasble_criteria.merge(klass.default_scoping.call).to_proc : saasble_criteria.to_proc
-
- klass.fields["saas_id"].default_val = self._id
- klass.fields["saas_id"].options[:default] = self._id
- end
-
- self.class.instance_variable_set("@_active_saas", self)
+ Thread.current[:saasable_active_saas] = self
self.class.instance_variable_get("@_after_activate_chain").each { |method_name| send(method_name) }
end
def deactivate!
self.class.deactivate_all!
end
end
module ClassMethods
def deactivate_all!
- Saasable::Mongoid::ScopedDocument.scoped_documents.each do |klass|
- saasble_criteria = Mongoid::Criteria.new(klass).where(saas_id: @_active_saas._id)
- klass.default_scoping = klass.default_scoping.call.remove_scoping(saasble_criteria).to_proc
-
- klass.fields["saas_id"].default_val = nil
- klass.fields["saas_id"].options.delete(:default)
- end
-
- last_active_saas, @_active_saas = active_saas, nil
+ last_active_saas, Thread.current[:saasable_active_saas] = active_saas, nil
@_after_deactivate_chain.each { |method_name| last_active_saas.send(method_name) }
end
def find_by_host! a_host
if Saasable::Mongoid::SaasDocument.saas_document.nil?
- if Rails.env.production?
- raise Saasable::Errors::NoSaasDocuments, "you need to set one Saasable::SaasDocument"
- else
- return nil
- end
+ raise Saasable::Errors::NoSaasDocuments, "you need to set one Saasable::SaasDocument"
end
- possible_saas = Saasable::Mongoid::SaasDocument.saas_document.where(:hosts => a_host).to_a
+ possible_saas = Saasable::Mongoid::SaasDocument.saas_document.where(hosts: a_host.gsub(/^www\./, '')).to_a
if possible_saas.empty?
raise Saasable::Errors::SaasNotFound, "no #{Saasable::Mongoid::SaasDocument.saas_document.name} found for the host: \"#{a_host}\""
elsif possible_saas.count > 1
raise Saasable::Errors::MultipleSaasFound, "more then 1 #{Saasable::Mongoid::SaasDocument.saas_document.name} found for the host: \"#{a_host}\""
else
return possible_saas.first
end
end
def active_saas
- @_active_saas
+ Thread.current[:saasable_active_saas]
end
def after_activate *method_names
@_after_activate_chain += method_names
end