andrewroth_activeadmin 0.3.4

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 (338) hide show
  1. data/.document +5 -0
  2. data/.gitignore +35 -0
  3. data/.travis.yml +4 -0
  4. data/.yardopts +8 -0
  5. data/CHANGELOG.md +301 -0
  6. data/Gemfile +40 -0
  7. data/Guardfile +8 -0
  8. data/LICENSE +25 -0
  9. data/README.rdoc +113 -0
  10. data/Rakefile +18 -0
  11. data/activeadmin.gemspec +28 -0
  12. data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
  13. data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
  14. data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
  15. data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
  16. data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
  17. data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
  18. data/app/assets/images/active_admin/loading.gif +0 -0
  19. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  20. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  21. data/app/assets/images/active_admin/orderable.png +0 -0
  22. data/app/assets/javascripts/active_admin/base.js +12 -0
  23. data/app/assets/javascripts/active_admin/vendor.js +382 -0
  24. data/app/assets/stylesheets/active_admin/_base.css.scss +363 -0
  25. data/app/assets/stylesheets/active_admin/_forms.css.scss +259 -0
  26. data/app/assets/stylesheets/active_admin/_header.css.scss +121 -0
  27. data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
  28. data/app/assets/stylesheets/active_admin/_typography.css.scss +102 -0
  29. data/app/assets/stylesheets/active_admin/components/_comments.css.scss +43 -0
  30. data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +125 -0
  31. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +39 -0
  32. data/app/assets/stylesheets/active_admin/components/_tables.css.scss +68 -0
  33. data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +10 -0
  34. data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +27 -0
  35. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +29 -0
  36. data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +20 -0
  37. data/app/assets/stylesheets/active_admin/mixins/_reset.css.scss +165 -0
  38. data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +43 -0
  39. data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +34 -0
  40. data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +21 -0
  41. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +17 -0
  42. data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +21 -0
  43. data/app/views/active_admin/dashboard/index.html.arb +1 -0
  44. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
  45. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
  46. data/app/views/active_admin/devise/passwords/edit.html.erb +16 -0
  47. data/app/views/active_admin/devise/passwords/new.html.erb +14 -0
  48. data/app/views/active_admin/devise/sessions/new.html.erb +18 -0
  49. data/app/views/active_admin/devise/shared/_links.erb +20 -0
  50. data/app/views/active_admin/devise/unlocks/new.html.erb +12 -0
  51. data/app/views/active_admin/resource/edit.html.arb +1 -0
  52. data/app/views/active_admin/resource/index.csv.erb +20 -0
  53. data/app/views/active_admin/resource/index.html.arb +1 -0
  54. data/app/views/active_admin/resource/new.html.arb +1 -0
  55. data/app/views/active_admin/resource/show.html.arb +1 -0
  56. data/app/views/layouts/active_admin.html.arb +1 -0
  57. data/app/views/layouts/active_admin_logged_out.html.erb +35 -0
  58. data/cucumber.yml +2 -0
  59. data/docs/0-installation.md +50 -0
  60. data/docs/1-general-configuration.md +43 -0
  61. data/docs/2-resource-customization.md +114 -0
  62. data/docs/3-index-pages.md +55 -0
  63. data/docs/3-index-pages/index-as-block.md +16 -0
  64. data/docs/3-index-pages/index-as-blog.md +61 -0
  65. data/docs/3-index-pages/index-as-grid.md +21 -0
  66. data/docs/3-index-pages/index-as-table.md +90 -0
  67. data/docs/4-csv-format.md +14 -0
  68. data/docs/5-forms.md +39 -0
  69. data/docs/6-show-screens.md +36 -0
  70. data/docs/7-sidebars.md +35 -0
  71. data/docs/8-custom-actions.md +123 -0
  72. data/features/comments/commenting.feature +112 -0
  73. data/features/comments/viewing_index.feature +19 -0
  74. data/features/dashboard.feature +26 -0
  75. data/features/edit_page.feature +106 -0
  76. data/features/first_boot.feature +16 -0
  77. data/features/global_navigation.feature +30 -0
  78. data/features/index/filters.feature +35 -0
  79. data/features/index/format_as_csv.feature +46 -0
  80. data/features/index/formats.feature +12 -0
  81. data/features/index/index_as_block.feature +15 -0
  82. data/features/index/index_as_blog.feature +50 -0
  83. data/features/index/index_as_grid.feature +45 -0
  84. data/features/index/index_as_table.feature +81 -0
  85. data/features/index/index_blank_slate.feature +56 -0
  86. data/features/index/index_scopes.feature +52 -0
  87. data/features/index/pagination.feature +17 -0
  88. data/features/menu.feature +37 -0
  89. data/features/new_page.feature +75 -0
  90. data/features/registering_assets.feature +35 -0
  91. data/features/registering_resources.feature +33 -0
  92. data/features/show/default_content.feature +43 -0
  93. data/features/show/page_title.feature +33 -0
  94. data/features/sidebar_sections.feature +127 -0
  95. data/features/specifying_actions.feature +87 -0
  96. data/features/step_definitions/action_item_steps.rb +7 -0
  97. data/features/step_definitions/additional_web_steps.rb +77 -0
  98. data/features/step_definitions/asset_steps.rb +7 -0
  99. data/features/step_definitions/attribute_steps.rb +13 -0
  100. data/features/step_definitions/comment_steps.rb +8 -0
  101. data/features/step_definitions/configuration_steps.rb +31 -0
  102. data/features/step_definitions/dashboard_steps.rb +11 -0
  103. data/features/step_definitions/factory_steps.rb +29 -0
  104. data/features/step_definitions/flash_steps.rb +3 -0
  105. data/features/step_definitions/format_steps.rb +35 -0
  106. data/features/step_definitions/index_scope_steps.rb +20 -0
  107. data/features/step_definitions/layout_steps.rb +3 -0
  108. data/features/step_definitions/menu_steps.rb +7 -0
  109. data/features/step_definitions/pagination_steps.rb +8 -0
  110. data/features/step_definitions/sidebar_steps.rb +7 -0
  111. data/features/step_definitions/tab_steps.rb +3 -0
  112. data/features/step_definitions/user_steps.rb +26 -0
  113. data/features/step_definitions/web_steps.rb +211 -0
  114. data/features/sti_resource.feature +61 -0
  115. data/features/support/env.rb +96 -0
  116. data/features/support/paths.rb +50 -0
  117. data/features/support/selectors.rb +45 -0
  118. data/features/users/logging_in.feature +34 -0
  119. data/features/users/logging_out.feature +13 -0
  120. data/lib/active_admin.rb +82 -0
  121. data/lib/active_admin/abstract_view_factory.rb +95 -0
  122. data/lib/active_admin/application.rb +231 -0
  123. data/lib/active_admin/arbre.rb +23 -0
  124. data/lib/active_admin/arbre/builder.rb +111 -0
  125. data/lib/active_admin/arbre/context.rb +45 -0
  126. data/lib/active_admin/arbre/core_extensions.rb +5 -0
  127. data/lib/active_admin/arbre/html/attributes.rb +20 -0
  128. data/lib/active_admin/arbre/html/class_list.rb +28 -0
  129. data/lib/active_admin/arbre/html/collection.rb +27 -0
  130. data/lib/active_admin/arbre/html/document.rb +42 -0
  131. data/lib/active_admin/arbre/html/element.rb +151 -0
  132. data/lib/active_admin/arbre/html/html5_elements.rb +47 -0
  133. data/lib/active_admin/arbre/html/tag.rb +137 -0
  134. data/lib/active_admin/arbre/html/text_node.rb +35 -0
  135. data/lib/active_admin/asset_registration.rb +34 -0
  136. data/lib/active_admin/callbacks.rb +89 -0
  137. data/lib/active_admin/comments.rb +88 -0
  138. data/lib/active_admin/comments/comment.rb +21 -0
  139. data/lib/active_admin/comments/configuration.rb +18 -0
  140. data/lib/active_admin/comments/namespace_helper.rb +14 -0
  141. data/lib/active_admin/comments/resource_helper.rb +17 -0
  142. data/lib/active_admin/comments/show_page_helper.rb +23 -0
  143. data/lib/active_admin/comments/views.rb +3 -0
  144. data/lib/active_admin/comments/views/active_admin_comment.rb +0 -0
  145. data/lib/active_admin/comments/views/active_admin_comments.rb +82 -0
  146. data/lib/active_admin/component.rb +22 -0
  147. data/lib/active_admin/controller_action.rb +12 -0
  148. data/lib/active_admin/csv_builder.rb +45 -0
  149. data/lib/active_admin/dashboards.rb +48 -0
  150. data/lib/active_admin/dashboards/dashboard_controller.rb +38 -0
  151. data/lib/active_admin/dashboards/section.rb +34 -0
  152. data/lib/active_admin/dependency_checker.rb +30 -0
  153. data/lib/active_admin/deprecation.rb +36 -0
  154. data/lib/active_admin/devise.rb +54 -0
  155. data/lib/active_admin/dsl.rb +224 -0
  156. data/lib/active_admin/engine.rb +4 -0
  157. data/lib/active_admin/event.rb +31 -0
  158. data/lib/active_admin/form_builder.rb +118 -0
  159. data/lib/active_admin/helpers/optional_display.rb +34 -0
  160. data/lib/active_admin/helpers/scope_chain.rb +23 -0
  161. data/lib/active_admin/helpers/settings.rb +70 -0
  162. data/lib/active_admin/iconic.rb +51 -0
  163. data/lib/active_admin/iconic/icons.rb +142 -0
  164. data/lib/active_admin/locales/bg.yml +40 -0
  165. data/lib/active_admin/locales/cs.yml +34 -0
  166. data/lib/active_admin/locales/da.yml +28 -0
  167. data/lib/active_admin/locales/en.yml +40 -0
  168. data/lib/active_admin/locales/es.yml +40 -0
  169. data/lib/active_admin/locales/fr.yml +40 -0
  170. data/lib/active_admin/locales/it.yml +40 -0
  171. data/lib/active_admin/locales/ja.yml +40 -0
  172. data/lib/active_admin/locales/pl.yml +34 -0
  173. data/lib/active_admin/locales/pt-BR.yml +41 -0
  174. data/lib/active_admin/locales/ru.yml +40 -0
  175. data/lib/active_admin/locales/sv-SE.yml +40 -0
  176. data/lib/active_admin/locales/zh_cn.yml +40 -0
  177. data/lib/active_admin/menu.rb +42 -0
  178. data/lib/active_admin/menu_item.rb +73 -0
  179. data/lib/active_admin/namespace.rb +206 -0
  180. data/lib/active_admin/page_config.rb +15 -0
  181. data/lib/active_admin/reloader.rb +64 -0
  182. data/lib/active_admin/renderer.rb +87 -0
  183. data/lib/active_admin/resource.rb +159 -0
  184. data/lib/active_admin/resource/action_items.rb +88 -0
  185. data/lib/active_admin/resource/belongs_to.rb +31 -0
  186. data/lib/active_admin/resource/menu.rb +45 -0
  187. data/lib/active_admin/resource/naming.rb +50 -0
  188. data/lib/active_admin/resource/scopes.rb +33 -0
  189. data/lib/active_admin/resource/sidebars.rb +36 -0
  190. data/lib/active_admin/resource_controller.rb +105 -0
  191. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  192. data/lib/active_admin/resource_controller/actions.rb +79 -0
  193. data/lib/active_admin/resource_controller/callbacks.rb +47 -0
  194. data/lib/active_admin/resource_controller/collection.rb +138 -0
  195. data/lib/active_admin/resource_controller/filters.rb +58 -0
  196. data/lib/active_admin/resource_controller/form.rb +42 -0
  197. data/lib/active_admin/resource_controller/menu.rb +29 -0
  198. data/lib/active_admin/resource_controller/page_configurations.rb +53 -0
  199. data/lib/active_admin/resource_controller/scoping.rb +36 -0
  200. data/lib/active_admin/resource_controller/sidebars.rb +18 -0
  201. data/lib/active_admin/router.rb +85 -0
  202. data/lib/active_admin/sass/active_admin.scss +3 -0
  203. data/lib/active_admin/sass/css_loader.rb +16 -0
  204. data/lib/active_admin/sass/helpers.rb +45 -0
  205. data/lib/active_admin/scope.rb +31 -0
  206. data/lib/active_admin/sidebar_section.rb +41 -0
  207. data/lib/active_admin/stylesheets/active_admin/mixins/_utilities.scss +0 -0
  208. data/lib/active_admin/version.rb +3 -0
  209. data/lib/active_admin/view_factory.rb +23 -0
  210. data/lib/active_admin/view_helpers.rb +22 -0
  211. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  212. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
  213. data/lib/active_admin/view_helpers/auto_link_helper.rb +42 -0
  214. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +29 -0
  215. data/lib/active_admin/view_helpers/display_helper.rb +38 -0
  216. data/lib/active_admin/view_helpers/filter_form_helper.rb +186 -0
  217. data/lib/active_admin/view_helpers/form_helper.rb +13 -0
  218. data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
  219. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +26 -0
  220. data/lib/active_admin/view_helpers/renderer_helper.rb +29 -0
  221. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  222. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  223. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  224. data/lib/active_admin/views.rb +8 -0
  225. data/lib/active_admin/views/action_items.rb +17 -0
  226. data/lib/active_admin/views/components/attributes_table.rb +66 -0
  227. data/lib/active_admin/views/components/blank_slate.rb +17 -0
  228. data/lib/active_admin/views/components/columns.rb +47 -0
  229. data/lib/active_admin/views/components/paginated_collection.rb +92 -0
  230. data/lib/active_admin/views/components/panel.rb +26 -0
  231. data/lib/active_admin/views/components/scopes.rb +69 -0
  232. data/lib/active_admin/views/components/sidebar_section.rb +28 -0
  233. data/lib/active_admin/views/components/status_tag.rb +55 -0
  234. data/lib/active_admin/views/components/table_for.rb +193 -0
  235. data/lib/active_admin/views/dashboard_section_renderer.rb +19 -0
  236. data/lib/active_admin/views/header_renderer.rb +57 -0
  237. data/lib/active_admin/views/index_as_block.rb +29 -0
  238. data/lib/active_admin/views/index_as_blog.rb +129 -0
  239. data/lib/active_admin/views/index_as_grid.rb +70 -0
  240. data/lib/active_admin/views/index_as_table.rb +164 -0
  241. data/lib/active_admin/views/pages/base.rb +167 -0
  242. data/lib/active_admin/views/pages/dashboard.rb +62 -0
  243. data/lib/active_admin/views/pages/edit.rb +28 -0
  244. data/lib/active_admin/views/pages/index.rb +91 -0
  245. data/lib/active_admin/views/pages/layout.rb +26 -0
  246. data/lib/active_admin/views/pages/new.rb +28 -0
  247. data/lib/active_admin/views/pages/show.rb +56 -0
  248. data/lib/active_admin/views/tabbed_navigation.rb +94 -0
  249. data/lib/activeadmin.rb +1 -0
  250. data/lib/generators/active_admin/assets/assets_generator.rb +21 -0
  251. data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +427 -0
  252. data/lib/generators/active_admin/assets/templates/3.1/active_admin.css.scss +6 -0
  253. data/lib/generators/active_admin/assets/templates/3.1/active_admin.js +1 -0
  254. data/lib/generators/active_admin/assets/templates/dashboards.rb +36 -0
  255. data/lib/generators/active_admin/devise/devise_generator.rb +49 -0
  256. data/lib/generators/active_admin/install/install_generator.rb +44 -0
  257. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +103 -0
  258. data/lib/generators/active_admin/install/templates/dashboards.rb +38 -0
  259. data/lib/generators/active_admin/install/templates/migrations/1_create_admin_notes.rb +16 -0
  260. data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +25 -0
  261. data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
  262. data/lib/generators/active_admin/resource/templates/admin.rb +3 -0
  263. data/script/local +44 -0
  264. data/script/use_rails +46 -0
  265. data/spec/integration/belongs_to_spec.rb +42 -0
  266. data/spec/integration/default_namespace.rb +77 -0
  267. data/spec/integration/javascript_spec.rb +20 -0
  268. data/spec/integration/memory_spec.rb +38 -0
  269. data/spec/integration/stylesheets_spec.rb +41 -0
  270. data/spec/spec_helper.rb +167 -0
  271. data/spec/support/detect_rails_version.rb +10 -0
  272. data/spec/support/integration_example_group.rb +33 -0
  273. data/spec/support/jslint.yml +80 -0
  274. data/spec/support/rails_template.rb +32 -0
  275. data/spec/support/rails_template_with_data.rb +33 -0
  276. data/spec/support/templates/cucumber.rb +24 -0
  277. data/spec/unit/abstract_view_factory_spec.rb +79 -0
  278. data/spec/unit/action_builder_spec.rb +88 -0
  279. data/spec/unit/active_admin_spec.rb +17 -0
  280. data/spec/unit/application_spec.rb +87 -0
  281. data/spec/unit/arbre/context_spec.rb +35 -0
  282. data/spec/unit/arbre/html/element_finder_methods_spec.rb +54 -0
  283. data/spec/unit/arbre/html/element_spec.rb +223 -0
  284. data/spec/unit/arbre/html/tag_attributes_spec.rb +61 -0
  285. data/spec/unit/arbre/html/tag_spec.rb +63 -0
  286. data/spec/unit/arbre/html_spec.rb +209 -0
  287. data/spec/unit/asset_registration_spec.rb +37 -0
  288. data/spec/unit/auto_link_spec.rb +39 -0
  289. data/spec/unit/belongs_to_spec.rb +45 -0
  290. data/spec/unit/breadcrumbs_spec.rb +110 -0
  291. data/spec/unit/comments_spec.rb +57 -0
  292. data/spec/unit/component_spec.rb +18 -0
  293. data/spec/unit/controller_filters_spec.rb +34 -0
  294. data/spec/unit/csv_builder_spec.rb +83 -0
  295. data/spec/unit/dashboard_controller_spec.rb +26 -0
  296. data/spec/unit/dashboard_section_spec.rb +56 -0
  297. data/spec/unit/dashboards_spec.rb +59 -0
  298. data/spec/unit/devise_spec.rb +66 -0
  299. data/spec/unit/display_name_spec.rb +29 -0
  300. data/spec/unit/event_spec.rb +41 -0
  301. data/spec/unit/filter_form_builder_spec.rb +182 -0
  302. data/spec/unit/form_builder_spec.rb +256 -0
  303. data/spec/unit/generators/install_rails_3_1_spec.rb +16 -0
  304. data/spec/unit/helpers/scope_chain_spec.rb +36 -0
  305. data/spec/unit/helpers/settings_spec.rb +30 -0
  306. data/spec/unit/menu_item_spec.rb +143 -0
  307. data/spec/unit/menu_spec.rb +53 -0
  308. data/spec/unit/namespace_spec.rb +214 -0
  309. data/spec/unit/pretty_format_spec.rb +35 -0
  310. data/spec/unit/rails_spec.rb +43 -0
  311. data/spec/unit/registration_spec.rb +76 -0
  312. data/spec/unit/reloader_spec.rb +80 -0
  313. data/spec/unit/renderer_spec.rb +108 -0
  314. data/spec/unit/resource/action_items_spec.rb +62 -0
  315. data/spec/unit/resource/menu_spec.rb +80 -0
  316. data/spec/unit/resource/naming_spec.rb +75 -0
  317. data/spec/unit/resource/scopes_spec.rb +30 -0
  318. data/spec/unit/resource/sidebars_spec.rb +50 -0
  319. data/spec/unit/resource_controller/collection_spec.rb +34 -0
  320. data/spec/unit/resource_controller_spec.rb +152 -0
  321. data/spec/unit/resource_spec.rb +269 -0
  322. data/spec/unit/routing_spec.rb +88 -0
  323. data/spec/unit/sass/helpers_spec.rb +47 -0
  324. data/spec/unit/scope_spec.rb +41 -0
  325. data/spec/unit/view_factory_spec.rb +19 -0
  326. data/spec/unit/views/components/attributes_table_spec.rb +100 -0
  327. data/spec/unit/views/components/blank_slate_spec.rb +15 -0
  328. data/spec/unit/views/components/columns_spec.rb +75 -0
  329. data/spec/unit/views/components/panel_spec.rb +29 -0
  330. data/spec/unit/views/components/sidebar_section_spec.rb +37 -0
  331. data/spec/unit/views/components/status_tag_spec.rb +79 -0
  332. data/spec/unit/views/components/table_for_spec.rb +131 -0
  333. data/spec/unit/views/pages/layout_spec.rb +22 -0
  334. data/spec/unit/views/tabbed_navigation_spec.rb +125 -0
  335. data/tasks/docs.rake +39 -0
  336. data/tasks/test.rake +57 -0
  337. data/tasks/yard.rake +6 -0
  338. metadata +646 -0
