ab_admin 0.3.6 → 0.4.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 (419) hide show
  1. checksums.yaml +7 -0
  2. data/{LICENSE.txt → MIT-LICENSE} +2 -4
  3. data/README.md +3 -3
  4. data/Rakefile +21 -3
  5. data/app/assets/images/admin/flags/b_de.png +0 -0
  6. data/app/assets/images/admin/flags/b_es.png +0 -0
  7. data/app/assets/images/admin/flags/b_fr.png +0 -0
  8. data/app/assets/images/admin/flags/flag_de.gif +0 -0
  9. data/app/assets/images/admin/flags/flag_de_nonact.gif +0 -0
  10. data/app/assets/images/admin/flags/flag_es.gif +0 -0
  11. data/app/assets/images/admin/flags/flag_es_nonact.gif +0 -0
  12. data/app/assets/images/admin/flags/flag_fr.gif +0 -0
  13. data/app/assets/images/admin/flags/flag_fr_nonact.gif +0 -0
  14. data/app/assets/javascripts/ab_admin/components/admin_assets.js.coffee +50 -60
  15. data/app/assets/javascripts/ab_admin/components/base_assets.js.coffee +86 -0
  16. data/app/assets/javascripts/ab_admin/components/croppable_image.js.coffee +4 -4
  17. data/app/assets/javascripts/ab_admin/components/gmaps.js.coffee +5 -0
  18. data/app/assets/javascripts/ab_admin/components/google_translate.js.coffee +0 -1
  19. data/app/assets/javascripts/ab_admin/components/in_place_edit.js.coffee +7 -3
  20. data/app/assets/javascripts/ab_admin/components/locator.js.coffee +1 -1
  21. data/app/assets/javascripts/ab_admin/components/select2_bridge.js.coffee +152 -0
  22. data/app/assets/javascripts/ab_admin/components/sortable_tree.js.coffee +1 -1
  23. data/app/assets/javascripts/ab_admin/core/batch_actions.js.coffee +5 -4
  24. data/app/assets/javascripts/ab_admin/core/columns_hider.js.coffee +4 -11
  25. data/app/assets/javascripts/ab_admin/core/confirmation.js.coffee +4 -43
  26. data/app/assets/javascripts/ab_admin/core/deprecated_utils.js.coffee +44 -0
  27. data/app/assets/javascripts/ab_admin/core/init.js.coffee +8 -25
  28. data/app/assets/javascripts/ab_admin/core/pjax.js.coffee +18 -4
  29. data/app/assets/javascripts/ab_admin/core/search_form.js.coffee +5 -5
  30. data/app/assets/javascripts/ab_admin/core/ui_utils.js.coffee +15 -86
  31. data/app/assets/javascripts/ab_admin/core/utils.js.coffee +38 -51
  32. data/app/assets/javascripts/ab_admin/core/view_layout.js.coffee +1 -1
  33. data/app/assets/javascripts/ab_admin/inputs/datetime_input.js.coffee +16 -18
  34. data/app/assets/javascripts/ab_admin/main.js +7 -7
  35. data/app/assets/stylesheets/ab_admin/bootstrap_and_overrides.css.scss +21 -8
  36. data/app/assets/stylesheets/ab_admin/components/_admin_comments.css.scss +17 -5
  37. data/app/assets/stylesheets/ab_admin/components/_base.css.scss +4 -0
  38. data/app/assets/stylesheets/ab_admin/components/_colored_tabs.css.scss +1 -4
  39. data/app/assets/stylesheets/ab_admin/components/_columns_hider.css.scss +5 -0
  40. data/app/assets/stylesheets/ab_admin/components/_form.css.scss +45 -16
  41. data/app/assets/stylesheets/ab_admin/components/_grid_view.css.scss +11 -0
  42. data/app/assets/stylesheets/ab_admin/components/_locale_tabs.css.scss +1 -1
  43. data/app/assets/stylesheets/ab_admin/components/_navigation.css.scss +11 -9
  44. data/app/assets/stylesheets/ab_admin/components/_table_view.css.scss +1 -1
  45. data/app/assets/stylesheets/ab_admin/components/_translations.css.scss +1 -0
  46. data/app/assets/stylesheets/ab_admin/components/{_sortable_tree.css.scss → _tree_view.css.scss} +8 -3
  47. data/app/assets/stylesheets/ab_admin/fileupload.css.scss +51 -43
  48. data/app/assets/stylesheets/ab_admin/main.css.scss +1 -3
  49. data/app/controllers/admin/admin_comments_controller.rb +14 -4
  50. data/app/controllers/admin/assets_controller.rb +44 -35
  51. data/app/controllers/admin/base_controller.rb +93 -38
  52. data/app/controllers/admin/locators_controller.rb +3 -2
  53. data/app/controllers/admin/manager_controller.rb +20 -9
  54. data/app/controllers/admin/structures_controller.rb +9 -1
  55. data/app/controllers/admin/users_controller.rb +1 -2
  56. data/app/views/ab_admin/devise/sessions/new.html.slim +1 -1
  57. data/app/views/admin/admin_comments/_comment.html.slim +21 -7
  58. data/app/views/admin/admin_comments/_comments.html.slim +1 -1
  59. data/app/views/admin/admin_comments/_form.html.slim +8 -3
  60. data/app/views/admin/admin_comments/_list_block.html.slim +7 -0
  61. data/app/views/admin/admin_comments/create.js.erb +3 -2
  62. data/app/views/admin/admin_comments/destroy.js.erb +1 -1
  63. data/app/views/admin/admin_comments/index.js.erb +14 -0
  64. data/app/views/admin/assets/batch_edit.html.slim +14 -0
  65. data/app/views/admin/base/_modal_form_layout.html.slim +12 -0
  66. data/app/views/admin/base/_search_layout.html.slim +4 -3
  67. data/app/views/admin/base/_table.html.slim +2 -2
  68. data/app/views/admin/base/create.js.erb +13 -8
  69. data/app/views/admin/base/history.html.slim +18 -0
  70. data/app/views/admin/base/index.html.slim +3 -3
  71. data/app/views/admin/base/new.js.erb +14 -8
  72. data/app/views/admin/base/show.html.slim +1 -2
  73. data/app/views/admin/base/show.js.erb +7 -0
  74. data/app/views/admin/fileupload/_asset_templates.html.slim +29 -0
  75. data/app/views/admin/fileupload/_container.html.slim +13 -12
  76. data/app/views/admin/fileupload/_file.html.slim +2 -2
  77. data/app/views/admin/fileupload/_image.html.slim +8 -0
  78. data/app/views/admin/fileupload/_video.html.slim +2 -2
  79. data/app/views/admin/headers/_form.html.slim +2 -0
  80. data/app/views/admin/locators/edit.html.slim +1 -1
  81. data/app/views/admin/locators/show.html.slim +1 -2
  82. data/app/views/admin/manager/_form.html.slim +17 -3
  83. data/app/views/admin/manager/_modal_form.html.slim +19 -0
  84. data/app/views/admin/manager/_table.html.slim +3 -3
  85. data/app/views/admin/manager/show.html.slim +1 -0
  86. data/app/views/admin/shared/_content_actions.html.slim +39 -0
  87. data/app/views/admin/shared/_locale_tabs.html.slim +3 -3
  88. data/app/views/admin/shared/inputs/_checkbox_tree.html.slim +9 -3
  89. data/app/views/admin/structures/_form.html.slim +4 -7
  90. data/app/views/admin/users/_form.html.slim +2 -4
  91. data/app/views/admin/users/_search_form.html.slim +0 -1
  92. data/app/views/admin/users/_table.html.slim +8 -10
  93. data/app/views/layouts/admin/_footer.html.slim +3 -4
  94. data/app/views/layouts/admin/_navigation.html.slim +2 -2
  95. data/app/views/layouts/admin/application.html.slim +7 -9
  96. data/app/views/layouts/admin/devise.html.slim +3 -4
  97. data/config/locales/de.yml +319 -0
  98. data/config/locales/en.devise.yml +44 -31
  99. data/config/locales/en.yml +166 -143
  100. data/config/locales/it.devise.yml +54 -41
  101. data/config/locales/it.yml +178 -163
  102. data/config/locales/ru.devise.yml +70 -56
  103. data/config/locales/ru.yml +280 -264
  104. data/config/routes.rb +6 -3
  105. data/db/migrate/20130101000001_create_users.rb +7 -11
  106. data/db/migrate/20130101000003_create_assets.rb +5 -5
  107. data/db/migrate/20130101000004_create_headers.rb +2 -6
  108. data/db/migrate/20130101000005_create_static_pages.rb +1 -5
  109. data/db/migrate/20130101000006_create_structures.rb +5 -9
  110. data/db/migrate/20130101000007_base_translations.rb +3 -1
  111. data/db/migrate/20130101000008_create_admin_comments.rb +5 -5
  112. data/db/migrate/20130101000009_create_tracks.rb +20 -0
  113. data/lib/ab_admin.rb +36 -4
  114. data/lib/ab_admin/abstract_resource.rb +28 -7
  115. data/lib/ab_admin/carrierwave/base_uploader.rb +85 -5
  116. data/lib/ab_admin/carrierwave/glue.rb +6 -1
  117. data/lib/ab_admin/concerns/admin_addition.rb +26 -9
  118. data/lib/ab_admin/concerns/asset_human_names.rb +23 -0
  119. data/lib/ab_admin/concerns/fileuploads.rb +102 -0
  120. data/lib/ab_admin/concerns/has_tracking.rb +32 -0
  121. data/lib/ab_admin/concerns/nested_set.rb +9 -9
  122. data/lib/ab_admin/concerns/silencer.rb +5 -5
  123. data/lib/ab_admin/concerns/utilities.rb +28 -16
  124. data/lib/ab_admin/concerns/validations.rb +1 -1
  125. data/lib/ab_admin/config/base.rb +10 -2
  126. data/lib/ab_admin/controllers/callbacks.rb +2 -2
  127. data/lib/ab_admin/controllers/can_can_manager_resource.rb +3 -2
  128. data/lib/ab_admin/controllers/fv.rb +16 -0
  129. data/lib/ab_admin/controllers/head_options.rb +6 -4
  130. data/lib/ab_admin/core_ext/hash.rb +25 -70
  131. data/lib/ab_admin/core_ext/string.rb +17 -4
  132. data/lib/ab_admin/engine.rb +2 -8
  133. data/lib/ab_admin/hooks.rb +8 -3
  134. data/lib/ab_admin/hooks/active_model_hooks.rb +1 -1
  135. data/lib/ab_admin/hooks/globalize_hooks.rb +35 -0
  136. data/lib/ab_admin/hooks/paginate_hooks.rb +3 -1
  137. data/lib/ab_admin/i18n_tools/model_translator.rb +1 -1
  138. data/lib/ab_admin/menu/abstract_builder.rb +14 -0
  139. data/lib/ab_admin/menu/base_group.rb +26 -0
  140. data/lib/ab_admin/menu/builder.rb +16 -0
  141. data/lib/ab_admin/menu/group.rb +24 -0
  142. data/lib/ab_admin/menu/item.rb +23 -0
  143. data/lib/ab_admin/models/admin_comment.rb +68 -0
  144. data/lib/ab_admin/models/asset.rb +30 -19
  145. data/lib/ab_admin/models/attachment_file.rb +2 -1
  146. data/lib/ab_admin/models/header.rb +15 -0
  147. data/lib/ab_admin/models/locator.rb +1 -3
  148. data/lib/ab_admin/models/settings.rb +10 -10
  149. data/lib/ab_admin/models/structure.rb +20 -9
  150. data/lib/ab_admin/models/track.rb +61 -0
  151. data/lib/ab_admin/models/type_model.rb +30 -17
  152. data/lib/ab_admin/models/user.rb +18 -49
  153. data/lib/ab_admin/utils.rb +16 -7
  154. data/lib/ab_admin/utils/logger.rb +11 -7
  155. data/lib/ab_admin/utils/mysql.rb +10 -0
  156. data/lib/ab_admin/version.rb +1 -1
  157. data/lib/ab_admin/views/admin_helpers.rb +20 -9
  158. data/lib/ab_admin/views/admin_navigation_helpers.rb +44 -21
  159. data/lib/ab_admin/views/content_only_wrapper.rb +14 -0
  160. data/lib/ab_admin/views/form_builder.rb +27 -89
  161. data/lib/ab_admin/views/helpers.rb +1 -28
  162. data/lib/ab_admin/views/inputs/capture_block_input.rb +16 -0
  163. data/lib/ab_admin/views/inputs/date_time_picker_input.rb +45 -0
  164. data/lib/ab_admin/views/inputs/token_input.rb +2 -1
  165. data/lib/ab_admin/views/inputs/uploader_input.rb +101 -0
  166. data/lib/ab_admin/views/manager_helpers.rb +12 -0
  167. data/lib/ab_admin/views/search_form_builder.rb +36 -13
  168. data/lib/generators/ab_admin/ckeditor_assets/ckeditor_assets_generator.rb +1 -1
  169. data/lib/generators/ab_admin/install/install_generator.rb +3 -2
  170. data/lib/generators/ab_admin/install/templates/config/ab_admin.rb.erb +1 -1
  171. data/lib/generators/ab_admin/install/templates/config/admin_menu.rb +1 -1
  172. data/lib/generators/ab_admin/install/templates/config/i18n-js.yml +1 -1
  173. data/lib/generators/ab_admin/install/templates/config/nginx.conf +22 -9
  174. data/lib/generators/ab_admin/install/templates/config/robots.txt +7 -0
  175. data/lib/generators/ab_admin/install/templates/config/seeds.rb +2 -1
  176. data/lib/generators/ab_admin/install/templates/models/ability.rb +2 -7
  177. data/lib/generators/ab_admin/install/templates/models/admin_comment.rb +3 -28
  178. data/lib/generators/ab_admin/install/templates/models/asset.rb +4 -2
  179. data/lib/generators/ab_admin/install/templates/models/attachment_file.rb +1 -1
  180. data/lib/generators/ab_admin/install/templates/models/avatar.rb +2 -2
  181. data/lib/generators/ab_admin/install/templates/models/gender_type.rb +1 -1
  182. data/lib/generators/ab_admin/install/templates/models/header.rb +2 -2
  183. data/lib/generators/ab_admin/install/templates/models/locator.rb +0 -1
  184. data/lib/generators/ab_admin/install/templates/models/picture.rb +1 -1
  185. data/lib/generators/ab_admin/install/templates/models/settings.rb +1 -1
  186. data/lib/generators/ab_admin/install/templates/models/structure.rb +6 -8
  187. data/lib/generators/ab_admin/install/templates/models/track.rb +5 -0
  188. data/lib/generators/ab_admin/install/templates/models/user.rb +2 -3
  189. data/lib/generators/ab_admin/install/templates/script/unicorn.sh +0 -2
  190. data/lib/generators/ab_admin/install/templates/spec/factories/user_factory.rb +1 -2
  191. data/lib/generators/ab_admin/install/templates/uploaders/attachment_file_uploader.rb +1 -1
  192. data/lib/generators/ab_admin/install/templates/uploaders/avatar_uploader.rb +1 -1
  193. data/lib/generators/ab_admin/install/templates/uploaders/picture_uploader.rb +1 -1
  194. data/lib/generators/ab_admin/model/templates/resource.erb +1 -1
  195. data/lib/generators/ab_admin/resource/templates/_form.slim.erb +49 -45
  196. data/lib/generators/ab_admin/resource/templates/_table.slim.erb +1 -1
  197. data/lib/generators/template.rb +32 -56
  198. data/lib/tasks/assets.rake +1 -0
  199. metadata +197 -698
  200. data/.gitignore +0 -41
  201. data/Gemfile +0 -77
  202. data/Guardfile +0 -35
  203. data/TODO +0 -4
  204. data/ab_admin.gemspec +0 -59
  205. data/app/views/admin/fileupload/_asset.html.slim +0 -8
  206. data/app/views/admin/fileupload/_ftmpl.html.slim +0 -6
  207. data/app/views/admin/fileupload/_tmpl.html.slim +0 -9
  208. data/app/views/admin/fileupload/_vtmpl.html.slim +0 -10
  209. data/app/views/admin/shared/_batch_actions.html.slim +0 -27
  210. data/cucumber.yml +0 -10
  211. data/features/dsl/action_items.feature +0 -79
  212. data/features/dsl/admin_comments.feature +0 -30
  213. data/features/dsl/batch_actions.feature +0 -69
  214. data/features/dsl/config.feature +0 -44
  215. data/features/dsl/custom_actions.feature +0 -62
  216. data/features/dsl/export.feature +0 -42
  217. data/features/dsl/form.feature +0 -77
  218. data/features/dsl/in_place_edit.feature +0 -26
  219. data/features/dsl/list_edit.feature +0 -46
  220. data/features/dsl/parent_resource.feature +0 -18
  221. data/features/dsl/resource_action_items.feature +0 -40
  222. data/features/dsl/search.feature +0 -41
  223. data/features/dsl/show.feature +0 -37
  224. data/features/dsl/table.feature +0 -71
  225. data/features/dsl/tree.feature +0 -37
  226. data/features/index_views/table.feature +0 -20
  227. data/features/locators.feature +0 -40
  228. data/features/menu.feature +0 -35
  229. data/features/settings.feature +0 -36
  230. data/features/step_definitions/configuration_steps.rb +0 -94
  231. data/features/step_definitions/dsl/action_items_steps.rb +0 -13
  232. data/features/step_definitions/dsl/admin_comments_steps.rb +0 -12
  233. data/features/step_definitions/dsl/batch_actions_steps.rb +0 -27
  234. data/features/step_definitions/dsl/in_place_edit_steps.rb +0 -7
  235. data/features/step_definitions/dsl/parent_resource_steps.rb +0 -8
  236. data/features/step_definitions/dsl/resource_action_items_steps.rb +0 -14
  237. data/features/step_definitions/dsl/show_steps.rb +0 -8
  238. data/features/step_definitions/dsl/table_steps.rb +0 -38
  239. data/features/step_definitions/dsl/tree_steps.rb +0 -28
  240. data/features/step_definitions/menu_steps.rb +0 -20
  241. data/features/step_definitions/settings_steps.rb +0 -7
  242. data/features/step_definitions/structure_steps.rb +0 -7
  243. data/features/step_definitions/table_steps.rb +0 -23
  244. data/features/step_definitions/user_steps.rb +0 -72
  245. data/features/step_definitions/web_steps/browsing_steps.rb +0 -108
  246. data/features/step_definitions/web_steps/debug_steps.rb +0 -6
  247. data/features/step_definitions/web_steps/form_steps.rb +0 -190
  248. data/features/step_definitions/web_steps/i18n_steps.rb +0 -8
  249. data/features/step_definitions/web_steps/step_scoper.rb +0 -9
  250. data/features/step_definitions/web_steps/transforms_steps.rb +0 -3
  251. data/features/structure/tree.feature +0 -21
  252. data/features/support/capybara_helpers.rb +0 -15
  253. data/features/support/carrierwave.rb +0 -21
  254. data/features/support/env.rb +0 -40
  255. data/features/support/paths.rb +0 -55
  256. data/features/support/selector_helpers.rb +0 -9
  257. data/features/support/selectors.rb +0 -43
  258. data/features/support/tolerance_for_selenium_sync_issues.rb +0 -27
  259. data/features/user/sign_in.feature +0 -27
  260. data/features/user/sign_out.feature +0 -11
  261. data/features/user/user_edit.feature +0 -19
  262. data/features/user/user_show.feature +0 -9
  263. data/lib/ab_admin/hooks/quiet_scope_page.rb +0 -16
  264. data/lib/ab_admin/hooks/simple_form_hooks.rb +0 -31
  265. data/lib/ab_admin/menu_builder.rb +0 -89
  266. data/lib/ab_admin/views/inputs/date_time_input.rb +0 -65
  267. data/lib/generators/ab_admin/install/templates/models/user_state.rb +0 -6
  268. data/lib/generators/ab_admin/resource/templates/_form.haml.erb +0 -71
  269. data/lib/generators/ab_admin/resource/templates/_search_form.haml.erb +0 -35
  270. data/lib/generators/ab_admin/resource/templates/_table.haml.erb +0 -33
  271. data/spec/ab_admin_spec.rb +0 -23
  272. data/spec/dummy/Rakefile +0 -7
  273. data/spec/dummy/app/assets/images/rails.png +0 -0
  274. data/spec/dummy/app/assets/javascripts/application.js +0 -15
  275. data/spec/dummy/app/assets/stylesheets/application.css +0 -13
  276. data/spec/dummy/app/controllers/application_controller.rb +0 -3
  277. data/spec/dummy/app/controllers/products_controller.rb +0 -5
  278. data/spec/dummy/app/controllers/welcome_controller.rb +0 -5
  279. data/spec/dummy/app/mailers/.gitkeep +0 -0
  280. data/spec/dummy/app/models/ab_admin/ab_admin_catalogue.rb +0 -5
  281. data/spec/dummy/app/models/ab_admin/ab_admin_collection.rb +0 -35
  282. data/spec/dummy/app/models/ab_admin/ab_admin_product.rb +0 -74
  283. data/spec/dummy/app/models/admin_menu.rb +0 -18
  284. data/spec/dummy/app/models/catalogue.rb +0 -10
  285. data/spec/dummy/app/models/ckeditor/asset.rb +0 -7
  286. data/spec/dummy/app/models/ckeditor/attachment_file.rb +0 -7
  287. data/spec/dummy/app/models/ckeditor/picture.rb +0 -7
  288. data/spec/dummy/app/models/collection.rb +0 -20
  289. data/spec/dummy/app/models/product.rb +0 -32
  290. data/spec/dummy/app/uploaders/ckeditor_attachment_file_uploader.rb +0 -42
  291. data/spec/dummy/app/uploaders/ckeditor_picture_uploader.rb +0 -53
  292. data/spec/dummy/app/views/admin/collections/_form.html.slim +0 -24
  293. data/spec/dummy/app/views/layouts/application.html.erb +0 -14
  294. data/spec/dummy/app/views/products/show.html.erb +0 -2
  295. data/spec/dummy/app/views/welcome/index.html.erb +0 -2
  296. data/spec/dummy/config.ru +0 -4
  297. data/spec/dummy/config/application.rb +0 -82
  298. data/spec/dummy/config/boot.rb +0 -10
  299. data/spec/dummy/config/database.yml +0 -26
  300. data/spec/dummy/config/environment.rb +0 -5
  301. data/spec/dummy/config/environments/development.rb +0 -37
  302. data/spec/dummy/config/environments/production.rb +0 -67
  303. data/spec/dummy/config/environments/test.rb +0 -37
  304. data/spec/dummy/config/i18n-js.yml +0 -21
  305. data/spec/dummy/config/initializers/ab_admin.rb +0 -15
  306. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  307. data/spec/dummy/config/initializers/ckeditor.rb +0 -18
  308. data/spec/dummy/config/initializers/devise.rb +0 -232
  309. data/spec/dummy/config/initializers/inflections.rb +0 -15
  310. data/spec/dummy/config/initializers/mime_types.rb +0 -5
  311. data/spec/dummy/config/initializers/secret_token.rb +0 -7
  312. data/spec/dummy/config/initializers/session_store.rb +0 -8
  313. data/spec/dummy/config/initializers/simple_form.rb +0 -142
  314. data/spec/dummy/config/initializers/simple_form_bootstrap.rb +0 -45
  315. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
  316. data/spec/dummy/config/locales/devise.en.yml +0 -60
  317. data/spec/dummy/config/locales/en.yml +0 -5
  318. data/spec/dummy/config/locales/simple_form.en.yml +0 -26
  319. data/spec/dummy/config/routes.rb +0 -14
  320. data/spec/dummy/config/settings/development.local.yml +0 -9
  321. data/spec/dummy/config/settings/development.yml +0 -7
  322. data/spec/dummy/db/migrate/20130129151853_create_ckeditor_assets.rb +0 -26
  323. data/spec/dummy/db/migrate/20130130161853_create_collections.rb +0 -10
  324. data/spec/dummy/db/migrate/20130130162046_create_products.rb +0 -13
  325. data/spec/dummy/db/migrate/20130130175446_create_globalize_collection_product.rb +0 -11
  326. data/spec/dummy/db/migrate/20130207224516_create_catalogues.rb +0 -16
  327. data/spec/dummy/db/migrate/20130209223506_add_lat_lon_zoom_to_products.rb +0 -7
  328. data/spec/dummy/db/seeds.rb +0 -46
  329. data/spec/dummy/lib/assets/.gitkeep +0 -0
  330. data/spec/dummy/lib/capybara_irb.rb +0 -42
  331. data/spec/dummy/lib/tasks/.gitkeep +0 -0
  332. data/spec/dummy/lib/tasks/cucumber.rake +0 -65
  333. data/spec/dummy/lib/templates/slim/scaffold/_form.html.slim +0 -10
  334. data/spec/dummy/log/.gitkeep +0 -0
  335. data/spec/dummy/public/404.html +0 -26
  336. data/spec/dummy/public/422.html +0 -26
  337. data/spec/dummy/public/500.html +0 -25
  338. data/spec/dummy/public/favicon.ico +0 -0
  339. data/spec/dummy/script/cucumber +0 -10
  340. data/spec/dummy/script/rails +0 -6
  341. data/spec/factories/assets.rb +0 -52
  342. data/spec/factories/catalogues.rb +0 -7
  343. data/spec/factories/collections.rb +0 -8
  344. data/spec/factories/files/rails.png +0 -0
  345. data/spec/factories/products.rb +0 -17
  346. data/spec/factories/sequences.rb +0 -7
  347. data/spec/factories/structures.rb +0 -17
  348. data/spec/factories/users.rb +0 -30
  349. data/spec/generators/ckeditor_assets_generator_spec.rb +0 -19
  350. data/spec/generators/install_generator_spec.rb +0 -48
  351. data/spec/generators/model_generator_spec.rb +0 -31
  352. data/spec/generators/resource_generator_spec.rb +0 -36
  353. data/spec/models/ab_admin/abstract_resource_spec.rb +0 -5
  354. data/spec/models/avatar_spec.rb +0 -162
  355. data/spec/models/picture_uploader_spec.rb +0 -49
  356. data/spec/models/structure_spec.rb +0 -69
  357. data/spec/models/user_spec.rb +0 -159
  358. data/spec/shared_behaviors/concerns.rb +0 -20
  359. data/spec/spec_helper.rb +0 -96
  360. data/spec/support/controller_macros.rb +0 -52
  361. data/spec/support/custom_capybara_matchers.rb +0 -58
  362. data/spec/support/mailer_macros.rb +0 -17
  363. data/spec/support/shared_connection.rb +0 -11
  364. data/vendor/assets/images/ab_admin/clear.png +0 -0
  365. data/vendor/assets/images/ab_admin/loading.gif +0 -0
  366. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/core.js +0 -899
  367. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/index.js +0 -2
  368. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.bg.js +0 -14
  369. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.br.js +0 -13
  370. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.cs.js +0 -14
  371. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.da.js +0 -14
  372. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.de.js +0 -14
  373. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.es.js +0 -14
  374. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.fi.js +0 -14
  375. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.fr.js +0 -14
  376. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.id.js +0 -13
  377. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.is.js +0 -14
  378. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.it.js +0 -14
  379. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.ja.js +0 -13
  380. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.kr.js +0 -13
  381. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.lt.js +0 -15
  382. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.lv.js +0 -16
  383. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.ms.js +0 -14
  384. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.nb.js +0 -14
  385. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.nl.js +0 -14
  386. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.pl.js +0 -14
  387. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.pt-BR.js +0 -14
  388. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.pt.js +0 -14
  389. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.ro.js +0 -15
  390. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.ru.js +0 -14
  391. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.sk.js +0 -14
  392. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.sl.js +0 -14
  393. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.sv.js +0 -14
  394. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.th.js +0 -14
  395. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.tr.js +0 -15
  396. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.zh-CN.js +0 -14
  397. data/vendor/assets/javascripts/ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.zh-TW.js +0 -13
  398. data/vendor/assets/javascripts/ab_admin/bootstrap-editable-inline.js +0 -2895
  399. data/vendor/assets/javascripts/ab_admin/bootstrap-editable.js +0 -4523
  400. data/vendor/assets/javascripts/ab_admin/bootstrap-tab-multi.js +0 -135
  401. data/vendor/assets/javascripts/ab_admin/bootstrap-timepicker.js +0 -377
  402. data/vendor/assets/javascripts/ab_admin/fileupload/admin-fileuploader.js.coffee +0 -111
  403. data/vendor/assets/javascripts/ab_admin/fileupload/fileuploader.js +0 -1301
  404. data/vendor/assets/javascripts/ab_admin/jquery.Jcrop.js +0 -1083
  405. data/vendor/assets/javascripts/ab_admin/jquery_nested_form.js.coffee +0 -66
  406. data/vendor/assets/javascripts/bootstrap-wysihtml5/locales/ru.js +0 -48
  407. data/vendor/assets/javascripts/handlebars.min.js +0 -1
  408. data/vendor/assets/javascripts/jquery.cookie.js +0 -42
  409. data/vendor/assets/javascripts/jquery.hotkeys.js +0 -106
  410. data/vendor/assets/javascripts/jquery.pjax.js +0 -688
  411. data/vendor/assets/javascripts/jquery.tmpl.min.js +0 -10
  412. data/vendor/assets/javascripts/jquery.ui.nestedSortable.js +0 -356
  413. data/vendor/assets/javascripts/jquery/jquery-ui.min.js +0 -15
  414. data/vendor/assets/javascripts/jquery/jquery.min.js +0 -4
  415. data/vendor/assets/javascripts/underscore.min.js +0 -5
  416. data/vendor/assets/stylesheets/ab_admin/bootstrap-datepicker.css.scss +0 -274
  417. data/vendor/assets/stylesheets/ab_admin/bootstrap-editable.scss +0 -461
  418. data/vendor/assets/stylesheets/ab_admin/bootstrap-timepicker.css.scss +0 -88
  419. data/vendor/assets/stylesheets/ab_admin/jquery.Jcrop.min.css.scss +0 -28
