adminos 1.0.0.pre.rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +14 -0
  3. data/.gitignore +25 -0
  4. data/.gitlab-ci.yml +18 -0
  5. data/.rspec +2 -0
  6. data/.rubocop.yml +120 -0
  7. data/.rubocop_todo.yml +58 -0
  8. data/Gemfile +25 -0
  9. data/Guardfile +70 -0
  10. data/LICENSE.txt +22 -0
  11. data/README.md +88 -0
  12. data/Rakefile +20 -0
  13. data/adminos.gemspec +37 -0
  14. data/adminos.png +0 -0
  15. data/app/assets/images/.keep +0 -0
  16. data/app/assets/images/apple-touch-icon.png +0 -0
  17. data/app/assets/images/favicon-16x16.png +0 -0
  18. data/app/assets/images/favicon-32x32.png +0 -0
  19. data/app/assets/images/favicon.ico +0 -0
  20. data/app/assets/images/safari-pinned-tab.svg +23 -0
  21. data/app/inputs/cropp_input.rb +45 -0
  22. data/bin/bundle +105 -0
  23. data/bin/gem +39 -0
  24. data/bin/rspec +29 -0
  25. data/exe/adminos +5 -0
  26. data/lib/adminos/cli.rb +71 -0
  27. data/lib/adminos/controllers/admin_extension.rb +34 -0
  28. data/lib/adminos/controllers/helpers.rb +24 -0
  29. data/lib/adminos/controllers/resource.rb +169 -0
  30. data/lib/adminos/extensions/globalize_actiontext.rb +28 -0
  31. data/lib/adminos/extensions/globalize_fields.rb +19 -0
  32. data/lib/adminos/extensions/nested_set.rb +27 -0
  33. data/lib/adminos/extensions/string.rb +5 -0
  34. data/lib/adminos/generators/gemfile_merge.rb +85 -0
  35. data/lib/adminos/generators/utilities.rb +87 -0
  36. data/lib/adminos/helpers/admin.rb +190 -0
  37. data/lib/adminos/helpers/bootstrap.rb +64 -0
  38. data/lib/adminos/helpers/models/apply_sortable_order.rb +10 -0
  39. data/lib/adminos/helpers/models/array_attrs.rb +17 -0
  40. data/lib/adminos/helpers/models/cropped.rb +20 -0
  41. data/lib/adminos/helpers/models/dom_id.rb +16 -0
  42. data/lib/adminos/helpers/models/flag_attrs.rb +43 -0
  43. data/lib/adminos/helpers/models/if_blank_set_to_nil_params.rb +19 -0
  44. data/lib/adminos/helpers/models/move_to.rb +17 -0
  45. data/lib/adminos/helpers/models/nested_set/duplication.rb +31 -0
  46. data/lib/adminos/helpers/models/nested_set/materialize_path.rb +50 -0
  47. data/lib/adminos/helpers/models/nested_set/place_to.rb +35 -0
  48. data/lib/adminos/helpers/models/nested_set/safe_destroy.rb +34 -0
  49. data/lib/adminos/helpers/models/recognizable.rb +28 -0
  50. data/lib/adminos/helpers/models/slugged.rb +20 -0
  51. data/lib/adminos/helpers/models/soft_destroy.rb +61 -0
  52. data/lib/adminos/helpers/models/wysiwyg.rb +105 -0
  53. data/lib/adminos/helpers/view.rb +137 -0
  54. data/lib/adminos/operations/check_environment.rb +18 -0
  55. data/lib/adminos/operations/extract_environment.rb +42 -0
  56. data/lib/adminos/operations/load_environment.rb +30 -0
  57. data/lib/adminos/stateful_link/action_any_of.rb +76 -0
  58. data/lib/adminos/stateful_link/helper.rb +31 -0
  59. data/lib/adminos.rb +42 -0
  60. data/lib/adminos_template.rb +15 -0
  61. data/lib/generators/adminos/adminos_generator.rb +164 -0
  62. data/lib/generators/adminos/ci_generator.rb +124 -0
  63. data/lib/generators/adminos/field_generator.rb +105 -0
  64. data/lib/generators/adminos/i18n_generator.rb +76 -0
  65. data/lib/generators/adminos/install_generator.rb +238 -0
  66. data/lib/generators/templates/adminos/adminos.ru.yml +15 -0
  67. data/lib/generators/templates/adminos/fields.slim +21 -0
  68. data/lib/generators/templates/adminos/locales/general_fields.slim +7 -0
  69. data/lib/generators/templates/adminos/locales/locale_fields.slim +10 -0
  70. data/lib/generators/templates/adminos/locales/migration.rb.erb +18 -0
  71. data/lib/generators/templates/adminos/locales/model.rb.erb +6 -0
  72. data/lib/generators/templates/adminos/sidebar.slim +2 -0
  73. data/lib/generators/templates/adminos/sorts/body.slim +3 -0
  74. data/lib/generators/templates/adminos/sorts/headers.slim +3 -0
  75. data/lib/generators/templates/adminos/types/default/controller.rb.erb +18 -0
  76. data/lib/generators/templates/adminos/types/default/migration.rb +5 -0
  77. data/lib/generators/templates/adminos/types/default/model.rb +20 -0
  78. data/lib/generators/templates/adminos/types/default/model_includes.rb +4 -0
  79. data/lib/generators/templates/adminos/types/default/views/index.slim +14 -0
  80. data/lib/generators/templates/adminos/types/section/controller.rb.erb +10 -0
  81. data/lib/generators/templates/adminos/types/section/migration.rb +12 -0
  82. data/lib/generators/templates/adminos/types/section/model.rb +62 -0
  83. data/lib/generators/templates/adminos/types/section/model_includes.rb +7 -0
  84. data/lib/generators/templates/adminos/types/section/views/_object.slim +24 -0
  85. data/lib/generators/templates/adminos/types/section/views/_objects.slim +6 -0
  86. data/lib/generators/templates/adminos/types/section/views/index.slim +7 -0
  87. data/lib/generators/templates/adminos/types/sortable/controller.rb.erb +10 -0
  88. data/lib/generators/templates/adminos/types/sortable/migration.rb +9 -0
  89. data/lib/generators/templates/adminos/types/sortable/model.rb +35 -0
  90. data/lib/generators/templates/adminos/types/sortable/model_includes.rb +6 -0
  91. data/lib/generators/templates/adminos/types/sortable/views/_object.slim +17 -0
  92. data/lib/generators/templates/adminos/types/sortable/views/_objects.slim +6 -0
  93. data/lib/generators/templates/adminos/types/sortable/views/index.slim +7 -0
  94. data/lib/generators/templates/adminos/types/table/controller.rb.erb +19 -0
  95. data/lib/generators/templates/adminos/types/table/views/index.slim +31 -0
  96. data/lib/generators/templates/ci/.gitlab-ci.yml +40 -0
  97. data/lib/generators/templates/ci/audit/Gemfile +3 -0
  98. data/lib/generators/templates/ci/lint/Gemfile +3 -0
  99. data/lib/generators/templates/ci/lint/rubocop.yml +116 -0
  100. data/lib/generators/templates/ci/rakelib/audit.rake +13 -0
  101. data/lib/generators/templates/ci/rakelib/lint.rake +13 -0
  102. data/lib/generators/templates/ci/spec/Gemfile +9 -0
  103. data/lib/generators/templates/field/locales/locale_fields.slim +4 -0
  104. data/lib/generators/templates/field/locales/migration.rb.erb +13 -0
  105. data/lib/generators/templates/field/locales/model.rb.erb +6 -0
  106. data/lib/generators/templates/i18n/Gemfile +1 -0
  107. data/lib/generators/templates/i18n/add_translation_table_to_page.rb +15 -0
  108. data/lib/generators/templates/i18n/auto/app/validators/locale_validator.rb +23 -0
  109. data/lib/generators/templates/i18n/auto/app/views/admin/base/_fields.slim +1 -0
  110. data/lib/generators/templates/i18n/auto/app/views/admin/base/_pills.slim +19 -0
  111. data/lib/generators/templates/i18n/auto/app/views/admin/pages/_general_fields.slim +8 -0
  112. data/lib/generators/templates/i18n/auto/app/views/admin/pages/_locale_fields.slim +13 -0
  113. data/lib/generators/templates/i18n/auto/config/initializers/globalize_fields.rb +1 -0
  114. data/lib/generators/templates/i18n/controller.rb +12 -0
  115. data/lib/generators/templates/i18n/devise/devise.ru.yml +60 -0
  116. data/lib/generators/templates/i18n/devise/views/_links.erb +25 -0
  117. data/lib/generators/templates/i18n/devise/views/confirmations/new.slim +8 -0
  118. data/lib/generators/templates/i18n/devise/views/mailer/confirmation_instructions.slim +4 -0
  119. data/lib/generators/templates/i18n/devise/views/mailer/reset_password_instructions.slim +5 -0
  120. data/lib/generators/templates/i18n/devise/views/mailer/unlock_instructions.slim +4 -0
  121. data/lib/generators/templates/i18n/devise/views/passwords/edit.slim +7 -0
  122. data/lib/generators/templates/i18n/devise/views/passwords/new.slim +5 -0
  123. data/lib/generators/templates/i18n/devise/views/registrations/edit.slim +25 -0
  124. data/lib/generators/templates/i18n/devise/views/registrations/new.slim +7 -0
  125. data/lib/generators/templates/i18n/devise/views/sessions/new.slim +22 -0
  126. data/lib/generators/templates/i18n/devise/views/unlocks/new.slim +11 -0
  127. data/lib/generators/templates/i18n/locales.slim +3 -0
  128. data/lib/generators/templates/i18n/page.rb +5 -0
  129. data/lib/generators/templates/install/.gitignore +11 -0
  130. data/lib/generators/templates/install/Gemfile +57 -0
  131. data/lib/generators/templates/install/Procfile +1 -0
  132. data/lib/generators/templates/install/_sidebar.slim.erb +44 -0
  133. data/lib/generators/templates/install/add_authentications/authentication.rb +7 -0
  134. data/lib/generators/templates/install/add_authentications/authentications_controller.rb +95 -0
  135. data/lib/generators/templates/install/add_authentications/authentications_migration.rb +12 -0
  136. data/lib/generators/templates/install/add_authentications/views/authentications/_form.slim +5 -0
  137. data/lib/generators/templates/install/add_authentications/views/authentications/_modal.slim +7 -0
  138. data/lib/generators/templates/install/add_pages/page.rb +116 -0
  139. data/lib/generators/templates/install/add_pages/pages_controller.rb +6 -0
  140. data/lib/generators/templates/install/add_pages/pages_migration.rb +25 -0
  141. data/lib/generators/templates/install/add_pages/views/pages/show.slim +4 -0
  142. data/lib/generators/templates/install/admin.slim +36 -0
  143. data/lib/generators/templates/install/admin_panel/pages/admin_pages_controller.rb +9 -0
  144. data/lib/generators/templates/install/admin_panel/pages/views/admin_pages/_fields.slim +26 -0
  145. data/lib/generators/templates/install/admin_panel/pages/views/admin_pages/_object.slim +25 -0
  146. data/lib/generators/templates/install/admin_panel/pages/views/admin_pages/_objects.slim +6 -0
  147. data/lib/generators/templates/install/admin_panel/pages/views/admin_pages/index.slim +7 -0
  148. data/lib/generators/templates/install/admin_panel/users/admin_users_controller.rb +29 -0
  149. data/lib/generators/templates/install/admin_panel/users/views/admin_users/_fields.slim +4 -0
  150. data/lib/generators/templates/install/admin_panel/users/views/admin_users/index.slim +33 -0
  151. data/lib/generators/templates/install/admin_panel/versions/admin_versions_controller.rb +29 -0
  152. data/lib/generators/templates/install/admin_panel/versions/views/admin_versions/index.slim +47 -0
  153. data/lib/generators/templates/install/admin_panel/versions/views/admin_versions/show.slim +18 -0
  154. data/lib/generators/templates/install/application.slim.erb +31 -0
  155. data/lib/generators/templates/install/auto/.editorconfig +14 -0
  156. data/lib/generators/templates/install/auto/.env.staging +2 -0
  157. data/lib/generators/templates/install/auto/Capfile +14 -0
  158. data/lib/generators/templates/install/auto/Guardfile +18 -0
  159. data/lib/generators/templates/install/auto/Procfile +1 -0
  160. data/lib/generators/templates/install/auto/Procfile.local +2 -0
  161. data/lib/generators/templates/install/auto/app/assets/javascripts/admin/application.js +3 -0
  162. data/lib/generators/templates/install/auto/app/assets/javascripts/admin/cocoon_fields.js +43 -0
  163. data/lib/generators/templates/install/auto/app/assets/javascripts/application.js +1 -0
  164. data/lib/generators/templates/install/auto/app/assets/stylesheets/admin/application.scss +1 -0
  165. data/lib/generators/templates/install/auto/app/controllers/admin/base_controller.rb +16 -0
  166. data/lib/generators/templates/install/auto/app/controllers/admin/helps_controller.rb +4 -0
  167. data/lib/generators/templates/install/auto/app/controllers/admin/settings_controller.rb +26 -0
  168. data/lib/generators/templates/install/auto/app/controllers/application_controller.rb +50 -0
  169. data/lib/generators/templates/install/auto/app/controllers/index_controller.rb +2 -0
  170. data/lib/generators/templates/install/auto/app/helpers/nested_helper.rb +75 -0
  171. data/lib/generators/templates/install/auto/app/helpers/versions_helper.rb +33 -0
  172. data/lib/generators/templates/install/auto/app/inputs/carrierwave_input.rb +52 -0
  173. data/lib/generators/templates/install/auto/app/inputs/checkbox_input.rb +13 -0
  174. data/lib/generators/templates/install/auto/app/inputs/rich_text_input.rb +9 -0
  175. data/lib/generators/templates/install/auto/app/mailers/notifier.rb +9 -0
  176. data/lib/generators/templates/install/auto/app/models/settings.rb +27 -0
  177. data/lib/generators/templates/install/auto/app/services/export_xlsx.rb +76 -0
  178. data/lib/generators/templates/install/auto/app/views/active_storage/blobs/_blob.html.erb +17 -0
  179. data/lib/generators/templates/install/auto/app/views/admin/base/_form.slim +33 -0
  180. data/lib/generators/templates/install/auto/app/views/admin/base/_object.slim +27 -0
  181. data/lib/generators/templates/install/auto/app/views/admin/base/_objects.slim +19 -0
  182. data/lib/generators/templates/install/auto/app/views/admin/base/drop.js.erb +1 -0
  183. data/lib/generators/templates/install/auto/app/views/admin/base/edit.slim +1 -0
  184. data/lib/generators/templates/install/auto/app/views/admin/base/index.slim +14 -0
  185. data/lib/generators/templates/install/auto/app/views/admin/base/new.slim +1 -0
  186. data/lib/generators/templates/install/auto/app/views/admin/helps/index.slim +29 -0
  187. data/lib/generators/templates/install/auto/app/views/admin/settings/edit.slim +27 -0
  188. data/lib/generators/templates/install/auto/app/views/kaminari/_first_page.slim +10 -0
  189. data/lib/generators/templates/install/auto/app/views/kaminari/_gap.slim +7 -0
  190. data/lib/generators/templates/install/auto/app/views/kaminari/_last_page.slim +10 -0
  191. data/lib/generators/templates/install/auto/app/views/kaminari/_next_page.slim +9 -0
  192. data/lib/generators/templates/install/auto/app/views/kaminari/_page.slim +10 -0
  193. data/lib/generators/templates/install/auto/app/views/kaminari/_paginator.slim +16 -0
  194. data/lib/generators/templates/install/auto/app/views/kaminari/_prev_page.slim +9 -0
  195. data/lib/generators/templates/install/auto/app/views/kaminari/admin/_first_page.slim +10 -0
  196. data/lib/generators/templates/install/auto/app/views/kaminari/admin/_gap.slim +8 -0
  197. data/lib/generators/templates/install/auto/app/views/kaminari/admin/_last_page.slim +10 -0
  198. data/lib/generators/templates/install/auto/app/views/kaminari/admin/_next_page.slim +10 -0
  199. data/lib/generators/templates/install/auto/app/views/kaminari/admin/_page.slim +10 -0
  200. data/lib/generators/templates/install/auto/app/views/kaminari/admin/_paginator.slim +16 -0
  201. data/lib/generators/templates/install/auto/app/views/kaminari/admin/_prev_page.slim +10 -0
  202. data/lib/generators/templates/install/auto/app/views/layouts/admin/base.slim +17 -0
  203. data/lib/generators/templates/install/auto/app/views/shared/admin/_back_button.slim +3 -0
  204. data/lib/generators/templates/install/auto/app/views/shared/admin/_footer.slim +3 -0
  205. data/lib/generators/templates/install/auto/app/views/shared/admin/_search_form.slim +6 -0
  206. data/lib/generators/templates/install/auto/app/views/shared/admin/_topbar.slim +11 -0
  207. data/lib/generators/templates/install/auto/app/views/shared/helpers/_alert_close.slim +1 -0
  208. data/lib/generators/templates/install/auto/app/views/shared/helpers/_contacts_page_link_tag.slim +1 -0
  209. data/lib/generators/templates/install/auto/app/views/shared/helpers/_link_button_to.slim +2 -0
  210. data/lib/generators/templates/install/auto/app/views/shared/helpers/_method_ajax_request_link_to.slim +2 -0
  211. data/lib/generators/templates/install/auto/app/views/shared/helpers/_method_link_to.slim +12 -0
  212. data/lib/generators/templates/install/auto/app/views/shared/helpers/_navigation_menu.html.slim +3 -0
  213. data/lib/generators/templates/install/auto/app/views/shared/helpers/_print_tag.slim +2 -0
  214. data/lib/generators/templates/install/auto/app/views/shared/helpers/_search_tag_for.slim +16 -0
  215. data/lib/generators/templates/install/auto/app/views/shared/helpers/_show_breadcrumbs.slim +7 -0
  216. data/lib/generators/templates/install/auto/app/views/shared/helpers/_show_flash_alert.slim +9 -0
  217. data/lib/generators/templates/install/auto/app/views/shared/helpers/_sortable_column.slim +3 -0
  218. data/lib/generators/templates/install/auto/app/views/shared/helpers/_span_link_to.slim +3 -0
  219. data/lib/generators/templates/install/auto/app/views/shared/helpers/_sub_navigation.slim +14 -0
  220. data/lib/generators/templates/install/auto/app/views/shared/helpers/admin/_batch_actions_tag.slim +16 -0
  221. data/lib/generators/templates/install/auto/app/views/shared/helpers/admin/_collection_button_new.slim +5 -0
  222. data/lib/generators/templates/install/auto/app/views/shared/helpers/admin/_collection_header.slim +4 -0
  223. data/lib/generators/templates/install/auto/app/views/shared/helpers/admin/_locked_sign.slim +3 -0
  224. data/lib/generators/templates/install/auto/app/views/shared/helpers/admin/_nav_published_sign.slim +1 -0
  225. data/lib/generators/templates/install/auto/app/views/shared/helpers/admin/_object_link_children.slim +2 -0
  226. data/lib/generators/templates/install/auto/app/views/shared/helpers/admin/_object_link_duplication.slim +1 -0
  227. data/lib/generators/templates/install/auto/app/views/shared/helpers/admin/_object_link_edit.slim +1 -0
  228. data/lib/generators/templates/install/auto/app/views/shared/helpers/admin/_object_link_new.slim +1 -0
  229. data/lib/generators/templates/install/auto/app/views/shared/helpers/admin/_page_header.slim +5 -0
  230. data/lib/generators/templates/install/auto/app/views/shared/helpers/admin/_published_sign.slim +1 -0
  231. data/lib/generators/templates/install/auto/app/views/shared/helpers/admin/_show_breadcrumbs.slim +6 -0
  232. data/lib/generators/templates/install/auto/app/views/shared/helpers/admin/_top_menu_item.slim +5 -0
  233. data/lib/generators/templates/install/auto/app/views/shared/helpers/admin/_unpublished_sign.slim +1 -0
  234. data/lib/generators/templates/install/auto/browserslist +3 -0
  235. data/lib/generators/templates/install/auto/config/deploy/shared/database.yml.erb +10 -0
  236. data/lib/generators/templates/install/auto/config/deploy/shared/nginx.conf.erb +28 -0
  237. data/lib/generators/templates/install/auto/config/deploy/shared/unicorn.rb.erb +35 -0
  238. data/lib/generators/templates/install/auto/config/deploy/staging.rb +12 -0
  239. data/lib/generators/templates/install/auto/config/environments/staging.rb +84 -0
  240. data/lib/generators/templates/install/auto/config/initializers/awesome_nested_set.rb +1 -0
  241. data/lib/generators/templates/install/auto/config/initializers/content_security_policy.rb +26 -0
  242. data/lib/generators/templates/install/auto/config/initializers/friendly_id.rb +1 -0
  243. data/lib/generators/templates/install/auto/config/initializers/kaminari_config.rb +15 -0
  244. data/lib/generators/templates/install/auto/config/initializers/simple_form.rb +238 -0
  245. data/lib/generators/templates/install/auto/config/initializers/slim.rb +2 -0
  246. data/lib/generators/templates/install/auto/config/locales/adminos.en.yml +164 -0
  247. data/lib/generators/templates/install/auto/config/locales/adminos.ru.yml +292 -0
  248. data/lib/generators/templates/install/auto/lib/capistrano/substitute_strings.rb +12 -0
  249. data/lib/generators/templates/install/auto/lib/capistrano/tasks/setup_config.cap +39 -0
  250. data/lib/generators/templates/install/auto/lib/capistrano/template.rb +33 -0
  251. data/lib/generators/templates/install/auto/public/404.html +26 -0
  252. data/lib/generators/templates/install/auto/public/500.html +25 -0
  253. data/lib/generators/templates/install/database.yml +19 -0
  254. data/lib/generators/templates/install/deploy.rb.erb +21 -0
  255. data/lib/generators/templates/install/install_devise/ability.rb +49 -0
  256. data/lib/generators/templates/install/install_devise/application.rb +7 -0
  257. data/lib/generators/templates/install/install_devise/prepare_users.rb +1 -0
  258. data/lib/generators/templates/install/install_devise/user.rb +21 -0
  259. data/lib/generators/templates/install/prepare_settings.rb +4 -0
  260. data/lib/generators/templates/install/routes/pages.rb +18 -0
  261. data/lib/generators/templates/install/routes.rb.erb +53 -0
  262. data/lib/generators/templates/install/settings_migration.rb +16 -0
  263. data/lib/generators/templates/install/webpack/custom.js +36 -0
  264. data/lib/generators/templates/install/webpack/environment.js +4 -0
  265. data/lib/generators/templates/install/webpack/javascript/admin/js/index.js +2 -0
  266. data/lib/generators/templates/install/webpack/javascript/admin/styles/admin.scss +2 -0
  267. data/lib/generators/templates/install/webpack/javascript/packs/admin.js +2 -0
  268. data/package-lock.json +3 -0
  269. data/spec/config/database.yml +2 -0
  270. data/spec/db/schema.rb +0 -0
  271. data/spec/lib/adminos/helpers/models/apply_sortable_order.rb +26 -0
  272. data/spec/lib/adminos/helpers/models/array_attrs_spec.rb +38 -0
  273. data/spec/lib/adminos/helpers/models/dom_id_spec.rb +41 -0
  274. data/spec/lib/adminos/helpers/models/flag_attrs_spec.rb +115 -0
  275. data/spec/lib/adminos/helpers/models/if_blank_set_to_nil_params_spec.rb +36 -0
  276. data/spec/lib/adminos/helpers/models/recognizable_spec.rb +40 -0
  277. data/spec/lib/adminos/helpers/models/slugged.rb +40 -0
  278. data/spec/lib/generators/adminos/adminos_generator_spec.rb +106 -0
  279. data/spec/lib/generators/adminos/ci_generator_spec.rb +88 -0
  280. data/spec/lib/generators/adminos/i18n_generator_spec.rb +31 -0
  281. data/spec/lib/generators/adminos/install_generator_rspec.rb +322 -0
  282. data/spec/spec_helper.rb +122 -0
  283. data/spec/support/ammeter.rb +14 -0
  284. data/spec/support/database.rb +29 -0
  285. data/spec/support/generators.rb +99 -0
  286. data/spec/support/post.rb +8 -0
  287. data/spec/support/shared/generator.rb +35 -0
  288. metadata +632 -0
