barkest_core 1.5.3.0

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 (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