happy_seed 0.0.19 → 0.0.21

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.
Files changed (190) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +4 -69
  3. data/bin/rails +12 -0
  4. data/bin/rspec +16 -0
  5. data/happy_seed.rb +5 -1
  6. data/happy_seed.txt +25 -18
  7. data/lib/generators/happy_seed/admin/admin_generator.rb +40 -5
  8. data/lib/generators/happy_seed/admin/templates/app/admin/campaigns.rb +10 -14
  9. data/lib/generators/happy_seed/admin/templates/app/admin/newsletter.rb +2 -2
  10. data/lib/generators/happy_seed/admin/templates/app/admin/user.rb +4 -1
  11. data/lib/generators/happy_seed/admin/templates/app/controllers/admin/stats_controller.rb +1 -1
  12. data/lib/generators/happy_seed/admin/templates/docs/README.07.admin.rdoc +33 -4
  13. data/lib/generators/happy_seed/angular_view/templates/docs/README.11.angular_view.rdoc +2 -4
  14. data/lib/generators/happy_seed/api/api_generator.rb +38 -39
  15. data/lib/generators/happy_seed/api/templates/app/controllers/api/v1/base_controller.rb +4 -5
  16. data/lib/generators/happy_seed/api/templates/app/controllers/api/v1/model_hash.rb +3 -20
  17. data/lib/generators/happy_seed/api/templates/app/controllers/api/v1/user_tokens_controller.rb +13 -36
  18. data/lib/generators/happy_seed/api/templates/app/controllers/api/v1/users_controller.rb +14 -40
  19. data/lib/generators/happy_seed/api/templates/config/initializers/apitome.rb +1 -1
  20. data/lib/generators/happy_seed/api/templates/docs/README.01.api.rdoc +4 -1
  21. data/lib/generators/happy_seed/api/templates/docs/api.md +2 -2
  22. data/lib/generators/happy_seed/api/templates/spec/acceptance/api/v1/user_tokens_spec.rb +10 -53
  23. data/lib/generators/happy_seed/api/templates/spec/acceptance/api/v1/users_spec.rb +17 -61
  24. data/lib/generators/happy_seed/base/base_generator.rb +47 -19
  25. data/lib/generators/happy_seed/base/templates/app/controllers/setup_controller.rb +1 -1
  26. data/lib/generators/happy_seed/base/templates/app/views/setup/index.html.haml +6 -3
  27. data/lib/generators/happy_seed/base/templates/application_controller.rb +1 -1
  28. data/lib/generators/happy_seed/base/templates/docs/README.00.base.rdoc +3 -3
  29. data/lib/generators/happy_seed/bootstrap/bootstrap_generator.rb +5 -2
  30. data/lib/generators/happy_seed/bootstrap/templates/app/assets/stylesheets/application.scss +5 -1
  31. data/lib/generators/happy_seed/bootstrap/templates/app/assets/stylesheets/components/_profile_panels.scss +62 -0
  32. data/lib/generators/happy_seed/bootstrap/templates/app/assets/stylesheets/components/_slideup_header.scss +51 -0
  33. data/lib/generators/happy_seed/bootstrap/templates/app/assets/stylesheets/shared/_grid.scss +0 -12
  34. data/lib/generators/happy_seed/bootstrap/templates/app/views/application/_javascripts.html.haml +7 -4
  35. data/lib/generators/happy_seed/bootstrap/templates/docs/README.01.bootstrap.rdoc +3 -0
  36. data/lib/generators/happy_seed/ckeditor/ckeditor_generator.rb +31 -0
  37. data/lib/generators/happy_seed/ckeditor/templates/docs/README.01.ckeditor.rdoc +35 -0
  38. data/lib/generators/happy_seed/devise/devise_generator.rb +12 -19
  39. data/lib/generators/happy_seed/devise/templates/app/views/devise/confirmations/new.html.haml +17 -0
  40. data/lib/generators/happy_seed/devise/templates/app/views/devise/mailer/confirmation_instructions.html.erb +14 -0
  41. data/lib/generators/happy_seed/devise/templates/app/views/devise/mailer/confirmation_instructions.text.rhtml +7 -0
  42. data/lib/generators/happy_seed/devise/templates/app/views/devise/mailer/password_change.html.erb +3 -0
  43. data/lib/generators/happy_seed/devise/templates/app/views/devise/mailer/reset_password_instructions.html.erb +15 -0
  44. data/lib/generators/happy_seed/devise/templates/app/views/devise/mailer/reset_password_instructions.text.erb +11 -0
  45. data/lib/generators/happy_seed/devise/templates/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  46. data/lib/generators/happy_seed/devise/templates/app/views/devise/passwords/edit.html.haml +14 -13
  47. data/lib/generators/happy_seed/devise/templates/app/views/devise/passwords/new.html.haml +12 -16
  48. data/lib/generators/happy_seed/devise/templates/app/views/devise/registrations/edit.html.haml +28 -40
  49. data/lib/generators/happy_seed/devise/templates/app/views/devise/registrations/new.html.haml +16 -24
  50. data/lib/generators/happy_seed/devise/templates/app/views/devise/sessions/new.html.haml +13 -18
  51. data/lib/generators/happy_seed/devise/templates/app/views/devise/shared/_links.html.erb +25 -0
  52. data/lib/generators/happy_seed/devise/templates/app/views/devise/unlocks/new.html.erb +16 -0
  53. data/lib/generators/happy_seed/devise/templates/docs/README.03.devise.rdoc +2 -2
  54. data/lib/generators/happy_seed/devise/templates/spec/factories/users.rb +5 -4
  55. data/lib/generators/happy_seed/devise/templates/spec/features/registration_spec.rb +149 -0
  56. data/lib/generators/happy_seed/devise/templates/spec/mailers/previews/devise_preview.rb +28 -0
  57. data/lib/generators/happy_seed/devise_confirmable/devise_confirmable_generator.rb +45 -0
  58. data/lib/generators/happy_seed/devise_confirmable/templates/add_confirmable_to_devise.rb +24 -0
  59. data/lib/generators/happy_seed/devise_confirmable/templates/app/controllers/confirmations_controller.rb +10 -0
  60. data/lib/generators/happy_seed/devise_confirmable/templates/app/views/devise/invitations/edit.html.haml +22 -0
  61. data/lib/generators/happy_seed/devise_confirmable/templates/app/views/devise/invitations/new.html.haml +20 -0
  62. data/lib/generators/happy_seed/devise_confirmable/templates/app/views/devise/mailer/invitation_instructions.html.erb +20 -0
  63. data/lib/generators/happy_seed/devise_confirmable/templates/docs/README.03.devise_confirmable.rdoc +23 -0
  64. data/lib/generators/happy_seed/devise_invitable/devise_invitable_generator.rb +3 -1
  65. data/lib/generators/happy_seed/devise_invitable/templates/app/views/devise/invitations/edit.html.haml +3 -2
  66. data/lib/generators/happy_seed/devise_invitable/templates/app/views/devise/invitations/new.html.haml +3 -2
  67. data/lib/generators/happy_seed/devise_invitable/templates/app/views/devise/mailer/invitation_instructions.html.erb +20 -0
  68. data/lib/generators/happy_seed/devise_invitable/templates/spec/features/invitations_spec.rb +61 -0
  69. data/lib/generators/happy_seed/facebook/facebook_generator.rb +2 -0
  70. data/lib/generators/happy_seed/facebook/templates/spec/features/facebook_registration_spec.rb +72 -0
  71. data/lib/generators/happy_seed/googleoauth/googleoauth_generator.rb +1 -1
  72. data/lib/generators/happy_seed/happy_seed_generator.rb +1 -3
  73. data/lib/generators/happy_seed/html_email/html_email_generator.rb +32 -0
  74. data/lib/generators/happy_seed/html_email/templates/app/views/layouts/mailer.html.erb +244 -0
  75. data/lib/generators/happy_seed/html_email/templates/docs/README.01.html_email.rdoc +25 -0
  76. data/lib/generators/happy_seed/omniauth/omniauth_generator.rb +4 -2
  77. data/lib/generators/happy_seed/omniauth/templates/app/controllers/omniauth_callbacks_controller.rb +3 -13
  78. data/lib/generators/happy_seed/omniauth/templates/app/models/identity.rb +13 -9
  79. data/lib/generators/happy_seed/omniauth/templates/docs/README.04.omniauth.rdoc +5 -5
  80. data/lib/generators/happy_seed/omniauth/templates/spec/factories/oauth.rb +6 -1
  81. data/lib/generators/happy_seed/omniauth/templates/spec/features/oauth_registration_spec.rb +80 -0
  82. data/lib/generators/happy_seed/omniauth/templates/spec/models/identity_spec.rb +39 -12
  83. data/lib/generators/happy_seed/omniauth/templates/{app/models/form_user.rb → user.rb} +4 -5
  84. data/lib/generators/happy_seed/plugin/plugin_generator.rb +13 -11
  85. data/lib/generators/happy_seed/react/react_generator.rb +36 -0
  86. data/lib/generators/happy_seed/react/templates/docs/README.10.react.rdoc +20 -0
  87. data/lib/generators/happy_seed/roles/roles_generator.rb +38 -0
  88. data/lib/generators/happy_seed/roles/templates/ability.rb +9 -0
  89. data/lib/generators/happy_seed/roles/templates/docs/README.03.roles.rdoc +23 -0
  90. data/lib/generators/happy_seed/simple_cms/simple_cms_generator.rb +41 -0
  91. data/lib/generators/happy_seed/simple_cms/templates/app/admin/simple_content.rb +42 -0
  92. data/lib/generators/happy_seed/simple_cms/templates/app/controllers/simple_content_controller.rb +7 -0
  93. data/lib/generators/happy_seed/simple_cms/templates/app/models/simple_content.rb +5 -0
  94. data/lib/generators/happy_seed/simple_cms/templates/app/views/splash/faq.html.haml +13 -0
  95. data/lib/generators/happy_seed/simple_cms/templates/app/views/splash/index.html.haml +79 -0
  96. data/lib/generators/happy_seed/simple_cms/templates/application_helper.rb +18 -0
  97. data/lib/generators/happy_seed/simple_cms/templates/create_simple_contents.rb +14 -0
  98. data/lib/generators/happy_seed/simple_cms/templates/docs/README.04.simple_cms.rdoc +32 -0
  99. data/lib/generators/happy_seed/simple_cms/templates/spec/factories/oauth.rb +10 -0
  100. data/lib/generators/happy_seed/simple_cms/templates/spec/features/oauth_registration_spec.rb +80 -0
  101. data/lib/generators/happy_seed/simple_cms/templates/spec/models/identity_spec.rb +49 -0
  102. data/lib/generators/happy_seed/splash/templates/app/assets/stylesheets/splash.css.scss +119 -84
  103. data/lib/generators/happy_seed/splash/templates/app/controllers/splash_controller.rb +1 -1
  104. data/lib/generators/happy_seed/splash/templates/app/views/layouts/splash.html.haml +15 -18
  105. data/lib/generators/happy_seed/splash/templates/app/views/splash/index.html.haml +54 -92
  106. data/lib/generators/happy_seed/splash/templates/docs/README.02.splash.rdoc +2 -2
  107. data/lib/generators/happy_seed/splash/templates/spec/controllers/splash_controller_spec.rb +11 -3
  108. data/lib/generators/happy_seed/static/templates/source/stylesheets/application.css.scss +1 -1
  109. data/lib/generators/happy_seed/static_blog/templates/Gemfile.lock +45 -49
  110. data/lib/generators/happy_seed/twitter/templates/spec/features/twitter_oauth_registration_spec.rb +57 -0
  111. data/lib/generators/happy_seed/twitter/twitter_generator.rb +2 -1
  112. data/lib/happy_seed/cli.rb +1 -1
  113. data/lib/happy_seed/engine.rb +12 -0
  114. data/lib/happy_seed/version.rb +1 -1
  115. data/lib/tasks/seed.rake +56 -0
  116. data/{test → spec}/dummy/Rakefile +0 -0
  117. data/spec/dummy/app/assets/config/manifest.js +5 -0
  118. data/{test → spec}/dummy/app/assets/javascripts/application.js +3 -3
  119. data/spec/dummy/app/assets/javascripts/cable.coffee +11 -0
  120. data/{test → spec}/dummy/app/assets/stylesheets/application.css +4 -4
  121. data/spec/dummy/app/channels/application_cable/channel.rb +5 -0
  122. data/spec/dummy/app/channels/application_cable/connection.rb +5 -0
  123. data/{test → spec}/dummy/app/controllers/application_controller.rb +0 -0
  124. data/{test → spec}/dummy/app/helpers/application_helper.rb +0 -0
  125. data/spec/dummy/app/jobs/application_job.rb +2 -0
  126. data/spec/dummy/app/mailers/application_mailer.rb +4 -0
  127. data/spec/dummy/app/models/application_record.rb +3 -0
  128. data/spec/dummy/app/views/layouts/application.html.erb +15 -0
  129. data/spec/dummy/app/views/layouts/mailer.html.erb +13 -0
  130. data/spec/dummy/app/views/layouts/mailer.text.erb +1 -0
  131. data/{test → spec}/dummy/bin/bundle +0 -0
  132. data/{test → spec}/dummy/bin/rails +1 -1
  133. data/{test → spec}/dummy/bin/rake +0 -0
  134. data/spec/dummy/bin/setup +34 -0
  135. data/spec/dummy/bin/update +29 -0
  136. data/spec/dummy/config.ru +8 -0
  137. data/spec/dummy/config/application.rb +21 -0
  138. data/{test → spec}/dummy/config/boot.rb +0 -0
  139. data/spec/dummy/config/cable.yml +10 -0
  140. data/{test → spec}/dummy/config/database.yml +0 -0
  141. data/{test → spec}/dummy/config/environment.rb +0 -0
  142. data/{test → spec}/dummy/config/environments/development.rb +28 -3
  143. data/{test → spec}/dummy/config/environments/production.rb +29 -24
  144. data/{test → spec}/dummy/config/environments/test.rb +6 -3
  145. data/spec/dummy/config/initializers/active_record_belongs_to_required_by_default.rb +6 -0
  146. data/spec/dummy/config/initializers/application_controller_renderer.rb +6 -0
  147. data/{test → spec}/dummy/config/initializers/assets.rb +3 -0
  148. data/{test → spec}/dummy/config/initializers/backtrace_silencers.rb +0 -0
  149. data/spec/dummy/config/initializers/callback_terminator.rb +6 -0
  150. data/{test → spec}/dummy/config/initializers/cookies_serializer.rb +3 -1
  151. data/{test → spec}/dummy/config/initializers/filter_parameter_logging.rb +0 -0
  152. data/{test → spec}/dummy/config/initializers/inflections.rb +0 -0
  153. data/{test → spec}/dummy/config/initializers/mime_types.rb +0 -0
  154. data/spec/dummy/config/initializers/per_form_csrf_tokens.rb +4 -0
  155. data/spec/dummy/config/initializers/request_forgery_protection.rb +4 -0
  156. data/{test → spec}/dummy/config/initializers/session_store.rb +0 -0
  157. data/{test → spec}/dummy/config/initializers/wrap_parameters.rb +2 -2
  158. data/{test → spec}/dummy/config/locales/en.yml +0 -0
  159. data/spec/dummy/config/puma.rb +47 -0
  160. data/spec/dummy/config/routes.rb +3 -0
  161. data/{test → spec}/dummy/config/secrets.yml +3 -3
  162. data/spec/dummy/db/schema.rb +16 -0
  163. data/{test → spec}/dummy/public/404.html +0 -0
  164. data/{test → spec}/dummy/public/422.html +0 -0
  165. data/{test → spec}/dummy/public/500.html +0 -0
  166. data/{test/dummy/public/favicon.ico → spec/dummy/public/apple-touch-icon-precomposed.png} +0 -0
  167. data/spec/dummy/public/apple-touch-icon.png +0 -0
  168. data/spec/dummy/public/favicon.ico +0 -0
  169. data/spec/rails_helper.rb +58 -0
  170. data/spec/spec_helper.rb +91 -0
  171. metadata +195 -89
  172. data/lib/generators/happy_seed/api/templates/app/controllers/api/v1/configurations_controller.rb +0 -11
  173. data/lib/generators/happy_seed/api/templates/spec/acceptance/api/v1/configurations_spec.rb +0 -21
  174. data/lib/generators/happy_seed/base/templates/config/puma.rb +0 -15
  175. data/lib/generators/happy_seed/base/templates/spec/support/controller_helpers.rb +0 -12
  176. data/lib/generators/happy_seed/bootstrap/templates/app/assets/stylesheets/sections/_profile_page.scss +0 -9
  177. data/lib/generators/happy_seed/bootstrap/templates/lib/templates/haml/scaffold/_form.html.haml +0 -5
  178. data/lib/generators/happy_seed/devise/templates/spec/features/forgot_password_spec.rb +0 -54
  179. data/lib/generators/happy_seed/devise/templates/test/mailers/previews/devise_preview.rb +0 -13
  180. data/lib/generators/happy_seed/omniauth/templates/spec/features/registration_spec.rb +0 -81
  181. data/lib/generators/happy_seed/static/templates/Gemfile.lock +0 -158
  182. data/lib/tasks/seed_tasks.rake +0 -4
  183. data/test/dummy/README.rdoc +0 -28
  184. data/test/dummy/app/views/layouts/application.html.erb +0 -14
  185. data/test/dummy/config.ru +0 -4
  186. data/test/dummy/config/application.rb +0 -23
  187. data/test/dummy/config/initializers/jazz_hands.rb +0 -5
  188. data/test/dummy/config/routes.rb +0 -56
  189. data/test/seed_test.rb +0 -7
  190. data/test/test_helper.rb +0 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7ce168810cf5914cec904a4c838472cd15dee97a
