know_more 0.9.1
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 +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +130 -0
- data/Rakefile +26 -0
- data/app/assets/config/know_more_manifest.js +2 -0
- data/app/assets/javascripts/know_more/application.js +13 -0
- data/app/assets/stylesheets/know_more/application.css +15 -0
- data/app/controllers/know_more/application_controller.rb +5 -0
- data/app/controllers/know_more/controller_helpers.rb +14 -0
- data/app/controllers/know_more/questionnaire_controller.rb +55 -0
- data/app/helpers/know_more/application_helper.rb +4 -0
- data/app/jobs/know_more/application_job.rb +4 -0
- data/app/mailers/know_more/application_mailer.rb +6 -0
- data/app/models/concerns/know_more/application_record.rb +5 -0
- data/app/models/concerns/know_more/questionnaire.rb +7 -0
- data/app/views/layouts/know_more/application.html.erb +14 -0
- data/config/routes.rb +7 -0
- data/lib/generators/know_more/init_generator.rb +13 -0
- data/lib/generators/know_more/install_generator.rb +45 -0
- data/lib/generators/know_more/templates/concerns.rb.erb +23 -0
- data/lib/generators/know_more/templates/erb/page_template.erb +39 -0
- data/lib/generators/know_more/templates/haml/page_template.erb +32 -0
- data/lib/generators/know_more/templates/initializer.rb.erb +4 -0
- data/lib/generators/know_more/templates/models/migration.rb.erb +9 -0
- data/lib/generators/know_more/templates/models/model.rb.erb +3 -0
- data/lib/know_more.rb +6 -0
- data/lib/know_more/base.rb +24 -0
- data/lib/know_more/configuration.rb +9 -0
- data/lib/know_more/engine.rb +16 -0
- data/lib/know_more/version.rb +3 -0
- data/lib/tasks/know_more_tasks.rake +4 -0
- data/spec/rails_helper.rb +57 -0
- data/spec/spec_helper.rb +99 -0
- data/spec/test_app/Rakefile +6 -0
- data/spec/test_app/app/assets/config/manifest.js +5 -0
- data/spec/test_app/app/assets/javascripts/application.js +15 -0
- data/spec/test_app/app/assets/javascripts/cable.js +13 -0
- data/spec/test_app/app/assets/stylesheets/application.css +15 -0
- data/spec/test_app/app/channels/application_cable/channel.rb +4 -0
- data/spec/test_app/app/channels/application_cable/connection.rb +4 -0
- data/spec/test_app/app/controllers/application_controller.rb +8 -0
- data/spec/test_app/app/controllers/concerns/know_more/questionnaire_controller_concerns.rb +42 -0
- data/spec/test_app/app/controllers/welcome_controller.rb +5 -0
- data/spec/test_app/app/helpers/application_helper.rb +2 -0
- data/spec/test_app/app/jobs/application_job.rb +2 -0
- data/spec/test_app/app/mailers/application_mailer.rb +4 -0
- data/spec/test_app/app/models/application_record.rb +3 -0
- data/spec/test_app/app/models/questionnaire.rb +3 -0
- data/spec/test_app/app/views/know_more/questionnaire/step1.html.haml +29 -0
- data/spec/test_app/app/views/know_more/questionnaire/step2.html.haml +31 -0
- data/spec/test_app/app/views/know_more/questionnaire/step3.html.haml +30 -0
- data/spec/test_app/app/views/layouts/application.html.erb +14 -0
- data/spec/test_app/app/views/layouts/mailer.html.erb +13 -0
- data/spec/test_app/app/views/layouts/mailer.text.erb +1 -0
- data/spec/test_app/app/views/welcome/hello.html.erb +1 -0
- data/spec/test_app/bin/bundle +3 -0
- data/spec/test_app/bin/rails +4 -0
- data/spec/test_app/bin/rake +4 -0
- data/spec/test_app/bin/setup +34 -0
- data/spec/test_app/bin/update +29 -0
- data/spec/test_app/config.ru +5 -0
- data/spec/test_app/config/application.rb +23 -0
- data/spec/test_app/config/boot.rb +5 -0
- data/spec/test_app/config/cable.yml +9 -0
- data/spec/test_app/config/database.yml +25 -0
- data/spec/test_app/config/environment.rb +5 -0
- data/spec/test_app/config/environments/development.rb +54 -0
- data/spec/test_app/config/environments/production.rb +86 -0
- data/spec/test_app/config/environments/test.rb +42 -0
- data/spec/test_app/config/initializers/application_controller_renderer.rb +6 -0
- data/spec/test_app/config/initializers/assets.rb +11 -0
- data/spec/test_app/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/test_app/config/initializers/cookies_serializer.rb +5 -0
- data/spec/test_app/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/test_app/config/initializers/inflections.rb +16 -0
- data/spec/test_app/config/initializers/know_more.rb +4 -0
- data/spec/test_app/config/initializers/mime_types.rb +4 -0
- data/spec/test_app/config/initializers/new_framework_defaults.rb +24 -0
- data/spec/test_app/config/initializers/session_store.rb +3 -0
- data/spec/test_app/config/initializers/wrap_parameters.rb +14 -0
- data/spec/test_app/config/locales/en.yml +23 -0
- data/spec/test_app/config/puma.rb +47 -0
- data/spec/test_app/config/routes.rb +5 -0
- data/spec/test_app/config/secrets.yml +22 -0
- data/spec/test_app/config/spring.rb +6 -0
- data/spec/test_app/db/development.sqlite3 +0 -0
- data/spec/test_app/db/migrate/20161027141359_create_questionnaire.rb +12 -0
- data/spec/test_app/db/schema.rb +24 -0
- data/spec/test_app/lib/know_more/questionnaire_controller_concerns.rb +21 -0
- data/spec/test_app/log/development.log +3813 -0
- data/spec/test_app/public/404.html +67 -0
- data/spec/test_app/public/422.html +67 -0
- data/spec/test_app/public/500.html +66 -0
- data/spec/test_app/public/apple-touch-icon-precomposed.png +0 -0
- data/spec/test_app/public/apple-touch-icon.png +0 -0
- data/spec/test_app/public/favicon.ico +0 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/-M/-Mhn0x6IA3ei53dCjTNB4QapIeIWnhFjjvWlObqhWxY.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/-h/-hPQhUvmVonbzE86tGolE7GRuNFFf3NsKvt1mwHwIg0.cache +0 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/0S/0SvZGDW10EU46QZko9M15Exl1RDa9Ud5osSt660CuzQ.cache +0 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/24/24PpPX2bi_nuVnh3Bx8Nqj-UO3-1dbdgtFa6v7iPaLo.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/6P/6PoXC3inbHQs_iJ8sp-AEYUgrRllcZHE8stF6_FuI2s.cache +3 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/8M/8M6Y8ZU8aBj7dfklYKmqgzKWfv5nIDcx4jR-cMu9Hgc.cache +0 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/Ao/Ao0OdzieB2BHIS0J1OX5-CzoMHHagT-hWe_ospTLEz4.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/Ca/Ca7J7u8QQVfncKxGfYDjkhl4ezOotD2PbJTwmY88R08.cache +0 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/D7/D7JZQRMd7o6Oa3O8XYxxcWv4NGy5XUHEBQjbTtTIw0w.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/Df/DfqHLjOcuVNA6fgR3rrM8D7q4VveBYvUn9OaxdDb2aI.cache +2 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/E8/E869Vssa93t7BK-iyJUAbuMcVw65khT8ZkFTdkgPoNA.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/Eu/EuUPUxyK1i0O9kRow6J2gQlEgannj8ele8bYrOH0WkE.cache +0 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/F5/F5aTSXaWVMd07oSPX3KS5DuFnGw2SlYAYvIl2rt3xKU.cache +2 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/F6/F69NGMZogprXR3htKJ6d0kVkFS9EgtSIrMd_Rv4lQo4.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/FW/FWd91hU2C6pptRvlqp8-fMKs0Pgd_JfiT3TPiYXBGoc.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/FW/FWlz-VvryvvUjDXSLRDM06krdCHZ6jb2HNM8n2lYvno.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/Fh/FhoIJOA98Fe9tpfSEnFORkI01I9KVpmYAx_mXC4gQYo.cache +2 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/G4/G4f_wqyGuSDH5PqO-cG6noP4D5EK3Kylzj3yOte-Z3E.cache +3 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/Jj/Jj08SeolaHESqwfZBGZ0tcinAfB1oMbMugBODKZGtmk.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/KU/KUHCmze6iHkktV-xkd_pe8zKkrea7B0GA0AyNzPi8VI.cache +2 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/Ky/KyLnrp_TTwObMeq3b1zzPd9lvWbGgM05pRhE6K26DSw.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/LZ/LZodg9A2YVhhIboloe0zr_qCYE_SsB41W42B9a16AvQ.cache +0 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/M6/M66hYfGZ7alPDFVsvZX20gGKa3hoXU4ZX57eWmf-8Q0.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/Mb/MbA44Lqly0ejzpXgTsIIH7tnssjDcn_I4grw6t_PNFs.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/Nh/Nhqfo87al4XtybNfUPjhR8idEE6eKcbsVOuQtiPqaz8.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/On/OnToO1iuSf982Y8PilnSN969yImwD-JWuEdGGU0r4SA.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/Q7/Q7Dl2on4OdmHONyXUohOukBoSZQfxX7CBNaiLRxrn14.cache +0 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/QC/QCkY9HlLiOM3vpgoGX8oJvozZ0Cq6p0b6WD2lcwZT5k.cache +0 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/QD/QDMAHR127EpeGWrWbzn7QnNqnYZtH2UUV6ntkBhiUMQ.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/Qr/QrbG3GcCwmKIApW0fC5o0iM8upyezEp0NrzhSENYwcs.cache +0 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/Qx/Qx8y8tq3IiNr7Ot7JGhxnFwDma3Bf6LfjWyVxcYpTzk.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/S2/S2XG29YYvgWCmY1ULahjx-TNWdzenEHf2EpX5LK_--w.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/SH/SHPuXI1rKYgLVra3KoGrRjevUg0nzNAxzNU_v_dPb6U.cache +0 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/Sa/Saez4IhtZGelgfIYfe8FAkCBAh9dUeKVGEmFBTITnmI.cache +0 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/Sx/Sx94HsfcuxHDyseiRaSVTRLw-adn2lGZ8TnytfXZhl8.cache +0 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/W1/W1FyFe4zmJy2UId1DPKUFLtCO2T6Vq5RuBrUMwa5pXQ.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/WV/WVC-q51wcBaLCMfUdFscQNqh4o2O9YDD0irl3pEEHII.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/XL/XL3leJ5pQba8fRAqDA-mBiHbcBIBiHf9jeJ3xWfrlz8.cache +2 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/Y2/Y2K6yjpdhJfMIKPU5YceGshr_gR1QQG8qmT6gRut14U.cache +2 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/bD/bDD6X4R7ftAQlH7K_0T5HKcaToTfjQ6kSpZZRYBWQmk.cache +3 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/dA/dAosGjt-VaAhIfQVDjUoRM6eI9QUSh1E5X3gnrHu8Ww.cache +0 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/dR/dRYE4MTApQWxIGfHaTh_uT0mmSKhlas_eGk6v3IjScA.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/eI/eIEIza6BGcz1akXfzNqRW2GEIb_B4zrgDemllbjKLqI.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/f3/f3IV7AH-agFherPIRg6gz-gH_q-pbMlmZYvwA-wgh28.cache +0 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/hC/hCBrZ9RI110j1EhVdHOP-z9uOZwRm9UvutWo6eY1N_g.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/iT/iThi-stKgqJGA0IjU1RUrH30vN1eQNdVqLgVCK224mI.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/lx/lxV4gmPmZnPnnIMP-IREWrSMXIZM15bHONEqvOQe550.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/mS/mSro6DRbSWbZLjFnik8cEUvxGkkHnx30jmzgf90kWqw.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/n_/n_xYqQYhwEMQknb3jFQnjlxxBE9TzMNHCdJ-bEyZFIw.cache +2 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/ne/neMAKY2HHX-jQtV34JCN-wAv1gZ4dBtdikwxulpNIU4.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/nx/nxTv3sKVUQZADJyM3dPaVmUA78MIsMLD_K279yN_GsI.cache +2 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/oE/oELcpQtiEEZd7OlWIFZoxZmXO6i_0KQDJ9gSO8IMrAo.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/oJ/oJN9HcCgMMjADHFGldRpNYSVpaR5KCRFVjou3lEGP_o.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/qP/qPmv5snMrDw830S6hSICDcnIy7kVEWoFKXhGKT38lG4.cache +2 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/rD/rDC4aip_9aDeTYE-ixXTrw4TblEowO3UGk8BhYb0UXQ.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/rG/rG5N7yI8mYTZmoFfvUWEF8AwRkSz7iwzbzjZgtyD-6Y.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/rz/rzYbqBDzAezz5y7RBSX5kN3TmuBZYZzvh4AXBe6I1OQ.cache +2 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/uX/uXdmeUJXaGu-MF3ntZ6-oMn3I-G9Ub6r2UZzqMnqIyU.cache +2 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/uc/uc9nNzmH9YYkXWiQWt8sLWG3L6bnPakFQd3qAj7GI8Q.cache +0 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/wa/waRa6Y4GPI3rPY6lN66-DRb7GRW_AQcee1TP2qFEZzI.cache +0 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/x-/x-CSdYi9brwT6G4vAolSeuvGSaszo1oumOyPyfno7Zk.cache +0 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/x7/x7PYh8DJvPykcEqpVab2vcY9-GFz-3cqtoMlRAu94Uc.cache +2 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/xB/xBNFQ5zX18WjcjNby1R4X3UlLjHy1vAKBCFGDpHMpQE.cache +1 -0
- data/spec/test_app/tmp/cache/assets/sprockets/v3.0/xp/xpdRk6Yq3nW29DONCODCnLPuF9MWzGSavMHHQSUshjQ.cache +1 -0
- metadata +408 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 2ee4ecf0f90a56fc5b2fc704d5c83c9131cd4b8f
|
|
4
|
+
data.tar.gz: 61a96f9affcbd9871f76b5f0091013948326d27d
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 8f1f38c587b068cb74c95d984f4e13fdb90fbb775249ee3062f67be2cd29628befecd4dc4ec11168353cebb2c1728d3eb7f14ba7d2c62384ba2e323ee8b351e8
|
|
7
|
+
data.tar.gz: 597048168233919337459e88dd12bf9b2845771149695bc341dc6d9cbcc665d170fee9dc34a29e2d45f1033419c2b5cc156c23f07c5bf3bd86f99fe5ffefa698
|
data/MIT-LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Copyright 2016 julien
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
a copy of this software and associated documentation files (the
|
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be
|
|
12
|
+
included in all copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# KnowMore
|
|
2
|
+
|
|
3
|
+
This gem aims to provide a general questionnaire scaffold, with which you can quickly make you own questionnaire page.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
This is a Rails-based gem. It can only work with you Rails application.
|
|
8
|
+
Add this line to your application's Gemfile:
|
|
9
|
+
|
|
10
|
+
```ruby
|
|
11
|
+
gem 'know_more'
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
And then execute:
|
|
15
|
+
```bash
|
|
16
|
+
$ bundle install
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Or install it yourself as:
|
|
20
|
+
```bash
|
|
21
|
+
$ gem install know_more
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Usage
|
|
25
|
+
How to use KnowMore to generate questionnaire scaffold to you?
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
rails g know_more:init
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
This will generate a initializer file, where you can config the questionnaire steps and the url to go when questionnaire is finished
|
|
32
|
+
|
|
33
|
+
Configure the the initializer file `config/initializers/know\_more.rb`
|
|
34
|
+
|
|
35
|
+
Then run the install generator, which will give you templates, controller concerns, model and migration file.
|
|
36
|
+
|
|
37
|
+
```sh
|
|
38
|
+
rails g know_more:install MODEL
|
|
39
|
+
```
|
|
40
|
+
This will generate template with erb engine, you can use `--haml` to generate haml template
|
|
41
|
+
|
|
42
|
+
The argument MODEL indicates the questionnaire model name
|
|
43
|
+
|
|
44
|
+
It will also create a migration, you can add other attribute to this migration
|
|
45
|
+
|
|
46
|
+
### What the generated files used for
|
|
47
|
+
1. `app/controllers/concerns/know_more/questionnaire_controller_concerns.rb`
|
|
48
|
+
|
|
49
|
+
This file is included by the QuestionnaireController(in the gem), you can add the behaviour
|
|
50
|
+
that you want to do in each step
|
|
51
|
+
|
|
52
|
+
Here is an example:
|
|
53
|
+
```rb
|
|
54
|
+
|
|
55
|
+
module KnowMore
|
|
56
|
+
# this module is used to define the functions
|
|
57
|
+
# that will actually run in the KnowMore/QuestionnaireController
|
|
58
|
+
module QuestionnaireControllerConcerns
|
|
59
|
+
def self.included(base)
|
|
60
|
+
# define the behaviour when included
|
|
61
|
+
base.before_action :set_questionnaire
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# _stepN function will be called by questionnaire#stepN
|
|
65
|
+
|
|
66
|
+
def _step1
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def _step1_update
|
|
70
|
+
@questionnaire.update(questionnaire_params)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def _step2
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def _step2_update
|
|
77
|
+
@questionnaire.update(questionnaire_params)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
private
|
|
81
|
+
def set_questionnaire
|
|
82
|
+
@questionnaire = current_questionnaire
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def questionnaire_params
|
|
86
|
+
params.require(:questionnaire).permit(:attribute1, :attribute2, :attribute3)
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
```
|
|
91
|
+
2. `app/models/MODEL.rb`
|
|
92
|
+
This is the questionnaire model, it has an attribute progress which records which step the client was on.
|
|
93
|
+
Cooperating with `require_questionnaire!`, you can force your client to continue with the previous questionnaire.
|
|
94
|
+
|
|
95
|
+
Then include the module KnowMore::ControllerHelpers into your ApplicationController or BaseController
|
|
96
|
+
and implement your own `current_questionnaire`
|
|
97
|
+
|
|
98
|
+
```rb
|
|
99
|
+
class ApplicationController < ActionController::Base
|
|
100
|
+
include KnowMore::ControllerHelpers
|
|
101
|
+
|
|
102
|
+
def current_questionnaire
|
|
103
|
+
# your implementation
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Notice
|
|
109
|
+
|
|
110
|
+
1. The questionnaire returned by current\_questionnaire should be created at first.
|
|
111
|
+
Because the process of doing questionnaire is only editing
|
|
112
|
+
|
|
113
|
+
2. In the `KnowMore::ControllerHelpers`, it provide a helper function `require_questionnaire!`, it could force user to finish questionnaire before going to a controller
|
|
114
|
+
by redirecting the user to the last step of the questionnaire
|
|
115
|
+
```rb
|
|
116
|
+
before_action :require_questionnaire!
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Todo
|
|
120
|
+
|
|
121
|
+
1. add welcome page configuration
|
|
122
|
+
2. allow copy the controller to user app so that user can modify the questionnaire controller
|
|
123
|
+
4. support rename step
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
## Contributing
|
|
127
|
+
Contribution directions go here.
|
|
128
|
+
|
|
129
|
+
## License
|
|
130
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
begin
|
|
2
|
+
require 'bundler/setup'
|
|
3
|
+
rescue LoadError
|
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
require 'rdoc/task'
|
|
8
|
+
|
|
9
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
|
10
|
+
rdoc.rdoc_dir = 'rdoc'
|
|
11
|
+
rdoc.title = 'KnowMore'
|
|
12
|
+
rdoc.options << '--line-numbers'
|
|
13
|
+
rdoc.rdoc_files.include('README.md')
|
|
14
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
APP_RAKEFILE = File.expand_path("../spec/test_app/Rakefile", __FILE__)
|
|
18
|
+
load 'rails/tasks/engine.rake'
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
load 'rails/tasks/statistics.rake'
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
require 'bundler/gem_tasks'
|
|
26
|
+
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
|
2
|
+
// listed below.
|
|
3
|
+
//
|
|
4
|
+
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
|
5
|
+
// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
|
|
6
|
+
//
|
|
7
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
|
8
|
+
// compiled file. JavaScript code in this file should be added after the last require_* statement.
|
|
9
|
+
//
|
|
10
|
+
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
|
|
11
|
+
// about supported directives.
|
|
12
|
+
//
|
|
13
|
+
//= require_tree .
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
|
3
|
+
* listed below.
|
|
4
|
+
*
|
|
5
|
+
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
|
6
|
+
* or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
|
|
7
|
+
*
|
|
8
|
+
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
|
|
9
|
+
* compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
|
|
10
|
+
* files in this directory. Styles in this file should be added after the last require_* statement.
|
|
11
|
+
* It is generally better to create a new file per style scope.
|
|
12
|
+
*
|
|
13
|
+
*= require_tree .
|
|
14
|
+
*= require_self
|
|
15
|
+
*/
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module KnowMore
|
|
2
|
+
module ControllerHelpers
|
|
3
|
+
def current_questionnaire
|
|
4
|
+
raise 'You must implement current_questionnaire in your controller'
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def require_questionnaire!
|
|
8
|
+
return if current_questionnaire.nil?
|
|
9
|
+
unless current_questionnaire.done?
|
|
10
|
+
redirect_to know_more.send("questionnaire_#{current_questionnaire.progress}_url"), status: :see_other
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
require "#{Rails.root}/app/controllers/concerns/know_more/questionnaire_controller_concerns.rb"
|
|
2
|
+
|
|
3
|
+
module KnowMore
|
|
4
|
+
class QuestionnaireController < ::ApplicationController
|
|
5
|
+
include QuestionnaireControllerConcerns
|
|
6
|
+
|
|
7
|
+
KnowMore.config.pages.times do |n|
|
|
8
|
+
step_index = n + 1
|
|
9
|
+
|
|
10
|
+
# define the new methods
|
|
11
|
+
define_method "step#{step_index}" do
|
|
12
|
+
set_current_status(step_index) if current_questionnaire.progress != "step#{step_index}"
|
|
13
|
+
self.send("_step#{step_index}")
|
|
14
|
+
render "know_more/questionnaire/step#{step_index}"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# define the update methods
|
|
18
|
+
define_method "step#{step_index}_update" do
|
|
19
|
+
self.send("_step#{step_index}_update")
|
|
20
|
+
|
|
21
|
+
if params[:direction] == 'previous'
|
|
22
|
+
i = step_index - 1
|
|
23
|
+
redirect_to self.send("questionnaire_step#{i}_url"), status: :see_other if i > 0
|
|
24
|
+
else # default is go to the next page
|
|
25
|
+
i = step_index + 1
|
|
26
|
+
# for the last step, set questionnaire progress to be done
|
|
27
|
+
# and go the config.redirect_url
|
|
28
|
+
if step_index == KnowMore.config.pages
|
|
29
|
+
current_questionnaire.done!
|
|
30
|
+
redirect_to KnowMore.config.redirect_url
|
|
31
|
+
else
|
|
32
|
+
redirect_to self.send("questionnaire_step#{i}_url"), status: :see_other if i <= KnowMore.config.pages
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def set_current_status(n)
|
|
39
|
+
current_questionnaire.send("step#{n}!") unless current_questionnaire.done?
|
|
40
|
+
end
|
|
41
|
+
def set_next_status
|
|
42
|
+
unless current_questionnaire.done?
|
|
43
|
+
current_questionnaire.progress = ::Questionnaire.progresses[current_questionnaire.progress] + 1
|
|
44
|
+
current_questionnaire.save
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def set_previous_status
|
|
49
|
+
if ::Questionnaire.progresses[current_questionnaire.progress] > 0
|
|
50
|
+
current_questionnaire.progress = ::Questionnaire.progresses[current_questionnaire.progress] -1
|
|
51
|
+
current_questionnaire.save
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>Know more</title>
|
|
5
|
+
<%= stylesheet_link_tag "know_more/application", media: "all" %>
|
|
6
|
+
<%= javascript_include_tag "know_more/application" %>
|
|
7
|
+
<%= csrf_meta_tags %>
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
|
|
11
|
+
<%= yield %>
|
|
12
|
+
|
|
13
|
+
</body>
|
|
14
|
+
</html>
|
data/config/routes.rb
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
KnowMore::Engine.routes.draw do
|
|
2
|
+
KnowMore.config.pages.times do |n|
|
|
3
|
+
|
|
4
|
+
get "/questionnaire/step#{n+1}", to: "questionnaire#step#{n+1}", as: "questionnaire_step#{n+1}"
|
|
5
|
+
patch "/questionnaire/step#{n+1}", to: "questionnaire#step#{n+1}_update", as: "questionnaire_step#{n+1}_update"
|
|
6
|
+
end
|
|
7
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require 'rails/generators/base'
|
|
2
|
+
|
|
3
|
+
module KnowMore
|
|
4
|
+
class InitGenerator < Rails::Generators::Base
|
|
5
|
+
source_root File.expand_path('../templates', __FILE__)
|
|
6
|
+
desc 'Generate initializer'
|
|
7
|
+
|
|
8
|
+
def copy_initializer
|
|
9
|
+
template 'initializer.rb.erb', 'config/initializers/know_more.rb'
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require 'rails/generators/base'
|
|
2
|
+
|
|
3
|
+
module KnowMore
|
|
4
|
+
class InstallGenerator < Rails::Generators::Base
|
|
5
|
+
source_root File.expand_path('../templates', __FILE__)
|
|
6
|
+
class_option :haml, :desc => 'Generate Haml pages instead of erb', :type => :boolean
|
|
7
|
+
# class_option :slim, :desc => 'Generate Slim pages instead of erb', :type => :boolean
|
|
8
|
+
|
|
9
|
+
argument :model_name
|
|
10
|
+
|
|
11
|
+
desc 'Create views, migration and model for Rails application'
|
|
12
|
+
|
|
13
|
+
def before_all
|
|
14
|
+
@model_name = model_name.underscore
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def copy_views
|
|
18
|
+
KnowMore.config.pages.times do |n|
|
|
19
|
+
@n = n+1
|
|
20
|
+
copy_template
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def copy_concerns
|
|
25
|
+
template 'concerns.rb.erb', 'app/controllers/concerns/know_more/questionnaire_controller_concerns.rb'
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def generate_model
|
|
29
|
+
template 'models/model.rb.erb', "app/models/#{@model_name}.rb"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def generate_migration
|
|
33
|
+
template 'models/migration.rb.erb', "db/migrate/#{Time.now.utc.strftime("%Y%m%d%H%M%S")}_create_#{model_name}.rb"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
private
|
|
37
|
+
def copy_template
|
|
38
|
+
template_engine = 'erb'
|
|
39
|
+
if options.haml?
|
|
40
|
+
template_engine = 'haml'
|
|
41
|
+
end
|
|
42
|
+
template "#{template_engine}/page_template.erb", "app/views/know_more/questionnaire/step#{@n}.html.#{template_engine}"
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module KnowMore
|
|
2
|
+
# this module is used to define the functions
|
|
3
|
+
# that will actually run in the KnowMore/QuestionnaireController
|
|
4
|
+
module QuestionnaireControllerConcerns
|
|
5
|
+
def self.included(base)
|
|
6
|
+
# define the behaviour when included
|
|
7
|
+
base.before_action :set_questionnaire
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# _stepN function will be called by questionnaire#stepN
|
|
11
|
+
<% KnowMore.config.pages.times do |n| %>
|
|
12
|
+
def _step<%= n+1 %>
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def _step<%= n+1 %>_update
|
|
16
|
+
end
|
|
17
|
+
<% end %>
|
|
18
|
+
private
|
|
19
|
+
def set_questionnaire
|
|
20
|
+
@questionnaire = current_questionnaire
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|