@@ -0,0 +1,23 @@
1
+ module AbAdmin
2
+ module Menu
3
+ class Item
4
+ include ::AbAdmin::Utils::EvalHelpers
5
+
6
+ def initialize(title, path, options)
7
+ @title = title.is_a?(Symbol) ? I18n.t(title, scope: [:admin, :navigation]) : title
8
+ @path = path
9
+ @options = options
10
+ end
11
+
12
+ def render(template)
13
+ return if @options[:if] && !call_method_or_proc_on(template, @options[:if])
14
+ return if @options[:unless] && call_method_or_proc_on(template, @options[:unless])
15
+
16
+ active = template.request.path.split('/')[2] == @path.split('/')[2]
17
+ <<-HTML.html_safe
18
+ <li class="#{'active' if active}">#{template.link_to @title, @path, @options.except(:if, :unless)}</li>
19
+ HTML
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,68 @@
1
+ module AbAdmin
2
+ module Models
3
+ module AdminComment
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ belongs_to :resource, polymorphic: true
8
+ belongs_to :resource_user, class_name: 'User'
9
+ belongs_to :user
10
+
11
+ has_many :attachment_files, as: :assetable, dependent: :destroy
12
+
13
+ validates_presence_of :resource
14
+ validates_presence_of :body
15
+
16
+ before_save :set_user_name, :set_resource_user
17
+ after_create :increment_counter_cache
18
+ before_destroy :decrement_counter_cache
19
+
20
+ scope :admin, lambda { includes(:user, :attachment_files) }
21
+
22
+ fileuploads :attachment_files
23
+ end
24
+
25
+ module ClassMethods
26
+ def resource_type(record)
27
+ record.class.base_class.name.to_s
28
+ end
29
+
30
+ def find_for_resource(resource)
31
+ where(resource_type: resource_type(resource), resource_id: resource.id).includes(:attachment_files)
32
+ end
33
+
34
+ def find_resource(resource_type, resource_id)
35
+ resource_type.constantize.find(resource_id)
36
+ end
37
+ end
38
+
39
+ def set_user_name
40
+ self.user_name = user.name.presence || user.email
41
+ true
42
+ end
43
+
44
+ def set_resource_user
45
+ self.resource_user = resource.try(:user) if resource.respond_to?(:user)
46
+ true
47
+ end
48
+
49
+ def for_form
50
+ {id: id, body: body, user_name: user.try(:name), user_id: user.try(:id), created_at: I18n.l(created_at, format: :long)}
51
+ end
52
+
53
+ def increment_counter_cache
54
+ resource.increment!(:admin_comments_count) if resource_counter_cache?
55
+ true
56
+ end
57
+
58
+ def decrement_counter_cache
59
+ resource.decrement!(:admin_comments_count) if resource_counter_cache?
60
+ true
61
+ end
62
+
63
+ def resource_counter_cache?
64
+ resource.class.column_names.include?('admin_comments_count')
65
+ end
66
+ end
67
+ end
68
+ end
@@ -10,7 +10,7 @@ module AbAdmin
10
10
  # Store options for image manipulation
