milia 1.2.1 → 1.3.1.beta1
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 +4 -4
- data/app/controllers/confirmations_controller.rb +7 -7
- data/app/controllers/registrations_controller.rb +13 -19
- data/app/views/devise/registrations/new.html.haml +53 -0
- data/lib/generators/milia/install_generator.rb +44 -41
- data/lib/generators/milia/templates/devise_permitted_parameters.rb +18 -0
- data/lib/generators/milia/templates/initializer.rb +3 -9
- data/lib/milia.rb +3 -22
- data/lib/milia/base.rb +88 -109
- data/lib/milia/control.rb +25 -25
- data/lib/milia/invite_member.rb +6 -6
- data/lib/milia/version.rb +1 -1
- metadata +16 -184
- data/.document +0 -5
- data/.gitignore +0 -94
- data/.ruby-gemset +0 -1
- data/.ruby-version +0 -1
- data/.slugignore +0 -2
- data/.travis.yml +0 -4
- data/Gemfile +0 -4
- data/LICENSE.txt +0 -20
- data/README.md +0 -1207
- data/Rakefile +0 -1
- data/doc/gemfile_addition.txt +0 -28
- data/doc/manual_sample.sh +0 -816
- data/doc/ref_notes.txt +0 -155
- data/doc/sample.sh +0 -276
- data/markdown.rb +0 -38
- data/milia.gemspec +0 -29
- data/test/.ruby-gemset +0 -1
- data/test/.ruby-version +0 -1
- data/test/Gemfile +0 -81
- data/test/Gemfile.lock +0 -223
- data/test/README.md +0 -83
- data/test/Rakefile +0 -6
- data/test/app/assets/javascripts/application.js +0 -16
- data/test/app/assets/stylesheets/application.css +0 -13
- data/test/app/controllers/application_controller.rb +0 -13
- data/test/app/controllers/home_controller.rb +0 -10
- data/test/app/helpers/application_helper.rb +0 -2
- data/test/app/models/member.rb +0 -34
- data/test/app/models/post.rb +0 -14
- data/test/app/models/team.rb +0 -9
- data/test/app/models/team_asset.rb +0 -6
- data/test/app/models/tenant.rb +0 -54
- data/test/app/models/user.rb +0 -14
- data/test/app/models/zine.rb +0 -8
- data/test/app/views/home/index.html.erb +0 -2
- data/test/app/views/home/show.html.erb +0 -2
- data/test/app/views/layouts/application.html.erb +0 -14
- data/test/bin/bundle +0 -3
- data/test/bin/rails +0 -4
- data/test/bin/rake +0 -4
- data/test/config/application.rb +0 -36
- data/test/config/boot.rb +0 -4
- data/test/config/database.yml +0 -25
- data/test/config/environment.rb +0 -5
- data/test/config/environments/development.rb +0 -48
- data/test/config/environments/production.rb +0 -95
- data/test/config/environments/test.rb +0 -42
- data/test/config/initializers/backtrace_silencers.rb +0 -7
- data/test/config/initializers/devise.rb +0 -254
- data/test/config/initializers/filter_parameter_logging.rb +0 -4
- data/test/config/initializers/inflections.rb +0 -16
- data/test/config/initializers/milia.rb +0 -51
- data/test/config/initializers/mime_types.rb +0 -5
- data/test/config/initializers/secret_token.rb +0 -12
- data/test/config/initializers/session_store.rb +0 -3
- data/test/config/initializers/wrap_parameters.rb +0 -14
- data/test/config/locales/en.yml +0 -23
- data/test/config/routes.rb +0 -77
- data/test/db/migrate/20111012050200_add_sessions_table.rb +0 -12
- data/test/db/migrate/20111012050340_devise_create_users.rb +0 -48
- data/test/db/migrate/20111012050532_create_tenants.rb +0 -11
- data/test/db/migrate/20111012050600_create_tenants_users_join_table.rb +0 -8
- data/test/db/migrate/20111012050650_create_members.rb +0 -12
- data/test/db/migrate/20111012231923_create_posts.rb +0 -12
- data/test/db/migrate/20111013050657_create_zines.rb +0 -10
- data/test/db/migrate/20111013050753_create_teams.rb +0 -10
- data/test/db/migrate/20111013050837_create_team_assets.rb +0 -11
- data/test/db/schema.rb +0 -126
- data/test/db/seeds.rb +0 -7
- data/test/test/controllers/home_controller_test.rb +0 -132
- data/test/test/ctlr_test_helper.rb +0 -11
- data/test/test/fixtures/members.yml +0 -35
- data/test/test/fixtures/posts.yml +0 -96
- data/test/test/fixtures/team_assets.yml +0 -30
- data/test/test/fixtures/teams.yml +0 -17
- data/test/test/fixtures/tenants.yml +0 -12
- data/test/test/fixtures/tenants_users.yml +0 -15
- data/test/test/fixtures/users.yml +0 -33
- data/test/test/fixtures/zines.yml +0 -25
- data/test/test/models/member_test.rb +0 -75
- data/test/test/models/post_test.rb +0 -66
- data/test/test/models/team_test.rb +0 -49
- data/test/test/models/tenant_test.rb +0 -228
- data/test/test/models/user_test.rb +0 -182
- data/test/test/models/zine_test.rb +0 -40
- data/test/test/test_helper.rb +0 -31
data/Rakefile
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require "bundler/gem_tasks"
|
data/doc/gemfile_addition.txt
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
ruby "2.1.3" # heroku likes this at the head, as line 2
|
2
|
-
|
3
|
-
# =========================================================
|
4
|
-
# sample-milia-app specific stuff
|
5
|
-
# =========================================================
|
6
|
-
# Bundle the extra gems:
|
7
|
-
|
8
|
-
gem 'haml-rails'
|
9
|
-
gem 'html2haml', :git => 'git://github.com/haml/html2haml.git' # "2.0.0.beta.2",
|
10
|
-
|
11
|
-
# stuff that heroku likes to have
|
12
|
-
gem 'thin'
|
13
|
-
gem "SystemTimer", :require => "system_timer", :platforms => :ruby_18
|
14
|
-
gem "rack-timeout"
|
15
|
-
gem 'rails_12factor'
|
16
|
-
|
17
|
-
gem 'web-app-theme', :git => 'git://github.com/dsaronin/web-app-theme.git'
|
18
|
-
gem 'devise', '~>3.4.0'
|
19
|
-
gem 'milia', :git => 'git://github.com/dsaronin/milia.git', :branch => 'newdev'
|
20
|
-
|
21
|
-
# airbrake is optional and configured by config.use_airbrake in milia initializer
|
22
|
-
# default is false; if you change it to true, uncomment out the line below
|
23
|
-
# gem 'airbrake' # uncomment this if you will use airbrake for exception notifications
|
24
|
-
|
25
|
-
# recaptcha is optional and configured by config.use_recaptcha in milia initializer
|
26
|
-
# default is true; if you change it to false, comment out the line below
|
27
|
-
# gem 'recaptcha', :require => "recaptcha/rails"
|
28
|
-
|
data/doc/manual_sample.sh
DELETED
@@ -1,816 +0,0 @@
|
|
1
|
-
# *********************************************************************
|
2
|
-
# HOW TO SET IT UP -- sample-milia-app
|
3
|
-
# *********************************************************************
|
4
|
-
#
|
5
|
-
# NOTE: this is now an archivial copy of instructions for creating an
|
6
|
-
# app with rails/milia/devise. After v1.0.0-beta-3, all of this is now
|
7
|
-
# implemented using generators. But this is a reference for how to
|
8
|
-
# do everything manually, as of v1.1.0
|
9
|
-
#
|
10
|
-
# *********************************************************************
|
11
|
-
# This is a capture of everything I did to create a sample app for milia.
|
12
|
-
# There's enough brief comments for anyone to follow step-by-step.
|
13
|
-
# It is based on my dev environment which is Ubuntu 14.04 on a PC. YMMV.
|
14
|
-
#
|
15
|
-
# The "app" itself is merely a simple barebones structure to display
|
16
|
-
# an index page, require sign-in to do anything else, has a sign-up
|
17
|
-
# page for starting a new organization (ie tenant), a way to send
|
18
|
-
# invitations to other members, and a single tenanted model to prove
|
19
|
-
# that tenanting is working.
|
20
|
-
#
|
21
|
-
# you can see an exact copy of the sample on github:
|
22
|
-
# https://github.com/dsaronin/sample-milia-app
|
23
|
-
#
|
24
|
-
# *********************************************************************
|
25
|
-
# RESOURCES
|
26
|
-
# *********************************************************************
|
27
|
-
# doc/sample.sh -- this document will ALWAYS be the most recent
|
28
|
-
# (for example in the edge branch: "newdev")
|
29
|
-
# github.com/milia/wiki/sample-milia-app-tutorial
|
30
|
-
# this should be the same as the sample.sh doc for the current
|
31
|
-
# stable release (or last beta version); but markdown formatted
|
32
|
-
# https://github.com/dsaronin/milia/wiki/sample-milia-app-tutorial
|
33
|
-
# milia README:
|
34
|
-
# this will be the knowledgable programmer's digest of the essentials
|
35
|
-
# and thus it won't cover some of the intricacies of actually
|
36
|
-
# implementing milia: either the tutorial or sample.sh will do that
|
37
|
-
#
|
38
|
-
# *********************************************************************
|
39
|
-
# FEEDBACK
|
40
|
-
# *********************************************************************
|
41
|
-
# If you run into difficulties while following the steps here,
|
42
|
-
# please be sure to reference the LINE NUMBER of the point at which
|
43
|
-
# had a problem, as well as any output from that step.
|
44
|
-
# BUT (caveat)
|
45
|
-
# if you've gone commando and been making changes & enhancements OR
|
46
|
-
# have been trying to roll out a full app, you're more or less on your
|
47
|
-
# own. I strongly recommend experimenting with milia first in this
|
48
|
-
# simple format, get it working, then ADD in increasing layers of
|
49
|
-
# complexity and difficulty. Trying to make too many changes at once
|
50
|
-
# is a recipe for difficulty in troubleshooting.
|
51
|
-
# *********************************************************************
|
52
|
-
# NOTES
|
53
|
-
# *********************************************************************
|
54
|
-
# Although this file has a ".sh" extension, it isn't fully executable
|
55
|
-
# as a shell script. There are just too many things you'll have to
|
56
|
-
# to do to help things along.
|
57
|
-
# 1. Instructions for you to do things are in comments;
|
58
|
-
# things you should type or cut&paste, are not.
|
59
|
-
# commands preceded by a "$" prompt indicate shell level command.
|
60
|
-
# commands preceded by a ">" prompt indicate some other program command.
|
61
|
-
# in either case, don't type the prompt as part of the command!
|
62
|
-
# 2. I've bracketed groups of text to be edited/added to a file
|
63
|
-
# with the following style:
|
64
|
-
# # EDIT: <path/filename> >>>>>>>>>>>>
|
65
|
-
# things to do &/or edit or add
|
66
|
-
# # ADD: stuff to add follows
|
67
|
-
# things to add
|
68
|
-
# #<<< ADD <<<<<<<<<<<<<<<<<<<<<<<<<< up to here
|
69
|
-
# maybe some more edit stuff
|
70
|
-
# #<<< EDIT <<<<<<<<<<<<<<<<<<<<<<<<<< up to here
|
71
|
-
# 3. follow everything exactly in the order given
|
72
|
-
# 4. there's non-milia related stuff if you'll be using heroku to host
|
73
|
-
# treat this as optional, if you'd like. but at least I know it
|
74
|
-
# works as a completed app.
|
75
|
-
# *********************************************************************
|
76
|
-
|
77
|
-
# *********************************************************************
|
78
|
-
# STEP 0 - PREREQUISITES & EXPECTED BACKGROUND PREPARATION
|
79
|
-
# *********************************************************************
|
80
|
-
|
81
|
-
# this background is what I've done on my Ubuntu dev workstation
|
82
|
-
# so if you want to follow exactly, you'll need similar.
|
83
|
-
# none of this is required for milia; only to exactly bring up
|
84
|
-
# this sample-milia-app.
|
85
|
-
|
86
|
-
# make sure you have your ssh keys gen'd
|
87
|
-
$ ssh-keygen
|
88
|
-
|
89
|
-
# make sure you have some basic packages on your system
|
90
|
-
$ sudo apt-get install curl git vim vim-gnome
|
91
|
-
|
92
|
-
# make sure you've set up a github account, and git globals
|
93
|
-
|
94
|
-
# Install RVM on your system; see rvm.io for more information
|
95
|
-
$ \curl -L https://get.rvm.io | bash -s stable
|
96
|
-
# do any adjustments to your .bashrc, etc files as needed
|
97
|
-
|
98
|
-
# make sure to install ruby 2.1.3
|
99
|
-
$ rvm install 2.1.3
|
100
|
-
|
101
|
-
# I have all my projects in a directory called "projectspace'
|
102
|
-
$ mkdir projectspace
|
103
|
-
$ rvm gemset create projectspace
|
104
|
-
$ echo "projectspace" > projectspace/.ruby-gemset
|
105
|
-
$ echo "2.1.3" > projectspace/.ruby-version
|
106
|
-
$ cd projectspace
|
107
|
-
|
108
|
-
# install rails (latest version)
|
109
|
-
$ gem install rails
|
110
|
-
|
111
|
-
# OPTIONAL -- get ready for heroku
|
112
|
-
# set up a heroku account at: heroku.com
|
113
|
-
# install heroku toolbelt: heroku, foreman
|
114
|
-
$ wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh
|
115
|
-
$ heroku login
|
116
|
-
|
117
|
-
# set environment variable for later Procfile and later recaptcha
|
118
|
-
# I put them in .bashrc
|
119
|
-
export PORT=3000
|
120
|
-
export RACK_ENV=development
|
121
|
-
export SMTP_ENTRY=<my smtp password>
|
122
|
-
# OPTIONAL: recaptcha keys
|
123
|
-
export RECAPTCHA_PUBLIC_KEY=6LeYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKpT
|
124
|
-
export RECAPTCHA_PRIVATE_KEY=6LeBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBgQBv
|
125
|
-
|
126
|
-
|
127
|
-
# *********************************************************************
|
128
|
-
# STEP 1 - CREATION OF SKELETON APP & REPOSITORY
|
129
|
-
# *********************************************************************
|
130
|
-
|
131
|
-
# GITHUB: create a new repository <your-new-app> for <git-user> (you)
|
132
|
-
# anywhere below where you see "sample-milia-app", change it to <your-new-app>
|
133
|
-
|
134
|
-
$ cd projectspace # if not there already
|
135
|
-
|
136
|
-
$ rails new sample-milia-app --skip-bundle
|
137
|
-
$ echo "sample-milia-app" > sample-milia-app/.ruby-gemset
|
138
|
-
$ echo "2.1.3" > sample-milia-app/.ruby-version
|
139
|
-
$ echo "web: bundle exec thin start -R config.ru -p $PORT -e $RACK_ENV" > sample-milia-app/Procfile
|
140
|
-
$ rvm gemset create sample-milia-app
|
141
|
-
$ cd sample-milia-app
|
142
|
-
$ git init
|
143
|
-
$ git add --all .
|
144
|
-
$ git commit -am 'initial commit'
|
145
|
-
$ git remote add origin git@github.com:<git-user>/sample-milia-app.git
|
146
|
-
$ git push -u origin master
|
147
|
-
|
148
|
-
|
149
|
-
# *********************************************************************
|
150
|
-
# STEP 2 - SET UP GEMFILE, BUNDLE INSTALL GEMS
|
151
|
-
# *********************************************************************
|
152
|
-
# change .gitignore to match your development environment
|
153
|
-
# I just copy my standard .gitignore from another project
|
154
|
-
# but you can copy mine from sample-milia-app on github.
|
155
|
-
$ cp ../swalapala/.gitignore .
|
156
|
-
|
157
|
-
# EDIT Gemfile >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
158
|
-
$ vim Gemfile
|
159
|
-
|
160
|
-
# First, comment OUT the turbolinks gem
|
161
|
-
# gem 'turbolinks'
|
162
|
-
|
163
|
-
# then, enable rubyracer in Gemfile by de-commenting
|
164
|
-
gem 'therubyracer', platforms: :ruby
|
165
|
-
|
166
|
-
# finally, ADD the following lines to Gemfile >>>>>>>>>>>>>>>>>>>>>>
|
167
|
-
|
168
|
-
ruby "2.1.3" # heroku likes this at the head, as line 2
|
169
|
-
|
170
|
-
# =========================================================
|
171
|
-
# sample-milia-app specific stuff
|
172
|
-
# =========================================================
|
173
|
-
# Bundle the extra gems:
|
174
|
-
gem 'haml-rails'
|
175
|
-
gem 'html2haml', :git => 'git://github.com/haml/html2haml.git' # "2.0.0.beta.2",
|
176
|
-
|
177
|
-
# stuff that heroku likes to have
|
178
|
-
gem 'thin'
|
179
|
-
gem "SystemTimer", :require => "system_timer", :platforms => :ruby_18
|
180
|
-
gem "rack-timeout"
|
181
|
-
gem 'rails_12factor'
|
182
|
-
|
183
|
-
# airbrake is optional and configured by config.use_airbrake in milia initializer
|
184
|
-
# default is false; if you change it to true, uncomment out the line below
|
185
|
-
# gem 'airbrake' # uncomment this if you will use airbrake for exception notifications
|
186
|
-
|
187
|
-
gem 'web-app-theme', :git => 'git://github.com/dsaronin/web-app-theme.git'
|
188
|
-
gem 'devise', '~>3.4.0'
|
189
|
-
gem 'milia', :git => 'git://github.com/dsaronin/milia.git', :branch => 'v1.1.0'
|
190
|
-
|
191
|
-
# recaptcha is optional and configured by config.use_recaptcha in milia initializer
|
192
|
-
# default is true; if you change it to false, comment out the line below
|
193
|
-
gem 'recaptcha', :require => "recaptcha/rails"
|
194
|
-
#<<<< ADD <<<<<<<<<<<<<<<<<
|
195
|
-
#<<<< EDIT <<<<<<<<<<<<<<<<<
|
196
|
-
|
197
|
-
# EDIT: app/assets/javascripts/application.js >>>>>>>>>>>>>>>>>>>>>>>>
|
198
|
-
# comment out turbolinks in your Javascript manifest file
|
199
|
-
# we won't need turbolinks for this simple sample.
|
200
|
-
// require turbolinks
|
201
|
-
#<<<< EDIT <<<<<<<<<<<<<<<<<
|
202
|
-
|
203
|
-
# BUNDLE install all the gems
|
204
|
-
$ bundle install
|
205
|
-
|
206
|
-
# *********************************************************************
|
207
|
-
# STEP 3 - PREP APP UI TEMPLATES & CHECK OUT DISPLAYS
|
208
|
-
# *********************************************************************
|
209
|
-
# Source for web-app-theme notes and revisions:
|
210
|
-
# http://blog.bryanbibat.net/2011/09/24/starting-a-professional-rails-3-1-app-with-web-app-theme-devise-and-kaminari/
|
211
|
-
# *********************************************************************
|
212
|
-
|
213
|
-
# Generate home page
|
214
|
-
$ rails g controller home index
|
215
|
-
|
216
|
-
|
217
|
-
# EDIT the config/routes.rb >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
218
|
-
# ADD the root :to => "home#index" within the do..end block
|
219
|
-
|
220
|
-
SampleMiliaApp::Application.routes.draw do
|
221
|
-
|
222
|
-
root :to => "home#index"
|
223
|
-
|
224
|
-
end
|
225
|
-
#<<<< EDIT <<<<<<<<<<<<<<<<<
|
226
|
-
|
227
|
-
|
228
|
-
# create the database
|
229
|
-
$ rake db:create
|
230
|
-
|
231
|
-
# test by starting server:
|
232
|
-
$ foreman start
|
233
|
-
|
234
|
-
# CHECK-OUT: at your browser:
|
235
|
-
http://localhost:3000/
|
236
|
-
# you should see an empty template page for home/index
|
237
|
-
|
238
|
-
|
239
|
-
# ******* NOW WE'LL GENERATE A THEME with web-app-theme ********
|
240
|
-
$ rails g web_app_theme:theme --engine=haml --theme="red" --app-name="Simple Milia App"
|
241
|
-
|
242
|
-
# Delete the default layout originally generated
|
243
|
-
$ rm app/views/layouts/application.html.erb
|
244
|
-
|
245
|
-
# generate some sample text for the page to flesh it out
|
246
|
-
$ rails g web_app_theme:themed home --themed-type=text --theme="red" --engine=haml
|
247
|
-
|
248
|
-
$ mv app/views/home/show.html.haml app/views/home/index.html.haml
|
249
|
-
|
250
|
-
|
251
|
-
# STEP 4 - SIMPLE devise SET UP (pre-installing milia)
|
252
|
-
$ rails g devise:install
|
253
|
-
$ rails g devise user
|
254
|
-
|
255
|
-
# EDIT: config/environments/development.rb >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
256
|
-
# ADD: following AFTER the final config.action_xxxxx stuff >>>>>>>>>>>>>>>>>>>>>>>
|
257
|
-
# of course, you will want to change your domain, email user_name and password
|
258
|
-
# to match your actual values!
|
259
|
-
|
260
|
-
# devise says to define default url
|
261
|
-
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
|
262
|
-
|
263
|
-
# set up for email sending even in dev mode
|
264
|
-
# Don't care if the mailer can't send
|
265
|
-
config.action_mailer.raise_delivery_errors = false
|
266
|
-
|
267
|
-
config.action_mailer.delivery_method = :smtp
|
268
|
-
|
269
|
-
ActionMailer::Base.smtp_settings = {
|
270
|
-
:address => "smtp.gmail.com",
|
271
|
-
:port => "587",
|
272
|
-
:authentication => :plain,
|
273
|
-
:user_name => "my-email@simple-milia-app.com",
|
274
|
-
:password => "my-password",
|
275
|
-
:enable_starttls_auto => true
|
276
|
-
}
|
277
|
-
#<<<<<< EDIT <<<<<<<<<<<<
|
278
|
-
|
279
|
-
|
280
|
-
# EDIT: config/environments/production.rb >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
281
|
-
# this sample is showing as how it would be if your production server
|
282
|
-
# is hosted via heroku.com using the SENDGRID plugin for emailing
|
283
|
-
# ADD: following AFTER the final config.action_xxxxx stuff >>>>>>>>>>>>>>>>>>>>>>
|
284
|
-
|
285
|
-
# devise says to define default url
|
286
|
-
config.action_mailer.default_url_options = { :host => 'secure.simple-milia-app.com', :protocol => 'https' }
|
287
|
-
|
288
|
-
ActionMailer::Base.delivery_method = :smtp
|
289
|
-
|
290
|
-
ActionMailer::Base.smtp_settings = {
|
291
|
-
:address => 'smtp.sendgrid.net',
|
292
|
-
:port => '587',
|
293
|
-
:authentication => :plain,
|
294
|
-
:user_name => ENV['SENDGRID_USERNAME'],
|
295
|
-
:password => ENV['SENDGRID_PASSWORD'],
|
296
|
-
:domain => 'heroku.com'
|
297
|
-
}
|
298
|
-
#<<<<<< EDIT <<<<<<<<<<<<
|
299
|
-
|
300
|
-
# EDIT: config/environments/test.rb >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
301
|
-
# ADD: following AFTER the final config.action_xxxxx stuff >>>>>>>>>>>>>>>>
|
302
|
-
# devise says to define default url
|
303
|
-
config.action_mailer.default_url_options = { :host => "www.example.com" }
|
304
|
-
#<<<<<< EDIT <<<<<<<<<<<<
|
305
|
-
|
306
|
-
# set up scopes for devise
|
307
|
-
# EDIT: app/models/user.rb >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
308
|
-
# add confirmable to line 4
|
309
|
-
devise :database_authenticatable, :registerable, :confirmable,
|
310
|
-
#<<<< EDIT <<<<<<<<<<<<<<<<<
|
311
|
-
|
312
|
-
# EDIT: db/migrate/xxxxxxx_devise_create_users.rb >>>>>>>>>>>>>>>>>>>>>>>>>
|
313
|
-
# uncomment the confirmable section, it will then look as follows:
|
314
|
-
|
315
|
-
## Confirmable
|
316
|
-
t.string :confirmation_token
|
317
|
-
t.datetime :confirmed_at
|
318
|
-
t.datetime :confirmation_sent_at
|
319
|
-
t.string :unconfirmed_email # Only if using reconfirmable
|
320
|
-
|
321
|
-
# and uncomment the confirmation_token index line
|
322
|
-
add_index :users, :confirmation_token, :unique => true
|
323
|
-
|
324
|
-
#<<<< EDIT <<<<<<<<<<<<<<<<<
|
325
|
-
|
326
|
-
# EDIT: config/initializers/devise.rb >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
327
|
-
# change mailer_sender to be your from: email address
|
328
|
-
config.mailer_sender = "my-email@simple-milia-app.com"
|
329
|
-
|
330
|
-
# locate and uncomment the following lines:
|
331
|
-
config.pepper = '46f2....'
|
332
|
-
config.confirmation_keys = [ :email ]
|
333
|
-
config.email_regexp = /\A[^@]+@[^@]+\z/
|
334
|
-
|
335
|
-
#<<<< EDIT <<<<<<<<<<<<<<<<<
|
336
|
-
|
337
|
-
# run the migration
|
338
|
-
$ rake db:migrate
|
339
|
-
|
340
|
-
# CHECK-OUT: check things out at browser before proceeding
|
341
|
-
# stop/restart foreman
|
342
|
-
# ^c stops foreman; foreman start restarts it; F5 refreshes the browser page
|
343
|
-
|
344
|
-
# customize login screen
|
345
|
-
# generate the sign-in/sign-out layout:
|
346
|
-
|
347
|
-
$ rails g web_app_theme:theme sign --layout-type=sign --theme="red" --engine=haml --app-name="Simple Milia App"
|
348
|
-
|
349
|
-
# EDIT: config/application.rb >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
350
|
-
# NOTE: please see details and cautions at:
|
351
|
-
# http://guides.rubyonrails.org/asset_pipeline.html
|
352
|
-
# Section 4.1 Precompiling Assets
|
353
|
-
|
354
|
-
# uncomment the config.time_zone line and set it to your timezone
|
355
|
-
config.time_zone = 'Pacific Time (US & Canada)'
|
356
|
-
|
357
|
-
# IF: you will be deploying production on heroku, then
|
358
|
-
# ADD: following AFTER the config.time_zone line >>>>>>>>>>>>>>>>>>>>>>>>>>>
|
359
|
-
# For faster asset precompiles, you can partially load your application.
|
360
|
-
# In that case, templates cannot see application objects or methods.
|
361
|
-
# Heroku requires this to be false.
|
362
|
-
config.assets.initialize_on_precompile = false
|
363
|
-
#<<<<<< ADD <<<<<<<<<<<<
|
364
|
-
|
365
|
-
# change the layout for sign-in/sign-up
|
366
|
-
# by adding the following into the class .... end block
|
367
|
-
|
368
|
-
config.to_prepare do
|
369
|
-
Devise::SessionsController.layout "sign"
|
370
|
-
Devise::RegistrationsController.layout "sign"
|
371
|
-
Devise::ConfirmationsController.layout "sign"
|
372
|
-
Devise::PasswordsController.layout "sign"
|
373
|
-
end
|
374
|
-
#<<<< EDIT <<<<<<<<<<<<<<<<<
|
375
|
-
|
376
|
-
# if we use devise to gen the views, they'll be genned in erb and
|
377
|
-
# a different format from the layout style we're using.
|
378
|
-
# my web_app_theme has a generator to gen them automagically
|
379
|
-
$ rails g web_app_theme:devise
|
380
|
-
|
381
|
-
# EDIT: app/controllers/application_controller.rb >>>>>>>>>>>>>>>>>>>>>
|
382
|
-
# NOTE: this line is only for the basic devise (no milia) version;
|
383
|
-
# we will later uncomment or remove this line when we install milia
|
384
|
-
# ADD following lines immediately after line 4 protect_from_forgery ...
|
385
|
-
before_action :authenticate_user!
|
386
|
-
#<<<< EDIT <<<<<<<<<<<<<<<<<
|
387
|
-
|
388
|
-
# EDIT: app/controllers/home_controller.rb
|
389
|
-
# ADD immediately after line 1 class HomeController
|
390
|
-
skip_before_action :authenticate_user!, :only => [ :index ]
|
391
|
-
#<<<< EDIT <<<<<<<<<<<<<<<<<
|
392
|
-
|
393
|
-
# CHECK-OUT:
|
394
|
-
# http://localhost:3000/users/sign_in
|
395
|
-
# to view the sign-in form
|
396
|
-
# then click SIGN UP and view the sign-up form
|
397
|
-
|
398
|
-
# *********************************************************************
|
399
|
-
# STEP 4 - TEST devise SIGN UP, ACTIVATION, SIGN IN, SIGN OUT
|
400
|
-
# *********************************************************************
|
401
|
-
# NOTE: we will later DELETE all users added in this manner BEFORE we
|
402
|
-
# install milia. Reason is because currently there is no tenanting.
|
403
|
-
# DO NOT TRY TO LATER MANUALLY ATTEMPT TO CONVERT THESE INITIAL USERS
|
404
|
-
# TO A TENANTING MODEL: it is poor software practice to do that.
|
405
|
-
# you are just testing and verifying that we've got devise up and enabled.
|
406
|
-
# *********************************************************************
|
407
|
-
|
408
|
-
# CHECK-OUT:
|
409
|
-
# sign up as a new user,
|
410
|
-
# the log file will show that an email was sent
|
411
|
-
# together with the activation code & URL
|
412
|
-
# and if your email/password are correct, an email should have been sent as well!
|
413
|
-
# copy & paste this address as-is into the browser address area & go to it to activate
|
414
|
-
# it will take you to a sign in screen; sign in
|
415
|
-
# REFRESH index page (to refresh the logout validity token)
|
416
|
-
# sign out
|
417
|
-
# sign in again as the user
|
418
|
-
|
419
|
-
# *********************************************************************
|
420
|
-
# STEP 5 - adding in milia and making multi-tenantable
|
421
|
-
# *********************************************************************
|
422
|
-
# remove any users created above in STEP 4
|
423
|
-
# start the rails console
|
424
|
-
$ rail c
|
425
|
-
> User.all.each{|x| x.destroy}
|
426
|
-
> exit
|
427
|
-
|
428
|
-
# rollback the initial migration (because we'll be changing it slightly)
|
429
|
-
$ rake db:rollback
|
430
|
-
|
431
|
-
# Milia expects a user session, so please set one up
|
432
|
-
# EDIT: Gemfile
|
433
|
-
# ADD
|
434
|
-
gem 'activerecord-session_store', github: 'rails/activerecord-session_store'
|
435
|
-
#<<<< EDIT <<<<<<<<<<<<<<<<<
|
436
|
-
|
437
|
-
# BUNDLE install to get the new gems
|
438
|
-
$ bundle install
|
439
|
-
|
440
|
-
# now generate the session migration
|
441
|
-
$ rails g active_record:session_migration
|
442
|
-
|
443
|
-
# EDIT: db/migrate/xxxxxxx_devise_create_users.rb >>>>>>>>>>>>>>>>>>>>>>>>>
|
444
|
-
# add above the t.timestamps line:
|
445
|
-
# milia member_invitable
|
446
|
-
t.boolean :skip_confirm_change_password, :default => false
|
447
|
-
|
448
|
-
t.references :tenant
|
449
|
-
#<<<< EDIT <<<<<<<<<<<<<<<<<
|
450
|
-
|
451
|
-
# generate the tenant migration
|
452
|
-
$ rails g model tenant tenant:references name:string:index
|
453
|
-
|
454
|
-
# generate the tenants_users join table migration
|
455
|
-
$ rails g migration CreateTenantsUsersJoinTable tenants users
|
456
|
-
|
457
|
-
# EDIT: db/migrate/20131119092046_create_tenants_users_join_table.rb >>>>>>>>>>
|
458
|
-
# then uncomment the first index line as follows:
|
459
|
-
t.index [:tenant_id, :user_id]
|
460
|
-
#<<<< EDIT <<<<<<<<<<<<<<<<<
|
461
|
-
|
462
|
-
# EDIT: app/controllers/application_controller.rb >>>>>>>>>>>>>>>>>>>>>
|
463
|
-
# NOTE: before all tenanted controllers, you MUST HAVE a
|
464
|
-
# before_action :authenticate_tenant!
|
465
|
-
# It is best to have it at the start of your application_controller
|
466
|
-
# If you happen to have any general universal access controllers,
|
467
|
-
# then you can place at the top of those specific controllers:
|
468
|
-
# skip_before_action :authenticate_tenant!, :only => [ <action name> ]
|
469
|
-
#
|
470
|
-
# CHANGE: comment authenticate_user! line to authenticate_tenant!
|
471
|
-
# (make it look like the statement below)
|
472
|
-
before_action :authenticate_tenant! # authenticates user and sets up tenant
|
473
|
-
|
474
|
-
# ADD following lines immediately after that: >>>>>>>>>>>>>>>>>>>>>>>>>>
|
475
|
-
|
476
|
-
rescue_from ::Milia::Control::MaxTenantExceeded, :with => :max_tenants
|
477
|
-
rescue_from ::Milia::Control::InvalidTenantAccess, :with => :invalid_tenant
|
478
|
-
# milia defines a default max_tenants, invalid_tenant exception handling
|
479
|
-
# but you can override if you wish to handle directly
|
480
|
-
#<<<<<< ADD <<<<<<<<<<<<
|
481
|
-
|
482
|
-
#<<<< EDIT <<<<<<<<<<<<<<<<<
|
483
|
-
|
484
|
-
# EDIT: config/routes.rb >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
485
|
-
# ADD the :controllers clause to the existing devise_for :users :
|
486
|
-
|
487
|
-
as :user do # *MUST* come *BEFORE* devise's definitions (below)
|
488
|
-
match '/user/confirmation' => 'milia/confirmations#update', :via => :put, :as => :update_user_confirmation
|
489
|
-
end
|
490
|
-
|
491
|
-
devise_for :users, :controllers => {
|
492
|
-
:registrations => "milia/registrations",
|
493
|
-
:confirmations => "milia/confirmations",
|
494
|
-
:sessions => "milia/sessions",
|
495
|
-
:passwords => "milia/passwords",
|
496
|
-
}
|
497
|
-
|
498
|
-
#<<<< EDIT <<<<<<<<<<<<<<<<<
|
499
|
-
|
500
|
-
# EDIT: app/models/user.rb >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
501
|
-
# ADD after the class User line:
|
502
|
-
acts_as_universal_and_determines_account
|
503
|
-
#<<<< EDIT <<<<<<<<<<<<<<<<<
|
504
|
-
|
505
|
-
|
506
|
-
# EDIT: app/models/tenant.rb >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
507
|
-
# DELETE
|
508
|
-
belongs_to :tenant
|
509
|
-
|
510
|
-
# ADD after the class Tenant line: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
511
|
-
acts_as_universal_and_determines_tenant
|
512
|
-
|
513
|
-
def self.create_new_tenant(tenant_params, coupon_params)
|
514
|
-
|
515
|
-
tenant = Tenant.new(:name => tenant_params[:name])
|
516
|
-
|
517
|
-
if new_signups_not_permitted?(coupon_params)
|
518
|
-
|
519
|
-
raise ::Milia::Control::MaxTenantExceeded, "Sorry, new accounts not permitted at this time"
|
520
|
-
|
521
|
-
else
|
522
|
-
tenant.save # create the tenant
|
523
|
-
end
|
524
|
-
return tenant
|
525
|
-
end
|
526
|
-
|
527
|
-
# ------------------------------------------------------------------------
|
528
|
-
# new_signups_not_permitted? -- returns true if no further signups allowed
|
529
|
-
# args: params from user input; might contain a special 'coupon' code
|
530
|
-
# used to determine whether or not to allow another signup
|
531
|
-
# ------------------------------------------------------------------------
|
532
|
-
def self.new_signups_not_permitted?(params)
|
533
|
-
return false
|
534
|
-
end
|
535
|
-
|
536
|
-
# ------------------------------------------------------------------------
|
537
|
-
# tenant_signup -- setup a new tenant in the system
|
538
|
-
# CALLBACK from devise RegistrationsController (milia override)
|
539
|
-
# AFTER user creation and current_tenant established
|
540
|
-
# args:
|
541
|
-
# user -- new user obj
|
542
|
-
# tenant -- new tenant obj
|
543
|
-
# other -- any other parameter string from initial request
|
544
|
-
# ------------------------------------------------------------------------
|
545
|
-
def self.tenant_signup(user, tenant, other = nil)
|
546
|
-
# StartupJob.queue_startup( tenant, user, other )
|
547
|
-
# any special seeding required for a new organizational tenant
|
548
|
-
end
|
549
|
-
#<<<<<< ADD <<<<<<<<<<<<
|
550
|
-
|
551
|
-
#<<<< EDIT <<<<<<<<<<<<<<<<<
|
552
|
-
|
553
|
-
# EDIT: app/controllers/home_controller.rb
|
554
|
-
# CHANGE skip_authenticate_user! to skip_authenticate_tenant!
|
555
|
-
skip_before_action :authenticate_tenant!, :only => [ :index ]
|
556
|
-
|
557
|
-
# REPLACE the empty def index ... end with following ADD:
|
558
|
-
# this will give you improved handling for letting user know
|
559
|
-
# what is expected. If you want to have a welcome page for
|
560
|
-
# signed in users, uncomment the redirect_to line, etc.
|
561
|
-
def index
|
562
|
-
if user_signed_in?
|
563
|
-
|
564
|
-
# was there a previous error msg carry over? make sure it shows in flasher
|
565
|
-
flash[:notice] = flash[:error] unless flash[:error].blank?
|
566
|
-
# redirect_to( welcome_path() )
|
567
|
-
|
568
|
-
else
|
569
|
-
|
570
|
-
if flash[:notice].blank?
|
571
|
-
flash[:notice] = "sign in if your organization has an account"
|
572
|
-
end
|
573
|
-
|
574
|
-
end # if logged in .. else first time
|
575
|
-
|
576
|
-
end
|
577
|
-
#<<<< ADD <<<<<<<<<<<<<<<<<
|
578
|
-
#<<<< EDIT <<<<<<<<<<<<<<<<<
|
579
|
-
|
580
|
-
# run the migration
|
581
|
-
$ rake db:migrate
|
582
|
-
|
583
|
-
# config/initializers/milia.rb now supported for config parameters
|
584
|
-
# OPTIONAL: change milia configuration options
|
585
|
-
# copy doc/milia-initializer.rb to config/initializers/
|
586
|
-
# then edit values as appropriate
|
587
|
-
|
588
|
-
# NOTE: if Milia.use_coupon is true (default configuration option),
|
589
|
-
# then your sign up form MUST return a parameter
|
590
|
-
# :coupon => { :coupon => <string> }
|
591
|
-
# which can also be blank.
|
592
|
-
|
593
|
-
# OPTIONAL: edit config/application.rb and add the following to alter
|
594
|
-
# default behavior for handling strong_parameters in Rails
|
595
|
-
# see: https://github.com/rails/strong_parameters#handling-of-unpermitted-keys
|
596
|
-
# choose one of the two options: :raise OR :log
|
597
|
-
ActionController::Parameters.action_on_unpermitted_parameters = :raise | :log
|
598
|
-
|
599
|
-
# CHECK-OUT: restart foreman and check out at your browser:
|
600
|
-
http://localhost:3000/
|
601
|
-
# click sign up to sign up a new account, get confirmation email (or view in log)
|
602
|
-
# activate the new account, sign in, sign out, etc.
|
603
|
-
|
604
|
-
|
605
|
-
# *********************************************************************
|
606
|
-
# STEP 6 - adding a tenanted members table, then inviting a member
|
607
|
-
# *********************************************************************
|
608
|
-
# remove any users, and tenants created above in STEP 5
|
609
|
-
# start the rails console
|
610
|
-
$ rails c
|
611
|
-
> User.all.each{|x| x.destroy}
|
612
|
-
> Tenant.all.each{|x| x.destroy}
|
613
|
-
> exit
|
614
|
-
|
615
|
-
|
616
|
-
$ rails g resource member tenant:references user:references first_name:string last_name:string favorite_color:string
|
617
|
-
|
618
|
-
# ADD to app/models/tenant.rb
|
619
|
-
has_many :members, dependent: :destroy
|
620
|
-
|
621
|
-
# EDIT self.tenant_signup method
|
622
|
-
# ------------------------------------------------------------------------
|
623
|
-
def self.tenant_signup(user, tenant, other = nil)
|
624
|
-
# StartupJob.queue_startup( tenant, user, other )
|
625
|
-
# any special seeding required for a new organizational tenant
|
626
|
-
|
627
|
-
Member.create_org_admin(user)
|
628
|
-
end
|
629
|
-
|
630
|
-
|
631
|
-
# EDIT app/models/user.rb >>>>>>>>>>>>>>>>>>>>
|
632
|
-
# ADD
|
633
|
-
has_one :member, :dependent => :destroy
|
634
|
-
#<<<< EDIT <<<<<<<<<<<<<<<<<
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
# EDIT app/models/member.rb
|
639
|
-
# REMOVE belongs_to :tenant
|
640
|
-
# ADD
|
641
|
-
acts_as_tenant
|
642
|
-
|
643
|
-
DEFAULT_ADMIN = {
|
644
|
-
first_name: "Admin",
|
645
|
-
last_name: "Please edit me",
|
646
|
-
favorite_color: "blue"
|
647
|
-
}
|
648
|
-
|
649
|
-
def self.create_new_member(user, params)
|
650
|
-
# add any other initialization for a new member
|
651
|
-
return user.create_member( params )
|
652
|
-
end
|
653
|
-
|
654
|
-
def self.create_org_admin(user)
|
655
|
-
new_member = create_new_member(user, DEFAULT_ADMIN)
|
656
|
-
unless new_member.errors.empty?
|
657
|
-
raise ArgumentError, new_member.errors.full_messages.uniq.join(", ")
|
658
|
-
end
|
659
|
-
|
660
|
-
return new_member
|
661
|
-
|
662
|
-
end
|
663
|
-
|
664
|
-
|
665
|
-
# EDIT: app/views/members/new.html.haml >>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
666
|
-
%h1 Simple Milia App
|
667
|
-
.block#block-signup
|
668
|
-
%h2 Invite a new member into #{@org_name}
|
669
|
-
.content.login
|
670
|
-
.flash
|
671
|
-
- flash.each do |type, message|
|
672
|
-
%div{ :class => "message #{type}" }
|
673
|
-
%p= message
|
674
|
-
- flash.clear # clear contents so we won't see it again
|
675
|
-
|
676
|
-
= form_for(@member, :html => { :class => "form login" }) do |f|
|
677
|
-
- unless @member.errors.empty? && @user.errors.empty?
|
678
|
-
#errorExplanation.group
|
679
|
-
%ul
|
680
|
-
= @member.errors.full_messages.uniq.inject(''){|str, msg| (str << "<li> #{msg}") }.html_safe
|
681
|
-
= @user.errors.full_messages.uniq.inject(''){|str, msg| (str << "<li> #{msg}") }.html_safe
|
682
|
-
|
683
|
-
= fields_for( :user ) do |w|
|
684
|
-
.group
|
685
|
-
= w.label :email, :class => "label "
|
686
|
-
= w.text_field :email, :class => "text_field"
|
687
|
-
%span.description Ex. test@example.com; must be unique
|
688
|
-
|
689
|
-
.group
|
690
|
-
= f.label :first_name, :class => "label "
|
691
|
-
= f.text_field :first_name, :class => "text_field"
|
692
|
-
|
693
|
-
.group
|
694
|
-
= f.label :last_name, :class => "label "
|
695
|
-
= f.text_field :last_name, :class => "text_field"
|
696
|
-
|
697
|
-
.group
|
698
|
-
= f.label :favorite_color, :class => "label "
|
699
|
-
= f.text_field :favorite_color, :class => "text_field"
|
700
|
-
%span.description What is your favorite color?
|
701
|
-
|
702
|
-
.group.navform.wat-cf
|
703
|
-
%button.button{ :type => "submit" }
|
704
|
-
= image_tag "web-app-theme/icons/key.png"
|
705
|
-
Create user and invite
|
706
|
-
#<<<< ADD <<<<<<<<<<<<<<<<<
|
707
|
-
#<<<< EDIT <<<<<<<<<<<<<<<<<
|
708
|
-
|
709
|
-
# EDIT app/controllers/application_controller.rb
|
710
|
-
# ADD:
|
711
|
-
before_action :prep_org_name
|
712
|
-
|
713
|
-
private
|
714
|
-
|
715
|
-
# org_name will be passed to layout & view
|
716
|
-
def prep_org_name()
|
717
|
-
@org_name = ( user_signed_in? ?
|
718
|
-
Tenant.current_tenant.name :
|
719
|
-
"Simple Milia App"
|
720
|
-
)
|
721
|
-
|
722
|
-
end
|
723
|
-
|
724
|
-
# EDIT app/views/layouts/application.rb >>>>>>>>>>>>>>>>>>>>
|
725
|
-
# the following is not a requirement, but serves to show
|
726
|
-
# how to handle tenanted sign ins and welcome pages
|
727
|
-
# replaces the two instances of "Simple Milia App" with
|
728
|
-
# (everything bewtween the quotes but not including the quotes):
|
729
|
-
# "= @org_name", make the results look like the two lines below
|
730
|
-
|
731
|
-
%title= @org_name
|
732
|
-
|
733
|
-
= link_to @org_name, "/"
|
734
|
-
|
735
|
-
# make changes to layout for invite member; change the portion
|
736
|
-
# with the "sign_up" link to look like the following:
|
737
|
-
%li
|
738
|
-
- if user_signed_in?
|
739
|
-
= link_to t("web-app-theme.invite", :default => "Invite member"), new_member_path
|
740
|
-
- else
|
741
|
-
= link_to( t("web-app-theme.signup", :default => "Sign up"), new_user_registration_path )
|
742
|
-
|
743
|
-
#<<<< EDIT <<<<<<<<<<<<<<<<<
|
744
|
-
|
745
|
-
# EDIT: app/controllers/members_controller.rb >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
746
|
-
|
747
|
-
# ADD after the class line: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
748
|
-
|
749
|
-
layout "sign", :only => [:new, :edit, :create]
|
750
|
-
|
751
|
-
def new()
|
752
|
-
@member = Member.new()
|
753
|
-
@user = User.new()
|
754
|
-
end
|
755
|
-
|
756
|
-
def create()
|
757
|
-
@user = User.new( user_params )
|
758
|
-
|
759
|
-
# ok to create user, member
|
760
|
-
if @user.save_and_invite_member() && @user.create_member( member_params )
|
761
|
-
flash[:notice] = "New member added and invitation email sent to #{@user.email}."
|
762
|
-
redirect_to root_path
|
763
|
-
else
|
764
|
-
flash[:error] = "errors occurred!"
|
765
|
-
@member = Member.new( member_params ) # only used if need to revisit form
|
766
|
-
render :new
|
767
|
-
end
|
768
|
-
|
769
|
-
end
|
770
|
-
|
771
|
-
|
772
|
-
private
|
773
|
-
|
774
|
-
def member_params()
|
775
|
-
params.require(:member).permit(:first_name, :last_name, :favorite_color)
|
776
|
-
end
|
777
|
-
|
778
|
-
def user_params()
|
779
|
-
params.require(:user).permit(:email, :password, :password_confirmation)
|
780
|
-
end
|
781
|
-
|
782
|
-
#<<<< ADD <<<<<<<<<<<<<<<<<
|
783
|
-
#<<<< EDIT <<<<<<<<<<<<<<<<<
|
784
|
-
|
785
|
-
|
786
|
-
# run the migration
|
787
|
-
$ rake db:migrate
|
788
|
-
|
789
|
-
# CHECK-OUT: check things out at browser before proceeding
|
790
|
-
# stop/restart foreman
|
791
|
-
# you will have to first sign-up, confirm, then you can invite_member
|
792
|
-
# sign-out, confirm new member, etc
|
793
|
-
|
794
|
-
# MILIA API EXPLAINED: Tenant.current_tenant, etc
|
795
|
-
|
796
|
-
# from controller-level:
|
797
|
-
|
798
|
-
set_current_tenant( tenant_id )
|
799
|
-
raise InvalidTenantAccess unless tenant_id is one of the current_user valid tenants
|
800
|
-
|
801
|
-
# from model-level:
|
802
|
-
Tenant.current_tenant -- return tenant object for the current tenant; nil if none
|
803
|
-
|
804
|
-
Tenant.current_tenant_id -- returns tenant_id for the current tenant; nil if none
|
805
|
-
|
806
|
-
# from background job s (only at the start of the task);
|
807
|
-
# tenant can either be a tenant object or an integer tenant_id; anything else will raise
|
808
|
-
# exception
|
809
|
-
# set_current_tenant -- model-level ability to set the current tenant
|
810
|
-
# NOTE: *USE WITH CAUTION* normally this should *NEVER* be done from
|
811
|
-
# the models ... it is only useful and safe WHEN performed at the start
|
812
|
-
# of a background job (DelayedJob#perform)
|
813
|
-
|
814
|
-
Tenant.set_current_tenant( tenant )
|
815
|
-
raise ArgumentError, "invalid tenant object or id"
|
816
|
-
|