barkest_core 1.5.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (308) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/Gemfile +22 -0
  4. data/Gemfile.lock +254 -0
  5. data/MIT-LICENSE +20 -0
  6. data/README.md +364 -0
  7. data/Rakefile +37 -0
  8. data/app/assets/fonts/barkest_core/ArchivoNarrow-Bold.ttf +0 -0
  9. data/app/assets/fonts/barkest_core/ArchivoNarrow-BoldItalic.ttf +0 -0
  10. data/app/assets/fonts/barkest_core/ArchivoNarrow-Italic.ttf +0 -0
  11. data/app/assets/fonts/barkest_core/ArchivoNarrow-Regular.ttf +0 -0
  12. data/app/assets/images/barkest_core/.keep +0 -0
  13. data/app/assets/images/barkest_core/barcode-B.svg +181 -0
  14. data/app/assets/javascripts/barkest_core/.keep +0 -0
  15. data/app/assets/javascripts/barkest_core/application.js +22 -0
  16. data/app/assets/javascripts/barkest_core/bootstrap-datepicker.js +1800 -0
  17. data/app/assets/javascripts/barkest_core/field_init.js +7 -0
  18. data/app/assets/javascripts/barkest_core/jquery.doubleScroll.js +112 -0
  19. data/app/assets/javascripts/barkest_core/masked_edit.js +25 -0
  20. data/app/assets/javascripts/barkest_core/system_status.js.erb +201 -0
  21. data/app/assets/stylesheets/barkest_core/.keep +0 -0
  22. data/app/assets/stylesheets/barkest_core/application.css +17 -0
  23. data/app/assets/stylesheets/barkest_core/custom.css.scss +264 -0
  24. data/app/assets/stylesheets/barkest_core/datepicker3.css +790 -0
  25. data/app/controllers/.keep +0 -0
  26. data/app/controllers/access_groups_controller.rb +74 -0
  27. data/app/controllers/account_activations_controller.rb +29 -0
  28. data/app/controllers/application_controller.rb +5 -0
  29. data/app/controllers/barkest_core/application_controller_base.rb +113 -0
  30. data/app/controllers/barkest_core/engine_controller_base.rb +15 -0
  31. data/app/controllers/barkest_core/testsub_controller.rb +21 -0
  32. data/app/controllers/contact_controller.rb +32 -0
  33. data/app/controllers/log_view_controller.rb +31 -0
  34. data/app/controllers/password_resets_controller.rb +126 -0
  35. data/app/controllers/sessions_controller.rb +64 -0
  36. data/app/controllers/status_controller.rb +150 -0
  37. data/app/controllers/system_config_controller.rb +238 -0
  38. data/app/controllers/system_update_controller.rb +164 -0
  39. data/app/controllers/test_access_controller.rb +44 -0
  40. data/app/controllers/test_report_controller.rb +75 -0
  41. data/app/controllers/users_controller.rb +218 -0
  42. data/app/helpers/.keep +0 -0
  43. data/app/helpers/barkest_core/application_helper.rb +134 -0
  44. data/app/helpers/barkest_core/form_helper.rb +469 -0
  45. data/app/helpers/barkest_core/html_helper.rb +70 -0
  46. data/app/helpers/barkest_core/misc_helper.rb +68 -0
  47. data/app/helpers/barkest_core/pdf_helper.rb +180 -0
  48. data/app/helpers/barkest_core/recaptcha_helper.rb +115 -0
  49. data/app/helpers/barkest_core/sessions_helper.rb +94 -0
  50. data/app/helpers/barkest_core/status_helper.rb +118 -0
  51. data/app/helpers/barkest_core/users_helper.rb +32 -0
  52. data/app/mailers/.keep +0 -0
  53. data/app/mailers/application_mailer.rb +5 -0
  54. data/app/mailers/barkest_core/application_mailer_base.rb +30 -0
  55. data/app/mailers/barkest_core/contact_form.rb +20 -0
  56. data/app/mailers/barkest_core/user_mailer.rb +44 -0
  57. data/app/models/.keep +0 -0
  58. data/app/models/access_group.rb +121 -0
  59. data/app/models/access_group_group_member.rb +13 -0
  60. data/app/models/access_group_user_member.rb +11 -0
  61. data/app/models/barkest_core/auth_config.rb +95 -0
  62. data/app/models/barkest_core/authorize_failure.rb +7 -0
  63. data/app/models/barkest_core/contact_message.rb +37 -0
  64. data/app/models/barkest_core/database_config.rb +223 -0
  65. data/app/models/barkest_core/db_table.rb +21 -0
  66. data/app/models/barkest_core/email_config.rb +132 -0
  67. data/app/models/barkest_core/global_status.rb +267 -0
  68. data/app/models/barkest_core/log_entry.rb +101 -0
  69. data/app/models/barkest_core/log_view_options.rb +51 -0
  70. data/app/models/barkest_core/ms_sql_db_definition.rb +441 -0
  71. data/app/models/barkest_core/ms_sql_definition.rb +221 -0
  72. data/app/models/barkest_core/ms_sql_function.rb +423 -0
  73. data/app/models/barkest_core/not_logged_in.rb +7 -0
  74. data/app/models/barkest_core/pdf_table_builder.rb +407 -0
  75. data/app/models/barkest_core/self_update_config.rb +37 -0
  76. data/app/models/barkest_core/user_alert.rb +29 -0
  77. data/app/models/barkest_core/user_alert_generators.rb +58 -0
  78. data/app/models/barkest_core/user_manager.rb +404 -0
  79. data/app/models/barkest_core/work_path.rb +74 -0
  80. data/app/models/disable_user.rb +18 -0
  81. data/app/models/ldap_access_group.rb +15 -0
  82. data/app/models/system_config.rb +99 -0
  83. data/app/models/user.rb +405 -0
  84. data/app/models/user_login_history.rb +11 -0
  85. data/app/views/.keep +0 -0
  86. data/app/views/access_groups/_form.html.erb +19 -0
  87. data/app/views/access_groups/edit.html.erb +2 -0
  88. data/app/views/access_groups/index.html.erb +32 -0
  89. data/app/views/access_groups/new.html.erb +2 -0
  90. data/app/views/access_groups/show.html.erb +4 -0
  91. data/app/views/barkest_core/contact_form/contact.html.erb +16 -0
  92. data/app/views/barkest_core/contact_form/contact.text.erb +13 -0
  93. data/app/views/barkest_core/testsub/_links.html.erb +5 -0
  94. data/app/views/barkest_core/testsub/page1.html.erb +3 -0
  95. data/app/views/barkest_core/testsub/page2.html.erb +2 -0
  96. data/app/views/barkest_core/testsub/page3.html.erb +2 -0
  97. data/app/views/barkest_core/user_mailer/account_activation.html.erb +7 -0
  98. data/app/views/barkest_core/user_mailer/account_activation.text.erb +6 -0
  99. data/app/views/barkest_core/user_mailer/invalid_password_reset.html.erb +3 -0
  100. data/app/views/barkest_core/user_mailer/invalid_password_reset.text.erb +5 -0
  101. data/app/views/barkest_core/user_mailer/password_reset.html.erb +8 -0
  102. data/app/views/barkest_core/user_mailer/password_reset.text.erb +7 -0
  103. data/app/views/contact/index.html.erb +24 -0
  104. data/app/views/layouts/_footer_copyright.html.erb +1 -0
  105. data/app/views/layouts/_menu_admin.html.erb +5 -0
  106. data/app/views/layouts/_menu_anon.html.erb +0 -0
  107. data/app/views/layouts/_menu_auth.html.erb +3 -0
  108. data/app/views/layouts/_menu_footer.html.erb +1 -0
  109. data/app/views/layouts/_nav_logo.html.erb +1 -0
  110. data/app/views/layouts/application.html.erb +2 -0
  111. data/app/views/layouts/barkest_core/_application.html.erb +24 -0
  112. data/app/views/layouts/barkest_core/_footer.html.erb +18 -0
  113. data/app/views/layouts/barkest_core/_header.html.erb +38 -0
  114. data/app/views/layouts/barkest_core/_html_mailer.html.erb +11 -0
  115. data/app/views/layouts/barkest_core/_menu_account.html.erb +14 -0
  116. data/app/views/layouts/barkest_core/_menu_sample.html.erb +1 -0
  117. data/app/views/layouts/barkest_core/_messages.html.erb +4 -0
  118. data/app/views/layouts/barkest_core/_shim.html.erb +4 -0
  119. data/app/views/layouts/barkest_core/_subheader.html.erb +1 -0
  120. data/app/views/layouts/barkest_core/_text_mailer.text.erb +4 -0
  121. data/app/views/layouts/mailer.html.erb +1 -0
  122. data/app/views/layouts/mailer.text.erb +1 -0
  123. data/app/views/log_view/index.html.erb +100 -0
  124. data/app/views/password_resets/edit.html.erb +20 -0
  125. data/app/views/password_resets/new.html.erb +14 -0
  126. data/app/views/sessions/new.html.erb +27 -0
  127. data/app/views/shared/_error_messages.html.erb +29 -0
  128. data/app/views/shared/_generic_user_alert.html.erb +4 -0
  129. data/app/views/status/current.html.erb +34 -0
  130. data/app/views/status/test.html.erb +50 -0
  131. data/app/views/system_config/index.html.erb +25 -0
  132. data/app/views/system_config/show_auth.html.erb +28 -0
  133. data/app/views/system_config/show_database.html.erb +36 -0
  134. data/app/views/system_config/show_email.html.erb +21 -0
  135. data/app/views/system_config/show_self_update.html.erb +13 -0
  136. data/app/views/system_update/index.html.erb +31 -0
  137. data/app/views/system_update/new.html.erb +2 -0
  138. data/app/views/test_access/allow_anon.html.erb +2 -0
  139. data/app/views/test_access/require_admin.html.erb +2 -0
  140. data/app/views/test_access/require_group_x.html.erb +2 -0
  141. data/app/views/test_access/require_user.html.erb +2 -0
  142. data/app/views/test_report/index.csv.csvrb +23 -0
  143. data/app/views/test_report/index.html.erb +6 -0
  144. data/app/views/test_report/index.pdf.prawn +50 -0
  145. data/app/views/test_report/index.xlsx.axlsx +28 -0
  146. data/app/views/users/_user.html.erb +57 -0
  147. data/app/views/users/_user_details.html.erb +15 -0
  148. data/app/views/users/_user_details_for_list.html.erb +1 -0
  149. data/app/views/users/_user_form.html.erb +13 -0
  150. data/app/views/users/disable_confirm.html.erb +19 -0
  151. data/app/views/users/edit.html.erb +15 -0
  152. data/app/views/users/index.html.erb +9 -0
  153. data/app/views/users/new.html.erb +10 -0
  154. data/app/views/users/show.html.erb +46 -0
  155. data/bin/rails +12 -0
  156. data/config/routes.rb +3 -0
  157. data/db/migrate/20160617172539_create_access_groups.rb +10 -0
  158. data/db/migrate/20160617172725_create_users.rb +26 -0
  159. data/db/migrate/20160617172833_create_user_login_histories.rb +12 -0
  160. data/db/migrate/20160622151720_create_access_group_user_members.rb +9 -0
  161. data/db/migrate/20160622151925_create_access_group_group_members.rb +9 -0
  162. data/db/migrate/20160701005706_create_ldap_access_groups.rb +11 -0
  163. data/db/migrate/20161108155029_create_system_configs.rb +11 -0
  164. data/db/seeds/barkest_core_01_create_users.rb +42 -0
  165. data/db/seeds.rb +53 -0
  166. data/lib/barkest_core/concerns/association_with_defaults.rb +55 -0
  167. data/lib/barkest_core/concerns/boolean_parser.rb +88 -0
  168. data/lib/barkest_core/concerns/date_parser.rb +181 -0
  169. data/lib/barkest_core/concerns/email_tester.rb +55 -0
  170. data/lib/barkest_core/concerns/encrypted_fields.rb +156 -0
  171. data/lib/barkest_core/concerns/named_model.rb +73 -0
  172. data/lib/barkest_core/concerns/number_parser.rb +145 -0
  173. data/lib/barkest_core/concerns/utc_conversion.rb +60 -0
  174. data/lib/barkest_core/engine.rb +105 -0
  175. data/lib/barkest_core/extensions/active_record_extensions.rb +120 -0
  176. data/lib/barkest_core/extensions/application_configuration_extensions.rb +38 -0
  177. data/lib/barkest_core/extensions/application_extensions.rb +50 -0
  178. data/lib/barkest_core/extensions/axlsx_extenstions.rb +157 -0
  179. data/lib/barkest_core/extensions/fixture_set_extensions.rb +107 -0
  180. data/lib/barkest_core/extensions/generator_extensions.rb +271 -0
  181. data/lib/barkest_core/extensions/main_app_extensions.rb +35 -0
  182. data/lib/barkest_core/extensions/prawn_document_extensions.rb +367 -0
  183. data/lib/barkest_core/extensions/prawn_table_extensions.rb +131 -0
  184. data/lib/barkest_core/extensions/router_extensions.rb +106 -0
  185. data/lib/barkest_core/extensions/simple_formatter_extensions.rb +66 -0
  186. data/lib/barkest_core/extensions/test_case_extensions.rb +348 -0
  187. data/lib/barkest_core/extensions/time_extensions.rb +164 -0
  188. data/lib/barkest_core/handlers/csv_handler.rb +30 -0
  189. data/lib/barkest_core/version.rb +3 -0
  190. data/lib/barkest_core.rb +324 -0
  191. data/lib/generators/barkest/install_generator.rb +102 -0
  192. data/lib/generators/barkest_core/actions/01_patch_application_controller.rb +55 -0
  193. data/lib/generators/barkest_core/actions/02_patch_application_mailer.rb +56 -0
  194. data/lib/generators/barkest_core/actions/03_patch_assets.rb +62 -0
  195. data/lib/generators/barkest_core/actions/04_patch_layouts.rb +36 -0
  196. data/lib/generators/barkest_core/actions/05_patch_routes.rb +93 -0
  197. data/lib/generators/barkest_core/actions/06_patch_seeds.rb +60 -0
  198. data/lib/generators/barkest_core/actions/07_copy_migrations.rb +51 -0
  199. data/lib/generators/barkest_core/actions/08_configure_database.rb +52 -0
  200. data/lib/generators/barkest_core/actions/09_configure_secrets.rb +29 -0
  201. data/lib/generators/barkest_core/actions/99_patch_gitignore.rb +57 -0
  202. data/lib/generators/barkest_core/install_generator.rb +17 -0
  203. data/test/barkest_core_test.rb +83 -0
  204. data/test/controllers/access_groups_controller_test.rb +53 -0
  205. data/test/controllers/contact_controller_test.rb +10 -0
  206. data/test/controllers/sessions_controller_test.rb +10 -0
  207. data/test/controllers/users_controller_test.rb +10 -0
  208. data/test/dummy/.gitignore +10 -0
  209. data/test/dummy/README.rdoc +28 -0
  210. data/test/dummy/Rakefile +6 -0
  211. data/test/dummy/app/assets/images/.keep +0 -0
  212. data/test/dummy/app/assets/javascripts/application.js +14 -0
  213. data/test/dummy/app/assets/stylesheets/application.css +16 -0
  214. data/test/dummy/app/controllers/application_controller.rb +5 -0
  215. data/test/dummy/app/controllers/concerns/.keep +0 -0
  216. data/test/dummy/app/helpers/application_helper.rb +2 -0
  217. data/test/dummy/app/mailers/.keep +0 -0
  218. data/test/dummy/app/mailers/application_mailer.rb +3 -0
  219. data/test/dummy/app/models/.keep +0 -0
  220. data/test/dummy/app/models/concerns/.keep +0 -0
  221. data/test/dummy/app/views/layouts/application.html.erb +1 -0
  222. data/test/dummy/app/views/layouts/mailer.html.erb +1 -0
  223. data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
  224. data/test/dummy/app/views/system_config/show_fake.html.erb +3 -0
  225. data/test/dummy/bin/bundle +3 -0
  226. data/test/dummy/bin/rails +4 -0
  227. data/test/dummy/bin/rake +4 -0
  228. data/test/dummy/bin/setup +29 -0
  229. data/test/dummy/config/application.rb +27 -0
  230. data/test/dummy/config/boot.rb +5 -0
  231. data/test/dummy/config/environment.rb +5 -0
  232. data/test/dummy/config/environments/development.rb +47 -0
  233. data/test/dummy/config/environments/production.rb +79 -0
  234. data/test/dummy/config/environments/test.rb +44 -0
  235. data/test/dummy/config/initializers/assets.rb +11 -0
  236. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  237. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  238. data/test/dummy/config/initializers/db_updater_ext.rb +33 -0
  239. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  240. data/test/dummy/config/initializers/inflections.rb +16 -0
  241. data/test/dummy/config/initializers/mime_types.rb +4 -0
  242. data/test/dummy/config/initializers/session_store.rb +3 -0
  243. data/test/dummy/config/initializers/sys_config_ext.rb +12 -0
  244. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  245. data/test/dummy/config/locales/en.yml +23 -0
  246. data/test/dummy/config/routes.rb +60 -0
  247. data/test/dummy/config.ru +4 -0
  248. data/test/dummy/db/schema.rb +95 -0
  249. data/test/dummy/db/seeds/barkest_core_01_create_users.rb +42 -0
  250. data/test/dummy/db/seeds.rb +51 -0
  251. data/test/dummy/lib/assets/.keep +0 -0
  252. data/test/dummy/log/.keep +0 -0
  253. data/test/dummy/public/404.html +67 -0
  254. data/test/dummy/public/422.html +67 -0
  255. data/test/dummy/public/500.html +66 -0
  256. data/test/dummy/public/favicon.ico +0 -0
  257. data/test/dummy/sql/my_test_view.sql +3 -0
  258. data/test/fixtures/access_groups.yml +21 -0
  259. data/test/fixtures/users.yml +71 -0
  260. data/test/helpers/barkest_core/sessions_helper_test.rb +22 -0
  261. data/test/integration/access_group_mgmt_test.rb +33 -0
  262. data/test/integration/access_test.rb +24 -0
  263. data/test/integration/account_activations_access_test.rb +12 -0
  264. data/test/integration/contact_test.rb +98 -0
  265. data/test/integration/extra_partial_test.rb +41 -0
  266. data/test/integration/log_view_access_test.rb +12 -0
  267. data/test/integration/password_resets_test.rb +101 -0
  268. data/test/integration/reports_test.rb +53 -0
  269. data/test/integration/status_access_test.rb +27 -0
  270. data/test/integration/system_config_access_test.rb +24 -0
  271. data/test/integration/system_update_access_test.rb +19 -0
  272. data/test/integration/users_access_test.rb +34 -0
  273. data/test/integration/users_edit_test.rb +178 -0
  274. data/test/integration/users_index_test.rb +62 -0
  275. data/test/integration/users_login_test.rb +67 -0
  276. data/test/integration/users_signup_test.rb +54 -0
  277. data/test/mailers/.keep +0 -0
  278. data/test/mailers/barkest_core/contact_form_test.rb +28 -0
  279. data/test/mailers/barkest_core/user_mailer_test.rb +43 -0
  280. data/test/mailers/previews/barkest_core/contact_form_preview.rb +17 -0
  281. data/test/mailers/previews/barkest_core/user_mailer_preview.rb +26 -0
  282. data/test/models/access_group_group_member_test.rb +28 -0
  283. data/test/models/access_group_test.rb +114 -0
  284. data/test/models/access_group_user_member_test.rb +28 -0
  285. data/test/models/barkest_core/auth_config_test.rb +57 -0
  286. data/test/models/barkest_core/bool_parser_test.rb +28 -0
  287. data/test/models/barkest_core/contact_message_test.rb +61 -0
  288. data/test/models/barkest_core/database_config_test.rb +33 -0
  289. data/test/models/barkest_core/date_parser_test.rb +110 -0
  290. data/test/models/barkest_core/email_config_test.rb +57 -0
  291. data/test/models/barkest_core/global_status_test.rb +50 -0
  292. data/test/models/barkest_core/ms_sql_db_updater_test.rb +115 -0
  293. data/test/models/barkest_core/ms_sql_definition_test.rb +102 -0
  294. data/test/models/barkest_core/ms_sql_function_test.rb +131 -0
  295. data/test/models/barkest_core/number_parser_test.rb +29 -0
  296. data/test/models/barkest_core/self_update_config_test.rb +29 -0
  297. data/test/models/barkest_core/user_alert_test.rb +19 -0
  298. data/test/models/barkest_core/user_manager_test.rb +34 -0
  299. data/test/models/barkest_core/work_path_test.rb +26 -0
  300. data/test/models/disable_user_test.rb +27 -0
  301. data/test/models/generic_time_test.rb +66 -0
  302. data/test/models/ldap_access_group_test.rb +31 -0
  303. data/test/models/pdf_table_builder_test.rb +6 -0
  304. data/test/models/system_config_test.rb +78 -0
  305. data/test/models/user_login_history_test.rb +37 -0
  306. data/test/models/user_test.rb +130 -0
  307. data/test/test_helper.rb +63 -0
  308. metadata +798 -0
