nsm-activeadmin 0.2.2

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 (321) hide show
  1. data/.document +5 -0
  2. data/.gitignore +34 -0
  3. data/.travis.yml +4 -0
  4. data/.yardopts +8 -0
  5. data/CHANGELOG.rdoc +76 -0
  6. data/Gemfile +39 -0
  7. data/LICENSE +25 -0
  8. data/README.rdoc +487 -0
  9. data/Rakefile +27 -0
  10. data/activeadmin.gemspec +28 -0
  11. data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
  12. data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
  13. data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
  14. data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
  15. data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
  16. data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
  17. data/app/assets/images/active_admin/loading.gif +0 -0
  18. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  19. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  20. data/app/assets/images/active_admin/orderable.png +0 -0
  21. data/app/assets/javascripts/active_admin/base.js +12 -0
  22. data/app/assets/javascripts/active_admin/vendor.js +382 -0
  23. data/app/assets/stylesheets/active_admin/_base.css.scss +400 -0
  24. data/app/assets/stylesheets/active_admin/_forms.css.scss +256 -0
  25. data/app/assets/stylesheets/active_admin/_header.css.scss +110 -0
  26. data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
  27. data/app/assets/stylesheets/active_admin/_typography.css.scss +100 -0
  28. data/app/assets/stylesheets/active_admin/components/_comments.css.scss +40 -0
  29. data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +123 -0
  30. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +38 -0
  31. data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +8 -0
  32. data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +27 -0
  33. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +29 -0
  34. data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +20 -0
  35. data/app/assets/stylesheets/active_admin/mixins/_reset.css.scss +165 -0
  36. data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +43 -0
  37. data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +34 -0
  38. data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +21 -0
  39. data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +21 -0
  40. data/app/views/active_admin/dashboard/index.html.arb +1 -0
  41. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
  42. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
  43. data/app/views/active_admin/devise/passwords/edit.html.erb +16 -0
  44. data/app/views/active_admin/devise/passwords/new.html.erb +14 -0
  45. data/app/views/active_admin/devise/sessions/new.html.erb +18 -0
  46. data/app/views/active_admin/devise/shared/_links.erb +20 -0
  47. data/app/views/active_admin/devise/unlocks/new.html.erb +12 -0
  48. data/app/views/active_admin/resource/edit.html.arb +1 -0
  49. data/app/views/active_admin/resource/index.csv.erb +20 -0
  50. data/app/views/active_admin/resource/index.html.arb +1 -0
  51. data/app/views/active_admin/resource/new.html.arb +1 -0
  52. data/app/views/active_admin/resource/show.html.arb +1 -0
  53. data/app/views/layouts/active_admin.html.arb +1 -0
  54. data/app/views/layouts/active_admin_logged_out.html.erb +35 -0
  55. data/cucumber.yml +2 -0
  56. data/docs/1-general-configuration.md +52 -0
  57. data/docs/2-resource-customization.md +35 -0
  58. data/docs/3-index-pages.md +55 -0
  59. data/docs/3-index-pages/index-as-block.md +16 -0
  60. data/docs/3-index-pages/index-as-blog.md +61 -0
  61. data/docs/3-index-pages/index-as-grid.md +21 -0
  62. data/docs/3-index-pages/index-as-table.md +74 -0
  63. data/docs/4-csv-format.md +14 -0
  64. data/docs/5-forms.md +39 -0
  65. data/docs/6-show-screens.md +22 -0
  66. data/docs/7-sidebars.md +35 -0
  67. data/docs/8-custom-actions.md +123 -0
  68. data/features/comments/commenting.feature +112 -0
  69. data/features/comments/viewing_index.feature +19 -0
  70. data/features/dashboard.feature +26 -0
  71. data/features/edit_page.feature +106 -0
  72. data/features/first_boot.feature +16 -0
  73. data/features/global_navigation.feature +30 -0
  74. data/features/index/format_as_csv.feature +46 -0
  75. data/features/index/formats.feature +12 -0
  76. data/features/index/index_as_block.feature +15 -0
  77. data/features/index/index_as_blog.feature +50 -0
  78. data/features/index/index_as_grid.feature +45 -0
  79. data/features/index/index_as_table.feature +81 -0
  80. data/features/index/index_blank_slate.feature +55 -0
  81. data/features/index/index_scopes.feature +52 -0
  82. data/features/index/pagination.feature +17 -0
  83. data/features/menu.feature +26 -0
  84. data/features/new_page.feature +75 -0
  85. data/features/registering_assets.feature +35 -0
  86. data/features/registering_resources.feature +33 -0
  87. data/features/show/default_content.feature +43 -0
  88. data/features/show/page_title.feature +33 -0
  89. data/features/sidebar_sections.feature +127 -0
  90. data/features/specifying_actions.feature +87 -0
  91. data/features/step_definitions/action_item_steps.rb +7 -0
  92. data/features/step_definitions/additional_web_steps.rb +77 -0
  93. data/features/step_definitions/asset_steps.rb +7 -0
  94. data/features/step_definitions/attribute_steps.rb +13 -0
  95. data/features/step_definitions/comment_steps.rb +8 -0
  96. data/features/step_definitions/configuration_steps.rb +31 -0
  97. data/features/step_definitions/dashboard_steps.rb +11 -0
  98. data/features/step_definitions/factory_steps.rb +29 -0
  99. data/features/step_definitions/flash_steps.rb +3 -0
  100. data/features/step_definitions/format_steps.rb +35 -0
  101. data/features/step_definitions/index_scope_steps.rb +20 -0
  102. data/features/step_definitions/layout_steps.rb +3 -0
  103. data/features/step_definitions/menu_steps.rb +7 -0
  104. data/features/step_definitions/pagination_steps.rb +8 -0
  105. data/features/step_definitions/sidebar_steps.rb +7 -0
  106. data/features/step_definitions/tab_steps.rb +3 -0
  107. data/features/step_definitions/user_steps.rb +26 -0
  108. data/features/step_definitions/web_steps.rb +211 -0
  109. data/features/sti_resource.feature +61 -0
  110. data/features/support/env.rb +90 -0
  111. data/features/support/paths.rb +50 -0
  112. data/features/support/selectors.rb +45 -0
  113. data/features/users/logging_in.feature +34 -0
  114. data/features/users/logging_out.feature +13 -0
  115. data/lib/active_admin.rb +74 -0
  116. data/lib/active_admin/abstract_view_factory.rb +95 -0
  117. data/lib/active_admin/application.rb +228 -0
  118. data/lib/active_admin/arbre.rb +23 -0
  119. data/lib/active_admin/arbre/attributes.rb +20 -0
  120. data/lib/active_admin/arbre/class_list.rb +28 -0
  121. data/lib/active_admin/arbre/collection.rb +27 -0
  122. data/lib/active_admin/arbre/context.rb +14 -0
  123. data/lib/active_admin/arbre/core_extensions.rb +5 -0
  124. data/lib/active_admin/arbre/document.rb +42 -0
  125. data/lib/active_admin/arbre/element.rb +151 -0
  126. data/lib/active_admin/arbre/html.rb +84 -0
  127. data/lib/active_admin/arbre/html5_elements.rb +47 -0
  128. data/lib/active_admin/arbre/tag.rb +137 -0
  129. data/lib/active_admin/arbre/text_node.rb +35 -0
  130. data/lib/active_admin/asset_registration.rb +34 -0
  131. data/lib/active_admin/callbacks.rb +89 -0
  132. data/lib/active_admin/comments.rb +88 -0
  133. data/lib/active_admin/comments/comment.rb +21 -0
  134. data/lib/active_admin/comments/configuration.rb +18 -0
  135. data/lib/active_admin/comments/namespace_helper.rb +14 -0
  136. data/lib/active_admin/comments/resource_helper.rb +17 -0
  137. data/lib/active_admin/comments/show_page_helper.rb +23 -0
  138. data/lib/active_admin/comments/views.rb +3 -0
  139. data/lib/active_admin/comments/views/active_admin_comment.rb +0 -0
  140. data/lib/active_admin/comments/views/active_admin_comments.rb +82 -0
  141. data/lib/active_admin/component.rb +22 -0
  142. data/lib/active_admin/controller_action.rb +12 -0
  143. data/lib/active_admin/csv_builder.rb +45 -0
  144. data/lib/active_admin/dashboards.rb +48 -0
  145. data/lib/active_admin/dashboards/dashboard_controller.rb +38 -0
  146. data/lib/active_admin/dashboards/section.rb +34 -0
  147. data/lib/active_admin/deprecation.rb +36 -0
  148. data/lib/active_admin/devise.rb +43 -0
  149. data/lib/active_admin/dsl.rb +224 -0
  150. data/lib/active_admin/engine.rb +4 -0
  151. data/lib/active_admin/event.rb +31 -0
  152. data/lib/active_admin/form_builder.rb +109 -0
  153. data/lib/active_admin/helpers/optional_display.rb +34 -0
  154. data/lib/active_admin/helpers/settings.rb +63 -0
  155. data/lib/active_admin/iconic.rb +51 -0
  156. data/lib/active_admin/iconic/icons.rb +142 -0
  157. data/lib/active_admin/locales/da.yml +28 -0
  158. data/lib/active_admin/locales/en.yml +40 -0
  159. data/lib/active_admin/locales/es.yml +39 -0
  160. data/lib/active_admin/locales/it.yml +39 -0
  161. data/lib/active_admin/locales/pt-BR.yml +36 -0
  162. data/lib/active_admin/locales/ru.yml +40 -0
  163. data/lib/active_admin/locales/zh_cn.yml +40 -0
  164. data/lib/active_admin/menu.rb +42 -0
  165. data/lib/active_admin/menu_item.rb +73 -0
  166. data/lib/active_admin/namespace.rb +206 -0
  167. data/lib/active_admin/page_config.rb +15 -0
  168. data/lib/active_admin/reloader.rb +30 -0
  169. data/lib/active_admin/renderer.rb +87 -0
  170. data/lib/active_admin/resource.rb +151 -0
  171. data/lib/active_admin/resource/action_items.rb +88 -0
  172. data/lib/active_admin/resource/belongs_to.rb +31 -0
  173. data/lib/active_admin/resource/menu.rb +45 -0
  174. data/lib/active_admin/resource/naming.rb +36 -0
  175. data/lib/active_admin/resource/scopes.rb +33 -0
  176. data/lib/active_admin/resource/sidebars.rb +36 -0
  177. data/lib/active_admin/resource_controller.rb +103 -0
  178. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  179. data/lib/active_admin/resource_controller/actions.rb +79 -0
  180. data/lib/active_admin/resource_controller/callbacks.rb +47 -0
  181. data/lib/active_admin/resource_controller/collection.rb +144 -0
  182. data/lib/active_admin/resource_controller/filters.rb +58 -0
  183. data/lib/active_admin/resource_controller/form.rb +42 -0
  184. data/lib/active_admin/resource_controller/menu.rb +29 -0
  185. data/lib/active_admin/resource_controller/page_configurations.rb +53 -0
  186. data/lib/active_admin/resource_controller/scoping.rb +36 -0
  187. data/lib/active_admin/resource_controller/sidebars.rb +18 -0
  188. data/lib/active_admin/router.rb +85 -0
  189. data/lib/active_admin/sass/active_admin.scss +3 -0
  190. data/lib/active_admin/sass/css_loader.rb +16 -0
  191. data/lib/active_admin/sass/helpers.rb +40 -0
  192. data/lib/active_admin/scope.rb +17 -0
  193. data/lib/active_admin/sidebar_section.rb +41 -0
  194. data/lib/active_admin/stylesheets/active_admin/mixins/_utilities.scss +0 -0
  195. data/lib/active_admin/version.rb +3 -0
  196. data/lib/active_admin/view_factory.rb +23 -0
  197. data/lib/active_admin/view_helpers.rb +22 -0
  198. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  199. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
  200. data/lib/active_admin/view_helpers/auto_link_helper.rb +42 -0
  201. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +29 -0
  202. data/lib/active_admin/view_helpers/display_helper.rb +38 -0
  203. data/lib/active_admin/view_helpers/filter_form_helper.rb +186 -0
  204. data/lib/active_admin/view_helpers/form_helper.rb +13 -0
  205. data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
  206. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +26 -0
  207. data/lib/active_admin/view_helpers/renderer_helper.rb +29 -0
  208. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  209. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  210. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  211. data/lib/active_admin/views.rb +8 -0
  212. data/lib/active_admin/views/action_items.rb +17 -0
  213. data/lib/active_admin/views/components/attributes_table.rb +66 -0
  214. data/lib/active_admin/views/components/blank_slate.rb +33 -0
  215. data/lib/active_admin/views/components/columns.rb +47 -0
  216. data/lib/active_admin/views/components/paginated_collection.rb +92 -0
  217. data/lib/active_admin/views/components/panel.rb +26 -0
  218. data/lib/active_admin/views/components/scopes.rb +70 -0
  219. data/lib/active_admin/views/components/sidebar_section.rb +28 -0
  220. data/lib/active_admin/views/components/status_tag.rb +55 -0
  221. data/lib/active_admin/views/components/table_for.rb +193 -0
  222. data/lib/active_admin/views/dashboard_section_renderer.rb +19 -0
  223. data/lib/active_admin/views/header_renderer.rb +53 -0
  224. data/lib/active_admin/views/index_as_block.rb +29 -0
  225. data/lib/active_admin/views/index_as_blog.rb +129 -0
  226. data/lib/active_admin/views/index_as_grid.rb +70 -0
  227. data/lib/active_admin/views/index_as_table.rb +148 -0
  228. data/lib/active_admin/views/pages/base.rb +155 -0
  229. data/lib/active_admin/views/pages/dashboard.rb +62 -0
  230. data/lib/active_admin/views/pages/edit.rb +28 -0
  231. data/lib/active_admin/views/pages/index.rb +74 -0
  232. data/lib/active_admin/views/pages/layout.rb +26 -0
  233. data/lib/active_admin/views/pages/new.rb +28 -0
  234. data/lib/active_admin/views/pages/show.rb +56 -0
  235. data/lib/active_admin/views/tabs_renderer.rb +58 -0
  236. data/lib/activeadmin.rb +1 -0
  237. data/lib/generators/active_admin/assets/assets_generator.rb +21 -0
  238. data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +427 -0
  239. data/lib/generators/active_admin/assets/templates/3.1/active_admin.css.scss +6 -0
  240. data/lib/generators/active_admin/assets/templates/3.1/active_admin.js +1 -0
  241. data/lib/generators/active_admin/assets/templates/dashboards.rb +36 -0
  242. data/lib/generators/active_admin/devise/devise_generator.rb +49 -0
  243. data/lib/generators/active_admin/install/install_generator.rb +44 -0
  244. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +93 -0
  245. data/lib/generators/active_admin/install/templates/dashboards.rb +38 -0
  246. data/lib/generators/active_admin/install/templates/migrations/1_create_admin_notes.rb +16 -0
  247. data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +25 -0
  248. data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
  249. data/lib/generators/active_admin/resource/templates/admin.rb +3 -0
  250. data/script/local +44 -0
  251. data/script/use_rails +45 -0
  252. data/spec/integration/belongs_to_spec.rb +42 -0
  253. data/spec/integration/default_namespace.rb +77 -0
  254. data/spec/integration/javascript_spec.rb +20 -0
  255. data/spec/integration/stylesheets_spec.rb +41 -0
  256. data/spec/spec_helper.rb +157 -0
  257. data/spec/support/detect_rails_version.rb +11 -0
  258. data/spec/support/integration_example_group.rb +33 -0
  259. data/spec/support/jslint.yml +80 -0
  260. data/spec/support/rails_template.rb +32 -0
  261. data/spec/support/rails_template_with_data.rb +33 -0
  262. data/spec/support/templates/cucumber.rb +24 -0
  263. data/spec/unit/abstract_view_factory_spec.rb +79 -0
  264. data/spec/unit/action_builder_spec.rb +88 -0
  265. data/spec/unit/application_spec.rb +78 -0
  266. data/spec/unit/arbre/html/context_spec.rb +22 -0
  267. data/spec/unit/arbre/html/element_finder_methods_spec.rb +54 -0
  268. data/spec/unit/arbre/html/element_spec.rb +224 -0
  269. data/spec/unit/arbre/html/tag_attributes_spec.rb +61 -0
  270. data/spec/unit/arbre/html/tag_spec.rb +63 -0
  271. data/spec/unit/arbre/html_spec.rb +210 -0
  272. data/spec/unit/asset_registration_spec.rb +37 -0
  273. data/spec/unit/auto_link_spec.rb +39 -0
  274. data/spec/unit/belongs_to_spec.rb +45 -0
  275. data/spec/unit/breadcrumbs_spec.rb +110 -0
  276. data/spec/unit/comments_spec.rb +57 -0
  277. data/spec/unit/component_spec.rb +18 -0
  278. data/spec/unit/controller_filters_spec.rb +34 -0
  279. data/spec/unit/csv_builder_spec.rb +83 -0
  280. data/spec/unit/dashboard_controller_spec.rb +26 -0
  281. data/spec/unit/dashboard_section_spec.rb +56 -0
  282. data/spec/unit/dashboards_spec.rb +59 -0
  283. data/spec/unit/display_name_spec.rb +29 -0
  284. data/spec/unit/event_spec.rb +41 -0
  285. data/spec/unit/filter_form_builder_spec.rb +182 -0
  286. data/spec/unit/form_builder_spec.rb +239 -0
  287. data/spec/unit/generators/install_rails_3_1_spec.rb +16 -0
  288. data/spec/unit/helpers/settings_spec.rb +30 -0
  289. data/spec/unit/menu_item_spec.rb +143 -0
  290. data/spec/unit/menu_spec.rb +53 -0
  291. data/spec/unit/namespace_spec.rb +214 -0
  292. data/spec/unit/pretty_format_spec.rb +35 -0
  293. data/spec/unit/rails_spec.rb +43 -0
  294. data/spec/unit/registration_spec.rb +76 -0
  295. data/spec/unit/reloader_spec.rb +28 -0
  296. data/spec/unit/renderer_spec.rb +108 -0
  297. data/spec/unit/resource/action_items_spec.rb +62 -0
  298. data/spec/unit/resource/menu_spec.rb +80 -0
  299. data/spec/unit/resource/naming_spec.rb +56 -0
  300. data/spec/unit/resource/scopes_spec.rb +30 -0
  301. data/spec/unit/resource/sidebars_spec.rb +50 -0
  302. data/spec/unit/resource_controller/collection_spec.rb +34 -0
  303. data/spec/unit/resource_controller_spec.rb +152 -0
  304. data/spec/unit/resource_spec.rb +260 -0
  305. data/spec/unit/routing_spec.rb +88 -0
  306. data/spec/unit/sass/helpers_spec.rb +47 -0
  307. data/spec/unit/scope_spec.rb +31 -0
  308. data/spec/unit/tabs_renderer_spec.rb +85 -0
  309. data/spec/unit/view_factory_spec.rb +19 -0
  310. data/spec/unit/views/components/attributes_table_spec.rb +100 -0
  311. data/spec/unit/views/components/blank_slate_spec.rb +31 -0
  312. data/spec/unit/views/components/columns_spec.rb +75 -0
  313. data/spec/unit/views/components/panel_spec.rb +31 -0
  314. data/spec/unit/views/components/sidebar_section_spec.rb +37 -0
  315. data/spec/unit/views/components/status_tag_spec.rb +81 -0
  316. data/spec/unit/views/components/table_for_spec.rb +130 -0
  317. data/spec/unit/views/pages/layout_spec.rb +22 -0
  318. data/tasks/docs.rake +39 -0
  319. data/tasks/test.rake +49 -0
  320. data/tasks/yard.rake +6 -0
  321. metadata +510 -0
