saasable 5.0.5 → 5.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +49 -0
- data/.ruby-version +1 -1
- data/Gemfile +8 -5
- data/Gemfile.lock +66 -51
- data/Rakefile +12 -13
- data/VERSION +1 -1
- data/lib/saasable.rb +5 -3
- data/lib/saasable/errors.rb +2 -0
- data/lib/saasable/middleware.rb +8 -5
- data/lib/saasable/mongoid.rb +4 -2
- data/lib/saasable/mongoid/saas_document.rb +22 -18
- data/lib/saasable/mongoid/scoped_document.rb +14 -6
- data/lib/saasable/railtie.rb +4 -2
- data/lib/saasable/railties.rb +3 -1
- data/lib/saasable/railties/helpers.rb +9 -6
- data/saasable.gemspec +14 -10
- data/spec/saasable_spec.rb +5 -3
- data/spec/spec_helper.rb +3 -2
- metadata +25 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9dc8dd947afc8c56339fa59ce86ef19cb983eb4b
|
4
|
+
data.tar.gz: a874a829f17e294628dab4c7e831fe733703b3f2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a2ec18297bb0bc340390e342f05e3b643e82331828a891eafe275a789a83987b5d62e748f53cf35a05b1bd013a7244e6fd56c111a2438949e09aa6281878d298
|
7
|
+
data.tar.gz: 6cc6e22fd3b23be9c61887a58abaf01021fd1a37d146236113cddf7c470058756c560d00c71629b3f651fef0bcc9fb164dc4c47ae88633a64369932f6a492dee
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
AllCops:
|
2
|
+
TargetRubyVersion: 2.4
|
3
|
+
|
4
|
+
Metrics/AbcSize:
|
5
|
+
Exclude:
|
6
|
+
- "lib/saasable/mongoid/scoped_document.rb"
|
7
|
+
|
8
|
+
Metrics/BlockLength:
|
9
|
+
Exclude:
|
10
|
+
- "saasable.gemspec"
|
11
|
+
|
12
|
+
# Configuration parameters: CountComments.
|
13
|
+
Metrics/MethodLength:
|
14
|
+
Max: 16
|
15
|
+
|
16
|
+
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes.
|
17
|
+
# URISchemes: http, https
|
18
|
+
Metrics/LineLength:
|
19
|
+
Max: 120
|
20
|
+
|
21
|
+
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
22
|
+
# SupportedStyles: nested, compact
|
23
|
+
Style/ClassAndModuleChildren:
|
24
|
+
EnforcedStyle: compact
|
25
|
+
|
26
|
+
Style/Documentation:
|
27
|
+
Enabled: false
|
28
|
+
|
29
|
+
# Cop supports --auto-correct.
|
30
|
+
Style/RescueModifier:
|
31
|
+
Enabled: false
|
32
|
+
|
33
|
+
# Cop supports --auto-correct.
|
34
|
+
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
35
|
+
# SupportedStyles: with_first_parameter, with_fixed_indentation
|
36
|
+
Layout/AlignParameters:
|
37
|
+
EnforcedStyle: with_fixed_indentation
|
38
|
+
|
39
|
+
# Cop supports --auto-correct.
|
40
|
+
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
41
|
+
# SupportedStyles: aligned, indented
|
42
|
+
Layout/MultilineMethodCallIndentation:
|
43
|
+
EnforcedStyle: indented
|
44
|
+
|
45
|
+
# Cop supports --auto-correct.
|
46
|
+
# Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces, SupportedStyles.
|
47
|
+
# SupportedStyles: space, no_space
|
48
|
+
Layout/SpaceInsideHashLiteralBraces:
|
49
|
+
EnforcedStyle: no_space
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby-2.
|
1
|
+
ruby-2.4
|
data/Gemfile
CHANGED
@@ -1,12 +1,15 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
source 'http://rubygems.org'
|
4
|
+
|
5
|
+
gem 'mongoid', '~> 5.0'
|
4
6
|
|
5
7
|
# Add dependencies to develop your gem here.
|
6
8
|
# Include everything needed to run rake, tests, features, etc.
|
7
9
|
group :development do
|
8
|
-
gem
|
9
|
-
gem
|
10
|
-
gem "jeweler"
|
10
|
+
gem 'bundler'
|
11
|
+
gem 'jeweler'
|
11
12
|
gem 'rdoc'
|
13
|
+
gem 'rspec'
|
14
|
+
gem 'rubocop'
|
12
15
|
end
|
data/Gemfile.lock
CHANGED
@@ -1,92 +1,106 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
-
activemodel (4.2.
|
5
|
-
activesupport (= 4.2.
|
4
|
+
activemodel (4.2.10)
|
5
|
+
activesupport (= 4.2.10)
|
6
6
|
builder (~> 3.1)
|
7
|
-
activesupport (4.2.
|
7
|
+
activesupport (4.2.10)
|
8
8
|
i18n (~> 0.7)
|
9
|
-
json (~> 1.7, >= 1.7.7)
|
10
9
|
minitest (~> 5.1)
|
11
10
|
thread_safe (~> 0.3, >= 0.3.4)
|
12
11
|
tzinfo (~> 1.1)
|
13
|
-
addressable (2.
|
14
|
-
|
15
|
-
bson (4.2.
|
12
|
+
addressable (2.4.0)
|
13
|
+
ast (2.3.0)
|
14
|
+
bson (4.2.2)
|
16
15
|
builder (3.2.3)
|
16
|
+
concurrent-ruby (1.0.5)
|
17
17
|
descendants_tracker (0.0.4)
|
18
18
|
thread_safe (~> 0.3, >= 0.3.1)
|
19
19
|
diff-lcs (1.3)
|
20
20
|
faraday (0.9.2)
|
21
21
|
multipart-post (>= 1.2, < 3)
|
22
22
|
git (1.3.0)
|
23
|
-
github_api (0.
|
24
|
-
addressable (~> 2.
|
25
|
-
descendants_tracker (~> 0.0.
|
23
|
+
github_api (0.16.0)
|
24
|
+
addressable (~> 2.4.0)
|
25
|
+
descendants_tracker (~> 0.0.4)
|
26
26
|
faraday (~> 0.8, < 0.10)
|
27
|
-
hashie (>=
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
hashie (3.4.6)
|
27
|
+
hashie (>= 3.4)
|
28
|
+
mime-types (>= 1.16, < 3.0)
|
29
|
+
oauth2 (~> 1.0)
|
30
|
+
hashie (3.5.6)
|
32
31
|
highline (1.7.8)
|
33
|
-
i18n (0.
|
34
|
-
|
32
|
+
i18n (0.9.0)
|
33
|
+
concurrent-ruby (~> 1.0)
|
34
|
+
jeweler (2.3.7)
|
35
35
|
builder
|
36
|
-
bundler (>= 1
|
36
|
+
bundler (>= 1)
|
37
37
|
git (>= 1.2.5)
|
38
|
-
github_api (~> 0.
|
38
|
+
github_api (~> 0.16.0)
|
39
39
|
highline (>= 1.6.15)
|
40
40
|
nokogiri (>= 1.5.10)
|
41
41
|
psych (~> 2.2)
|
42
42
|
rake
|
43
43
|
rdoc
|
44
44
|
semver2
|
45
|
-
json (1.8.6)
|
46
45
|
jwt (1.5.6)
|
47
|
-
|
48
|
-
|
49
|
-
|
46
|
+
mime-types (2.99.3)
|
47
|
+
mini_portile2 (2.3.0)
|
48
|
+
minitest (5.10.3)
|
49
|
+
mongo (2.4.3)
|
50
50
|
bson (>= 4.2.1, < 5.0.0)
|
51
|
-
mongoid (5.1
|
51
|
+
mongoid (5.2.1)
|
52
52
|
activemodel (~> 4.0)
|
53
|
-
mongo (
|
54
|
-
origin (~> 2.
|
53
|
+
mongo (>= 2.4.1, < 3.0.0)
|
54
|
+
origin (~> 2.3)
|
55
55
|
tzinfo (>= 0.3.37)
|
56
|
-
multi_json (1.12.
|
56
|
+
multi_json (1.12.2)
|
57
57
|
multi_xml (0.6.0)
|
58
58
|
multipart-post (2.0.0)
|
59
|
-
nokogiri (1.
|
60
|
-
mini_portile2 (~> 2.
|
61
|
-
oauth2 (1.
|
62
|
-
faraday (>= 0.8, < 0.
|
59
|
+
nokogiri (1.8.1)
|
60
|
+
mini_portile2 (~> 2.3.0)
|
61
|
+
oauth2 (1.4.0)
|
62
|
+
faraday (>= 0.8, < 0.13)
|
63
63
|
jwt (~> 1.0)
|
64
64
|
multi_json (~> 1.3)
|
65
65
|
multi_xml (~> 0.5)
|
66
66
|
rack (>= 1.2, < 3)
|
67
|
-
origin (2.3.
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
67
|
+
origin (2.3.1)
|
68
|
+
parallel (1.12.0)
|
69
|
+
parser (2.4.0.0)
|
70
|
+
ast (~> 2.2)
|
71
|
+
powerpack (0.1.1)
|
72
|
+
psych (2.2.4)
|
73
|
+
rack (2.0.3)
|
74
|
+
rainbow (2.2.2)
|
75
|
+
rake
|
76
|
+
rake (12.2.1)
|
77
|
+
rdoc (5.1.0)
|
78
|
+
rspec (3.7.0)
|
79
|
+
rspec-core (~> 3.7.0)
|
80
|
+
rspec-expectations (~> 3.7.0)
|
81
|
+
rspec-mocks (~> 3.7.0)
|
82
|
+
rspec-core (3.7.0)
|
83
|
+
rspec-support (~> 3.7.0)
|
84
|
+
rspec-expectations (3.7.0)
|
80
85
|
diff-lcs (>= 1.2.0, < 2.0)
|
81
|
-
rspec-support (~> 3.
|
82
|
-
rspec-mocks (3.
|
86
|
+
rspec-support (~> 3.7.0)
|
87
|
+
rspec-mocks (3.7.0)
|
83
88
|
diff-lcs (>= 1.2.0, < 2.0)
|
84
|
-
rspec-support (~> 3.
|
85
|
-
rspec-support (3.
|
89
|
+
rspec-support (~> 3.7.0)
|
90
|
+
rspec-support (3.7.0)
|
91
|
+
rubocop (0.51.0)
|
92
|
+
parallel (~> 1.10)
|
93
|
+
parser (>= 2.3.3.1, < 3.0)
|
94
|
+
powerpack (~> 0.1)
|
95
|
+
rainbow (>= 2.2.2, < 3.0)
|
96
|
+
ruby-progressbar (~> 1.7)
|
97
|
+
unicode-display_width (~> 1.0, >= 1.0.1)
|
98
|
+
ruby-progressbar (1.9.0)
|
86
99
|
semver2 (3.4.2)
|
87
|
-
thread_safe (0.3.
|
88
|
-
tzinfo (1.2.
|
100
|
+
thread_safe (0.3.6)
|
101
|
+
tzinfo (1.2.4)
|
89
102
|
thread_safe (~> 0.1)
|
103
|
+
unicode-display_width (1.3.0)
|
90
104
|
|
91
105
|
PLATFORMS
|
92
106
|
ruby
|
@@ -97,6 +111,7 @@ DEPENDENCIES
|
|
97
111
|
mongoid (~> 5.0)
|
98
112
|
rdoc
|
99
113
|
rspec
|
114
|
+
rubocop
|
100
115
|
|
101
116
|
BUNDLED WITH
|
102
|
-
1.
|
117
|
+
1.16.0.pre.3
|
data/Rakefile
CHANGED
@@ -1,26 +1,25 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'bundler'
|
5
5
|
begin
|
6
6
|
Bundler.setup(:default, :development)
|
7
7
|
rescue Bundler::BundlerError => e
|
8
|
-
|
9
|
-
|
8
|
+
warn e.message
|
9
|
+
warn 'Run `bundle install` to install missing gems'
|
10
10
|
exit e.status_code
|
11
11
|
end
|
12
12
|
require 'rake'
|
13
13
|
|
14
14
|
require 'jeweler'
|
15
15
|
Jeweler::Tasks.new do |gem|
|
16
|
-
|
17
|
-
gem.
|
18
|
-
gem.
|
19
|
-
gem.
|
20
|
-
gem.
|
21
|
-
gem.
|
22
|
-
gem.
|
23
|
-
gem.authors = ["Educa2", "Rafael Gaspar"]
|
16
|
+
gem.name = 'saasable'
|
17
|
+
gem.homepage = 'http://github.com/eadbox/saasable'
|
18
|
+
gem.license = 'MIT'
|
19
|
+
gem.summary = %(A gem for making a Multi-Tenant SaaS using Mongoid)
|
20
|
+
gem.description = %(A gem for making a Multi-Tenant SaaS using Mongoid)
|
21
|
+
gem.email = 'suporte@eadbox.com'
|
22
|
+
gem.authors = ['Eadbox', 'Rafael Gaspar']
|
24
23
|
# dependencies defined in Gemfile
|
25
24
|
end
|
26
25
|
Jeweler::RubygemsDotOrgTasks.new
|
@@ -31,11 +30,11 @@ RSpec::Core::RakeTask.new(:spec) do |spec|
|
|
31
30
|
spec.pattern = FileList['spec/**/*_spec.rb']
|
32
31
|
end
|
33
32
|
|
34
|
-
task :
|
33
|
+
task default: :spec
|
35
34
|
|
36
35
|
require 'rdoc/task'
|
37
36
|
Rake::RDocTask.new do |rdoc|
|
38
|
-
version = File.exist?('VERSION') ? File.read('VERSION') :
|
37
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ''
|
39
38
|
|
40
39
|
rdoc.rdoc_dir = 'rdoc'
|
41
40
|
rdoc.title = "saasable #{version}"
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
5.0
|
1
|
+
5.1.0
|
data/lib/saasable.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Saasable
|
2
4
|
# Errors
|
3
|
-
autoload :Errors,
|
5
|
+
autoload :Errors, 'saasable/errors'
|
4
6
|
|
5
7
|
# Middleware
|
6
|
-
autoload :Middleware,
|
8
|
+
autoload :Middleware, 'saasable/middleware'
|
7
9
|
|
8
10
|
# Mongoid
|
9
|
-
autoload :Mongoid,
|
11
|
+
autoload :Mongoid, 'saasable/mongoid'
|
10
12
|
end
|
data/lib/saasable/errors.rb
CHANGED
data/lib/saasable/middleware.rb
CHANGED
@@ -1,19 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Saasable::Middleware
|
2
|
-
def initialize
|
4
|
+
def initialize(app)
|
3
5
|
@app = app
|
4
6
|
end
|
5
7
|
|
6
|
-
def call
|
8
|
+
def call(env)
|
7
9
|
return @app.call(env) if env['PATH_INFO'].start_with?('/assets')
|
8
10
|
|
9
11
|
saas = saas_for_host(env['SERVER_NAME'])
|
10
|
-
saas
|
12
|
+
saas&.activate!
|
11
13
|
|
12
|
-
@app.call(env).tap { saas
|
14
|
+
@app.call(env).tap { saas&.deactivate! }
|
13
15
|
end
|
14
16
|
|
15
17
|
private
|
16
|
-
|
18
|
+
|
19
|
+
def saas_for_host(hostname)
|
17
20
|
Saasable::Mongoid::SaasDocument.saas_document.find_by_host!(hostname)
|
18
21
|
rescue Saasable::Errors::SaasNotFound
|
19
22
|
nil # Saas not found is treated by the Rails Helper
|
data/lib/saasable/mongoid.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Saasable::Mongoid
|
2
4
|
# Documents
|
3
|
-
autoload :SaasDocument,
|
4
|
-
autoload :ScopedDocument,
|
5
|
+
autoload :SaasDocument, 'saasable/mongoid/saas_document'
|
6
|
+
autoload :ScopedDocument, 'saasable/mongoid/scoped_document'
|
5
7
|
end
|
@@ -1,13 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Saasable::Mongoid::SaasDocument
|
2
4
|
@saas_document = nil
|
3
5
|
|
4
|
-
def self.included
|
5
|
-
if @saas_document
|
6
|
-
raise Saasable::Errors::MultipleSaasDocuments,
|
7
|
-
else
|
8
|
-
@saas_document = klass
|
6
|
+
def self.included(klass)
|
7
|
+
if @saas_document && (@saas_document.name != klass.name)
|
8
|
+
raise Saasable::Errors::MultipleSaasDocuments, 'you can only have one Saasable::SaasDocument'
|
9
9
|
end
|
10
10
|
|
11
|
+
@saas_document = klass
|
12
|
+
|
11
13
|
klass.extend ClassMethods
|
12
14
|
klass.send(:include, InstanceMethods)
|
13
15
|
klass.class_eval do
|
@@ -21,8 +23,8 @@ module Saasable::Mongoid::SaasDocument
|
|
21
23
|
index({hosts: 1}, unique: true)
|
22
24
|
end
|
23
25
|
|
24
|
-
klass.instance_variable_set(
|
25
|
-
klass.instance_variable_set(
|
26
|
+
klass.instance_variable_set('@_after_activate_chain', [])
|
27
|
+
klass.instance_variable_set('@_after_deactivate_chain', [])
|
26
28
|
end
|
27
29
|
|
28
30
|
def self.saas_document
|
@@ -36,7 +38,7 @@ module Saasable::Mongoid::SaasDocument
|
|
36
38
|
module InstanceMethods
|
37
39
|
def activate!
|
38
40
|
Thread.current[:saasable_active_saas] = self
|
39
|
-
self.class.instance_variable_get(
|
41
|
+
self.class.instance_variable_get('@_after_activate_chain').each { |method_name| send(method_name) }
|
40
42
|
end
|
41
43
|
|
42
44
|
def deactivate!
|
@@ -46,40 +48,42 @@ module Saasable::Mongoid::SaasDocument
|
|
46
48
|
|
47
49
|
module ClassMethods
|
48
50
|
def deactivate_all!
|
49
|
-
last_active_saas
|
51
|
+
last_active_saas = active_saas
|
52
|
+
Thread.current[:saasable_active_saas] = nil
|
50
53
|
@_after_deactivate_chain.each { |method_name| last_active_saas.send(method_name) }
|
51
54
|
end
|
52
55
|
|
53
|
-
def find_by_host!
|
56
|
+
def find_by_host!(a_host)
|
54
57
|
if Saasable::Mongoid::SaasDocument.saas_document.nil?
|
55
|
-
raise Saasable::Errors::NoSaasDocuments,
|
58
|
+
raise Saasable::Errors::NoSaasDocuments, 'you need to set one Saasable::SaasDocument'
|
56
59
|
end
|
57
60
|
|
58
61
|
possible_saas = Saasable::Mongoid::SaasDocument.saas_document.where(hosts: a_host).first
|
59
62
|
if possible_saas.nil?
|
60
|
-
raise Saasable::Errors::SaasNotFound,
|
61
|
-
|
62
|
-
return possible_saas
|
63
|
+
raise Saasable::Errors::SaasNotFound,
|
64
|
+
"no #{Saasable::Mongoid::SaasDocument.saas_document.name} found for the host: \"#{a_host}\""
|
63
65
|
end
|
66
|
+
|
67
|
+
possible_saas
|
64
68
|
end
|
65
69
|
|
66
70
|
def active_saas
|
67
71
|
Thread.current[:saasable_active_saas]
|
68
72
|
end
|
69
73
|
|
70
|
-
def after_activate
|
74
|
+
def after_activate(*method_names)
|
71
75
|
@_after_activate_chain += method_names
|
72
76
|
end
|
73
77
|
|
74
|
-
def after_deactivate
|
78
|
+
def after_deactivate(*method_names)
|
75
79
|
@_after_deactivate_chain += method_names
|
76
80
|
end
|
77
81
|
|
78
|
-
def remove_after_activate
|
82
|
+
def remove_after_activate(*method_names)
|
79
83
|
@_after_activate_chain -= method_names
|
80
84
|
end
|
81
85
|
|
82
|
-
def remove_after_deactivate
|
86
|
+
def remove_after_deactivate(*method_names)
|
83
87
|
@_after_deactivate_chain -= method_names
|
84
88
|
end
|
85
89
|
end
|
@@ -1,15 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Saasable::Mongoid::ScopedDocument
|
2
|
-
def self.included
|
4
|
+
def self.included(klass)
|
3
5
|
klass.extend ClassMethods
|
4
6
|
klass.class_eval do
|
5
7
|
# Fields
|
6
|
-
field :saas_id, type: BSON::ObjectId, default: ->{ Saasable::Mongoid::SaasDocument.active_saas._id }
|
8
|
+
field :saas_id, type: BSON::ObjectId, default: -> { Saasable::Mongoid::SaasDocument.active_saas._id }
|
7
9
|
|
8
10
|
# Default scope
|
9
|
-
default_scope
|
11
|
+
default_scope do
|
12
|
+
if Saasable::Mongoid::SaasDocument.active_saas
|
13
|
+
where(saas_id: Saasable::Mongoid::SaasDocument.active_saas._id)
|
14
|
+
else
|
15
|
+
all
|
16
|
+
end
|
17
|
+
end
|
10
18
|
|
11
19
|
# Indexes
|
12
|
-
index(
|
20
|
+
index(saas_id: 1)
|
13
21
|
index({saas_id: 1, _id: 1}, unique: true)
|
14
22
|
|
15
23
|
class << self
|
@@ -18,12 +26,12 @@ module Saasable::Mongoid::ScopedDocument
|
|
18
26
|
end
|
19
27
|
end
|
20
28
|
|
21
|
-
def saas=
|
29
|
+
def saas=(a_saas)
|
22
30
|
self.saas_id = a_saas._id
|
23
31
|
end
|
24
32
|
|
25
33
|
def saas
|
26
|
-
@saas ||= Saasable::Mongoid::SaasDocument.saas_document.find(
|
34
|
+
@saas ||= Saasable::Mongoid::SaasDocument.saas_document.find(saas_id) if saas_id
|
27
35
|
end
|
28
36
|
|
29
37
|
module ClassMethods
|
data/lib/saasable/railtie.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'saasable/railties'
|
2
4
|
|
3
5
|
class Saasable::Railtie < Rails::Railtie
|
4
6
|
config.app_middleware.use Saasable::Middleware
|
5
7
|
|
6
|
-
initializer
|
8
|
+
initializer 'include helpers' do
|
7
9
|
ActionController::Base.send :include, Saasable::Railties::Helpers
|
8
10
|
end
|
9
11
|
end
|
data/lib/saasable/railties.rb
CHANGED
@@ -1,24 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Saasable::Railties
|
2
4
|
module Helpers
|
3
|
-
def self.included
|
5
|
+
def self.included(klass)
|
4
6
|
klass.extend ClassMethods
|
5
7
|
klass.send(:include, InstanceMethods)
|
6
8
|
klass.class_eval do
|
7
9
|
helper_method :current_saas
|
8
10
|
|
9
11
|
before_filter :_redirect_if_saas_not_found unless Rails.env.development?
|
10
|
-
saas_not_found_redirect_to
|
12
|
+
saas_not_found_redirect_to '/404.html'
|
11
13
|
|
12
14
|
private
|
15
|
+
|
13
16
|
def _skip_saasable
|
14
|
-
current_saas
|
17
|
+
current_saas&.deactivate!
|
15
18
|
end
|
16
19
|
end
|
17
20
|
end
|
18
21
|
|
19
22
|
module ClassMethods
|
20
|
-
def saas_not_found_redirect_to
|
21
|
-
|
23
|
+
def saas_not_found_redirect_to(path_or_url)
|
24
|
+
class_eval <<-METHOD, __FILE__, __LINE__ + 1
|
22
25
|
private
|
23
26
|
def _redirect_if_saas_not_found
|
24
27
|
unless current_saas
|
@@ -28,7 +31,7 @@ module Saasable::Railties
|
|
28
31
|
METHOD
|
29
32
|
end
|
30
33
|
|
31
|
-
def skip_saasable
|
34
|
+
def skip_saasable(options)
|
32
35
|
skip_before_filter :_redirect_if_saas_not_found, options
|
33
36
|
before_filter :_skip_saasable, options
|
34
37
|
end
|
data/saasable.gemspec
CHANGED
@@ -2,18 +2,18 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: saasable 5.0
|
5
|
+
# stub: saasable 5.1.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "saasable".freeze
|
9
|
-
s.version = "5.0
|
9
|
+
s.version = "5.1.0"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib".freeze]
|
13
|
-
s.authors = ["
|
14
|
-
s.date = "2017-
|
13
|
+
s.authors = ["Eadbox".freeze, "Rafael Gaspar".freeze]
|
14
|
+
s.date = "2017-10-31"
|
15
15
|
s.description = "A gem for making a Multi-Tenant SaaS using Mongoid".freeze
|
16
|
-
s.email = "suporte@
|
16
|
+
s.email = "suporte@eadbox.com".freeze
|
17
17
|
s.extra_rdoc_files = [
|
18
18
|
"LICENSE.txt",
|
19
19
|
"README.rdoc"
|
@@ -21,6 +21,7 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.files = [
|
22
22
|
".document",
|
23
23
|
".rspec",
|
24
|
+
".rubocop.yml",
|
24
25
|
".ruby-gemset",
|
25
26
|
".ruby-version",
|
26
27
|
"Gemfile",
|
@@ -42,9 +43,9 @@ Gem::Specification.new do |s|
|
|
42
43
|
"spec/saasable_spec.rb",
|
43
44
|
"spec/spec_helper.rb"
|
44
45
|
]
|
45
|
-
s.homepage = "http://github.com/
|
46
|
+
s.homepage = "http://github.com/eadbox/saasable".freeze
|
46
47
|
s.licenses = ["MIT".freeze]
|
47
|
-
s.rubygems_version = "2.
|
48
|
+
s.rubygems_version = "2.6.13".freeze
|
48
49
|
s.summary = "A gem for making a Multi-Tenant SaaS using Mongoid".freeze
|
49
50
|
|
50
51
|
if s.respond_to? :specification_version then
|
@@ -52,23 +53,26 @@ Gem::Specification.new do |s|
|
|
52
53
|
|
53
54
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
54
55
|
s.add_runtime_dependency(%q<mongoid>.freeze, ["~> 5.0"])
|
55
|
-
s.add_development_dependency(%q<rspec>.freeze, [">= 0"])
|
56
56
|
s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
|
57
57
|
s.add_development_dependency(%q<jeweler>.freeze, [">= 0"])
|
58
58
|
s.add_development_dependency(%q<rdoc>.freeze, [">= 0"])
|
59
|
+
s.add_development_dependency(%q<rspec>.freeze, [">= 0"])
|
60
|
+
s.add_development_dependency(%q<rubocop>.freeze, [">= 0"])
|
59
61
|
else
|
60
62
|
s.add_dependency(%q<mongoid>.freeze, ["~> 5.0"])
|
61
|
-
s.add_dependency(%q<rspec>.freeze, [">= 0"])
|
62
63
|
s.add_dependency(%q<bundler>.freeze, [">= 0"])
|
63
64
|
s.add_dependency(%q<jeweler>.freeze, [">= 0"])
|
64
65
|
s.add_dependency(%q<rdoc>.freeze, [">= 0"])
|
66
|
+
s.add_dependency(%q<rspec>.freeze, [">= 0"])
|
67
|
+
s.add_dependency(%q<rubocop>.freeze, [">= 0"])
|
65
68
|
end
|
66
69
|
else
|
67
70
|
s.add_dependency(%q<mongoid>.freeze, ["~> 5.0"])
|
68
|
-
s.add_dependency(%q<rspec>.freeze, [">= 0"])
|
69
71
|
s.add_dependency(%q<bundler>.freeze, [">= 0"])
|
70
72
|
s.add_dependency(%q<jeweler>.freeze, [">= 0"])
|
71
73
|
s.add_dependency(%q<rdoc>.freeze, [">= 0"])
|
74
|
+
s.add_dependency(%q<rspec>.freeze, [">= 0"])
|
75
|
+
s.add_dependency(%q<rubocop>.freeze, [">= 0"])
|
72
76
|
end
|
73
77
|
end
|
74
78
|
|
data/spec/saasable_spec.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
4
|
|
3
|
-
describe
|
4
|
-
it
|
5
|
-
|
5
|
+
describe 'Saasable' do
|
6
|
+
it 'fails' do
|
7
|
+
raise 'hey buddy, you should probably rename this file and start specing for real'
|
6
8
|
end
|
7
9
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
4
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
5
|
require 'rspec'
|
@@ -5,8 +7,7 @@ require 'saasable'
|
|
5
7
|
|
6
8
|
# Requires supporting files with custom matchers and macros, etc,
|
7
9
|
# in ./support/ and its subdirectories.
|
8
|
-
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
10
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
9
11
|
|
10
12
|
RSpec.configure do |config|
|
11
|
-
|
12
13
|
end
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: saasable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.0
|
4
|
+
version: 5.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- Eadbox
|
8
8
|
- Rafael Gaspar
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-10-31 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mongoid
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '5.0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
|
-
name:
|
29
|
+
name: bundler
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
32
|
- - ">="
|
@@ -40,7 +40,7 @@ dependencies:
|
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
|
-
name:
|
43
|
+
name: jeweler
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
46
|
- - ">="
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '0'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
|
-
name:
|
57
|
+
name: rdoc
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
60
|
- - ">="
|
@@ -68,7 +68,21 @@ dependencies:
|
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '0'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
|
-
name:
|
71
|
+
name: rspec
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: rubocop
|
72
86
|
requirement: !ruby/object:Gem::Requirement
|
73
87
|
requirements:
|
74
88
|
- - ">="
|
@@ -82,7 +96,7 @@ dependencies:
|
|
82
96
|
- !ruby/object:Gem::Version
|
83
97
|
version: '0'
|
84
98
|
description: A gem for making a Multi-Tenant SaaS using Mongoid
|
85
|
-
email: suporte@
|
99
|
+
email: suporte@eadbox.com
|
86
100
|
executables: []
|
87
101
|
extensions: []
|
88
102
|
extra_rdoc_files:
|
@@ -91,6 +105,7 @@ extra_rdoc_files:
|
|
91
105
|
files:
|
92
106
|
- ".document"
|
93
107
|
- ".rspec"
|
108
|
+
- ".rubocop.yml"
|
94
109
|
- ".ruby-gemset"
|
95
110
|
- ".ruby-version"
|
96
111
|
- Gemfile
|
@@ -111,7 +126,7 @@ files:
|
|
111
126
|
- saasable.gemspec
|
112
127
|
- spec/saasable_spec.rb
|
113
128
|
- spec/spec_helper.rb
|
114
|
-
homepage: http://github.com/
|
129
|
+
homepage: http://github.com/eadbox/saasable
|
115
130
|
licenses:
|
116
131
|
- MIT
|
117
132
|
metadata: {}
|
@@ -131,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
131
146
|
version: '0'
|
132
147
|
requirements: []
|
133
148
|
rubyforge_project:
|
134
|
-
rubygems_version: 2.
|
149
|
+
rubygems_version: 2.6.13
|
135
150
|
signing_key:
|
136
151
|
specification_version: 4
|
137
152
|
summary: A gem for making a Multi-Tenant SaaS using Mongoid
|