11
11
  attr_reader :cropper_geometry, :rotate_degrees
12
12
 
13
- delegate :url, :original_filename, to: :data
13
+ delegate :url, to: :data
14
14
 
15
15
  class_attribute :thumb_size, :max_size
16
16
  self.thumb_size = :thumb
@@ -18,7 +18,7 @@ module AbAdmin
18
18
 
19
19
  before_save :reprocess
20
20
 
21
- alias_attribute :filename, :original_filename
21
+ alias_attribute :filename, :data_file_name
22
22
  alias_attribute :size, :data_file_size
23
23
  alias_attribute :content_type, :data_content_type
24
24
  end
@@ -34,10 +34,19 @@ module AbAdmin
34
34
  end
35
35
 
36
36
  def clean!
37
- where(:created_at.lt => 1.week.ago).where('assetable_id IS NULL OR assetable_id = 0').destroy_all
37
+ where('assetable_id IS NULL OR assetable_id = 0 AND created_at < ?', 1.week.ago).destroy_all
38
38
  end
39
39
  end
40
40
 
41
+ def store_model_filename(record)
42
+ data.store_model_filename(record) and save!(validate: false)
43
+ end
44
+
45
+ # allow to build custom human file name
46
+ def build_filename(base_filename, record=nil)
47
+ nil
48
+ end
49
+
41
50
  def thumb_url
