saasable 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/saasable/saas_document.rb +36 -0
- data/lib/saasable/scoped_controller.rb +2 -26
- data/lib/saasable/scoped_document.rb +11 -0
- data/saasable.gemspec +1 -1
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.4
|
@@ -8,6 +8,8 @@ module Saasable::SaasDocument
|
|
8
8
|
@saas_document = klass
|
9
9
|
end
|
10
10
|
|
11
|
+
klass.extend ClassMethods
|
12
|
+
klass.send(:include, InstanceMethods)
|
11
13
|
klass.class_eval do
|
12
14
|
field :hosts, :type => Array
|
13
15
|
end
|
@@ -16,4 +18,38 @@ module Saasable::SaasDocument
|
|
16
18
|
def self.saas_document
|
17
19
|
@saas_document
|
18
20
|
end
|
21
|
+
|
22
|
+
module InstanceMethods
|
23
|
+
def activate!
|
24
|
+
Saasable::ScopedDocument.scoped_documents.each do |klass|
|
25
|
+
# Create a default scope without messing with the ones already in place.
|
26
|
+
klass.default_scoping ||= {}
|
27
|
+
klass.default_scoping[:where] ||= {:saas_id => nil}
|
28
|
+
|
29
|
+
klass.default_scoping[:where][:saas_id] = self._id
|
30
|
+
klass.class_eval "field :saas_id, :type => BSON::ObjectId, :default => BSON::ObjectId(\"#{self._id}\")"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
module ClassMethods
|
36
|
+
def find_by_host! a_host
|
37
|
+
if Saasable::SaasDocument.saas_document.nil?
|
38
|
+
if Rails.env.production?
|
39
|
+
raise Saasable::Errors::NoSaasDocuments, "you need to set one Saasable::SaasDocument"
|
40
|
+
else
|
41
|
+
return nil
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
possible_saas = Saasable::SaasDocument.saas_document.where(:hosts => a_host)
|
46
|
+
if possible_saas.empty?
|
47
|
+
raise Saasable::Errors::SaasNotFound, "no #{Saasable::SaasDocument.saas_document.name} found for the host: \"#{a_host}\""
|
48
|
+
elsif possible_saas.count > 1
|
49
|
+
raise Saasable::Errors::MultipleSaasFound, "more then 1 #{Saasable::SaasDocument.saas_document.name} found for the host: \"#{a_host}\""
|
50
|
+
else
|
51
|
+
return possible_saas.first
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
19
55
|
end
|
@@ -16,35 +16,11 @@ module Saasable::ScopedController
|
|
16
16
|
|
17
17
|
private
|
18
18
|
def fetch_current_saas
|
19
|
-
|
20
|
-
if Rails.env.production?
|
21
|
-
raise Saasable::Errors::NoSaasDocuments, "you need to set one Saasable::SaasDocument"
|
22
|
-
else
|
23
|
-
return @current_saas = nil
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
possible_saas = Saasable::SaasDocument.saas_document.where(:hosts => request.host)
|
28
|
-
if possible_saas.empty?
|
29
|
-
raise Saasable::Errors::SaasNotFound, "no #{Saasable::SaasDocument.saas_document.name} found for the host: \"#{request.host}\""
|
30
|
-
elsif possible_saas.count > 1
|
31
|
-
raise Saasable::Errors::MultipleSaasFound, "more then 1 #{Saasable::SaasDocument.saas_document.name} found for the host: \"#{request.host}\""
|
32
|
-
else
|
33
|
-
@current_saas = possible_saas.first
|
34
|
-
end
|
19
|
+
@current_saas = Saas::SaasDocument.find_by_host!(request.host)
|
35
20
|
end
|
36
21
|
|
37
22
|
def scope_models_by_saas
|
38
|
-
|
39
|
-
# Create a default scope without messing with the ones already in place.
|
40
|
-
klass.default_scoping ||= {}
|
41
|
-
klass.default_scoping[:where] ||= {:saas_id => nil}
|
42
|
-
|
43
|
-
if @current_saas
|
44
|
-
klass.default_scoping[:where][:saas_id] = @current_saas._id
|
45
|
-
klass.class_eval "field :saas_id, :type => BSON::ObjectId, :default => BSON::ObjectId(\"#{@current_saas._id}\")"
|
46
|
-
end
|
47
|
-
end
|
23
|
+
@current_saas.activate!
|
48
24
|
end
|
49
25
|
end
|
50
26
|
end
|
@@ -4,6 +4,7 @@ module Saasable::ScopedDocument
|
|
4
4
|
def self.included klass
|
5
5
|
@scoped_documents << klass unless @scoped_documents.include? klass
|
6
6
|
|
7
|
+
klass.extend ClassMethods
|
7
8
|
klass.class_eval do
|
8
9
|
field :saas_id, :type => BSON::ObjectId
|
9
10
|
end
|
@@ -12,4 +13,14 @@ module Saasable::ScopedDocument
|
|
12
13
|
def self.scoped_documents
|
13
14
|
@scoped_documents
|
14
15
|
end
|
16
|
+
|
17
|
+
module ClassMethods
|
18
|
+
def validates_uniqueness_of(*args)
|
19
|
+
attributes = _merge_attributes(args)
|
20
|
+
attributes[:scope] ||= []
|
21
|
+
attributes[:scope] << :saas_id unless attributes[:scope].include?(:saas_id)
|
22
|
+
|
23
|
+
validates_with(Mongoid::Validations::UniquenessValidator, attributes)
|
24
|
+
end
|
25
|
+
end
|
15
26
|
end
|
data/saasable.gemspec
CHANGED
metadata
CHANGED