@@ -0,0 +1,102 @@
1
+ require 'rubygems'
2
+
3
+ module Barkest
4
+
5
+ ##
6
+ # Installs Barkest modules into an application.
7
+ class InstallGenerator < Rails::Generators::Base
8
+
9
+ desc 'Installs the Barkest functionality into your application.'
10
+
11
+ argument :action_name, type: :string, default: '', desc: 'Specific action to run.'
12
+
13
+
14
+ def install_modules
15
+ meth = action_name.to_s == '' ? nil : action_name.to_sym
16
+
17
+ installers.each do |inst|
18
+ sep = '-' + ('=---' * 19) + '=-'
19
+ tell "#{sep}\nProcessing #{inst.class}\n#{sep}", :bold
20
+ if meth
21
+ inst.send(meth) if inst.respond_to?(meth)
22
+ else
23
+ inst.public_methods(false).each { |method| inst.send(method) }
24
+ end
25
+ end
26
+
27
+ end
28
+
29
+ private
30
+
31
+ # override this to process additional gems.
32
+ def gem_should_be_checked?(gem_name)
33
+ gem_name.index('barkest_') == 0
34
+ end
35
+
36
+ def installers
37
+ @installers ||= find_modules
38
+ end
39
+
40
+ def find_modules
41
+ ret = []
42
+ verbose_module_scan = (ENV['VERBOSE_MODULE_SCAN'].to_s.to_i != 0)
43
+
44
+ # generator is run from root of app directory
45
+ Gem::Specification.each do |gem|
46
+ if gem_should_be_checked?(gem.name)
47
+ puts "Checking for installer in '#{gem.name}' gem." if verbose_module_scan
48
+ installer =
49
+ begin
50
+ # ensure the gem has been loaded.
51
+ require gem.name
52
+ # then ensure the install_generator (if any) has been loaded.
53
+ inst_path = "generators/#{gem.name}/install_generator"
54
+ begin
55
+ require inst_path
56
+ # finally load the class and generate an instance.
57
+ klass_name = "#{gem.name.camelcase}::InstallGenerator"
58
+ begin
59
+ klass = Object.const_get(klass_name)
60
+ inst = klass.new
61
+ puts "Generated instance of class '#{klass_name}'." if verbose_module_scan
62
+ inst
63
+ rescue NameError
64
+ puts "Failed to load class '#{klass_name}'." if verbose_module_scan
65
+ nil
66
+ end
67
+ rescue LoadError
68
+ puts "Failed to load file '#{inst_path}'." if verbose_module_scan
69
+ nil
70
+ end
71
+ rescue LoadError
72
+ puts "Failed to load gem '#{gem.name}'." if verbose_module_scan
73
+ nil
74
+ end
75
+ ret << installer unless installer.nil?
76
+ end
77
+ end
78
+
79
+ ret.sort do |a,b|
80
+ ka = a.class.name
81
+ kb = b.class.name
82
+
83
+ # ensure Core installers run first.
84
+ kac = ka.index('BarkestCore::') == 0
85
+ kbc = kb.index('BarkestCore::') == 0
86
+
87
+ if kac && kbc
88
+ ka <=> kb
89
+ elsif kac
90
+ -1
91
+ elsif kbc
92
+ 1
93
+ else
94
+ ka <=> kb
95
+ end
96
+ end
97
+
98
+ ret
99
+ end
100
+
101
+ end
102
+ end
@@ -0,0 +1,55 @@
1
+ BarkestCore::InstallGenerator.class_eval do
2
+ MissingApplicationController = Class.new(::Thor::Error)
3
+
4
+ ##
5
+ # Patches the ApplicationController class to inherit from BarkestCore::ApplicationController.
6
+ def patch_application_controller
7
+ app_file = 'app/controllers/application_controller.rb'
8
+ dest_source = '::BarkestCore::ApplicationControllerBase'
9
+
10
+ if File.exist?(app_file)
11
+ regex = /^(?<NAME>\s*class ApplicationController\s*<\s*)(?<ORIG>\S+)\s*(?<COMMENT>#.*)?$/
12
+
13
+ found = false
14
+ changed = false
15
+
16
+ lines = File.read(app_file).split("\n").map do |line|
17
+ match = regex.match(line)
18
+ found = true if match
19
+ if match && match['ORIG'] != dest_source
20
+ changed = true
21
+ "#{match['NAME']}#{dest_source} # #{match['ORIG']} #{match['COMMENT']}"
22
+ else
23
+ line
24
+ end
25
+ end
26
+
27
+ raise MissingApplicationController.new('ApplicationController class not found') unless found
28
+
29
+ if changed
30
+ if ask_for_bool("Your ApplicationController does not currently inherit from BarkestCore.\nWould you like to change this?", true)
31
+ perform "> updating '#{app_file}'..." do
32
+ File.write app_file, lines.join("\n")
33
+ end
34
+ else
35
+ tell "> '#{app_file}' is unchanged.", :bright_green
36
+ end
37
+ else
38
+ tell "> '#{app_file}' is good.", :bright_green
39
+ end
40
+
41
+ else
42
+
43
+ if ask_for_bool("Your application is missing an ApplicationController.\nWould you like to create one?", true)
44
+ perform "> creating '#{app_file}'..." do
45
+ File.write app_file, <<-APPCTRLR
46
+ class ApplicationController < #{dest_source}
47
+ # This is your application controller, it inherits functionality from BarkestCore.
48
+ end
49
+ APPCTRLR
50
+ end
51
+ end
52
+
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,56 @@
1
+ BarkestCore::InstallGenerator.class_eval do
2
+
3
+ MissingApplicationMailer = Class.new(::Thor::Error)
4
+
5
+ ##
6
+ # Patches the ApplicationMailer class to inherit from BarkestCore::ApplicationMailer.
7
+ def patch_application_mailer
8
+ app_file = 'app/mailers/application_mailer.rb'
9
+ dest_source = '::BarkestCore::ApplicationMailerBase'
10
+
11
+ if File.exist?(app_file)
12
+ regex = /^(?<NAME>\s*class ApplicationMailer\s*<\s*)(?<ORIG>\S+)\s*(?<COMMENT>#.*)?$/
13
+
14
+ found = false
15
+ changed = false
16
+
17
+ lines = File.read(app_file).split("\n").map do |line|
18
+ match = regex.match(line)
19
+ found = true if match
20
+ if match && match['ORIG'] != dest_source
21
+ changed = true
22
+ "#{match['NAME']}#{dest_source} # #{match['ORIG']} #{match['COMMENT']}"
23
+ else
24
+ line
25
+ end
26
+ end
27
+
28
+ raise MissingApplicationMailer.new('ApplicationMailer class not found') unless found
29
+
30
+ if changed
31
+ if ask_for_bool("Your ApplicationMailer does not currently inherit from BarkestCore.\nWould you like to change this?", true)
32
+ perform "> updating '#{app_file}'..." do
33
+ File.write app_file, lines.join("\n")
34
+ end
35
+ else
36
+ tell "> '#{app_file}' is unchanged.", :bright_green
37
+ end
38
+ else
39
+ tell "> '#{app_file}' is good.", :bright_green
40
+ end
41
+
42
+ else
43
+
44
+ if ask_for_bool("Your application is missing an ApplicationMailer.\nWould you like to create one?", true)
45
+ perform "> creating '#{app_file}'..." do
46
+ File.write app_file, <<-APPMLR
47
+ class ApplicationMailer < #{dest_source}
48
+ # This is your application mailer, it inherits functionality from BarkestCore.
49
+ end
50
+ APPMLR
51
+ end
52
+ end
53
+
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,62 @@
1
+ BarkestCore::InstallGenerator.class_eval do
2
+ ##
3
+ # Patches application.js and application.css
4
+ def patch_assets
5
+ target = 'barkest_core/application'
6
+
7
+ [
8
+ [ 'app/assets/javascripts/application.js', '//=', "// Application.js\n//= require_tree .\n" ],
9
+ [ 'app/assets/stylesheets/application.css', '*=', "/*\n * Application.css\n *= require_tree .\n *= require_self\n */\n" ]
10
+ ].each do |(path, line_tag, def_contents)|
11
+
12
+ lines = if File.exist?(path)
13
+ File.read(path)
14
+ else
15
+ def_contents
16
+ end.split("\n")
17
+
18
+ first_tag = -1
19
+ first_pass = true
20
+ loop do
21
+ lines.each_with_index do |line, index|
22
+ if line.strip[0...line_tag.length] == line_tag
23
+ first_tag = index
24
+ break
25
+ end
26
+ end
27
+ if first_tag < 0
28
+ if first_pass
29
+ lines += def_contents.split("\n")
30
+ else
31
+ raise StandardError.new("Failed to locate line starting with '#{line_tag}' in '#{path}'.")
32
+ end
33
+ else
34
+ break
35
+ end
36
+ first_pass = false
37
+ end
38
+
39
+ regex = /^\s*#{line_tag.gsub('*',"\\*")}\s*require\s*['"]?#{target}['"]?\s*$/
40
+
41
+ tag_index = -1
42
+ lines.each_with_index do |line, index|
43
+ if regex.match(line)
44
+ tag_index = index
45
+ break
46
+ end
47
+ end
48
+ if tag_index < 0
49
+ if ask_for_bool("Would you like to add a reference to BarkestCore in '#{path}'?", true)
50
+ lines.insert first_tag, "#{line_tag} require #{target}"
51
+ perform "> updating '#{path}'..." do
52
+ File.write path, lines.join("\n")
53
+ end
54
+ else
55
+ tell "> '#{path}' is unchanged.", :bright_green
56
+ end
57
+ else
58
+ tell "> '#{path}' is good.", :bright_green
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,36 @@
1
+ BarkestCore::InstallGenerator.class_eval do
2
+ ##
3
+ # Patches the default layouts to inherit from the BarkestCore layouts.
4
+ def patch_layouts
5
+ {
6
+ 'app/views/layouts/application.html.erb' => 'layouts/barkest_core/application',
7
+ 'app/views/layouts/mailer.html.erb' => 'layouts/barkest_core/html_mailer',
8
+ 'app/views/layouts/mailer.text.erb' => 'layouts/barkest_core/text_mailer'
9
+ }.each do |file,layout|
10
+
11
+ if File.exist?(file)
12
+ regex = /<%=\s+render[\s\(]+['"]#{layout}['"][\)\s]*%>/
13
+ if regex.match(File.read(file))
14
+ tell "> '#{file}' is good.", :bright_green
15
+ else
16
+ if ask_for_bool("Your '#{file}' layout does not reference the BarkestCore layout.\nWould you like to change it to use the BarkestCore layout?", true)
17
+ perform "> updating '#{file}'..." do
18
+ File.write file, "<%= render '#{layout}' %>\n"
19
+ end
20
+ else
21
+ tell "> '#{file}' is unchanged.", :bright_green
22
+ end
23
+ end
24
+ else
25
+ if ask_for_bool("Your application is missing '#{file}'.\nWould you like to add one?", true)
26
+ perform "> creating '#{file}'..." do
27
+ File.write file, "<%= render '#{layout}' %>\n"
28
+ end
29
+ else
30
+ tell "> '#{file}' is missing.", :yellow
31
+ end
32
+ end
33
+
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,93 @@
1
+ BarkestCore::InstallGenerator.class_eval do
2
+ ##
3
+ # Patches routes.rb to include BarkestCore::Engine and session management paths.
4
+ def patch_routes
5
+ route_file = 'config/routes.rb'
6
+
7
+ unless File.exist?(route_file)
8
+
9
+ if ask_for_bool("Your application is missing a 'routes.rb' configuration file.\nWould you like to create one?", true)
10
+ perform '> creating \'routes.rb\'...' do
11
+ File.write route_file, <<-DEFRTS
12
+ Rails.application.routes.draw do
13
+ # Enter your routes in this file.
14
+ end
15
+ DEFRTS
16
+ end
17
+ else
18
+ tell '> missing \'routes.rb\'.', :yellow
19
+ return
20
+ end
21
+
22
+ end
23
+
24
+ lines = File.exist?(route_file) ? File.read(route_file).split("\n") : ['Rails.application.routes.draw do','end']
25
+
26
+ insert_at = -1
27
+
28
+ regex = /.*\.routes\.draw\s+do\s*(#.*)?$/
29
+ lines.each_with_index do |line, index|
30
+ if regex.match(line)
31
+ insert_at = index + 1
32
+ break
33
+ end
34
+ end
35
+
36
+ raise MissingRoutes.new('routes not found') unless insert_at >= 0
37
+
38
+ changed = false
39
+
40
+ core_regex = /^\s*barkest_core([\s\(]+(?<OPTIONS>[^\s\)#][^\)#]+)\)?)?\s*(?<COMMENT>#.*)?$/
41
+ root_regex = /^\s*root([\s\(]+(?<OPTIONS>[^\s\)#][^\)#]+)\)?)?\s*(?<COMMENT>#.*)?$/
42
+ core = nil
43
+ root = nil
44
+
45
+ lines.each_with_index do |line, index|
46
+ line = line.strip
47
+ if (match = core_regex.match(line))
48
+ opts = match['OPTIONS'].to_s.strip
49
+ core = {
50
+ index: index,
51
+ path: if (path_offset = opts.index(':path'))
52
+ opts[path_offset..-1].partition('=>')[2].partition(',')[0].strip[1...-1]
53
+ elsif (path_offset = opts.index('path:'))
54
+ opts[path_offset..-1].partition(':')[2].partition(',')[0].strip[1...-1]
55
+ else
56
+ opts[1...-1] # strip '...' or "..." to ...
57
+ end.to_s
58
+ }
59
+ elsif (match = root_regex.match(line))
60
+ opts = match['OPTIONS'].to_s.strip
61
+ root = {
62
+ index: index,
63
+ path: opts[1...-1].to_s # strip '...' or "..." to ...
64
+ }
65
+ end
66
+ end
67
+
68
+ unless core
69
+ if ask_for_bool('Would you like to add the \'barkest_core\' routes to your application?', true)
70
+ path = ask_for_string('What path prefix would you like?', '/')
71
+ lines.insert insert_at, "\n barkest_core #{path.inspect}"
72
+ changed = true
73
+ end
74
+ end
75
+
76
+ unless root
77
+ if ask_for_bool("Your application is missing a root route.\nWould you like to add one?", true)
78
+ path = ask_for_string('What controller#action would you like for your root route?', 'test_access#allow_anon')
79
+ lines.insert insert_at, "\n root #{path.inspect}"
80
+ changed = true
81
+ end
82
+ end
83
+
84
+ if changed
85
+ perform '> updating \'routes.rb\'...' do
86
+ File.write route_file, lines.join("\n")
87
+ end
88
+ else
89
+ tell '> \'routes.rb\' is good.', :bright_green
90
+ end
91
+
92
+ end
93
+ end
@@ -0,0 +1,60 @@
1
+ BarkestCore::InstallGenerator.class_eval do
2
+ ##
3
+ # Patches the db/seeds to allow multiple seeding files and includes the seeds necessary for BarkestCore.
4
+ def patch_seeds
5
+ files = Dir.glob(File.expand_path('../../../../../db/{seeds.rb,seeds/*.rb}', __FILE__))
6
+
7
+ unless Dir.exists?('db/seeds')
8
+ if ask_for_bool("Your application does not currently have a 'db/seeds' directory.\nBarkestCore can alter your application to make use of multiple seeding files.\nDo you want to create the 'db/seeds' directory to enable this behavior?", true)
9
+ perform '> creating \'db/seeds\' directory.' do
10
+ Dir.mkdir 'db' unless Dir.exists?('db')
11
+ Dir.mkdir 'db/seeds'
12
+ end
13
+ else
14
+ tell "> 'db/seeds' directory is missing.", :yellow
15
+ return
16
+ end
17
+ end
18
+
19
+ source = files.find{|v| v[-11..-1] == 'db/seeds.rb'}
20
+ prefix_dir_len = source.length - 11
21
+ dest = source[prefix_dir_len..-1]
22
+
23
+ if File.exist?(dest)
24
+ current_contents = File.read(dest).strip
25
+
26
+ # if 'seeds.rb' defines a 'Seeds' class, then we assuming it to be a seeder.
27
+ is_seeder = false
28
+ current_contents.split("\n").each do |line|
29
+ is_seeder = true if /^\s*class\s+Seeds(\s.*)?$/.match(line)
30
+ end
31
+
32
+ unless is_seeder
33
+ if ask_for_bool('Would you like to move your \'db/seeds.rb\' file into the \'db/seeds\' directory?', true)
34
+ perform "> moving '#{dest}' into 'db/seeds' directory..." do
35
+ File.rename dest, 'db/seeds/' + File.basename(dest)
36
+ end
37
+ else
38
+ tell "> 'db/seeds.rb' is not being moved.", :yellow
39
+ end
40
+ end
41
+ end
42
+
43
+ files.each do |source|
44
+ dest = source[prefix_dir_len..-1]
45
+ contents = File.read(source)
46
+
47
+ if File.exist?(dest) && File.read(dest).strip == contents.strip
48
+ tell "> '#{dest}' is good.", :bright_green
49
+ else
50
+ if !File.exist?(dest) || ask_for_bool("Would you like to update '#{dest}'?", true)
51
+ perform "> #{File.exist?(dest) ? 'creating' : 'updating'} \'#{dest}\'..." do
52
+ File.write dest, contents
53
+ end
54
+ else
55
+ tell "> '#{dest}' is unchanged.", :bright_green
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end