company_scope 0.1.1 → 0.1.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 20a3400d84425d8ce823542bc038abb96dc43995
4
- data.tar.gz: 45ce497b1fb10c375f22f58f42349199899720ef
3
+ metadata.gz: 736068a8a448f00bbc6691173a4a6fa89c086d41
4
+ data.tar.gz: ed3357ed9447e8018760334dad8b5aa0febe463c
5
5
  SHA512:
6
- metadata.gz: 2c50413c3b5aa0106acaf68ff4e55694866b459e9c7f020f37c8e3c490666d76344980c5794e6646d13eacddbe330367a20e56b6122eb1f5cc9f4371777309f9
7
- data.tar.gz: 107dd39ae499575d1d6253929f00a0932e78b1e68931b99374868527f15ae5878365c5928f07d85bc7c4fc3b2f3ac5a7f83b6545253231b8f225f0a5898953ef
6
+ metadata.gz: 9b70cb263376ee416321a517c0f2c72653cee0cdfc59f4e3ffed8bb9e41454c38b8b3638b42e4c85695c797fe494b7db3eb0e58138cfdfcf398e470aebcda3fa
7
+ data.tar.gz: ad8b3a6fe5b67ba1a8e4a114ecf7106582b1fb3cc94ca945dcff594f39b67838c49e4c1957716b89728b324d5274cb0803ce0bf2ab46ebfc696b9896bcdea4a6
data/README.md CHANGED
@@ -31,30 +31,109 @@ Or install it yourself as:
31
31
 
32
32
  Getting started
33
33
  ===============
34
- There are two steps in adding multi-tenancy/company to your app with company_scope:
34
+ There are three main steps in adding multi-tenancy/company to your app with company_scope:
35
35
 
36
- 1. setting the current tenant and
37
- 2. scoping your models.
36
+ 1. Decide on a process of determining the company/account. Such as using the sub-domain.
37
+ 2. Setting the current company and controller based setup.
38
+ 3. Scoping your models.
38
39
 
39
- Setting the current tenant
40
- --------------------------
41
- There are three ways to set the current tenant:
42
40
 
43
- 1. by using the subdomain to lookup the current tenant,
44
- 2. by setting the current tenant in the controller, and
45
- 3. by setting the current tenant for a block.
41
+ ### Decide on a process of determining the company/account ###
46
42
 
47
- ### Use the subdomain to lookup the current tenant ###
43
+ In the current version a helper_method called "current_company" is added to the Controller,
44
+ where you add the method "company_setup". You have therefore two choices. Either you use your
45
+ own process to set the instance of "Company" into "request.env".
46
+
47
+ ```ruby
48
+ def current_company
49
+ request.env["COMPANY_ID"]
50
+ end
51
+ ```
52
+ An example of this is to use "Rack Middleware" - see the method excerpt below:
53
+
54
+ ```ruby
55
+ def call(env)
56
+ request = Rack::Request.new(env)
57
+ domain = request.host.split('.').first.upcase
58
+ env["COMPANY_ID"] = your_custom_method_to_retrieve_company_from_subdomain(domain)
59
+ response = @app.call(env)
60
+ response
61
+ end
62
+ ```
63
+
64
+ The next version of "company_scope", will have the Rack::Middleware call integrated and the
65
+ ability to opt out of using it.
66
+
67
+ Alternatively you can use your own process for determining the "current_company" and override this
68
+ method in your application controller, providing you declare this after the "company_setup" method,
69
+ which is detailed in the next step.
70
+
71
+
72
+ ### Setting the current company and controller based setup ###
48
73
 
49
74
  ```ruby
50
75
  class ApplicationController < ActionController::Base
51
- set_current_tenant_by_subdomain(:account, :subdomain)
76
+
77
+ company_setup
78
+
79
+ set_scoping_class :company
80
+
81
+ acts_as_company_filter
82
+
83
+ end
84
+ ```
85
+
86
+ The above three methods need to be added to the Rails Controllers. For small systems they
87
+ will typically be added to the ApplicationController. However they can be split into
88
+ child-controllers dependent on the layout of the application.
89
+
90
+ All Controllers that inherit from the Controller that implements the "acts_as_company_filter"
91
+ will have an around filter applied that set the Company class attribute required for the scoping
92
+ process.
93
+
94
+ The "company_setup" method adds some helper methods that are available to all child controllers.
95
+
96
+ * company_setup
97
+ * set_scoping_class :company
98
+ * acts_as_company_filter
99
+
100
+ The "set_scoping_class :company" method tells CompanyScope that we have a model called Company, and
101
+ it will be the model that all others will be scoped with.
102
+ The method parameter defaults to :company but can be another model of your choosing such as Account.
103
+ Each model that is scoped by the Company needs to have the company_id column.
104
+
105
+ NB: The "CompanyScope" gem does not handle the process of adding migrations or changes to the DB.
106
+
107
+
108
+ ### Scoping your models ###
109
+
110
+ * The "acts_as_guardian" method injects the behaviour required for the scoping model.
111
+
112
+ ```ruby
113
+ class Company < ActiveRecord::Base
114
+
115
+ acts_as_guardian
116
+
117
+ ...
118
+
52
119
  end
53
120
  ```
54
121
 
122
+ * Each class to be scoped needs to have the "acts_as_company :account" method. The parameter ":account"
123
+ defaults to :company if left blank. This can be any class/name of your choosing - the parameter needs
124
+ to be a underscored version of the Class name as a symbol.
55
125
 
126
+ ```ruby
127
+ class User < ActiveRecord::Base
128
+
129
+ acts_as_company :account # Defaults to :company if left blank!
56
130
 
131
+ # NB - don't add 'belongs_to :company' or validation
132
+ # of the 'company_id' since the gem does this for you.
57
133
 
134
+ ...
135
+ end
136
+ ```
58
137
 
59
138
 
60
139
  ## Development
@@ -1,3 +1,3 @@
1
1
  module CompanyScope
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: company_scope
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Forkin