42
51
  data.url(self.thumb_size) if image?
43
52
  end
@@ -52,8 +61,8 @@ module AbAdmin
52
61
 
53
62
  def as_json(options = nil)
54
63
  options = {
55
- only: [:id, :guid, :assetable_id, :assetable_type, :user_id,
56
- :data_file_size, :data_content_type, :is_main, :original_name],
64
+ only: [:id, :guid, :assetable_id, :assetable_type, :user_id, :data_file_size, :data_content_type, :is_main,
65
+ :original_name, :cached_alt, :cached_title],
57
66
  root: 'asset',
58
67
  methods: [:filename, :url, :thumb_url, :width, :height]
59
68
  }.merge(options || {})
@@ -69,6 +78,17 @@ module AbAdmin
69
78
  AbAdmin.image_types.include?(self.data_content_type)
70
79
  end
71
80
 
81
+ def base_filename
82
+ base = File.basename(data_file_name, '.*')
83
+ base == data_secure_token ? File.basename(original_name, '.*') : base
84
+ end
85
+
86
+ def base_filename=(value)
87
+ return false if value.blank? || File.basename(data_file_name, '.*') == value
88
+ self.original_name = value + File.extname(data_file_name)
89
+ rename!(value)
90
+ end
91
+
72
92
  def main!