4
- data.tar.gz: 4f133d41711bf8053d618d6b096626182e4ef9e1
3
+ metadata.gz: 4c6cbf58652f4c3fafea1da8176e6f173a4fd223
4
+ data.tar.gz: 429f1707391c98c3fad657fe5bf97c40d29c2952
5
5
  SHA512:
6
- metadata.gz: b53b4d77c1df370c471a1284cd0850d41160ac145dfb0ee2e9c236a2c15c2928c4140dca171ceb6f5061a1ae196bdf0120bb0b58169f4325cb05980875fe5fcc
7
- data.tar.gz: 3239f63daa6f272e6c684a5e7b76278d1d59f98a731b2d3baa9146283da93a1c93128caa642da639adb23013b21b2e0fa6751f1a1225f520d302152fa9ab2bf2
6
+ metadata.gz: 53cdb84f1b3cc863df1a36fe5d23d8555d9d7d416c97deb8c34a55bbac8c9456831319295bfb445f1def39bbbf40beeeb69e505757d67b3eb1bbb195a6c30efa
7
+ data.tar.gz: 161929fc06b7c1d0a1afee1538f9983f44ffe03396a0d6ecb817989534bc5e253c726233098a43afe73a2e9103e27d0f1ad8b3b69769c7d23c5535d11f0aa803
data/Rakefile CHANGED
@@ -14,75 +14,10 @@ RDoc::Task.new(:rdoc) do |rdoc|
14
14
  rdoc.rdoc_files.include('lib/**/*.rb')
