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,224 @@
1
+ module ActiveAdmin
2
+
3
+ #
4
+ # The Active Admin DSL. This class is where all the registration blocks
5
+ # are instance eval'd. This is the central place for the API given to
6
+ # users of Active Admin
7
+ #
8
+ class DSL
9
+
10
+ # Runs the registration block inside this object
11
+ def run_registration_block(config, &block)
12
+ @config = config
13
+ instance_eval &block
14
+ end
15
+
16
+ private
17
+
18
+ # The instance of ActiveAdmin::Resource that's being registered
19
+ # currently. You can use this within your registration blocks to
20
+ # modify options:
21
+ #
22
+ # eg:
23
+ #
24
+ # ActiveAdmin.register Post do
25
+ # config.admin_notes = false
26
+ # end
27
+ #
28
+ def config
29
+ @config
30
+ end
31
+
32
+ # Returns the controller for this resource. If you pass a
33
+ # block, it will be eval'd in the controller
34
+ #
35
+ # Example:
36
+ #
37
+ # ActiveAdmin.register Post do
38
+ #
39
+ # controller do
40
+ # def some_method_on_controller
41
+ # # Method gets added to Admin::PostsController
42
+ # end
43
+ # end
44
+ #
45
+ # end
46
+ #
47
+ def controller(&block)
48
+ @config.controller.class_eval(&block) if block_given?
49
+ @config.controller
50
+ end
51
+
52
+ def belongs_to(target, options = {})
53
+ config.belongs_to(target, options)
54
+ end
55
+
56
+ def menu(options = {})
57
+ config.menu(options)
58
+ end
59
+
60
+ # Scope this controller to some object which has a relation
61
+ # to the resource. Can either accept a block or a symbol
62
+ # of a method to call.
63
+ #
64
+ # Eg:
65
+ #
66
+ # ActiveAdmin.register Post do
67
+ # scope_to :current_user
68
+ # end
69
+ #
70
+ # Then every time we instantiate and object, it would call
71
+ #
72
+ # current_user.posts.build
73
+ #
74
+ # By default Active Admin will use the resource name to build a
75
+ # method to call as the association. If its different, you can
76
+ # pass in the association_method as an option.
77
+ #
78
+ # scope_to :current_user, :association_method => :blog_posts
79
+ #
80
+ # will result in the following
81
+ #
82
+ # current_user.blog_posts.build
83
+ #
84
+ def scope_to(*args, &block)
85
+ options = args.extract_options!
86
+ method = args.first
87
+
88
+ config.scope_to = block_given? ? block : method
89
+ config.scope_to_association_method = options[:association_method]
90
+ end
91
+
92
+ # Create a scope
93
+ def scope(*args, &block)
94
+ config.scope(*args, &block)
95
+ end
96
+
97
+ # Add a new action item to the resource
98
+ #
99
+ # @param [Hash] options valid keys include:
100
+ # :only: A single or array of controller actions to display
101
+ # this action item on.
102
+ # :except: A single or array of controller actions not to
103
+ # display this action item on.
104
+ def action_item(options = {}, &block)
105
+ config.add_action_item(options, &block)
106
+ end
107
+
108
+ # Configure the index page for the resource
109
+ def index(options = {}, &block)
110
+ options[:as] ||= :table
111
+ controller.set_page_config :index, options, &block
112
+ end
113
+
114
+ # Configure the show page for the resource
115
+ def show(options = {}, &block)
116
+ # TODO: controller.set_page_config just sets page_configs on the Resource (config) obj
117
+ controller.set_page_config :show, options, &block
118
+ end
119
+
120
+ def form(options = {}, &block)
121
+ options[:block] = block
122
+ controller.form_config = options
123
+ end
124
+
125
+ def sidebar(name, options = {}, &block)
126
+ config.sidebar_sections << ActiveAdmin::SidebarSection.new(name, options, &block)
127
+ end
128
+
129
+ # Configure the CSV format
130
+ #
131
+ # For example:
132
+ #
133
+ # csv do
134
+ # column :name
135
+ # column("Author") { |post| post.author.full_name }
136
+ # end
137
+ #
138
+ def csv(&block)
139
+ config.csv_builder = CSVBuilder.new(&block)
140
+ end
141
+
142
+ # Member Actions give you the functionality of defining both the
143
+ # action and the route directly from your ActiveAdmin registration
144
+ # block.
145
+ #
146
+ # For example:
147
+ #
148
+ # ActiveAdmin.register Post do
149
+ # member_action :comments do
150
+ # @post = Post.find(params[:id]
151
+ # @comments = @post.comments
152
+ # end
153
+ # end
154
+ #
155
+ # Will create a new controller action comments and will hook it up to
156
+ # the named route (comments_admin_post_path) /admin/posts/:id/comments
157
+ #
158
+ # You can treat everything within the block as a standard Rails controller
159
+ # action.
160
+ #
161
+ def member_action(name, options = {}, &block)
162
+ config.member_actions << ControllerAction.new(name, options)
163
+ controller do
164
+ define_method(name, &block || Proc.new{})
165
+ end
166
+ end
167
+
168
+ def collection_action(name, options = {}, &block)
169
+ config.collection_actions << ControllerAction.new(name, options)
170
+ controller do
171
+ define_method(name, &block || Proc.new{})
172
+ end
173
+ end
174
+
175
+ # Defined Callbacks
176
+ #
177
+ # == After Build
178
+ # Called after the resource is built in the new and create actions.
179
+ #
180
+ # ActiveAdmin.register Post do
181
+ # after_build do |post|
182
+ # post.author = current_user
183
+ # end
184
+ # end
185
+ #
186
+ # == Before / After Create
187
+ # Called before and after a resource is saved to the db on the create action.
188
+ #
189
+ # == Before / After Update
190
+ # Called before and after a resource is saved to the db on the update action.
191
+ #
192
+ # == Before / After Save
193
+ # Called before and after the object is saved in the create and update action.
194
+ # Note: Gets called after the create and update callbacks
195
+ #
196
+ # == Before / After Destroy
197
+ # Called before and after the object is destroyed from the database.
198
+ #
199
+ delegate :before_build, :after_build, :to => :controller
200
+ delegate :before_create, :after_create, :to => :controller
201
+ delegate :before_update, :after_update, :to => :controller
202
+ delegate :before_save, :after_save, :to => :controller
203
+ delegate :before_destroy, :after_destroy, :to => :controller
204
+
205
+ # Filters
206
+ delegate :filter, :to => :controller
207
+
208
+
209
+ # Standard rails filters
210
+ delegate :before_filter, :skip_before_filter, :after_filter, :around_filter, :to => :controller
211
+
212
+ # Specify which actions to create in the controller
213
+ #
214
+ # Eg:
215
+ #
216
+ # ActiveAdmin.register Post do
217
+ # actions :index, :show
218
+ # end
219
+ #
220
+ # Will only create the index and show actions (no create, update or delete)
221
+ delegate :actions, :to => :controller
222
+
223
+ end
224
+ end
@@ -0,0 +1,4 @@
1
+ module ActiveAdmin
2
+ class Engine < Rails::Engine
3
+ end
4
+ end
@@ -0,0 +1,31 @@
1
+ module ActiveAdmin
2
+
3
+ class EventDispatcher
4
+ def initialize
5
+ @events = {}
6
+ end
7
+
8
+ def clear_all_subscribers!
9
+ @events = {}
10
+ end
11
+
12
+ def subscribe(event, &block)
13
+ @events[event] ||= []
14
+ @events[event] << block
15
+ end
16
+
17
+ def subscribers(event)
18
+ @events[event] || []
19
+ end
20
+
21
+ def dispatch(event, *args)
22
+ subscribers(event).each do |subscriber|
23
+ subscriber.call(*args)
24
+ end
25
+ end
26
+ end
27
+
28
+ # ActiveAdmin::Event is set to a dispatcher
29
+ Event = EventDispatcher.new
30
+
31
+ end
@@ -0,0 +1,109 @@
1
+ require 'formtastic'
2
+
3
+ module ActiveAdmin
4
+ class FormBuilder < ::Formtastic::SemanticFormBuilder
5
+
6
+ attr_reader :form_buffers
7
+
8
+ def initialize(*args)
9
+ @form_buffers = ["".html_safe]
10
+ super
11
+ end
12
+
13
+ def inputs(*args, &block)
14
+ # Store that we are creating inputs without a block
15
+ @inputs_with_block = block_given? ? true : false
16
+ content = with_new_form_buffer { super }
17
+ form_buffers.last << content.html_safe
18
+ end
19
+
20
+ # The input method returns a properly formatted string for
21
+ # its contents, so we want to skip the internal buffering
22
+ # while building up its contents
23
+ def input(*args)
24
+ content = with_new_form_buffer { super }
25
+ return content.html_safe unless @inputs_with_block
26
+ form_buffers.last << content.html_safe
27
+ end
28
+
29
+ # The buttons method always needs to be wrapped in a new buffer
30
+ def buttons(*args, &block)
31
+ content = with_new_form_buffer do
32
+ block_given? ? super : super { commit_button_with_cancel_link }
33
+ end
34
+ form_buffers.last << content.html_safe
35
+ end
36
+
37
+ def commit_button(*args)
38
+ content = with_new_form_buffer{ super }
39
+ form_buffers.last << content.html_safe
40
+ end
41
+
42
+ def cancel_link(url = nil, html_options = {}, li_attributes = {})
43
+ li_attributes[:class] ||= "cancel"
44
+ url ||= {:action => "index"}
45
+ template.content_tag(:li, (template.link_to I18n.t('active_admin.cancel'), url, html_options), li_attributes)
46
+ end
47
+
48
+ def commit_button_with_cancel_link
49
+ content = commit_button
50
+ content << cancel_link
51
+ end
52
+
53
+ def datepicker_input(method, options)
54
+ options = options.dup
55
+ options[:input_html] ||= {}
56
+ options[:input_html][:class] = [options[:input_html][:class], "datepicker"].compact.join(' ')
57
+ options[:input_html][:size] ||= "10"
58
+ string_input(method, options)
59
+ end
60
+
61
+ def has_many(association, options = {}, &block)
62
+ options = { :for => association }.merge(options)
63
+ options[:class] ||= ""
64
+ options[:class] << "inputs has_many_fields"
65
+
66
+ # Add Delete Links
67
+ form_block = proc do |has_many_form|
68
+ block.call(has_many_form) + if has_many_form.object.new_record?
69
+ template.content_tag :li do
70
+ template.link_to I18n.t('active_admin.has_many_delete'), "#", :onclick => "$(this).closest('.has_many_fields').remove(); return false;", :class => "button"
71
+ end
72
+ else
73
+ end
74
+ end
75
+
76
+ content = with_new_form_buffer do
77
+ template.content_tag :div, :class => "has_many #{association}" do
78
+ form_buffers.last << template.content_tag(:h3, association.to_s.titlecase)
79
+ inputs options, &form_block
80
+
81
+ # Capture the ADD JS
82
+ js = with_new_form_buffer do
83
+ inputs_for_nested_attributes :for => [association, object.class.reflect_on_association(association).klass.new],
84
+ :class => "inputs has_many_fields",
85
+ :for_options => {
86
+ :child_index => "NEW_RECORD"
87
+ }, &form_block
88
+ end
89
+
90
+ js = template.escape_javascript(js)
91
+ js = template.link_to I18n.t('active_admin.has_many_new', :model => association.to_s.singularize.titlecase), "#", :onclick => "$(this).before('#{js}'.replace(/NEW_RECORD/g, new Date().getTime())); return false;", :class => "button"
92
+
93
+ form_buffers.last << js.html_safe
94
+ end
95
+ end
96
+ form_buffers.last << content.html_safe
97
+ end
98
+
99
+ private
100
+
101
+ def with_new_form_buffer
102
+ form_buffers << "".html_safe
103
+ return_value = yield
104
+ form_buffers.pop
105
+ return_value
106
+ end
107
+
108
+ end
109
+ end
@@ -0,0 +1,34 @@
1
+ module ActiveAdmin
2
+
3
+ # Shareable module to give a #display_on?(action) method
4
+ # which returns true or false depending on an options hash.
5
+ #
6
+ # The options hash accepts:
7
+ #
8
+ # :only => :index
9
+ # :only => [:index, :show]
10
+ # :except => :index
11
+ # :except => [:index, :show]
12
+ #
13
+ # call #normalize_display_options! after @options has been set
14
+ # to ensure that the display options are setup correctly
15
+
16
+ module OptionalDisplay
17
+ def display_on?(action)
18
+ return @options[:only].include?(action.to_sym) if @options[:only]
19
+ return !@options[:except].include?(action.to_sym) if @options[:except]
20
+ true
21
+ end
22
+
23
+ private
24
+
25
+ def normalize_display_options!
26
+ if @options[:only]
27
+ @options[:only] = @options[:only].is_a?(Array) ? @options[:only] : [@options[:only]]
28
+ end
29
+ if @options[:except]
30
+ @options[:except] = @options[:except].is_a?(Array) ? @options[:except] : [@options[:except]]
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,63 @@
1
+ require 'active_support/concern'
2
+
3
+ module ActiveAdmin
4
+
5
+ # Adds a class method to a class to create settings with default values.
6
+ #
7
+ # Example:
8
+ #
9
+ # class Configuration
10
+ # include ActiveAdmin::Settings
11
+ #
12
+ # setting :site_title, "Default Site Title"
13
+ #
14
+ # def initialize
15
+ # # You must call this method to initialize the defaults
16
+ # initialize_defaults!
17
+ # end
18
+ #
19
+ module Settings
20
+ extend ActiveSupport::Concern
21
+
22
+ module InstanceMethods
23
+
24
+ def default_settings
25
+ self.class.default_settings
26
+ end
27
+
28
+ end
29
+
30
+ module ClassMethods
31
+
32
+ def setting(name, default)
33
+ default_settings[name] = default
34
+ attr_accessor(name)
35
+
36
+ # Create an accessor that grabs from the defaults
37
+ # if @name has not been set yet
38
+ class_eval <<-EOC, __FILE__, __LINE__ + 1
39
+ def #{name}
40
+ if instance_variable_defined? :@#{name}
41
+ @#{name}
42
+ else
43
+ default_settings[:#{name}]
44
+ end
45
+ end
46
+ EOC
47
+ end
48
+
49
+ def deprecated_setting(name, default, message = nil)
50
+ message = message || "The #{name} setting is deprecated and will be removed."
51
+ setting(name, default)
52
+
53
+ ActiveAdmin::Deprecation.deprecate self, name, message
54
+ ActiveAdmin::Deprecation.deprecate self, :"#{name}=", message
55
+ end
56
+
57
+ def default_settings
58
+ @default_settings ||= {}
59
+ end
60
+
61
+ end
62
+ end
63
+ end