73
93
  self.class.update_all('is_main=0', ['assetable_type=? AND assetable_id=? AND type=?', assetable_type, assetable_id, type])
74
94
  update_column(:is_main, true)
@@ -92,18 +112,10 @@ module AbAdmin
92
112
  self
93
113
  end
94
114
 
95
- def rename!
96
- rename
97
- save!
98
- end
99
-
100
- def rename
101
- file = data.file
102
- path = data.path
103
- ext = File.extname(path)
104
- new_path = File.join(File.dirname(path), "#{File.basename(path).chomp(ext)}_#{rand(99)}#{ext}")
105
- new_file = ::CarrierWave::SanitizedFile.new file.move_to(new_path)
106
- data.cache!(new_file)
115
+ def rename!(name=nil)
116
+ normalized_name = name ? data.normalize_filename(name) : rand(9999)
117
+ return false if normalized_name.blank?
118
+ data.rename_via_move "#{normalized_name}#{File.extname(data_file_name)}"
107
119
  end
108
120
 
109
121
  def refresh_assetable
@@ -114,8 +126,7 @@ module AbAdmin
114
126
  end
115
127
 
116
128
  def full_url(*args)
117
- host = Rails.application.config.action_mailer.default_url_options[:host] || 'www.example.com'
118
- "//#{host}#{data.url(*args)}"
129
+ AbAdmin.full_url data.url(*args)
119
130
  end