@@ -0,0 +1,151 @@
1
+ require 'active_admin/resource/action_items'
2
+ require 'active_admin/resource/menu'
3
+ require 'active_admin/resource/naming'
4
+ require 'active_admin/resource/scopes'
5
+ require 'active_admin/resource/sidebars'
6
+
7
+ module ActiveAdmin
8
+
9
+ # Resource is the primary data storage for resource configuration in Active Admin
10
+ #
11
+ # When you register a resource (ActiveAdmin.register Post) you are actually creating
12
+ # a new Resource instance within the given Namespace.
13
+ #
14
+ # The instance of the current resource is available in ResourceController and views
15
+ # by calling the #active_admin_config method.
16
+ #
17
+ class Resource
18
+
19
+ # Event dispatched when a new resource is registered
20
+ RegisterEvent = 'active_admin.resource.register'.freeze
21
+
22
+ autoload :BelongsTo, 'active_admin/resource/belongs_to'
23
+
24
+ # The namespace this resource belongs to
25
+ attr_reader :namespace
26
+
27
+ # The class this resource wraps. If you register the Post model, Resource#resource
28
+ # will point to the Post class
29
+ attr_reader :resource
30
+
31
+ # A hash of page configurations for the controller indexed by action name
32
+ attr_reader :page_configs
33
+
34
+ # An array of member actions defined for this resource
35
+ attr_reader :member_actions
36
+
37
+ # An array of collection actions defined for this resource
38
+ attr_reader :collection_actions
39
+
40
+ # The default sort order to use in the controller
41
+ attr_accessor :sort_order
42
+
43
+ # Scope this resource to an association in the controller
44
+ attr_accessor :scope_to
45
+
46
+ # If we're scoping resources, use this method on the parent to return the collection
47
+ attr_accessor :scope_to_association_method
48
+
49
+ # Set to false to turn off admin notes
50
+ attr_accessor :admin_notes
51
+
52
+ # Set the configuration for the CSV
53
+ attr_writer :csv_builder
54
+
55
+ module Base
56
+ def initialize(namespace, resource, options = {})
57
+ @namespace = namespace
58
+ @resource = resource
59
+ @options = default_options.merge(options)
60
+ @sort_order = @options[:sort_order]
61
+ @page_configs = {}
62
+ @member_actions, @collection_actions = [], []
63
+ end
64
+ end
65
+
66
+ include Base
67
+ include ActionItems
68
+ include Menu
69
+ include Naming
70
+ include Scopes
71
+ include Sidebars
72
+
73
+
74
+ def resource_table_name
75
+ resource.quoted_table_name
76
+ end
77
+
78
+ # Returns a properly formatted controller name for this
79
+ # resource within its namespace
80
+ def controller_name
81
+ [namespace.module_name, camelized_resource_name.pluralize + "Controller"].compact.join('::')
82
+ end
83
+
84
+ # Returns the controller for this resource
85
+ def controller
86
+ @controller ||= controller_name.constantize
87
+ end
88
+
89
+ # Returns the routes prefix for this resource
90
+ def route_prefix
91
+ namespace.module_name.try(:underscore)
92
+ end
93
+
94
+ # Returns a symbol for the route to use to get to the
95
+ # collection of this resource
96
+ def route_collection_path
97
+ [route_prefix, controller.resources_configuration[:self][:route_collection_name], 'path'].compact.join('_').to_sym
98
+ end
99
+
100
+ # Returns the named route for an instance of this resource
101
+ def route_instance_path
102
+ [route_prefix, controller.resources_configuration[:self][:route_instance_name], 'path'].compact.join('_').to_sym
103
+ end
104
+
105
+ # Clears all the member actions this resource knows about
106
+ def clear_member_actions!
107
+ @member_actions = []
108
+ end
109
+
110
+ def clear_collection_actions!
111
+ @collection_actions = []
112
+ end
113
+
114
+ # Are admin notes turned on for this resource
115
+ def admin_notes?
116
+ admin_notes.nil? ? ActiveAdmin.admin_notes : admin_notes
117
+ end
118
+
119
+ def belongs_to(target, options = {})
120
+ @belongs_to = Resource::BelongsTo.new(self, target, options)
121
+ controller.belongs_to(target, options.dup)
122
+ end
123
+
124
+ def belongs_to_config
125
+ @belongs_to
126
+ end
127
+
128
+ # Do we belong to another resource
129
+ def belongs_to?
130
+ !belongs_to_config.nil?
131
+ end
132
+
133
+ # The csv builder for this resource
134
+ def csv_builder
135
+ @csv_builder || default_csv_builder
136
+ end
137
+
138
+ private
139
+
140
+ def default_options
141
+ {
142
+ :namespace => ActiveAdmin.application.default_namespace,
143
+ :sort_order => "#{resource.respond_to?(:primary_key) ? resource.primary_key : 'id'}_desc"
144
+ }
145
+ end
146
+
147
+ def default_csv_builder
148
+ @default_csv_builder ||= CSVBuilder.default_for_resource(resource)
149
+ end
150
+ end # class Resource
151
+ end # module ActiveAdmin
@@ -0,0 +1,88 @@
1
+ require 'active_admin/helpers/optional_display'
2
+
3
+ module ActiveAdmin
4
+
5
+ class Resource
6
+ module ActionItems
7
+
8
+ # Add the default action items to a resource when it's
9
+ # initialized
10
+ def initialize(*args)
11
+ super
12
+ add_default_action_items
13
+ end
14
+
15
+ # @return [Array] The set of action items for this resource
16
+ def action_items
17
+ @action_items ||= []
18
+ end
19
+
20
+ # Add a new action item to a resource
21
+ #
22
+ # @param [Hash] options valid keys include:
23
+ # :only: A single or array of controller actions to display
24
+ # this action item on.
25
+ # :except: A single or array of controller actions not to
26
+ # display this action item on.
27
+ def add_action_item(options = {}, &block)
28
+ self.action_items << ActiveAdmin::ActionItem.new(options, &block)
29
+ end
30
+
31
+ # Returns a set of action items to display for a specific controller action
32
+ #
33
+ # @param [String, Symbol] action the action to retrieve action items for
34
+ #
35
+ # @return [Array] Array of ActionItems for the controller actions
36
+ def action_items_for(action)
37
+ action_items.select{|item| item.display_on?(action) }
38
+ end
39
+
40
+ # Clears all the existing action items for this resource
41
+ def clear_action_items!
42
+ @action_items = []
43
+ end
44
+
45
+ private
46
+
47
+ # Adds the default action items to each resource
48
+ def add_default_action_items
49
+ # New Link on all actions except :new and :show
50
+ add_action_item :except => [:new, :show] do
51
+ if controller.action_methods.include?('new')
52
+ link_to(I18n.t('active_admin.new_model', :model => active_admin_config.resource_name), new_resource_path)
53
+ end
54
+ end
55
+
56
+ # Edit link on show
57
+ add_action_item :only => :show do
58
+ if controller.action_methods.include?('edit')
59
+ link_to(I18n.t('active_admin.edit_model', :model => active_admin_config.resource_name), edit_resource_path(resource))
60
+ end
61
+ end
62
+
63
+ # Destroy link on show
64
+ add_action_item :only => :show do
65
+ if controller.action_methods.include?("destroy")
66
+ link_to(I18n.t('active_admin.delete_model', :model => active_admin_config.resource_name),
67
+ resource_path(resource),
68
+ :method => :delete, :confirm => I18n.t('active_admin.delete_confirmation'))
69
+ end
70
+ end
71
+ end
72
+
73
+ end
74
+ end
75
+
76
+ # Model class to store the data for ActionItems
77
+ class ActionItem
78
+ include ActiveAdmin::OptionalDisplay
79
+
80
+ attr_accessor :block
81
+
82
+ def initialize(options = {}, &block)
83
+ @options, @block = options, block
84
+ normalize_display_options!
85
+ end
86
+ end
87
+
88
+ end
@@ -0,0 +1,31 @@
1
+ module ActiveAdmin
2
+ class Resource
3
+ class BelongsTo
4
+
5
+ class TargetNotFound < StandardError; end
6
+
7
+ # The resource which initiated this relationship
8
+ attr_reader :owner
9
+
10
+ def initialize(owner_resource, target_name, options = {})
11
+ @owner, @target_name = owner_resource, target_name
12
+ @options = options
13
+ end
14
+
15
+ # Returns the target resource class or raises an exception if it doesn't exist
16
+ def target
17
+ namespace.resources[@target_name.to_s.camelize] or
18
+ raise TargetNotFound, "Could not find registered resource #{@target_name} in #{namespace.name} with #{namespace.resources.keys.inspect}"
19
+ end
20
+
21
+ def namespace
22
+ @owner.namespace
23
+ end
24
+
25
+ def optional?
26
+ @options[:optional]
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,45 @@
1
+ module ActiveAdmin
2
+ class Resource
3
+ module Menu
4
+
5
+ # Set the menu options. To not add this resource to the menu, just
6
+ # call #menu(false)
7
+ def menu(options = {})
8
+ options = options == false ? { :display => false } : options
9
+ @menu_options = options
10
+ end
11
+
12
+ # The options to use for the menu
13
+ def menu_options
14
+ @menu_options ||= {}
15
+ end
16
+
17
+ # Returns the name to put this resource under in the menu
18
+ def parent_menu_item_name
19
+ menu_options[:parent]
20
+ end
21
+
22
+ # Returns the name to be displayed in the menu for this resource
23
+ def menu_item_name
24
+ menu_options[:label] || plural_resource_name
25
+ end
26
+
27
+ # Returns the items priority for altering the default sort order
28
+ def menu_item_priority
29
+ menu_options[:priority] || 10
30
+ end
31
+
32
+ # Returns a proc for deciding whether to display the menu item or not in the view
33
+ def menu_item_display_if
34
+ menu_options[:if] || proc { true }
35
+ end
36
+
37
+ # Should this resource be added to the menu system?
38
+ def include_in_menu?
39
+ return false if menu_options[:display] == false
40
+ !(belongs_to? && !belongs_to_config.optional?)
41
+ end
42
+
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,36 @@
1
+ module ActiveAdmin
2
+ class Resource
3
+ module Naming
4
+
5
+ # An underscored safe representation internally for this resource
6
+ def underscored_resource_name
7
+ @underscored_resource_name ||= if @options[:as]
8
+ @options[:as].gsub(' ', '').underscore.singularize
9
+ else
10
+ resource.name.gsub('::','').underscore
11
+ end
12
+ end
13
+
14
+ # A camelized safe representation for this resource
15
+ def camelized_resource_name
16
+ underscored_resource_name.camelize
17
+ end
18
+
19
+ # Returns the name to call this resource.
20
+ # By default will use resource.model_name.human
21
+ def resource_name
22
+ @resource_name ||= if @options[:as] || !resource.respond_to?(:model_name)
23
+ underscored_resource_name.titleize
24
+ else
25
+ resource.model_name.human.titleize
26
+ end
27
+ end
28
+
29
+ # Returns the plural version of this resource
30
+ def plural_resource_name
31
+ @plural_resource_name ||= resource_name.pluralize
32
+ end
33
+
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,33 @@
1
+ module ActiveAdmin
2
+ class Resource
3
+ module Scopes
4
+
5
+ # Return an array of scopes for this resource
6
+ def scopes
7
+ @scopes ||= []
8
+ end
9
+
10
+ # Returns a scope for this object by its identifier
11
+ def get_scope_by_id(id)
12
+ id = id.to_s
13
+ scopes.find{|s| s.id == id }
14
+ end
15
+
16
+ def default_scope
17
+ @default_scope
18
+ end
19
+
20
+ # Create a new scope object for this resource.
21
+ # If you want to internationalize the scope name, you can add
22
+ # to your i18n files a key like "active_admin.scopes.scope_method".
23
+ def scope(*args, &block)
24
+ options = args.extract_options!
25
+ self.scopes << ActiveAdmin::Scope.new(*args, &block)
26
+ if options[:default]
27
+ @default_scope = scopes.last
28
+ end
29
+ end
30
+
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,36 @@
1
+ require 'active_admin/helpers/optional_display'
2
+
3
+ module ActiveAdmin
4
+
5
+ class Resource
6
+ module Sidebars
7
+
8
+ def initialize(*args)
9
+ super
10
+ add_default_sidebar_sections
11
+ end
12
+
13
+ def sidebar_sections
14
+ @sidebar_sections ||= []
15
+ end
16
+
17
+ def clear_sidebar_sections!
18
+ @sidebar_sections = []
19
+ end
20
+
21
+ def sidebar_sections_for(action)
22
+ sidebar_sections.select{|section| section.display_on?(action) }
23
+ end
24
+
25
+ private
26
+
27
+ def add_default_sidebar_sections
28
+ self.sidebar_sections << ActiveAdmin::SidebarSection.new(:filters, :only => :index) do
29
+ active_admin_filters_form_for assigns["search"], filters_config
30
+ end
31
+ end
32
+
33
+ end
34
+ end
35
+
36
+ end
@@ -0,0 +1,103 @@
1
+ require 'inherited_resources'
2
+ require 'active_admin/resource_controller/actions'
3
+ require 'active_admin/resource_controller/action_builder'
4
+ require 'active_admin/resource_controller/callbacks'
5
+ require 'active_admin/resource_controller/collection'
6
+ require 'active_admin/resource_controller/filters'
7
+ require 'active_admin/resource_controller/form'
8
+ require 'active_admin/resource_controller/menu'
9
+ require 'active_admin/resource_controller/page_configurations'
10
+ require 'active_admin/resource_controller/scoping'
11
+
12
+ module ActiveAdmin
13
+ class ResourceController < ::InheritedResources::Base
14
+
15
+ helper ::ActiveAdmin::ViewHelpers
16
+
17
+ layout :determine_active_admin_layout
18
+
19
+ respond_to :html, :xml, :json
20
+ respond_to :csv, :only => :index
21
+
22
+ before_filter :only_render_implemented_actions
23
+ before_filter :authenticate_active_admin_user
24
+
25
+ ACTIVE_ADMIN_ACTIONS = [:index, :show, :new, :create, :edit, :update, :destroy]
26
+
27
+ include Actions
28
+ include ActionBuilder
29
+ include Callbacks
30
+ include Collection
31
+ include Filters
32
+ include Form
33
+ include Menu
34
+ include PageConfigurations
35
+ include Scoping
36
+
37
+ class << self
38
+
39
+ # Reference to the Resource object which initialized
40
+ # this controller
41
+ attr_accessor :active_admin_config
42
+
43
+ def active_admin_config=(config)
44
+ @active_admin_config = config
45
+ defaults :resource_class => config.resource,
46
+ :route_prefix => config.route_prefix,
47
+ :instance_name => config.underscored_resource_name
48
+ end
49
+
50
+ public :belongs_to
51
+ end
52
+
53
+ protected
54
+
55
+ # By default Rails will render un-implemented actions when the view exists. Becuase Active
56
+ # Admin allows you to not render any of the actions by using the #actions method, we need
57
+ # to check if they are implemented.
58
+ def only_render_implemented_actions
59
+ raise AbstractController::ActionNotFound unless action_methods.include?(params[:action])
60
+ end
61
+
62
+ # Determine which layout to use.
63
+ #
64
+ # 1. If we're rendering a standard Active Admin action, we want layout(false)
65
+ # because these actions are subclasses of the Base page (which implementes
66
+ # all the required layout code)
67
+ # 2. If we're rendering a custom action, we'll use the active_admin layout so
68
+ # that users can render any template inside Active Admin.
69
+ def determine_active_admin_layout
70
+ ACTIVE_ADMIN_ACTIONS.include?(params[:action].to_sym) ? false : 'active_admin'
71
+ end
72
+
73
+ # Calls the authentication method as defined in ActiveAdmin.authentication_method
74
+ def authenticate_active_admin_user
75
+ send(active_admin_application.authentication_method) if active_admin_application.authentication_method
76
+ end
77
+
78
+ def current_active_admin_user
79
+ send(active_admin_application.current_user_method) if active_admin_application.current_user_method
80
+ end
81
+ helper_method :current_active_admin_user
82
+
83
+ def current_active_admin_user?
84
+ !current_active_admin_user.nil?
85
+ end
86
+ helper_method :current_active_admin_user?
87
+
88
+ def active_admin_config
89
+ self.class.active_admin_config
90
+ end
91
+ helper_method :active_admin_config
92
+
93
+ def active_admin_application
94
+ ActiveAdmin.application
95
+ end
96
+
97
+ # Returns the renderer class to use for the given action.
98
+ def renderer_for(action)
99
+ active_admin_application.view_factory["#{action}_page"]
100
+ end
101
+ helper_method :renderer_for
102
+ end
103
+ end