@@ -0,0 +1,164 @@
1
+ require 'rails/generators/active_record'
2
+
3
+ module Adminos::Generators
4
+ class AdminosGenerator < ActiveRecord::Generators::Base
5
+ desc 'Creates defined model, migration and adds adminos-structured files'
6
+
7
+ source_root File.expand_path '../../templates/adminos', __FILE__
8
+
9
+ argument :attributes, type: :array, default: []
10
+ hook_for :orm, required: true, as: :model
11
+
12
+ class_option :type, type: :string, enum: Dir["#{source_root}/types/*"].map(&File.method(:basename)), default: 'default', desc: 'Model type'
13
+ class_option :locale, type: :boolean
14
+ class_option :search, type: :string
15
+ class_option :seo, type: :boolean, default: true, desc: 'Include SEO fields in generated model'
16
+
17
+ def extend_model
18
+ model = "app/models/#{file_name}.rb"
19
+ if File.exist?(model)
20
+ inject_into_file model, file_content('model_includes.rb', true), after: /ApplicationRecord\n/
21
+ inject_into_file model, erb_file_content('model.rb', true), before: /^\Snd\n/
22
+ end
23
+ end
24
+
25
+ def extend_migration
26
+ file = Dir.glob('db/migrate/*.rb').grep(/\d+_create_#{table_name}.rb$/).first
27
+
28
+ return unless file
29
+ inject_into_file file, file_content('migration.rb', true), after: /create_table.*\n/
30
+
31
+ if drag_type?
32
+ inject_into_file file, "\n\n add_index :#{table_name}, :parent_id\n add_index :#{table_name}, :rgt", after: / end/
33
+ end
34
+
35
+ unless options.seo?
36
+ gsub_file(file, /^.+(:meta_description|:meta_title)$/, '')
37
+ end
38
+ end
39
+
40
+ def extend_routes
41
+ inject_into_file 'config/routes.rb', route_content, after: 'namespace :admin do'
42
+ end
43
+
44
+ def extend_navbar
45
+ inject_into_file 'app/views/shared/admin/_sidebar.slim', erb_file_content('sidebar.slim'), after: /.*nav__group-content--other\n/
46
+ end
47
+
48
+ def extend_locale
49
+ locale_path = File.exist?('config/locales/adminos.ru.yml') ? 'config/locales/adminos.ru.yml' : 'config/locales/ru.yml'
50
+ inject_into_file locale_path, erb_file_content('adminos.ru.yml'), before: /.*helps:\n/
51
+ end
52
+
53
+ def create_controller
54
+ template "types/#{options.type}/controller.rb.erb", "app/controllers/admin/#{table_name}_controller.rb"
55
+ end
56
+
57
+ def copy_views
58
+ template 'fields.slim', "app/views/admin/#{table_name}/_fields.slim"
59
+ directory "types/#{options.type}/views", "app/views/admin/#{table_name}"
60
+ end
61
+
62
+ def locale_specific_actions
63
+ return unless options.locale? || attributes.map(&:locale).any?
64
+
65
+ template 'locales/locale_fields.slim', "app/views/admin/#{table_name}/_locale_fields.slim"
66
+ template 'locales/general_fields.slim', "app/views/admin/#{table_name}/_general_fields.slim" #unless attributes.map(&:locale).delete_if{|e| e == true}.blank?
67
+ remove_file "app/views/admin/#{table_name}/_fields.slim"
68
+
69
+ if File.exist?("app/models/#{file_name}.rb")
70
+ inject_into_file "app/models/#{file_name}.rb", erb_file_content('locales/model.rb.erb'), before: /^\Snd\n/
71
+ end
72
+ comment_lines "app/models/#{file_name}.rb", /validates :name/
73
+
74
+ if File.exist?("app/controllers/admin/#{table_name}_controller.rb")
75
+ inject_into_file "app/controllers/admin/#{table_name}_controller.rb", " filter_by_locale: true,\n", before: /.*find_by_slug.*\n/
76
+ end
77
+
78
+ migration_template 'locales/migration.rb.erb', "db/migrate/add_translation_table_to_#{file_name}.rb"
79
+
80
+ unless options.seo?
81
+ file = Dir.glob('db/migrate/*.rb').grep(/\d+_add_translation_table_to_#{file_name}.rb$/).first
82
+ gsub_file(file, /.+(meta_description|meta_title).+/, '')
83
+ end
84
+ end
85
+
86
+ def sort_specific_actions
87
+ return unless attributes.map(&:sort).any? || table_type?
88
+ inject_into_file "app/views/admin/#{table_name}/index.slim", erb_file_content('sorts/headers.slim'), before: /.*\%th\.icon.*\n/
89
+ inject_into_file "app/views/admin/#{table_name}/index.slim", erb_file_content('sorts/body.slim'), before: /.*\%td= object_link_edit\(object\).*\n/
90
+ end
91
+
92
+ def search_specific_actions
93
+ return unless options.search?
94
+
95
+ inject_into_file "app/models/#{file_name}.rb", "\n scoped_search on: #{options.search.split(',').map { |s| s.strip.to_sym }}\n", before: /^\Snd\n/
96
+ inject_into_file "app/views/admin/#{table_name}/index.slim", "\n= render 'shared/admin/search_form'\n", after: /= collection_header\n/
97
+ inject_into_file "app/controllers/admin/#{table_name}_controller.rb", '.search_for(params[:query])', after: /.*\|\|\= collection_orig/
98
+ end
99
+
100
+ protected
101
+
102
+ def file_content(file, type = nil)
103
+ prefix = type ? 'types/' + target_type + '/' : ''
104
+ IO.read find_in_source_paths prefix + file
105
+ end
106
+
107
+ def erb_file_content(file, type = nil)
108
+ ERB.new(file_content(file, type), nil, '-').result(instance_eval('binding'))
109
+ end
110
+
111
+ def target_type
112
+ table_type? ? 'default' : options.type
113
+ end
114
+
115
+ def table_type?
116
+ options.type == 'table'
117
+ end
118
+
119
+ def drag_type?
120
+ %w[section sortable].include? options.type
121
+ end
122
+
123
+ def route_content
124
+ spaces = (options.locale? || attributes.map(&:locale).any? ? ' ' : ' ')
125
+
126
+ if drag_type?
127
+ <<-eos
128
+
129
+ #{spaces}resources :#{table_name}, except: :show do
130
+ #{spaces} collection { post :batch_action }
131
+ #{spaces} member { put :drop }
132
+ #{spaces} member { post :duplication }
133
+ #{spaces}end
134
+ eos
135
+ else
136
+ <<-eos
137
+
138
+ #{spaces}resources :#{table_name}, except: :show do
139
+ #{spaces} collection { post :batch_action }
140
+ #{spaces} member { post :duplication }
141
+ #{spaces}end
142
+ eos
143
+ end
144
+ end
145
+ end
146
+ end
147
+
148
+ # Extend rails to add locale instance variable to attribute
149
+ module Rails::Generators
150
+ module ExtraAttribute
151
+ attr_accessor :locale, :sort
152
+
153
+ def initialize(name, type = nil, index_type = false, attr_options = {})
154
+ @locale = true if index_type == 'locale'
155
+ @sort = true if index_type == 'sort'
156
+
157
+ super
158
+ end
159
+ end
160
+
161
+ class GeneratedAttribute
162
+ prepend ExtraAttribute
163
+ end
164
+ end
@@ -0,0 +1,124 @@
1
+ require 'adminos/generators/utilities'
2
+ require 'rails/generators/base'
3
+
4
+ module Adminos::Generators
5
+ class CiGenerator < Rails::Generators::Base
6
+ include Utilities
7
+
8
+ desc 'Set up CI'
9
+
10
+ source_root File.expand_path '../../templates/ci', __FILE__
11
+
12
+ # ActiveRecord::Generators::Base requires a NAME parameter.
13
+ argument :name, type: :string, default: 'random_name'
14
+
15
+ # options
16
+ class_option :gitlab, type: :boolean, default: true, desc: 'Set up Gitlab CI'
17
+
18
+ TEST_STEPS = {
19
+ audit: {
20
+ desc: 'Audit dependencies using bundler-audit',
21
+ gemfile: true,
22
+ binstubs: %w[bundler-audit],
23
+ rakelib: true,
24
+ ci_job: <<~YAML
25
+ script: bin/rake bundle:audit
26
+ YAML
27
+ },
28
+ spec: {
29
+ desc: 'Specify application with RSpec',
30
+ gemfile: true,
31
+ binstubs: %w[rspec-core],
32
+ ci_job: <<~YAML
33
+ script: bin/rake spec
34
+ artifacts:
35
+ paths:
36
+ - coverage/
37
+ - spec/examples.txt
38
+ YAML
39
+ },
40
+ lint: {
41
+ desc: 'Lint dependencies with RuboCop',
42
+ gemfile: true,
43
+ rakelib: true,
44
+ binstubs: %w[rubocop],
45
+ ci_job: <<~YAML
46
+ script: bin/rubocop
47
+ allow_failure: true
48
+ YAML
49
+ }
50
+ }
51
+
52
+ TEST_STEPS.each do |name, default: true, desc:, **|
53
+ class_option name, type: :boolean, default: default, desc: desc
54
+ end
55
+
56
+ def bundle_dependencies
57
+ gems = []
58
+ TEST_STEPS.each do |name, gemfile: false, binstubs: [], **|
59
+ next unless options[name]
60
+
61
+ merge_gemfile_with("#{name}/Gemfile") if gemfile
62
+ gems += binstubs
63
+ end
64
+ install_dependencies
65
+ binstubs(*gems)
66
+ end
67
+
68
+ def setup_rakelib
69
+ TEST_STEPS.each do |name, rakelib: false, **|
70
+ next unless options[name] && rakelib
71
+
72
+ copy_file "rakelib/#{name}.rake"
73
+ end
74
+ end
75
+
76
+ def setup_gitlab
77
+ return unless options.gitlab?
78
+
79
+ template '.gitlab-ci.yml'
80
+ TEST_STEPS.each do |name, ci_job: true, **|
81
+ next unless options[name] && ci_job
82
+
83
+ ci_job name, ci_job
84
+ end
85
+ end
86
+
87
+ def setup_rspec
88
+ return unless options.spec?
89
+
90
+ # Generate standard RSpec configuration
91
+ generate 'rspec:install'
92
+
93
+ # Uncomment good defaults
94
+ gsub_file 'spec/spec_helper.rb', /\n=begin\n/, "\n"
95
+ gsub_file 'spec/spec_helper.rb', /\n=end\n/, "\n"
96
+
97
+ # Inject Adminos helpers
98
+ inject_into_file 'spec/rails_helper.rb', after: "RSpec.configure do |config|\n" do
99
+ indent_code(<<~RUBY) << "\n"
100
+ config.include FactoryBot::Syntax::Methods
101
+ config.include ActionDispatch::TestProcess
102
+
103
+ config.before :suite do
104
+ DatabaseCleaner.strategy = :truncation
105
+ end
106
+ RUBY
107
+ end
108
+ end
109
+
110
+ def setup_rubocop
111
+ return unless options.lint?
112
+
113
+ template 'lint/rubocop.yml', '.rubocop.yml'
114
+ run_in_root 'bin/rubocop --auto-gen-config &>/dev/null'
115
+ end
116
+
117
+ private
118
+
119
+ def ci_job(name, contents)
120
+ job = "#{name}:\n#{contents.gsub(/^/, ' ')}"
121
+ append_file '.gitlab-ci.yml', job
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,105 @@
1
+ require 'rails/generators/active_record'
2
+
3
+ module Adminos::Generators
4
+ class FieldGenerator < ActiveRecord::Generators::Base
5
+ desc 'Creates defined model, migration and adds adminos-structured files'
6
+
7
+ source_root File.expand_path '../../templates/field', __FILE__
8
+
9
+ argument :attributes, type: :array, default: []
10
+
11
+ def generated_locale_migration
12
+ return unless attributes.any?(&:locale)
13
+ attrs = attributes.select(&:locale).map(&:name).join('_')
14
+ raise "You should add support for globalize: table: #{table_name} and fields: #{attrs}" if !model_tranlated?
15
+
16
+ migration_template 'locales/migration.rb.erb', "db/migrate/add_translation_fields_#{attrs}_to_#{file_name}.rb"
17
+ end
18
+
19
+ def generated_migration
20
+ return if attributes.all?(&:locale)
21
+
22
+ attrs = attributes.reject(&:locale).map(&:name).join('_')
23
+ attrs_with_type = attributes.reject(&:locale).map { |a| "#{a.name}:#{a.type}" }.join(' ')
24
+
25
+ system %( rails generate migration add_#{attrs}_to_#{file_name} #{attrs_with_type} )
26
+ end
27
+
28
+ def extend_model
29
+ return unless attributes.any?(&:locale)
30
+
31
+ attrs = attributes.select(&:locale).map { |a| ":#{a.name}" }.join(', ')
32
+
33
+ if model_tranlated?
34
+ inject_into_file "app/models/#{file_name}.rb", attrs, after: /translates /
35
+ else
36
+ inject_into_file "app/models/#{file_name}.rb", erb_file_content('locales/model.rb.erb'), before: /^\Snd\n/
37
+ comment_lines "app/models/#{file_name}.rb", /validates :name/
38
+ end
39
+ end
40
+
41
+ def extend_locale_view
42
+ return unless attributes.any?(&:locale)
43
+
44
+ attrs = attributes.select(&:locale).map { |a| " = f.input :#{a.name}\n" }.compact.join
45
+
46
+ locale_fields_path = "app/views/admin/#{table_name}/_locale_fields.slim"
47
+
48
+ if File.exist?(locale_fields_path)
49
+ append_file "app/views/admin/#{table_name}/_locale_fields.slim", attrs
50
+ else
51
+ template 'locales/locale_fields.slim', "app/views/admin/#{table_name}/_locale_fields.slim"
52
+ end
53
+ end
54
+
55
+ def extend_view
56
+ return if attributes.all?(&:locale)
57
+
58
+ attrs = attributes.reject(&:locale).map { |a| " = f.input :#{a.name}\n" }.compact.join
59
+ append_file "app/views/admin/#{table_name}/_fields.slim", attrs
60
+ end
61
+
62
+ def extend_locale_file
63
+ locale_path = File.exist?('config/locales/adminos.ru.yml') ? 'config/locales/adminos.ru.yml' : 'config/locales/ru.yml'
64
+ locale = YAML.load(File.read(locale_path))
65
+
66
+ attributes.map(&:name).each do |a|
67
+ if locale['ru']['activerecord']['attributes'][table_name.singularize]
68
+ locale['ru']['activerecord']['attributes'][table_name.singularize][a] = a
69
+ else
70
+ locale['ru']['activerecord']['attributes'].merge!("#{table_name.singularize}" => { a => a })
71
+ end
72
+ end
73
+
74
+ File.open(locale_path, 'w') { |f| f.write(YAML.dump(locale)) }
75
+ end
76
+
77
+ private
78
+
79
+ def file_content(file, type = nil)
80
+ prefix = type ? 'types/' + target_type + '/' : ''
81
+ IO.read find_in_source_paths prefix + file
82
+ end
83
+
84
+ def erb_file_content(file, type = nil)
85
+ ERB.new(file_content(file, type), nil, '-').result(instance_eval('binding'))
86
+ end
87
+
88
+ def model_tranlated?
89
+ table_name.singularize.classify.constantize.translates?
90
+ end
91
+ end
92
+ end
93
+
94
+ # Extend rails to add locale instance variable to attribute
95
+ module Rails::Generators
96
+ class GeneratedAttribute
97
+ attr_accessor :locale
98
+
99
+ def initialize_with_attributes(name, type = nil, index_type = false, attr_options = {})
100
+ @locale = true if index_type == 'locale'
101
+ initialize_without_attributes name, type, index_type, attr_options
102
+ end
103
+ alias_method_chain :initialize, :attributes
104
+ end
105
+ end
@@ -0,0 +1,76 @@
1
+ require "adminos/generators/utilities"
2
+ require "rails/generators/actions"
3
+ require "rails/generators/active_record/migration"
4
+ require "rails/generators/base"
5
+
6
+ module Adminos::Generators
7
+ class I18nGenerator < Rails::Generators::Base
8
+ include ActiveRecord::Generators::Migration
9
+ include Utilities
10
+
11
+ desc 'Set up I18n'
12
+ source_root File.expand_path '../../templates/i18n', __FILE__
13
+
14
+ class_option :devise, type: :boolean, desc: 'Add Devise views (login page, etc...) and locales?', default: false
15
+ class_option :russian, type: :boolean, default: true
16
+ class_option :locales, type: :array, default: %w[ru en]
17
+ class_option :pages, type: :boolean, default: false
18
+
19
+ def bundle_dependencies
20
+ merge_gemfile_with('Gemfile')
21
+ install_dependencies
22
+ end
23
+
24
+ def configure_application
25
+ inject_into_file 'config/application.rb', " config.i18n.available_locales = #{available_locales}\n", after: /Rails::Application\n/
26
+ end
27
+
28
+ def localize_russian
29
+ return unless options.russian?
30
+
31
+ inject_into_file 'config/application.rb', " config.time_zone = 'Moscow'\n", after: /Rails::Application\n/
32
+ inject_into_file 'config/application.rb', " config.i18n.default_locale = :ru\n", after: /Rails::Application\n/
33
+ end
34
+
35
+ def localize_devise
36
+ return unless options.devise?
37
+
38
+ directory 'devise/views', 'app/views/devise', mode: :preserve
39
+ copy_file 'devise/devise.ru.yml', 'config/locales/devise.ru.yml'
40
+ end
41
+
42
+ def inject_routes
43
+ inject_into_file 'config/routes.rb', ' ', before: / .*/, force: true
44
+ inject_into_file 'config/routes.rb', "\n scope '(:locale)', locale: /\#{I18n.available_locales.join('|')}/ do \n", before: /namespace/
45
+ inject_into_file 'config/routes.rb', ' ', before: /namespace/, force: true
46
+ inject_into_file 'config/routes.rb', "\n end", after: /.*root to: 'index#index'/
47
+
48
+ inject_into_file 'app/controllers/application_controller.rb', ', :set_locale', after: /.*before_action :reload_routes/
49
+ inject_into_file 'app/controllers/application_controller.rb', file_content('controller.rb'), after: /.*protected\n/
50
+
51
+ inject_into_file 'app/views/shared/admin/_footer.slim', file_content('locales.slim'), after: /.*wrapper\n/
52
+ end
53
+
54
+ def localize_pages
55
+ return unless options.pages?
56
+
57
+ migration_template 'add_translation_table_to_page.rb', 'db/migrate/add_translation_table_to_page.rb'
58
+ inject_into_file 'app/models/page.rb', file_content('page.rb'), before: /.*BEHAVIORS = .*/
59
+ comment_lines 'app/models/page.rb', /validates :name/
60
+ inject_into_file 'app/models/page.rb', ', :translations_attributes', after: /.*:parent_id, :published/
61
+ inject_into_file 'app/controllers/admin/pages_controller.rb', " filter_by_locale: true,\n", after: /.*[:sorted],\n/
62
+ inject_into_file 'app/controllers/application_controller.rb', " before_action :check_page_name_locale, unless: -> { controller_path.split('/').first == 'admin' }", after: /.*before_action.*\n/
63
+ remove_file 'app/views/admin/pages/_fields.slim'
64
+ end
65
+
66
+ def inject_files
67
+ directory 'auto', '.'
68
+ end
69
+
70
+ private
71
+
72
+ def available_locales
73
+ options.locales.reject(&:blank?).map { |s| s.strip.to_sym }.unshift(:ru).uniq
74
+ end
75
+ end
76
+ end