120
131
 
121
132
  def cropper_geometry=(value)
@@ -6,6 +6,7 @@ module AbAdmin
6
6
 
7
7
  included do
8
8
  include ActionView::Helpers::NumberHelper
9
+ alias_method :is_image, :image?
9
10
  end
10
11
 
11
12
  def file_css_class
@@ -21,7 +22,7 @@ module AbAdmin
21
22
  end
22
23
 
23
24
  def as_json(options={})
24
- options.reverse_merge!(methods: [:filename, :url, :file_css_class, :human_filesize, :created_at])
25
+ options.reverse_merge!(methods: [:filename, :url, :is_image, :file_css_class, :human_filesize, :created_at])
25
26
  super
26
27
  end
27
28
  end
@@ -4,7 +4,10 @@ module AbAdmin
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  included do
7
+ include ActionView::Helpers::SanitizeHelper
8
+
7
9
  belongs_to :headerable, polymorphic: true
10
+ before_save :normalize_html
8
11
  end
9
12
 
10
13
  def empty?
@@ -19,6 +22,18 @@ module AbAdmin
19
22
  value = read_attribute(key)
20
23
  value.blank? ? nil : value
21
24
  end
25
+
26
+ def normalize_html
27
+ ::I18n.available_locales.each do |loc|
28
+ %w(title h1 keywords description).each do |attr|
29
+ send("#{attr}_#{loc}=", send("#{attr}_#{loc}").to_s.no_html)
30
+ end
31
+ end
32
+ ::I18n.available_locales.each do |loc|
33
+ send("seo_block_#{loc}=", sanitize(send("seo_block_#{loc}").to_s))
34
+ end
35
+ end
36
+
22
37
  end