15
15
  end
16
16
 
17
+ # APP_RAKEFILE = File.expand_path('../spec/dummy/Rakefile', __FILE__)
18
+ # load 'rails/tasks/engine.rake'
17
19
 
18
-
20
+ load 'rails/tasks/statistics.rake'
21
+ load 'tasks/seed.rake'
19
22
 
20
23
  Bundler::GemHelper.install_tasks
21
-
22
- require 'rake/testtask'
23
-
24
- Rake::TestTask.new(:test) do |t|
25
- t.libs << 'lib'
26
- t.libs << 'test'
27
- t.pattern = 'test/**/*_test.rb'
28
- t.verbose = false
29
- end
30
-
31
-
32
- task default: :test
33
-
34
- desc "Copy readme files into the doc directory"
35
- task :sync_docs do
36
- system( "mkdir -p website/source/docs" )
37
- `find lib -name README\\* -print`.each_line do |file|
38
- file.gsub!( /\n/, "" )
39
- out = file.gsub( /.*\//, "" ).gsub( /.rdoc/, ".html.markdown" )
40
- # puts file, out
41
- system( "cp #{file} website/source/docs/#{out}" )
42
- end
43
- end
44
-
45
- desc "Generate dependancy graph"
46
- task :generator_dependancies do
47
- require 'active_support/inflector'
48
-
49
- Dir.glob( 'lib/generators/**/*_generator.rb' ).each do |f|
50
- data = File.read f
51
- # name = data.lines.select { |x| x =~ /class/ }.first.gsub( /.*class (.*?)Generator.*/m, '\1' ).underscore
52
- name = data.grep( /class/ ).first.gsub( /.*class (.*?)Generator.*/m, '\1' ).underscore
53
-
54
- if name != 'happy_seed'
55
- print = false
56
-
57
- if data.grep( /require_omniauth/ ).size > 0
58
- puts "[#{name}] -> [omniauth]"
59
- print = true
60
- end
61
-
62
- data.grep( /generate .happy_seed/ ).each do |line|
63
- dep = line.gsub( /.*happy_seed:([^"' ]*).*/m, '\1' )
64
- puts "[#{name}] -> [#{dep}]"
65
- print = true
66
- end
67
-
68
- if name == 'base'
69
- puts "[base]"
70
- print = true
71
- end
72
-
73
- if ['plugin', 'static', 'static_blog'].index( name )
74
- # puts "Skipping #{name}"
75
- print = true
76
- end
77
-
78
- puts "[#{name}] -> [base]" unless print
79
-
80
- end
81
- end
82
- end
83
-
84
- class String
85
- def grep( regex )
86
- lines.select { |x| x =~ regex }
87
- end
88
- end
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 4 gems installed from the root of your application.
3
+
4
+ ENGINE_ROOT = File.expand_path('../..', __FILE__)
5
+ ENGINE_PATH = File.expand_path('../../lib/happy_seed/engine', __FILE__)
6
+
7
+ # Set up gems listed in the Gemfile.
8
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
9
+ require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
10
+
11
+ require 'rails/all'
12
+ require 'rails/engine/commands'
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'rspec' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require "pathname"
10
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require "rubygems"
14
+ require "bundler/setup"
15
+
16
+ load Gem.bin_path("rspec-core", "rspec")
@@ -36,8 +36,11 @@ Bundler.with_clean_env do
36
36
 
37
37
  GRAPH = [
38
38
  {name: 'splash', desc: 'Basic splash page' },
39
+ {name: 'simple_cms', desc: 'Simple CMS' },
39
40
  {name: 'devise', desc: 'User profiles', subtree: [
41
+ {name: 'roles', desc: 'User roles'},
40
42
  {name: 'devise_invitable', desc: 'Invitable users'},
43
+ {name: 'devise_confirmable', desc: 'Confirmable users'},
41
44
  {name: 'facebook', desc: 'OAuth: Connect with facebook' },
42
45
  {name: 'github', desc: 'OAuth: Connect with github' },
43
46
  {name: 'googleoauth', desc: 'OAuth: Connect wuth google' },
@@ -46,7 +49,8 @@ Bundler.with_clean_env do
46
49
  ]},
47
50
  {name: 'admin', desc: 'Active Admin for back office adminstration' },
48
51
  {name: 'api', desc: 'Provide API for mobile device (Beta)' },
49
- {name: 'angular', desc: 'Setup an angular application' },
52
+ {name: 'react', desc: 'Setup react-on-rails' },
53
+ {name: 'angular_install', desc: 'Setup an angular application' },
50
54
  {name: 'jazz_hands', desc: 'Better Rails Console tools' }
51
55
  ]
52
56
 
@@ -24,24 +24,31 @@
24
24
  `.-:::::::::::::-.``
25
25
  ```````
26
26
 
27
- ┌───────┐ ┌────────────────┐
28
- │ api │ ┌──│devise_invitable│
29
- ┌────────────┐ └───────┘ └────────────────┘
30
- ┌───│ jazz_hands │ │ ┌────────┐
31
- └────────────┘ ▼ ┌──│facebook│
32
- ┌────────────┐ ┌────────┐ ┌────────┐└────────┘
33
- ├───│ admin ┌──│ devise │◀─┴──│omniauth│◀─┤ ┌───────┐
34
- └────────────┘ └────────┘ └────────┘ ├──│github │
35
- ┌──────┐ ┌────────────┐ ┌────────┐ │ └───────┘
36
- base │◀─┼───│ bootstrap │◀─┴──│ splash ┌──────────┐
37
- └──────┘ └────────────┘ └────────┘ ├──│googleauth│
38
- ┌────────────┐ ┌───────────────┐ └──────────┘
39
- └───│angular_view│◀────│angular_install ┌─────────┐
40
- └────────────┘ └───────────────┘ ├──│instagram
41
- └─────────┘
42
- ┌───────┐
43
- └──│twitter
44
- └───────┘
27
+
28
+ ┌────────────────────┐
29
+ ┌──│ devise_confirmable
30
+ ┌───────────┐ └────────────────────┘
31
+ ┌───│ ckeditor ┌───────┐ ┌──────────────────┐
32
+ └───────────┘ api├──│ devise_invitable │
33
+ ┌────────────┐ └───────┘ └──────────────────┘
34
+ ├───│ jazz_hands ┌───────┐ ┌────────────┐
35
+ └────────────┘ ▼ ├──│ roles │◀─────│ admin
36
+ ┌───────────┐ ┌────────┐└───────┘ └────────────┘
37
+ ├───│ htmlemail ┌──│ devise │◀─┤ ┌────────┐
38
+ └───────────┘ └────────┘ │ ┌────────┐ ┌──│facebook│
39
+ ┌──────┐ ┌────────────┐ └──│omniauth│◀─┤ └────────┘
40
+ base │◀─┼───│ bootstrap │◀─┤ └────────┘ │ ┌───────┐
41
+ └──────┘ └────────────┘ │ ┌────────┐ ├──│github │
42
+ ┌────────────┐ └──│ splash │◀─┐ │ └───────┘
43
+ ├───│ react └────────┘ │ │ ┌──────────┐
44
+ │ └────────────┘ │ ├──│googleauth│
45
+ │ ┌────────────┐ ┌───────────┐ │ └──────────┘
46
+ └───│angular_view│◀──┐ │simple_cms │ │ ┌─────────┐
47
+ └────────────┘ │ └───────────┘ ├──│instagram│
48
+ │ │ └─────────┘
49
+ ┌───────────────┐ │ ┌───────┐
50
+ │angular_install│ └──│twitter│
51
+ └───────────────┘ └───────┘
45
52
 
46
53
  Welcome to Seed. Above is the list of generators and how they interact
47
54
  with each other.
@@ -1,4 +1,7 @@
1
1
  require 'generators/happy_seed/happy_seed_generator'
2
+ require 'generators/happy_seed/roles/roles_generator'
3
+ require 'generators/happy_seed/ckeditor/ckeditor_generator'
4
+
2
5
 
3
6
  module HappySeed
4
7
  module Generators
@@ -12,16 +15,35 @@ module HappySeed
12
15
  def install_active_admin
13
16
  return if already_installed
14
17
 
15
- gem 'devise'
16
- gem 'activeadmin', github: 'activeadmin', branch: 'master'
17
- gem 'inherited_resources' # , github: 'josevalim/inherited_resources', branch: 'rails-4-2'
18
+ seperate_admin_user = yes? "Install seperate AdminUser (otherwise add role to User)?"
19
+
20
+ if !seperate_admin_user
21
+ require_generator RolesGenerator
22
+ end
23
+
24
+ require_generator CkeditorGenerator
25
+
26
+ gem 'activeadmin', github: 'activeadmin'
27
+ gem 'inherited_resources', github: 'activeadmin/inherited_resources'
28
+ gem 'ransack', github: 'activerecord-hackery/ransack'
29
+ gem 'kaminari', github: 'amatsuda/kaminari', branch: '0-17-stable'
30
+ gem 'formtastic', github: 'justinfrench/formtastic'
31
+ gem 'draper', github: 'audionerd/draper', branch: 'rails5', ref: 'e816e0e587'
32
+
33
+ # To fix a Draper deprecation error
34
+ gem 'activemodel-serializers-xml', github: 'rails/activemodel-serializers-xml'
35
+
18
36
  gem 'dateslices'
19
37
 
20
38
  Bundler.with_clean_env do
21
39
  run "bundle install --without production"
22
40
  end
23
41
 
24
- generate 'active_admin:install'
42
+ if seperate_admin_user
43
+ generate 'active_admin:install'
44
+ else
45
+ generate 'active_admin:install --skip-users'
46
+ end
25
47
 
26
48
  remove_file "app/admin/dashboard.rb"
27
49
  remove_file "spec/factories/admin_users.rb"
@@ -31,7 +53,17 @@ module HappySeed
31
53
  directory "spec"
32
54
  directory "vendor"
33
55
 
34
- insert_into_file "config/initializers/active_admin.rb", " config.register_javascript '//www.google.com/jsapi'\n config.register_javascript 'chartkick.js'\n", :after => "To load a javascript file:\n"
56
+ insert_into_file "config/initializers/active_admin.rb", " config.register_javascript '//www.google.com/jsapi'\n config.register_javascript 'chartkick.js'\n config.register_javascript 'ckeditor/init.js'", :after => "To load a javascript file:\n"
57
+
58
+ if !seperate_admin_user
59
+ gsub_file "config/initializers/active_admin.rb", /# config.authentication_method.*/, "config.authentication_method = :authenticate_user!"
60
+ gsub_file "config/initializers/active_admin.rb", /# config.authorization_adapter = ActiveAdmin::CanCanAdapter/, "config.authorization_adapter = ActiveAdmin::CanCanAdapter"
61
+ gsub_file "config/initializers/active_admin.rb", /# config.on_unauthorized_access = :access_denied/, "config.on_unauthorized_access = :access_denied"
62
+ gsub_file "config/initializers/active_admin.rb", /# config.current_user_method.*/, "config.current_user_method = :current_user"
63
+ gsub_file "config/initializers/active_admin.rb", /config.logout_link_path.*/, "config.logout_link_path = :destroy_user_session_path"
64
+ gsub_file "config/initializers/active_admin.rb", /# config.logout_link_method.*/, "config.logout_link_method = :delete"
65
+ end
66
+
35
67
  append_to_file "config/initializers/assets.rb", "\nRails.application.config.assets.precompile += %w( chartkick.js )\n"
36
68
 
37
69
  inject_into_file 'config/application.rb', after: "config.generators do |g|\n" do <<-'RUBY'
@@ -39,6 +71,9 @@ module HappySeed
39
71
  RUBY
40
72
  end
41
73
 
74
+ inject_into_file "config/environments/production.rb", " config.assets.precompile += Ckeditor.assets\n config.assets.precompile += ['ckeditor/*']\n", before: "end\n"
75
+ append_to_file "app/assets/stylesheets/active_admin.scss", "\n.cke_chrome {\n width: 79.5% !important;\n overflow: hidden;\n}"
76
+
42
77
  route <<-'ROUTE'
43
78
  namespace :admin do
44
79
  # get "/stats" => "stats#stats"
@@ -4,28 +4,24 @@ if !ENV['MAILCHIMP_API_KEY'].blank?
4
4
 
5
5
  content do
6
6
  @c = {}
7
+ gb = Gibbon::Request.new(api_key: ENV['MAILCHIMP_API_KEY'])
7
8
  if params[:list_id]
8
- @c = Gibbon::API.new.campaigns.list( :filters => { :list_id => params[:list_id] } )
9
+ @c = gb.campaigns.retrieve( params: {list_id: params[:list_id]} )
9
10
  elsif params[:campaign_id]
10
- @c = Gibbon::API.new.campaigns.list( :filters => { :campaign_id => params[:campaign_id] } )
11
+ @c = gb.campaigns.retrieve( params: {campaign_id: params[:campaign_id]} )
11
12
  else
12
- @c = Gibbon::API.new.campaigns.list
13
+ @c = gb.campaigns.retrieve
13
14
  end
14
15
 
15
- data = @c['data'].each do |d|
16
- d['summary'] = {} if d['summary'].is_a? Array
17
- end
18
- table_for data do #.sort { |a,b| a['send_time'] <=> b['send_time'] } do
19
- column( "list_id" ) { |d| d['list_id']}
20
- column( "title" ) { |d| d['title'] }
16
+ table_for @c['campaigns'] do
17
+ column( "subject" ) { |d| d['settings']['subject_line'] }
18
+ column( "title" ) { |d| d['settings']['title'] }
21
19
  column( "created" ) { |d| d['create_time'] }
22
20
  column( "sent" ) { |d| d['send_time'] }
23
- column( "subject" ) { |d| d['subject'] }
24
21
  column( "emails sent") { |d| d['emails_sent'] }
25
- column( "opens" ) { |d| d['summary']['opens'] }
26
- column( "clicks" ) { |d| d['summary']['clicks'] }
27
- column( "UUser Clicks" ) { |d| d['summary']['users_who_clicked'] }
28
- column( "last click" ) { |d| d['summary']['last_click'] }
22
+ column( "opens" ) { |d| d['report_summary'] && d['report_summary']['opens'] }
23
+ column( "clicks" ) { |d| d['report_summary'] && d['report_summary']['clicks'] }
24
+ column( "unique_opens" ) { |d| d['report_summary'] && d['report_summary']['unique_opens'] }
29
25
  end
30
26
  end
31
27
 
@@ -2,10 +2,10 @@ if !ENV['MAILCHIMP_API_KEY'].blank?
2
2
  ActiveAdmin.register_page "Newsletter" do
3
3
  content do
4
4
  if !params[:list_id]
5
- @lists = Gibbon::API.new.lists.list
5
+ @lists = Gibbon::Request.new(api_key: ENV['MAILCHIMP_API_KEY']).lists.retrieve
6
6
 
7
7
  panel "MailChimp Lists" do
8
- table_for @lists['data'] do
8
+ table_for @lists['lists'] do
9
9
  column( "name" ) { |d| d['name'] }
10
10
  column( "members" ) { |d| d['stats']['member_count'] }
11
11
  column( "unsubscribe_count") { |d| d["stats"]["unsubscribe_count"] }
@@ -1 +1,4 @@
1
- ActiveAdmin.register User
1
+ begin
2
+ ActiveAdmin.register User
3
+ rescue NameError
4
+ end
@@ -1,5 +1,5 @@
1
1
  class Admin::StatsController < ApplicationController
2
- before_filter :authenticate_admin_user!
2
+ before_action :authenticate_admin_user!
3
3
 
4
4
  def stats
5
5
  if params[:scope].blank?
@@ -7,12 +7,15 @@ The happy_seed bootstrap generator
7
7
 
8
8
  * Installs active admin from git
9
9
  * Runs the active_admin:install generator
10
- * Creates AdminUser model
10
+ * Uses user roles and cancancan to control access
11
+ * Optionally creates a seperate AdminUser model
11
12
  * Creates basic newsletter/campaign admin panel if `MAILCHIMP_API_KEY` is active
12
13
 
13
14
  ### Why do you want this?
14
15
 
15
- ActiveAdmin, for all of it's flaws, including out of date documentation, is a nice way to put a back-end on an application.
16
+ ActiveAdmin is a great way to create backend admin tools. For very complex workflows it may make sense to go custom, but for quickly adding some crud operations it can't be beat.
17
+
18
+ If you choose to create a seperate AdminUser there is a seperate user universe for admins. If you want to use the existing devise users, then the happy_seed:roles generator is run and ActiveAdmin is configured to use CanCanCan for all of the models. This lets you control admin access based upon the `abilities.rb` class.
16
19
 
17
20
  ### Environment Variables
18
21
 
@@ -20,6 +23,32 @@ na
20
23
 
21
24
  ### What needs to be done?
22
25
 
23
- Add models to the dashboard.
26
+ Add models to the dashboard by editing app/admin/dashboard.rb to lay out the dashboard, and app/controllers/admin/stats_controller.rb to provide the data.
27
+
28
+
29
+ ### Example of using rich text editor
30
+
31
+ To easily enable editing html content in ActiveAdmin we've included the ckeditor. Here's a quick example of how you'd add this to the admin tool.
32
+
33
+ First create a model:
34
+
35
+ ```
36
+ rails g scaffold faq title:string body:text position:integer
37
+ ```
38
+
39
+ Then create `app/admin/faq.rb`, and define the fields for the form:
40
+
41
+ ActiveAdmin.register Faq do
42
+ permit_params :title, :body, :position
43
+
44
+ form do |f|
45
+ f.semantic_errors # shows errors on :base
46
+ f.inputs do
47
+ f.input :title
48
+ f.input :body, as: :ckeditor, input_html: { ckeditor: { height: 400 } } # builds an input field for every attribute
49
+ f.input :position
50
+ end
51
+ f.actions # adds the 'Submit' and 'Cancel' buttons
52
+ end
53
+ end
24
54
 
25
- (the happy_Seed stats module is in development)
@@ -11,9 +11,7 @@ The view generator adds
11
11
 
12
12
  ### Why do you want this?
13
13
 
14
- Getting angular to work in rails is a pain, especially when working around the asset pipeline. Figuring out how to get the controller views to be served correctly is just a hassle, and this gives a model for doing that as well as dealing with forgery.
15
-
16
- The philosophy here is that all of the angular html templates are stored out of the assets/templates directory.
14
+ This sets up your angular views for you in a quick and easy way.
17
15
 
18
16
  ### Environment Variables
19
17
 
@@ -21,4 +19,4 @@ na
21
19
 
22
20
  ### What needs to be done?
23
21
 
24
- na
22
+ When you have set up your project and you want to add a new angular view, just run `rails g happy_seed:angular_view <NAME_OF VIEW>`.
@@ -9,84 +9,84 @@ module HappySeed
9
9
  gem_available? 'apitome'
10
10
  end
11
11
 
12
- def install_device_invitable
12
+ def install_api
13
13
  return if already_installed
14
14
 
15
- require_generator DeviseGenerator
16
-
17
15
  gem 'apitome'
18
- gem 'rspec_api_documentation', :groups => [:development, :test]
16
+ gem_group :development, :test do
17
+ gem 'rspec-rails'
18
+ gem 'factory_girl_rails'
19
+ gem 'faker'
20
+ gem 'rspec_api_documentation'
21
+ end
22
+
23
+ generate 'rspec:install'
24
+
25
+ require_generator DeviseGenerator
19
26
 
20
27
  Bundler.with_clean_env do
21
- run "bundle install --without production"
28
+ run 'bundle install --without production'
22
29
  end
23
30
 
24
- generate "model user_token user:belongs_to:index token installation_identifier:index push_token locked:boolean form_factor os"
25
- generate "migration add_user_tokens_count_to_users user_tokens_count:integer"
31
+ generate 'model UserToken user:belongs_to access_token:string'
26
32
 
27
33
  directory '.'
28
34
 
29
- route " scope module: :api, defaults: {format: :json} do
35
+ route "scope module: :api, defaults: {format: :json} do
30
36
  %w(v1).each do |version|
31
37
  namespace version.to_sym do
32
- resource :configuration, only: %w(show)
33
- resource :user_token, path: :token, only: %w(create destroy update)
34
38
  resources :users, only: %w(create update show) do
35
- resources :questions, only: %w(index)
36
39
  collection do
37
40
  post :forgot_password
38
41
  put :reset_password
39
42
  end
40
43
  end
44
+ resource :user_token, path: :token, only: %w(create destroy)
41
45
  end
42
46
  end
43
- end
44
- "
45
- inject_into_class "app/models/user.rb", "User", " has_many :user_tokens, dependent: :destroy\n"
47
+ end\n"
46
48
 
47
- gsub_file "app/models/user_token.rb", /belongs_to :user\n/, " validates :user, presence: true
48
- validates :token, presence: true, uniqueness: {case_sensitive: false}
49
- validates :installation_identifier, presence: true, uniqueness: {case_sensitive: false, scope: %w(user_id)}
50
- validates :push_token, allow_blank: true, uniqueness: {case_sensitive: false}
51
- validates :form_factor, allow_blank: true, inclusion: {in: %w(smartphone tablet10 tablet7 desktop)}
52
- validates :os, allow_blank: true, inclusion: {in: %w(ios android bb wp7)}
49
+ inject_into_class 'app/models/user.rb', 'User' do
50
+ ' has_many :user_tokens, dependent: :destroy'
51
+ end
53
52
 
54
- scope :with_push_token, -> { where.not push_token: nil }
53
+ gsub_file 'app/models/user_token.rb', /belongs_to :user\n/, "belongs_to :user, required: true
55
54
 
56
- belongs_to :user, counter_cache: true
55
+ validates :access_token, presence: true, uniqueness: {case_sensitive: false}
57
56
 
58
- before_validation :set_token
57
+ before_validation :set_access_token
59
58
 
60
59
  private
61
60
 
62
- def set_token
63
- self.token ||= loop do
64
- token = Devise.friendly_token.downcase
65
- break token unless self.class.where(token: token).first.present?
61
+ def set_access_token
62
+ self.access_token ||= loop do
63
+ random_string = SecureRandom.hex(4).downcase
64
+ break random_string if self.class.where(access_token: random_string).empty?
66
65
  end
67
- end
68
- "
66
+ end\n"
69
67
 
70
- prepend_to_file 'spec/spec_helper.rb', "require 'rspec_api_documentation'\n"
71
- append_to_file 'spec/spec_helper.rb', "\nRspecApiDocumentation.configure do |config|
68
+ append_to_file 'spec/rails_helper.rb', "\nRspecApiDocumentation.configure do |config|
72
69
  config.format = :json
73
- config.docs_dir = Pathname( 'docs/api' )
70
+ config.docs_dir = Pathname('docs/api')
74
71
 
75
72
  config.request_headers_to_include = %w(Authorization)
76
73
  config.response_headers_to_include = %w()
77
74
  end"
78
75
 
79
- append_to_file 'spec/factories/users.rb', "\nFactoryGirl.define do
80
- factory :user_with_token, parent: :user do
76
+ insert_into_file 'spec/factories/users.rb', before: /end\s*\z/ do
77
+ "\n factory :user_with_token, parent: :user do
81
78
  after :build do |user, evaluator|
82
- user.user_tokens.build installation_identifier: Faker::Lorem.characters(10), push_token: Faker::Lorem.characters(10),
83
- form_factor: %w(smartphone tablet10 tablet7 desktop).sample, os: %w(ios android bb wp7).sample
79
+ user.user_tokens.build
84
80
  end
85
- end
86
- end"
81
+ end\n"
82
+ end
83
+
84
+ rake 'db:migrate:reset', env: 'test'
85
+ rake 'docs:generate', env: 'test'
87
86
  end
88
87
 
89
88
  private
89
+
90
90
  def gem_available?(name)
91
91
  Gem::Specification.find_by_name(name)
92
92
  rescue Gem::LoadError
@@ -94,7 +94,6 @@ end"
94
94
  rescue
95
95
  Gem.available?(name)
96
96
  end
97
-
98
97
  end
99
98
  end
100
99
  end