@@ -0,0 +1,89 @@
1
+ module ActiveAdmin
2
+ module Callbacks
3
+ extend ActiveSupport::Concern
4
+
5
+ module InstanceMethods
6
+ protected
7
+
8
+ # Simple callback system. Implements before and after callbacks for
9
+ # use within the controllers.
10
+ #
11
+ # We didn't use the ActiveSupport callbacks becuase they do not support
12
+ # passing in any arbitrary object into the callback method (which we
13
+ # need to do)
14
+
15
+ def call_callback_with(method, *args)
16
+ case method
17
+ when Symbol
18
+ send(method, *args)
19
+ when Proc
20
+ instance_exec(*args, &method)
21
+ else
22
+ raise "Please register with callbacks using a symbol or a block/proc."
23
+ end
24
+ end
25
+ end
26
+
27
+ module ClassMethods
28
+
29
+ # Define a new callback.
30
+ #
31
+ # Example:
32
+ #
33
+ # class MyClassWithCallbacks
34
+ # include ActiveAdmin::Callbacks
35
+ #
36
+ # define_active_admin_callbacks :save
37
+ #
38
+ # before_save do |arg1, arg2|
39
+ # # runs before save
40
+ # end
41
+ #
42
+ # after_save :call_after_save
43
+ #
44
+ # def save
45
+ # # Will run before, yield, then after
46
+ # run_save_callbacks :arg1, :arg2 do
47
+ # save!
48
+ # end
49
+ # end
50
+ #
51
+ # protected
52
+ #
53
+ # def call_after_save(arg1, arg2)
54
+ # # runs after save
55
+ # end
56
+ # end
57
+ #
58
+ def define_active_admin_callbacks(*names)
59
+ names.each do |name|
60
+ [:before, :after].each do |type|
61
+
62
+ # Define a method to set the callback
63
+ class_eval(<<-EOS, __FILE__, __LINE__ + 1)
64
+ # def self.before_create_callbacks
65
+ def self.#{type}_#{name}_callbacks
66
+ @#{type}_#{name}_callbacks ||= []
67
+ end
68
+
69
+ # def self.before_create
70
+ def self.#{type}_#{name}(method = nil, &block)
71
+ #{type}_#{name}_callbacks << (method || block)
72
+ end
73
+ EOS
74
+ end
75
+
76
+ # Define a method to run the callbacks
77
+ class_eval(<<-EOS, __FILE__, __LINE__ + 1)
78
+ def run_#{name}_callbacks(*args)
79
+ self.class.before_#{name}_callbacks.each{|callback| call_callback_with(callback, *args)}
80
+ value = yield if block_given?
81
+ self.class.after_#{name}_callbacks.each{|callback| call_callback_with(callback, *args)}
82
+ return value
83
+ end
84
+ EOS
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,88 @@
1
+ require 'active_admin/comments/configuration'
2
+ require 'active_admin/comments/comment'
3
+ require 'active_admin/comments/views'
4
+ require 'active_admin/comments/show_page_helper'
5
+ require 'active_admin/comments/namespace_helper'
6
+ require 'active_admin/comments/resource_helper'
7
+
8
+ # Add the comments configuration
9
+ ActiveAdmin::Application.send :include, ActiveAdmin::Comments::Configuration
10
+
11
+ # Add the comments module to ActiveAdmin::Namespace
12
+ ActiveAdmin::Namespace.send :include, ActiveAdmin::Comments::NamespaceHelper
13
+
14
+ # Add the comments module to ActiveAdmin::Resource
15
+ ActiveAdmin::Resource.send :include, ActiveAdmin::Comments::ResourceHelper
16
+
17
+ # Add the module to the show page
18
+ ActiveAdmin.application.view_factory.show_page.send :include, ActiveAdmin::Comments::ShowPageHelper
19
+
20
+ # Generate a Comment resource when namespaces are registered
21
+ ActiveAdmin::Event.subscribe ActiveAdmin::Namespace::RegisterEvent do |namespace|
22
+ if namespace.comments?
23
+ namespace.register ActiveAdmin::Comment, :as => 'Comment' do
24
+ actions :index, :show, :create
25
+
26
+ # Don't display in the menu
27
+ menu false
28
+
29
+ # Don't allow comments on comments
30
+ config.comments = false
31
+
32
+ # Filter Comments by date
33
+ filter :resource_type
34
+ filter :body
35
+ filter :created_at
36
+
37
+ # Only view comments in this namespace
38
+ scope :all, :default => true do |comments|
39
+ comments.where(:namespace => active_admin_config.namespace.name.to_s)
40
+ end
41
+
42
+ # Always redirect to the resource on show
43
+ before_filter :only => :show do
44
+ flash[:notice] = flash[:notice].dup if flash[:notice]
45
+ comment = ActiveAdmin::Comment.find(params[:id])
46
+ resource_config = active_admin_config.namespace.resource_for(comment.resource.class)
47
+ redirect_to send(resource_config.route_instance_path, comment.resource)
48
+ end
49
+
50
+ # Store the author and namespace
51
+ before_save do |comment|
52
+ comment.namespace = active_admin_config.namespace.name
53
+ comment.author = current_active_admin_user
54
+ end
55
+
56
+ # Redirect to the resource show page when failing to add a comment
57
+ # TODO: Provide helpers to make such kind of customization much simpler
58
+ controller do
59
+ def create
60
+ create! do |success, failure|
61
+ failure.html do
62
+ resource_config = active_admin_config.namespace.resource_for(@comment.resource.class)
63
+ flash[:error] = "Comment wasn't saved, text was empty."
64
+ redirect_to send(resource_config.route_instance_path, @comment.resource)
65
+ end
66
+ end
67
+ end
68
+ end
69
+
70
+
71
+ # Display as a table
72
+ index do
73
+ column("Resource"){|comment| auto_link(comment.resource) }
74
+ column("Author"){|comment| auto_link(comment.author) }
75
+ column :body
76
+ end
77
+ end
78
+ end
79
+ end
80
+
81
+ # Register for comments when new resources are registered
82
+ ActiveAdmin::Event.subscribe ActiveAdmin::Resource::RegisterEvent do |resource|
83
+ if resource.comments?
84
+ resource.resource.has_many :active_admin_comments, :class_name => "ActiveAdmin::Comment",
85
+ :as => :resource,
86
+ :dependent => :destroy
87
+ end
88
+ end
@@ -0,0 +1,21 @@
1
+ require 'kaminari/models/active_record_extension'
2
+
3
+ module ActiveAdmin
4
+
5
+ # manually initialize kaminari for this model
6
+ ::ActiveRecord::Base.send :include, Kaminari::ActiveRecordExtension
7
+
8
+ class Comment < ActiveRecord::Base
9
+ self.table_name = "active_admin_comments"
10
+
11
+ belongs_to :resource, :polymorphic => true
12
+ belongs_to :author, :polymorphic => true
13
+
14
+ validates_presence_of :resource_id
15
+ validates_presence_of :resource_type
16
+ validates_presence_of :body
17
+ validates_presence_of :namespace
18
+ end
19
+
20
+ end
21
+
@@ -0,0 +1,18 @@
1
+ module ActiveAdmin
2
+ module Comments
3
+
4
+ module Configuration
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ # Set the namespaces that can create and view comments
9
+ #
10
+ # config.allow_comments_in = [:admin, :root]
11
+ #
12
+ setting :allow_comments_in, [:admin]
13
+ end
14
+
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,14 @@
1
+ module ActiveAdmin
2
+ module Comments
3
+
4
+ module NamespaceHelper
5
+
6
+ # Returns true of the namespace allows comments
7
+ def comments?
8
+ application.allow_comments_in && application.allow_comments_in.include?(name)
9
+ end
10
+
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,17 @@
1
+ module ActiveAdmin
2
+ module Comments
3
+
4
+ module ResourceHelper
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ attr_accessor :comments
9
+ end
10
+
11
+ def comments?
12
+ namespace.comments? && comments != false
13
+ end
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,23 @@
1
+ module ActiveAdmin
2
+ module Comments
3
+
4
+ # Adds #active_admin_comments to the show page for use
5
+ # and sets it up on the default main content
6
+ module ShowPageHelper
7
+
8
+ # Add admin comments to the main content if they are
9
+ # turned on for the current resource
10
+ def default_main_content
11
+ super
12
+ active_admin_comments if active_admin_config.comments?
13
+ end
14
+
15
+ # Display the comments for the resource. Same as calling
16
+ # #active_admin_comments_for with the current resource
17
+ def active_admin_comments(*args, &block)
18
+ active_admin_comments_for(resource, *args, &block)
19
+ end
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,3 @@
1
+ require 'active_admin/views'
2
+ require 'active_admin/comments/views/active_admin_comments'
3
+ require 'active_admin/comments/views/active_admin_comment'
@@ -0,0 +1,82 @@
1
+ require 'active_admin/views'
2
+ require 'active_admin/views/components/panel'
3
+
4
+ module ActiveAdmin
5
+ module Comments
6
+ module Views
7
+
8
+ class Comments < ActiveAdmin::Views::Panel
9
+ builder_method :active_admin_comments_for
10
+
11
+ def build(record)
12
+ @record = record
13
+ super(title_content, :for => record)
14
+ build_comments
15
+ end
16
+
17
+ protected
18
+
19
+ def title_content
20
+ "Comments (#{record_comments.count})"
21
+ end
22
+
23
+ def record_comments
24
+ @record_comments ||= @record.active_admin_comments.where(:namespace => active_admin_namespace.name.to_s)
25
+ end
26
+
27
+ def build_comments
28
+ if record_comments.count > 0
29
+ record_comments.each do |comment|
30
+ build_comment(comment)
31
+ end
32
+ else
33
+ build_empty_message
34
+ end
35
+ build_comment_form
36
+ end
37
+
38
+ def build_comment(comment)
39
+ div :for => comment do
40
+ div :class => "active_admin_comment_meta" do
41
+ user_name = comment.author ? auto_link(comment.author) : "Anonymous"
42
+ h4(user_name, :class => "active_admin_comment_author")
43
+ span(pretty_format(comment.created_at))
44
+ end
45
+ div :class => "active_admin_comment_body" do
46
+ simple_format(comment.body)
47
+ end
48
+ div :style => "clear:both;"
49
+ end
50
+ end
51
+
52
+ def build_empty_message
53
+ span :class => "empty" do
54
+ "No comments yet."
55
+ end
56
+ end
57
+
58
+ def comment_form_url
59
+ send(:"#{active_admin_namespace.name}_comments_path")
60
+ end
61
+
62
+ def build_comment_form
63
+ self << active_admin_form_for(ActiveAdmin::Comment.new, :url => comment_form_url, :html => {:class => "inline_form"}) do |form|
64
+ form.inputs do
65
+ form.input :resource_type, :value => @record.class.base_class.name.to_s, :as => :hidden
66
+ form.input :resource_id, :value => @record.id, :as => :hidden
67
+ form.input :body, :input_html => {:size => "80x8"}, :label => false
68
+ end
69
+ form.buttons do
70
+ form.commit_button 'Add Comment'
71
+ end
72
+ end
73
+ end
74
+
75
+ def default_id_for_prefix
76
+ 'active_admin_comments_for'
77
+ end
78
+ end
79
+
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,22 @@
1
+ module ActiveAdmin
2
+ class Component < Arbre::HTML::Div
3
+
4
+ # By default components render a div
5
+ def tag_name
6
+ 'div'
7
+ end
8
+
9
+ def initialize(*)
10
+ super
11
+ add_class default_class_name
12
+ end
13
+
14
+ protected
15
+
16
+ # By default, add a css class named after the ruby class
17
+ def default_class_name
18
+ self.class.name.demodulize.underscore
19
+ end
20
+
21
+ end
22
+ end
@@ -0,0 +1,12 @@
1
+ module ActiveAdmin
2
+ class ControllerAction
3
+ attr_reader :name
4
+ def initialize(name, options = {})
5
+ @name, @options = name, options
6
+ end
7
+
8
+ def http_verb
9
+ @options[:method] ||= :get
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,45 @@
1
+ module ActiveAdmin
2
+ # CSVBuilder stores CSV configuration
3
+ #
4
+ # Usage example:
5
+ #
6
+ # csv_builder = CSVBuilder.new
7
+ # csv_builder.column :id
8
+ # csv_builder.column("Name") { |resource| resource.full_name }
9
+ #
10
+ class CSVBuilder
11
+
12
+ # Return a default CSVBuilder for a resource
13
+ # The CSVBuilder's columns would be Id followed by this
14
+ # resource's content columns
15
+ def self.default_for_resource(resource)
16
+ new.tap do |csv_builder|
17
+ csv_builder.column(:id)
18
+ resource.content_columns.each do |content_column|
19
+ csv_builder.column(content_column.name.to_sym)
20
+ end
21
+ end
22
+ end
23
+
24
+ attr_reader :columns
25
+
26
+ def initialize(&block)
27
+ @columns = []
28
+ instance_eval &block if block_given?
29
+ end
30
+
31
+ # Add a column
32
+ def column(name, &block)
33
+ @columns << Column.new(name, block)
34
+ end
35
+
36
+ class Column
37
+ attr_reader :name, :data
38
+
39
+ def initialize(name, block = nil)
40
+ @name = name.is_a?(Symbol) ? name.to_s.titleize : name
41
+ @data = block || name.to_sym
42
+ end
43
+ end
44
+ end
45
+ end