23
38
  end
24
39
  end
@@ -16,9 +16,7 @@ module AbAdmin
16
16
  end
17
17
 
18
18
  def save(path, data)
19
- File.open(path, 'w') do |file|
20
- file.write data.ya2yaml.sub(/\A---\s+/, '').gsub(/:\s+$/, ':').gsub(/^(\s+)(yes|no):/, '\1"\2":')
21
- end
19
+ File.write path, data.deep_stringify_keys.to_yaml.sub(/\A---\s+/, '').gsub(/:\s+$/, ':').gsub(/^(\s+)(yes|no):/, '\1"\2":')
22
20
  end
23
21
 
24
22
  def prepare_data(path)
@@ -6,12 +6,16 @@ module AbAdmin
6
6
  included do
7
7
  extend ActiveModel::Naming
8
8
  extend ActiveRecord::Translation
9
- class_attribute :base_class
9
+ class_attribute :base_class, :editable_paths
10
10
  self.base_class = self
11
+ self.editable_paths = [
12
+ Rails.root.join('config', 'settings', "#{Rails.env}.local.yml"),
13
+ Rails.root.join('config', 'settings', 'settings.local.yml')
14
+ ]
11
15
  end
12
16
 
13
17
  module ClassMethods
14
- def load
18
+ def load_config
15
19
  configatron.configure_from_hash instance.all
16
20
  configatron
17
21
  end
@@ -24,12 +28,8 @@ module AbAdmin
24
28
  end
25
29
 
26
30
  def find_editable_path
27
- edited_settings_paths = [
28
- Rails.root.join('config', 'settings', "#{Rails.env}.local.yml"),
29
- Rails.root.join('config', 'settings', 'settings.local.yml')
30
- ]
31
- path = edited_settings_paths.detect { |path| File.exists?(path) }
32
- path or raise("Create settings file for editing: #{edited_settings_paths.join(' or ')}")
31
+ path = editable_paths.detect { |path| File.exists?(path) }
32
+ path or raise("Create settings file for editing: #{editable_paths.join(' or ')}")
33
33
  end
34
34
 
35
35
  def find_paths
@@ -63,11 +63,11 @@ module AbAdmin
63
63
  conf[root_key] = case_value(root_value)
64
64
  end
65
65
  end
66
- File.open(@editable_path, 'w') { |file| file.write conf.to_yaml } and self.class.load
66
+ File.open(@editable_path, 'w') { |file| file.write conf.to_yaml } and self.class.load_config
67
67
  end
68
68
 
69
69
  def case_value(value)
70
- if %w(true false 1 0).include?(value) || value.is_number?
70
+ if %w(true false).include?(value) || value.to_s.is_number?
71
71
  YAML::load(value)
72
72
  else
73
73
  value
@@ -6,23 +6,34 @@ module AbAdmin
6
6
  included do
7
7
  include AbAdmin::Concerns::Headerable
