saasable 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +1 -1
- data/Gemfile.lock +25 -24
- data/VERSION +1 -1
- data/lib/saasable/middleware.rb +2 -2
- data/lib/saasable/mongoid/saas_document.rb +28 -0
- data/lib/saasable/mongoid/scoped_document.rb +3 -0
- data/lib/saasable/railties/helpers.rb +27 -0
- data/saasable.gemspec +6 -6
- metadata +41 -16
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,41 +1,42 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
-
activemodel (3.
|
5
|
-
activesupport (= 3.
|
4
|
+
activemodel (3.2.9)
|
5
|
+
activesupport (= 3.2.9)
|
6
6
|
builder (~> 3.0.0)
|
7
|
+
activesupport (3.2.9)
|
7
8
|
i18n (~> 0.6)
|
8
|
-
activesupport (3.1.1)
|
9
9
|
multi_json (~> 1.0)
|
10
|
-
bson (1.
|
11
|
-
builder (3.0.
|
10
|
+
bson (1.7.0)
|
11
|
+
builder (3.0.4)
|
12
12
|
diff-lcs (1.1.3)
|
13
13
|
git (1.2.5)
|
14
|
-
i18n (0.6.
|
15
|
-
jeweler (1.
|
14
|
+
i18n (0.6.1)
|
15
|
+
jeweler (1.8.4)
|
16
16
|
bundler (~> 1.0)
|
17
17
|
git (>= 1.2.5)
|
18
18
|
rake
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
19
|
+
rdoc
|
20
|
+
json (1.7.5)
|
21
|
+
mongo (1.7.0)
|
22
|
+
bson (~> 1.7.0)
|
23
|
+
mongoid (2.5.1)
|
23
24
|
activemodel (~> 3.1)
|
24
|
-
mongo (~> 1.
|
25
|
+
mongo (~> 1.7)
|
25
26
|
tzinfo (~> 0.3.22)
|
26
|
-
multi_json (1.
|
27
|
-
rake (0.
|
27
|
+
multi_json (1.3.7)
|
28
|
+
rake (10.0.0)
|
28
29
|
rdoc (3.12)
|
29
30
|
json (~> 1.4)
|
30
|
-
rspec (2.
|
31
|
-
rspec-core (~> 2.
|
32
|
-
rspec-expectations (~> 2.
|
33
|
-
rspec-mocks (~> 2.
|
34
|
-
rspec-core (2.
|
35
|
-
rspec-expectations (2.
|
36
|
-
diff-lcs (~> 1.1.
|
37
|
-
rspec-mocks (2.
|
38
|
-
tzinfo (0.3.
|
31
|
+
rspec (2.11.0)
|
32
|
+
rspec-core (~> 2.11.0)
|
33
|
+
rspec-expectations (~> 2.11.0)
|
34
|
+
rspec-mocks (~> 2.11.0)
|
35
|
+
rspec-core (2.11.1)
|
36
|
+
rspec-expectations (2.11.3)
|
37
|
+
diff-lcs (~> 1.1.3)
|
38
|
+
rspec-mocks (2.11.3)
|
39
|
+
tzinfo (0.3.35)
|
39
40
|
|
40
41
|
PLATFORMS
|
41
42
|
ruby
|
@@ -43,6 +44,6 @@ PLATFORMS
|
|
43
44
|
DEPENDENCIES
|
44
45
|
bundler
|
45
46
|
jeweler
|
46
|
-
mongoid
|
47
|
+
mongoid (< 3.0.0)
|
47
48
|
rdoc
|
48
49
|
rspec
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/lib/saasable/middleware.rb
CHANGED
@@ -8,13 +8,13 @@ class Saasable::Middleware
|
|
8
8
|
Rails::Mongoid.load_models(Rails.application) if defined?(Rails::Mongoid)
|
9
9
|
|
10
10
|
env[:saasable] = {:current_saas => saas_for_host(env["SERVER_NAME"])}
|
11
|
-
env[:saasable][:current_saas].activate!
|
11
|
+
env[:saasable][:current_saas].activate! if env[:saasable][:current_saas]
|
12
12
|
|
13
13
|
@app.call env
|
14
14
|
end
|
15
15
|
|
16
16
|
private
|
17
17
|
def saas_for_host hostname
|
18
|
-
Saasable::Mongoid::SaasDocument.saas_document.find_by_host!(hostname)
|
18
|
+
Saasable::Mongoid::SaasDocument.saas_document.find_by_host!(hostname) rescue nil
|
19
19
|
end
|
20
20
|
end
|
@@ -17,6 +17,9 @@ module Saasable::Mongoid::SaasDocument
|
|
17
17
|
# Validations
|
18
18
|
validates_uniqueness_of :hosts
|
19
19
|
end
|
20
|
+
|
21
|
+
klass.instance_variable_set("@_after_activate_chain", [])
|
22
|
+
klass.instance_variable_set("@_after_deactivate_chain", [])
|
20
23
|
end
|
21
24
|
|
22
25
|
def self.saas_document
|
@@ -33,10 +36,27 @@ module Saasable::Mongoid::SaasDocument
|
|
33
36
|
klass.default_scoping[:where][:saas_id] = self._id
|
34
37
|
klass.class_eval "field :saas_id, :type => BSON::ObjectId, :default => BSON::ObjectId(\"#{self._id}\")"
|
35
38
|
end
|
39
|
+
|
40
|
+
self.class.instance_variable_get("@_after_activate_chain").each { |method_name| send(method_name) }
|
41
|
+
end
|
42
|
+
|
43
|
+
def deactivate!
|
44
|
+
self.class.deactivate_all!
|
36
45
|
end
|
37
46
|
end
|
38
47
|
|
39
48
|
module ClassMethods
|
49
|
+
def deactivate_all!
|
50
|
+
Saasable::Mongoid::ScopedDocument.scoped_documents.each do |klass|
|
51
|
+
klass.default_scoping[:where].delete(:saas_id) if klass.default_scoping && klass.default_scoping[:where]
|
52
|
+
|
53
|
+
klass.fields["saas_id"].default_val = nil
|
54
|
+
klass.fields["saas_id"].options.delete(:default)
|
55
|
+
end
|
56
|
+
|
57
|
+
@_after_deactivate_chain.each { |method_name| send(method_name) }
|
58
|
+
end
|
59
|
+
|
40
60
|
def find_by_host! a_host
|
41
61
|
if Saasable::Mongoid::SaasDocument.saas_document.nil?
|
42
62
|
if Rails.env.production?
|
@@ -55,5 +75,13 @@ module Saasable::Mongoid::SaasDocument
|
|
55
75
|
return possible_saas.first
|
56
76
|
end
|
57
77
|
end
|
78
|
+
|
79
|
+
def after_activate method_name
|
80
|
+
@_after_activate_chain << method_name
|
81
|
+
end
|
82
|
+
|
83
|
+
def after_deactivate method_name
|
84
|
+
@_after_deactivate_chain << method_name
|
85
|
+
end
|
58
86
|
end
|
59
87
|
end
|
@@ -1,9 +1,36 @@
|
|
1
1
|
module Saasable::Railties
|
2
2
|
module Helpers
|
3
3
|
def self.included klass
|
4
|
+
klass.extend ClassMethods
|
4
5
|
klass.send(:include, InstanceMethods)
|
5
6
|
klass.class_eval do
|
6
7
|
helper_method :current_saas
|
8
|
+
|
9
|
+
before_filter :_redirect_if_saas_not_found
|
10
|
+
saas_not_found_redirect_to "/404.html"
|
11
|
+
|
12
|
+
private
|
13
|
+
def _skip_saasable
|
14
|
+
current_saas.deactivate! if current_saas
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
module ClassMethods
|
20
|
+
def saas_not_found_redirect_to path_or_url
|
21
|
+
self.class_eval <<-METHOD, __FILE__, __LINE__ + 1
|
22
|
+
private
|
23
|
+
def _redirect_if_saas_not_found
|
24
|
+
unless current_saas
|
25
|
+
redirect_to "#{path_or_url}"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
METHOD
|
29
|
+
end
|
30
|
+
|
31
|
+
def skip_saasable options
|
32
|
+
skip_before_filter :_redirect_if_saas_not_found, options
|
33
|
+
before_filter :_skip_saasable, options
|
7
34
|
end
|
8
35
|
end
|
9
36
|
|
data/saasable.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "saasable"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Educa2", "Rafael Gaspar"]
|
12
|
-
s.date = "2012-
|
12
|
+
s.date = "2012-11-12"
|
13
13
|
s.description = "A gem for making a Multi-Tenant SaaS using Mongoid"
|
14
14
|
s.email = "suporte@educa2.com.br"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -41,27 +41,27 @@ Gem::Specification.new do |s|
|
|
41
41
|
s.homepage = "http://github.com/educa2/saasable"
|
42
42
|
s.licenses = ["MIT"]
|
43
43
|
s.require_paths = ["lib"]
|
44
|
-
s.rubygems_version = "1.8.
|
44
|
+
s.rubygems_version = "1.8.24"
|
45
45
|
s.summary = "A gem for making a Multi-Tenant SaaS using Mongoid"
|
46
46
|
|
47
47
|
if s.respond_to? :specification_version then
|
48
48
|
s.specification_version = 3
|
49
49
|
|
50
50
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
51
|
-
s.add_runtime_dependency(%q<mongoid>, ["
|
51
|
+
s.add_runtime_dependency(%q<mongoid>, ["< 3.0.0"])
|
52
52
|
s.add_development_dependency(%q<rspec>, [">= 0"])
|
53
53
|
s.add_development_dependency(%q<bundler>, [">= 0"])
|
54
54
|
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
55
55
|
s.add_development_dependency(%q<rdoc>, [">= 0"])
|
56
56
|
else
|
57
|
-
s.add_dependency(%q<mongoid>, ["
|
57
|
+
s.add_dependency(%q<mongoid>, ["< 3.0.0"])
|
58
58
|
s.add_dependency(%q<rspec>, [">= 0"])
|
59
59
|
s.add_dependency(%q<bundler>, [">= 0"])
|
60
60
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
61
61
|
s.add_dependency(%q<rdoc>, [">= 0"])
|
62
62
|
end
|
63
63
|
else
|
64
|
-
s.add_dependency(%q<mongoid>, ["
|
64
|
+
s.add_dependency(%q<mongoid>, ["< 3.0.0"])
|
65
65
|
s.add_dependency(%q<rspec>, [">= 0"])
|
66
66
|
s.add_dependency(%q<bundler>, [">= 0"])
|
67
67
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: saasable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,22 +10,27 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-
|
13
|
+
date: 2012-11-12 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: mongoid
|
17
|
-
requirement:
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
|
-
- -
|
20
|
+
- - <
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
22
|
+
version: 3.0.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements:
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - <
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: 3.0.0
|
26
31
|
- !ruby/object:Gem::Dependency
|
27
32
|
name: rspec
|
28
|
-
requirement:
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
29
34
|
none: false
|
30
35
|
requirements:
|
31
36
|
- - ! '>='
|
@@ -33,10 +38,15 @@ dependencies:
|
|
33
38
|
version: '0'
|
34
39
|
type: :development
|
35
40
|
prerelease: false
|
36
|
-
version_requirements:
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
37
47
|
- !ruby/object:Gem::Dependency
|
38
48
|
name: bundler
|
39
|
-
requirement:
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
40
50
|
none: false
|
41
51
|
requirements:
|
42
52
|
- - ! '>='
|
@@ -44,10 +54,15 @@ dependencies:
|
|
44
54
|
version: '0'
|
45
55
|
type: :development
|
46
56
|
prerelease: false
|
47
|
-
version_requirements:
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
48
63
|
- !ruby/object:Gem::Dependency
|
49
64
|
name: jeweler
|
50
|
-
requirement:
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
51
66
|
none: false
|
52
67
|
requirements:
|
53
68
|
- - ! '>='
|
@@ -55,10 +70,15 @@ dependencies:
|
|
55
70
|
version: '0'
|
56
71
|
type: :development
|
57
72
|
prerelease: false
|
58
|
-
version_requirements:
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
59
79
|
- !ruby/object:Gem::Dependency
|
60
80
|
name: rdoc
|
61
|
-
requirement:
|
81
|
+
requirement: !ruby/object:Gem::Requirement
|
62
82
|
none: false
|
63
83
|
requirements:
|
64
84
|
- - ! '>='
|
@@ -66,7 +86,12 @@ dependencies:
|
|
66
86
|
version: '0'
|
67
87
|
type: :development
|
68
88
|
prerelease: false
|
69
|
-
version_requirements:
|
89
|
+
version_requirements: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
70
95
|
description: A gem for making a Multi-Tenant SaaS using Mongoid
|
71
96
|
email: suporte@educa2.com.br
|
72
97
|
executables: []
|
@@ -110,7 +135,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
110
135
|
version: '0'
|
111
136
|
segments:
|
112
137
|
- 0
|
113
|
-
hash:
|
138
|
+
hash: 758273759438966357
|
114
139
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
140
|
none: false
|
116
141
|
requirements:
|
@@ -119,7 +144,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
144
|
version: '0'
|
120
145
|
requirements: []
|
121
146
|
rubyforge_project:
|
122
|
-
rubygems_version: 1.8.
|
147
|
+
rubygems_version: 1.8.24
|
123
148
|
signing_key:
|
124
149
|
specification_version: 3
|
125
150
|
summary: A gem for making a Multi-Tenant SaaS using Mongoid
|