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,19 @@
1
+ class Admin::<%= table_name.camelize %>Controller < Admin::BaseController
2
+ authorize_resource param_method: :strong_params
3
+
4
+ resource(<%= file_name.camelize %>,
5
+ collection_scope: [:sorted],
6
+ location: proc { params[:stay_in_place] ?
7
+ edit_polymorphic_path([:admin, resource]) :
8
+ polymorphic_path([:admin, resource.class]) },
9
+ finder: :find_by_slug!)
10
+
11
+ private
12
+
13
+ alias_method :collection_orig, :collection
14
+ def collection
15
+ @collection ||= collection_orig
16
+ .page(params[:page]).per(settings.per_page)
17
+ .order("#{params[:order_by]} #{params[:direction]}")
18
+ end
19
+ end
@@ -0,0 +1,31 @@
1
+ - collection_title
2
+ = collection_header
3
+
4
+ - if collection.present?
5
+ - pagination = capture do
6
+ - if collection.respond_to?(:current_page)
7
+ = paginate collection, theme: :admin
8
+
9
+ - list = capture do
10
+ = pagination
11
+ .table-list
12
+ table.table.table-hover.table-sm
13
+ thead
14
+ tr
15
+ th= admin_sortable_column :name, resource_class.human_attribute_name(:name)
16
+ th
17
+ th
18
+ tbody
19
+ - collection.each do |object|
20
+ tr
21
+ td= link_to object.name, polymorphic_path([:admin, object], action: :edit)
22
+ td.table-list__controls= object_link_edit(object)
23
+ td.table-list__check= admin_cb(object)
24
+ = pagination
25
+
26
+ - if controller.respond_to?(:batch_action)
27
+ = batch_actions_tag publication: (collection.respond_to?(:set_each_published_on)),
28
+ nav_publication: (collection.respond_to?(:set_nav_published_on)) do
29
+ = list
30
+ - else
31
+ = list
@@ -0,0 +1,40 @@
1
+ variables:
2
+ RAILS_ENV: test
3
+
4
+ before_script:
5
+ - rvm install $(cat .ruby-version)
6
+ - rvm use $(cat .ruby-version)
7
+ - gem install bundler --no-ri --no-rdoc
8
+ - bundle config build.pg --with-pg-config=/usr/pgsql-9.4/bin/pg_config
9
+ - bin/setup
10
+
11
+ cache:
12
+ untracked: true
13
+ paths:
14
+ - node_modules
15
+
16
+ deploy to staging:
17
+ stage: deploy
18
+ script:
19
+ - eval $(ssh-agent -s)
20
+ - ssh-add <(echo -e "$SSH_STAGING_KEY")
21
+ - bin/cap staging deploy
22
+ only:
23
+ refs: [develop]
24
+ when: manual
25
+ environment:
26
+ name: staging
27
+ url: http://staging.example.test
28
+
29
+ deploy to production:
30
+ stage: deploy
31
+ script:
32
+ - eval $(ssh-agent -s)
33
+ - ssh-add <(echo -e "$SSH_PRODUCTION_KEY")
34
+ - bin/cap production deploy
35
+ only:
36
+ refs: [master]
37
+ when: manual
38
+ environment:
39
+ name: production
40
+ url: http://example.test
@@ -0,0 +1,3 @@
1
+ group :development, :test do
2
+ gem 'bundler-audit'
3
+ end
@@ -0,0 +1,3 @@
1
+ group :lint do
2
+ gem 'rubocop'
3
+ end
@@ -0,0 +1,116 @@
1
+ AllCops:
2
+ TargetRubyVersion: <%= rubocop_target_ruby_version %>
3
+ # RuboCop has a bunch of cops enabled by default. This setting tells RuboCop
4
+ # to ignore them, so only the ones explicitly set in this file are enabled.
5
+ DisabledByDefault: true
6
+ Exclude:
7
+ - vendor
8
+
9
+ # Prefer &&/|| over and/or.
10
+ Style/AndOr:
11
+ Enabled: true
12
+
13
+ # Do not use braces for hash literals when they are the last argument of a
14
+ # method call.
15
+ Style/BracesAroundHashParameters:
16
+ Enabled: true
17
+
18
+ # Align `when` with `case`.
19
+ Layout/CaseIndentation:
20
+ Enabled: true
21
+
22
+ # Align comments with method definitions.
23
+ Layout/CommentIndentation:
24
+ Enabled: true
25
+
26
+ # No extra empty lines.
27
+ Layout/EmptyLines:
28
+ Enabled: true
29
+
30
+ # In a regular class definition, no empty lines around the body.
31
+ Layout/EmptyLinesAroundClassBody:
32
+ Enabled: true
33
+
34
+ # In a regular method definition, no empty lines around the body.
35
+ Layout/EmptyLinesAroundMethodBody:
36
+ Enabled: true
37
+
38
+ # In a regular module definition, no empty lines around the body.
39
+ Layout/EmptyLinesAroundModuleBody:
40
+ Enabled: true
41
+
42
+ # Use Ruby >= 1.9 syntax for hashes. Prefer { a: :b } over { :a => :b }.
43
+ Style/HashSyntax:
44
+ Enabled: true
45
+
46
+ # Method definitions after `private` or `protected` isolated calls need one
47
+ # extra level of indentation.
48
+ Layout/IndentationConsistency:
49
+ Enabled: true
50
+
51
+ # Two spaces, no tabs (for indentation).
52
+ Layout/IndentationWidth:
53
+ Enabled: true
54
+
55
+ Layout/SpaceAfterColon:
56
+ Enabled: true
57
+
58
+ Layout/SpaceAfterComma:
59
+ Enabled: true
60
+
61
+ Layout/SpaceAroundEqualsInParameterDefault:
62
+ Enabled: true
63
+
64
+ Layout/SpaceAroundKeyword:
65
+ Enabled: true
66
+
67
+ Layout/SpaceAroundOperators:
68
+ Enabled: true
69
+
70
+ Layout/SpaceBeforeFirstArg:
71
+ Enabled: true
72
+
73
+ # Defining a method with parameters needs parentheses.
74
+ Style/MethodDefParentheses:
75
+ Enabled: true
76
+
77
+ # Use `foo {}` not `foo{}`.
78
+ Layout/SpaceBeforeBlockBraces:
79
+ Enabled: true
80
+
81
+ # Use `foo { bar }` not `foo {bar}`.
82
+ Layout/SpaceInsideBlockBraces:
83
+ Enabled: true
84
+
85
+ # Use `{ a: 1 }` not `{a:1}`.
86
+ Layout/SpaceInsideHashLiteralBraces:
87
+ Enabled: true
88
+
89
+ Layout/SpaceInsideParens:
90
+ Enabled: true
91
+
92
+ # Detect hard tabs, no hard tabs.
93
+ Layout/Tab:
94
+ Enabled: true
95
+
96
+ # Blank lines should not have any spaces.
97
+ Layout/TrailingBlankLines:
98
+ Enabled: true
99
+
100
+ # No trailing whitespace.
101
+ Layout/TrailingWhitespace:
102
+ Enabled: true
103
+
104
+ # Use quotes for string literals when they are enough.
105
+ Style/UnneededPercentQ:
106
+ Enabled: true
107
+
108
+ # Align `end` with the matching keyword or starting expression except for
109
+ # assignments, where it should be aligned with the LHS.
110
+ Layout/EndAlignment:
111
+ Enabled: true
112
+ EnforcedStyleAlignWith: variable
113
+
114
+ # Use my_method(my_arg) not my_method( my_arg ) or my_method my_arg.
115
+ Lint/RequireParentheses:
116
+ Enabled: true
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ begin
4
+ require 'bundler/audit/task'
5
+
6
+ Bundler::Audit::Task.new
7
+ rescue LoadError => e
8
+ namespace :bundle do
9
+ task :audit do
10
+ abort e.message unless Rails.env.development? || Rails.env.test?
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ begin
4
+ require 'rubocop/rake_task'
5
+
6
+ RuboCop::RakeTask.new
7
+
8
+ task lint: :rubocop
9
+ rescue LoadError => e
10
+ task :lint do
11
+ abort e.message unless Rails.env.development? || Rails.env.test?
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ group :development, :test do
2
+ # gem 'spring-commands-rspec' #for spring speed test
3
+ gem 'database_cleaner'
4
+ gem 'factory_bot_rails'
5
+ gem 'faker'
6
+ gem 'minitest'
7
+ gem 'rspec-rails'
8
+ gem 'shoulda-matchers'
9
+ end
@@ -0,0 +1,4 @@
1
+ .f__fieldset
2
+ <% attributes.select(&:locale).each do |attribute| -%>
3
+ <%= " = f.input :#{attribute.name}\n" -%>
4
+ <% end -%>
@@ -0,0 +1,13 @@
1
+ class AddTranslationFields<%= attributes.select(&:locale).map(&:name).join('_').camelize %>To<%= file_name.camelize %> < ActiveRecord::Migration[5.1]
2
+ def up
3
+ <% attributes.select(&:locale).each do |attribute| -%>
4
+ <%= file_name.camelize %>.add_translation_fields! <%= attribute.name %>: :<%= attribute.type %>
5
+ <% end -%>
6
+ end
7
+
8
+ def down
9
+ <% attributes.select(&:locale).each do |attribute| -%>
10
+ remove_column :<%= file_name %>_translations, :<%= attribute.name %>
11
+ <% end -%>
12
+ end
13
+ end
@@ -0,0 +1,6 @@
1
+
2
+ translates :name, <%= attributes.map{|a| ":#{a.name}" }.compact.join(', ') %>
3
+
4
+ accepts_nested_attributes_for :translations
5
+
6
+ validates_with LocaleValidator
@@ -0,0 +1 @@
1
+ gem 'globalize'
@@ -0,0 +1,15 @@
1
+ class AddTranslationTableToPage < ActiveRecord::Migration[5.1]
2
+ def up
3
+ Page.create_translation_table!({
4
+ name: :string,
5
+ nav_name: :string,
6
+ body: :text,
7
+ meta_description: :text,
8
+ meta_title: :string
9
+ }, migrate_data: true)
10
+ end
11
+
12
+ def down
13
+ Page.drop_translation_table! migrate_data: true
14
+ end
15
+ end
@@ -0,0 +1,23 @@
1
+ # Checking on fill at least one field
2
+
3
+ class LocaleValidator < ActiveModel::Validator
4
+ def validate(record)
5
+ fields = options[:fields] || [:name]
6
+
7
+ fields.each do |field|
8
+ validations(field, record)
9
+ end
10
+ end
11
+
12
+ private
13
+
14
+ def validations(field, record)
15
+ validate_name = false
16
+ I18n.available_locales.each do |locale|
17
+ validate_name = true unless record.translation_for(locale).send(field).blank?
18
+ end
19
+ validate_name = true if record.send(field).presence
20
+
21
+ record.errors.add(field, 'Укажите Название хотя бы в одной локали') unless validate_name
22
+ end
23
+ end
@@ -0,0 +1 @@
1
+ = render 'pills', f: f
@@ -0,0 +1,19 @@
1
+ - general = lookup_context.template_exists?('general_fields', lookup_context.prefixes, true)
2
+
3
+ - if general
4
+ = render 'general_fields', f: f
5
+
6
+ ul.nav.nav-tabs.with-togglable-navigation
7
+ - I18n.available_locales.each_with_index do |locale, i|
8
+ li.nav-item
9
+ a.nav-link href="#pill_#{locale}" class=('active' if locale == :ru) data-toggle="pill"
10
+ = locale
11
+
12
+ .tab-content
13
+ - I18n.available_locales.each_with_index do |locale, i|
14
+ .tab-pane id="pill_#{locale}" class=('active' if locale == :ru)
15
+ - if locale == I18n.default_locale
16
+ = render 'locale_fields', locale: locale, f: f
17
+ - else
18
+ = f.globalize_fields_for locale, wrapper: :admin do |g|
19
+ = render 'locale_fields', locale: locale, f: g
@@ -0,0 +1,8 @@
1
+ .f__fieldset
2
+ .hidden
3
+ = f.input :behavior, as: :select, wrapper: :select,
4
+ collection: resource.class::BEHAVIORS.map { |b| [resource.class.human_behavior_name(b), b]},
5
+ include_blank: false
6
+ = f.input :slug
7
+ = f.input :published, wrapper: :check
8
+ = f.input :nav_published, wrapper: :check
@@ -0,0 +1,13 @@
1
+ .f__fieldset
2
+ = f.input :name
3
+ = f.input :nav_name
4
+
5
+ = f.rich_text_area :content
6
+ / = f.input :body
7
+ /.kaya-please
8
+ = f.input_field :body, as: :text, id: 'kaya-editor', value: f.object.read_attribute(:body)
9
+
10
+ .f__fieldset
11
+ .f__legend= t 'labels.admin.legend.seo'
12
+ = f.input :meta_title
13
+ = f.input :meta_description, as: :string
@@ -0,0 +1 @@
1
+ require 'adminos/extensions/globalize_fields'
@@ -0,0 +1,12 @@
1
+
2
+ def set_locale
3
+ I18n.locale = params[:locale] || I18n.default_locale
4
+ end
5
+
6
+ def default_url_options
7
+ I18n.locale == I18n.default_locale ? { locale: nil } : { locale: I18n.locale }
8
+ end
9
+
10
+ def check_page_name_locale
11
+ redirect_to root_path if current_page.try { name.blank? }
12
+ end
@@ -0,0 +1,60 @@
1
+ ru:
2
+ errors:
3
+ messages:
4
+ expired: "устарела. Пожалуйста, запросите новую"
5
+ not_found: "не найдена"
6
+ already_confirmed: "уже подтверждена. Пожалуйста, попробуйте войти в систему"
7
+ not_locked: "не заблокирована"
8
+ not_saved:
9
+ one: "%{resource}: сохранение не удалось из-за %{count} ошибки"
10
+ few: "%{resource}: сохранение не удалось из-за %{count} ошибок"
11
+ many: "%{resource}: сохранение не удалось из-за %{count} ошибок"
12
+ other: "%{resource}: сохранение не удалось из-за %{count} ошибки"
13
+
14
+ devise:
15
+ failure:
16
+ already_authenticated: "Вы уже вошли в систему."
17
+ unauthenticated: "Вам необходимо войти в систему или зарегистрироваться."
18
+ unconfirmed: "Вы должны подтвердить вашу учётную запись."
19
+ locked: "Ваша учётная запись заблокирована."
20
+ invalid: "Неверный адрес e-mail или пароль."
21
+ invalid_token: "Неверный ключ аутентификации."
22
+ timeout: "Ваш сеанс закончился. Пожалуйста, войдите в систему снова."
23
+ inactive: "Ваша учётная запись ещё не активирована."
24
+ user:
25
+ not_found_in_database: "Неверный адрес e-mail или пароль."
26
+ sessions:
27
+ signed_in: "Вход в систему выполнен."
28
+ signed_out: "Выход из системы выполнен."
29
+ passwords:
30
+ send_instructions: "В течение нескольких минут вы получите письмо с инструкциями по восстановлению вашего пароля."
31
+ updated: "Ваш пароль изменён. Теперь вы вошли в систему."
32
+ updated_not_active: 'Ваш пароль изменен.'
33
+ send_paranoid_instructions: "Если ваш адрес e-mail есть в нашей базе данных, то в течение нескольких минут вы получите письмо с инструкциями по восстановлению вашего пароля."
34
+ confirmations:
35
+ send_instructions: "В течение нескольких минут вы получите письмо с инструкциями по подтверждению вашей учётной записи."
36
+ send_paranoid_instructions: "Если ваш адрес e-mail есть в нашей базе данных, то в течение нескольких минут вы получите письмо с инструкциями по подтверждению вашей учётной записи."
37
+ confirmed: "Ваша учётная запись подтверждена. Теперь вы вошли в систему."
38
+ registrations:
39
+ signed_up: "Добро пожаловать! Вы успешно зарегистрировались."
40
+ inactive_signed_up: "Добро пожаловать! Вы успешно зарегистрировались. Но пока вы не можете войти в систему, т.к. ваша учётная запись %{reason}."
41
+ updated: "Ваша учётная запись изменена."
42
+ destroyed: "До свидания! Ваша учётная запись удалена. Надеемся снова увидеть вас."
43
+ reasons:
44
+ inactive: 'неактивна'
45
+ unconfirmed: 'не подтверждена'
46
+ locked: 'заблокирована'
47
+ unlocks:
48
+ send_instructions: "В течение нескольких минут вы получите письмо с инструкциями по разблокировке вашей учётной записи."
49
+ unlocked: "Ваша учётная запись разблокирована. Теперь вы вошли в систему."
50
+ send_paranoid_instructions: "Если ваша учётная запись существует, то в течение нескольких минут вы получите письмо с инструкциями по её разблокировке."
51
+ omniauth_callbacks:
52
+ success: "Вход в систему выполнен с учётной записью из %{kind}."
53
+ failure: "Вы не можете войти в систему с учётной записью из %{kind}, т.к. \"%{reason}\"."
54
+ mailer:
55
+ confirmation_instructions:
56
+ subject: "Инструкции по подтверждению учётной записи"
57
+ reset_password_instructions:
58
+ subject: "Инструкции по восстановлению пароля"
59
+ unlock_instructions:
60
+ subject: "Инструкции по разблокировке учётной записи"
@@ -0,0 +1,25 @@
1
+ <%- if controller_name != 'sessions' %>
2
+ <%= link_to t('admin.users.labels.form.login'), new_session_path(resource_name) %><br />
3
+ <% end -%>
4
+
5
+ <%- if devise_mapping.registerable? && controller_name != 'registrations' %>
6
+ <%= link_to t('admin.users.labels.form.registration'), new_registration_path(resource_name) %><br />
7
+ <% end -%>
8
+
9
+ <%- if devise_mapping.recoverable? && controller_name != 'passwords' %>
10
+ <%= link_to t('admin.users.labels.form.forgot_password'), new_password_path(resource_name) %><br />
11
+ <% end -%>
12
+
13
+ <%- if devise_mapping.confirmable? && controller_name != 'confirmations' %>
14
+ <%= link_to t('admin.users.labels.form.confirm'), new_confirmation_path(resource_name) %><br />
15
+ <% end -%>
16
+
17
+ <%- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %>
18
+ <%= link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name) %><br />
19
+ <% end -%>
20
+
21
+ <%- if devise_mapping.omniauthable? %>
22
+ <%- resource_class.omniauth_providers.each do |provider| %>
23
+ <%= link_to t('admin.users.labels.form.oauth') + ' ' + provider.to_s.titleize, omniauth_authorize_path(resource_name, provider) %><br />
24
+ <% end -%>
25
+ <% end -%>
@@ -0,0 +1,8 @@
1
+ #devise_page
2
+ h2 Отправить инструкции по подтверждению аккаунта
3
+ = form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { method: :post }) do |f|
4
+ div
5
+ = f.label :email
6
+ = f.email_field :email
7
+ div= f.submit "Отправить"
8
+ = render "links"
@@ -0,0 +1,4 @@
1
+ p Здравствуйте!
2
+ p Вы можете подтвердить данный почтовый ящик своего аккаунта по следующей ссылке:
3
+ p= link_to 'Активировать мой аккаунт', confirmation_url(@resource, confirmation_token: @resource.confirmation_token)
4
+ p Если вы не регистрировались на сайте или не запрашивали повторных инструкций по активации, просто проигнорируйте это сообщение.
@@ -0,0 +1,5 @@
1
+ p Здравствуйте!
2
+ p Мы получили запрос по смене пароля вашего аккаунта, вы можете сделать это по следующей ссылке:
3
+ p= link_to 'Изменить пароль', edit_password_url(@resource, reset_password_token: @resource.reset_password_token)
4
+ p Если вы не запрашивали данной операции, пожалуйста, проигнорируйте это письмо.
5
+ p Ваш пароль не изменится до перехода по полученной ссылке выше.
@@ -0,0 +1,4 @@
1
+ p Hello #{@resource.email}!
2
+ p Your account has been locked due to an excessive amount of unsuccessful sign in attempts.
3
+ p Click the link below to unlock your account:
4
+ p= link_to 'Unlock my account', unlock_url(@resource, unlock_token: @resource.unlock_token)
@@ -0,0 +1,7 @@
1
+ #devise_page.users_form
2
+ = simple_form_for resource, as: resource_name, url: password_path(resource_name), html: { method: :put }, validate: false do |f|
3
+ = f.input :reset_password_token, as: :hidden
4
+ = f.input :password, placeholder: t('admin.users.labels.form.new_password'), label: false
5
+ = f.input :password_confirmation, placeholder: t('admin.users.labels.form.new_password_confirmation'), label: false
6
+ .submit= f.submit t('admin.users.labels.buttons.password_edit'), tabindex: 3, class: bs_btn
7
+ = render "links"
@@ -0,0 +1,5 @@
1
+ #devise_page.users_form
2
+ = simple_form_for resource, as: resource_name, url: password_path(resource_name), html: { method: :post } do |f|
3
+ = f.input :email, placeholder: 'E-mail', label: false
4
+ .submit= f.submit t('admin.users.labels.buttons.password_reset'), tabindex: 3, class: bs_btn
5
+ = render "links"
@@ -0,0 +1,25 @@
1
+ /
2
+ <h2>Edit <haml:loud> resource_name.to_s.humanize </haml:loud></h2>
3
+
4
+ <haml:loud> form_for(resource, :as =&amp;gt; resource_name, :url =&amp;gt; registration_path(resource_name), :html =&amp;gt; { :method =&amp;gt; :put }) do |f| </haml:loud><haml:block>
5
+ <haml:loud> devise_error_messages! </haml:loud>
6
+
7
+ <div><haml:loud> f.label :email </haml:loud><br />
8
+ <haml:loud> f.email_field :email, :autofocus =&amp;gt; true </haml:loud></div>
9
+
10
+ <div><haml:loud> f.label :password </haml:loud> <i>(leave blank if you don't want to change it)</i><br />
11
+ <haml:loud> f.password_field :password, :autocomplete =&amp;gt; &amp;quot;off&amp;quot; </haml:loud></div>
12
+
13
+ <div><haml:loud> f.label :password_confirmation </haml:loud><br />
14
+ <haml:loud> f.password_field :password_confirmation </haml:loud></div>
15
+
16
+ <div><haml:loud> f.label :current_password </haml:loud> <i>(we need your current password to confirm your changes)</i><br />
17
+ <haml:loud> f.password_field :current_password </haml:loud></div>
18
+
19
+ <div><haml:loud> f.submit &amp;quot;Update&amp;quot; </haml:loud></div>
20
+ </haml:block>
21
+ <h3>Cancel my account</h3>
22
+
23
+ <p>Unhappy? <haml:loud> link_to &amp;quot;Cancel my account&amp;quot;, registration_path(resource_name), :data =&amp;gt; { :confirm =&amp;gt; &amp;quot;Are you sure?&amp;quot; }, :method =&amp;gt; :delete </haml:loud>.</p>
24
+
25
+ <haml:loud> link_to &amp;quot;Back&amp;quot;, :back </haml:loud>
@@ -0,0 +1,7 @@
1
+ #devise_page.users_form
2
+ = simple_form_for resource, as: resource_name, url: registration_path(resource_name) do |f|
3
+ = f.input :email, placeholder: 'E-mail', label: false
4
+ = f.input :password, placeholder: t('admin.users.labels.form.password'), label: false
5
+ = f.input :password_confirmation, placeholder: t('admin.users.labels.form.password_confirmation'), label: false
6
+ .submit= f.submit t('admin.users.labels.buttons.register'), tabindex: 3, class: bs_btn
7
+ = render "links"
@@ -0,0 +1,22 @@
1
+ - @body_class = "page--auth ready"
2
+
3
+ .auth
4
+ .auth__title Adminos
5
+ .auth__welcome Вход в систему администрирования
6
+
7
+ = simple_form_for resource, as: resource_name, url: session_path(resource_name), wrapper: :auth, html: { class: 'form auth__form' } do |f|
8
+ = f.input :email, placeholder: 'Электронная почта'
9
+ = f.input :password, placeholder: 'Пароль'
10
+
11
+ /- if devise_mapping.rememberable?
12
+ = f.input :remember_me, as: :boolean, inline_label: t('admin.users.labels.form.remember_me'), label: false
13
+
14
+ .form__submit.centered
15
+ = f.submit 'Войти', class: 'button button--rounded'
16
+
17
+ /.auth__help
18
+ a href="#" Напомнить пароль
19
+
20
+ - if flash.present?
21
+ .auth__message
22
+ = show_flash_alert
@@ -0,0 +1,11 @@
1
+ /
2
+ <h2>Resend unlock instructions</h2>
3
+
4
+ <haml:loud> form_for(resource, :as =&amp;gt; resource_name, :url =&amp;gt; unlock_path(resource_name), :html =&amp;gt; { :method =&amp;gt; :post }) do |f| </haml:loud><haml:block>
5
+
6
+ <div><haml:loud> f.label :email </haml:loud><br />
7
+ <haml:loud> f.email_field :email </haml:loud></div>
8
+
9
+ <div><haml:loud> f.submit &amp;quot;Resend unlock instructions&amp;quot; </haml:loud></div>
10
+ </haml:block>
11
+ <haml:loud> render &amp;quot;links&amp;quot; </haml:loud>
@@ -0,0 +1,3 @@
1
+ - I18n.available_locales.each do |locale|
2
+ - unless locale == I18n.locale
3
+ = link_to locale, locale: locale != I18n.default_locale ? locale : nil
@@ -0,0 +1,5 @@
1
+ translates :name, :nav_name, :body, :meta_description, :meta_title
2
+
3
+ accepts_nested_attributes_for :translations
4
+
5
+ validates_with LocaleValidator
@@ -0,0 +1,11 @@
1
+ /.bundle
2
+ /config/application.yml
3
+ /config/database.yml
4
+ /log/*.log
5
+ /log/*.pid
6
+ /public/assets/*
7
+ /public/system/*
8
+ /tmp
9
+ /db/*.sql.bz2
10
+ .env
11
+ spec/examples.txt