8
8
  include AbAdmin::Concerns::NestedSet
9
+ extend EnumField::EnumeratedAttribute
9
10
 
10
- enumerated_attribute :structure_type, id_attribute: :kind
11
- enumerated_attribute :position_type, id_attribute: :position
11
+ enumerated_attribute :structure_type
12
+ enumerated_attribute :position_type
12
13
 
13
- validates_presence_of :title
14
- validates_numericality_of :position, only_integer: true
14
+ validates_numericality_of :position_type_id, only_integer: true
15
+ validates_numericality_of :structure_type_id, only_integer: true
15
16
 
16
17
  has_one :static_page, dependent: :destroy
17
- has_many :visible_children, class_name: name, foreign_key: 'parent_id', conditions: {is_visible: true}
18
+ has_many :visible_children, -> { where(is_visible: true) }, class_name: name, foreign_key: 'parent_id'
18
19
 
19
- scope :visible, where(is_visible: true)
20
- scope :with_kind, proc {|structure_type| where(kind: structure_type.id) }
21
- scope :with_position, proc {|position_type| where(position: position_type.id).order('lft DESC') }
20
+ scope :visible, lambda { where(is_visible: true) }
21
+ scope :with_type, lambda { |structure_type| where(structure_type_id: structure_type.id) }
22
+ scope :with_depth, lambda { |level| where(depth: level.to_i) }
23
+ scope :with_position, lambda { |position_type| where(position_type_id: position_type.id).order('lft DESC') }
24
+
25
+ scope :with_kind, lambda { |structure_type|
26
+ ActiveSupport::Deprecation.warn('with_kind is deprecated, use with_type instead')
27
+ with_type.call(structure_type)
28
+ }
22
29
  end
23
30
 
24
31
  def redirect?
25
- kind == StructureType.redirect.id
32
+ structure_type_id == StructureType.redirect.id
33
+ end
34
+
35
+ def admin_title
36
+ [title, structure_type.title, position_type.title, "#{self.class.han(:is_visible)}: #{is_visible ? '+' : '-'}"].join(' | ')
26
37
  end
27
38
 
28
39
  end
@@ -0,0 +1,61 @@
1
+ module AbAdmin
2
+ module Models
3
+ module Track
4
+
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ belongs_to :trackable, polymorphic: true
9
+ belongs_to :owner, class_name: 'User'
10
+ belongs_to :user, class_name: 'User'
11
+
12
+ serialize :parameters, Hash
13
+ serialize :trackable_changes, Hash
14
+
15
+ before_create :make_trackable, if: :trackable
16
+
17
+ class_attribute :tracking_enabled
18
+ self.tracking_enabled = true
19
+
20
+ alias_method :tracking_enabled?, :tracking_enabled
21
+
22
+ scope :recently, -> { order('id DESC') }
23
+ end
24
+
25
+ def action_title(params = {})
26
+ parts = key.split('.')
27
+ lookups = []
28
+ if parts.length == 2
29
+ lookups << [parts[0], 'actions', parts[1], 'title']
30
+ lookups << [parts[0], 'actions', parts[1]]
31
+ lookups << ['actions', parts[1], 'title']
32
+ else
33
+ lookups << ['actions', key, 'title']
34
+ lookups << ['actions', key]
35
+ end
36
+ lookups.map!{|l| l.join('.').to_sym }
37
+ lookups << key
38
+
39
+ I18n.t(lookups.shift, (parameters.merge(params) || {}).merge(scope: :admin, default: lookups))
40
+ end
41
+
42
+ def trackable_changed_attrs
43
+ return unless trackable
44
+ trackable_changes.keys.map { |attr| trackable_han(attr) }.join(', ')
45
+ end
46
+
47
+ def trackable_han(attr)
48
+ attr_s = attr.to_s
49
+ trackable.class.han attr_s =~ /_ids$/ ? attr_s.sub(/_ids$/, '').pluralize : attr_s
50
+ end
51
+
52
+ private
53
+
54
+ def make_trackable
55
+ self.name ||= trackable.han
56
+ self.trackable_changes = trackable.changes.except(:updated_at)
57
+ end
58
+
59
+ end
60
+ end
61
+ end
@@ -13,30 +13,43 @@ module AbAdmin
13
13
  @code = code.to_sym
14
14
  end
15
15
 
16
- def self.define_enum_by_codes
17
- define_enum do |builder|
18
- codes.each do |kind|
19
- builder.member kind, object: new(kind.to_s)
16
+ class << self
17
+ def define_enum_by_codes
18
+ define_enum do |builder|
19
+ codes.each do |kind|
20
+ builder.member kind, object: new(kind.to_s)
21
+ end
20
22
  end
23
+ define_question_methods
21
24
  end
22
- end
23
25
 
24
- def title
25
- I18n.t(@code, scope: i18n_scope)
26
- end
26
+ def define_question_methods
27
+ codes.each do |code_check|
28
+ define_method "#{code_check}?" do
29
+ self.code == code_check
30
+ end
31
+ end
32
+ end
27
33
 
28
- def self.legal?(value)
29
- ActiveSupport::Deprecation.warn('legal? id deprecated, use valid? instead')
30
- all.map(&:id).include?(value)
31
- end
34
+ def legal?(value)
35
+ ActiveSupport::Deprecation.warn('legal? is deprecated, use valid? instead')
36
+ valid?(value)
37
+ end
38
+
39
+ def valid?(c_id)
40
+ all.map(&:id).include?(c_id.to_i)
41
+ end
32
42
 
33
- def self.valid?(c_id)
34
- all.map(&:id).include?(c_id.to_i)
43
+ def valid_code?(code)
44
+ return unless code
45
+ codes.include?(code.to_sym)
46
+ end
35
47
  end
36
48
 
37
- def self.valid_code?(code)
38
- return unless code
39
- codes.include?(code.to_sym)
49
+ def title
50
+ I18n.t!(@code, scope: i18n_scope)
51
+ rescue I18n::MissingTranslationData
52
+ @code.to_s.humanize
40
53
  end
41
54
 
42
55
  end