saulolso-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 (255) hide show
  1. data/.document +5 -0
  2. data/.gitignore +32 -0
  3. data/.travis.yml +4 -0
  4. data/CHANGELOG.rdoc +76 -0
  5. data/Gemfile +26 -0
  6. data/LICENSE +25 -0
  7. data/README.rdoc +450 -0
  8. data/Rakefile +100 -0
  9. data/activeadmin.gemspec +28 -0
  10. data/cucumber.yml +2 -0
  11. data/features/comments/commenting.feature +99 -0
  12. data/features/comments/viewing_index.feature +19 -0
  13. data/features/dashboard.feature +26 -0
  14. data/features/edit_page.feature +77 -0
  15. data/features/first_boot.feature +16 -0
  16. data/features/global_navigation.feature +30 -0
  17. data/features/index/format_as_csv.feature +45 -0
  18. data/features/index/formats.feature +10 -0
  19. data/features/index/index_as_block.feature +15 -0
  20. data/features/index/index_as_blog.feature +50 -0
  21. data/features/index/index_as_grid.feature +45 -0
  22. data/features/index/index_as_table.feature +79 -0
  23. data/features/index/index_scopes.feature +52 -0
  24. data/features/index/pagination.feature +23 -0
  25. data/features/menu.feature +26 -0
  26. data/features/new_page.feature +75 -0
  27. data/features/registering_assets.feature +35 -0
  28. data/features/registering_resources.feature +33 -0
  29. data/features/show/default_content.feature +43 -0
  30. data/features/show/page_title.feature +33 -0
  31. data/features/sidebar_sections.feature +127 -0
  32. data/features/specifying_actions.feature +60 -0
  33. data/features/step_definitions/action_item_steps.rb +7 -0
  34. data/features/step_definitions/additional_web_steps.rb +67 -0
  35. data/features/step_definitions/asset_steps.rb +7 -0
  36. data/features/step_definitions/attribute_steps.rb +15 -0
  37. data/features/step_definitions/comment_steps.rb +8 -0
  38. data/features/step_definitions/configuration_steps.rb +31 -0
  39. data/features/step_definitions/dashboard_steps.rb +11 -0
  40. data/features/step_definitions/factory_steps.rb +28 -0
  41. data/features/step_definitions/flash_steps.rb +3 -0
  42. data/features/step_definitions/format_steps.rb +34 -0
  43. data/features/step_definitions/index_scope_steps.rb +20 -0
  44. data/features/step_definitions/menu_steps.rb +7 -0
  45. data/features/step_definitions/pagination_steps.rb +8 -0
  46. data/features/step_definitions/sidebar_steps.rb +11 -0
  47. data/features/step_definitions/tab_steps.rb +3 -0
  48. data/features/step_definitions/user_steps.rb +20 -0
  49. data/features/step_definitions/web_steps.rb +219 -0
  50. data/features/sti_resource.feature +49 -0
  51. data/features/support/env.rb +92 -0
  52. data/features/support/paths.rb +48 -0
  53. data/features/users/logging_in.feature +34 -0
  54. data/features/users/logging_out.feature +13 -0
  55. data/lib/active_admin/abstract_view_factory.rb +95 -0
  56. data/lib/active_admin/action_items.rb +37 -0
  57. data/lib/active_admin/application.rb +204 -0
  58. data/lib/active_admin/arbre/attributes.rb +20 -0
  59. data/lib/active_admin/arbre/class_list.rb +28 -0
  60. data/lib/active_admin/arbre/collection.rb +27 -0
  61. data/lib/active_admin/arbre/context.rb +8 -0
  62. data/lib/active_admin/arbre/core_extensions.rb +5 -0
  63. data/lib/active_admin/arbre/document.rb +42 -0
  64. data/lib/active_admin/arbre/element.rb +151 -0
  65. data/lib/active_admin/arbre/html.rb +84 -0
  66. data/lib/active_admin/arbre/html5_elements.rb +47 -0
  67. data/lib/active_admin/arbre/tag.rb +137 -0
  68. data/lib/active_admin/arbre/text_node.rb +35 -0
  69. data/lib/active_admin/arbre.rb +23 -0
  70. data/lib/active_admin/asset_registration.rb +34 -0
  71. data/lib/active_admin/callbacks.rb +87 -0
  72. data/lib/active_admin/comments/comment.rb +21 -0
  73. data/lib/active_admin/comments/configuration.rb +18 -0
  74. data/lib/active_admin/comments/namespace_helper.rb +14 -0
  75. data/lib/active_admin/comments/resource_helper.rb +17 -0
  76. data/lib/active_admin/comments/show_page_helper.rb +23 -0
  77. data/lib/active_admin/comments/views/active_admin_comment.rb +0 -0
  78. data/lib/active_admin/comments/views/active_admin_comments.rb +82 -0
  79. data/lib/active_admin/comments/views.rb +3 -0
  80. data/lib/active_admin/comments.rb +88 -0
  81. data/lib/active_admin/component.rb +22 -0
  82. data/lib/active_admin/controller_action.rb +12 -0
  83. data/lib/active_admin/csv_builder.rb +45 -0
  84. data/lib/active_admin/dashboards/dashboard_controller.rb +47 -0
  85. data/lib/active_admin/dashboards/section.rb +34 -0
  86. data/lib/active_admin/dashboards.rb +48 -0
  87. data/lib/active_admin/devise.rb +43 -0
  88. data/lib/active_admin/dsl.rb +215 -0
  89. data/lib/active_admin/event.rb +31 -0
  90. data/lib/active_admin/form_builder.rb +109 -0
  91. data/lib/active_admin/helpers/optional_display.rb +34 -0
  92. data/lib/active_admin/iconic/icons.rb +142 -0
  93. data/lib/active_admin/iconic.rb +51 -0
  94. data/lib/active_admin/locales/da.yml +26 -0
  95. data/lib/active_admin/locales/en.yml +34 -0
  96. data/lib/active_admin/locales/es.yml +34 -0
  97. data/lib/active_admin/locales/pt.yml +34 -0
  98. data/lib/active_admin/menu.rb +42 -0
  99. data/lib/active_admin/menu_item.rb +73 -0
  100. data/lib/active_admin/namespace.rb +198 -0
  101. data/lib/active_admin/page_config.rb +15 -0
  102. data/lib/active_admin/renderer.rb +87 -0
  103. data/lib/active_admin/resource/belongs_to.rb +31 -0
  104. data/lib/active_admin/resource.rb +229 -0
  105. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  106. data/lib/active_admin/resource_controller/actions.rb +79 -0
  107. data/lib/active_admin/resource_controller/callbacks.rb +47 -0
  108. data/lib/active_admin/resource_controller/collection.rb +144 -0
  109. data/lib/active_admin/resource_controller/filters.rb +58 -0
  110. data/lib/active_admin/resource_controller/form.rb +42 -0
  111. data/lib/active_admin/resource_controller/menu.rb +29 -0
  112. data/lib/active_admin/resource_controller/page_configurations.rb +53 -0
  113. data/lib/active_admin/resource_controller/scoping.rb +36 -0
  114. data/lib/active_admin/resource_controller/sidebars.rb +38 -0
  115. data/lib/active_admin/resource_controller.rb +119 -0
  116. data/lib/active_admin/router.rb +85 -0
  117. data/lib/active_admin/scope.rb +17 -0
  118. data/lib/active_admin/sidebar.rb +43 -0
  119. data/lib/active_admin/stylesheets/active_admin/_comments.scss +40 -0
  120. data/lib/active_admin/stylesheets/active_admin/_flash_messages.scss +13 -0
  121. data/lib/active_admin/stylesheets/active_admin/_forms.scss +168 -0
  122. data/lib/active_admin/stylesheets/active_admin/_header.scss +108 -0
  123. data/lib/active_admin/stylesheets/active_admin/_typography.scss +100 -0
  124. data/lib/active_admin/stylesheets/active_admin/mixins/_all.scss +8 -0
  125. data/lib/active_admin/stylesheets/active_admin/mixins/_buttons.scss +27 -0
  126. data/lib/active_admin/stylesheets/active_admin/mixins/_gradients.scss +21 -0
  127. data/lib/active_admin/stylesheets/active_admin/mixins/_icons.scss +20 -0
  128. data/lib/active_admin/stylesheets/active_admin/mixins/_reset.scss +165 -0
  129. data/lib/active_admin/stylesheets/active_admin/mixins/_rounded.scss +43 -0
  130. data/lib/active_admin/stylesheets/active_admin/mixins/_sections.scss +27 -0
  131. data/lib/active_admin/stylesheets/active_admin/mixins/_shadows.scss +21 -0
  132. data/lib/active_admin/stylesheets/active_admin/mixins/_variables.scss +12 -0
  133. data/lib/active_admin/stylesheets/active_admin.scss +429 -0
  134. data/lib/active_admin/version.rb +3 -0
  135. data/lib/active_admin/view_factory.rb +21 -0
  136. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  137. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
  138. data/lib/active_admin/view_helpers/auto_link_helper.rb +42 -0
  139. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +29 -0
  140. data/lib/active_admin/view_helpers/display_helper.rb +38 -0
  141. data/lib/active_admin/view_helpers/filter_form_helper.rb +185 -0
  142. data/lib/active_admin/view_helpers/form_helper.rb +12 -0
  143. data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
  144. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +26 -0
  145. data/lib/active_admin/view_helpers/renderer_helper.rb +29 -0
  146. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  147. data/lib/active_admin/view_helpers/table_helper.rb +12 -0
  148. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  149. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  150. data/lib/active_admin/view_helpers.rb +23 -0
  151. data/lib/active_admin/views/action_items.rb +17 -0
  152. data/lib/active_admin/views/components/attributes_table.rb +66 -0
  153. data/lib/active_admin/views/components/columns.rb +47 -0
  154. data/lib/active_admin/views/components/paginated_collection.rb +92 -0
  155. data/lib/active_admin/views/components/panel.rb +26 -0
  156. data/lib/active_admin/views/components/scopes.rb +70 -0
  157. data/lib/active_admin/views/components/sidebar_section.rb +30 -0
  158. data/lib/active_admin/views/components/status_tag.rb +55 -0
  159. data/lib/active_admin/views/components/table_for.rb +193 -0
  160. data/lib/active_admin/views/dashboard_section_renderer.rb +19 -0
  161. data/lib/active_admin/views/header_renderer.rb +37 -0
  162. data/lib/active_admin/views/index_as_block.rb +24 -0
  163. data/lib/active_admin/views/index_as_blog.rb +89 -0
  164. data/lib/active_admin/views/index_as_grid.rb +49 -0
  165. data/lib/active_admin/views/index_as_table.rb +75 -0
  166. data/lib/active_admin/views/pages/base.rb +144 -0
  167. data/lib/active_admin/views/pages/dashboard.rb +59 -0
  168. data/lib/active_admin/views/pages/edit.rb +27 -0
  169. data/lib/active_admin/views/pages/index.rb +66 -0
  170. data/lib/active_admin/views/pages/new.rb +27 -0
  171. data/lib/active_admin/views/pages/show.rb +56 -0
  172. data/lib/active_admin/views/tabs_renderer.rb +58 -0
  173. data/lib/active_admin/views/templates/active_admin/dashboard/index.html.arb +1 -0
  174. data/lib/active_admin/views/templates/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
  175. data/lib/active_admin/views/templates/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
  176. data/lib/active_admin/views/templates/active_admin/devise/passwords/edit.html.erb +16 -0
  177. data/lib/active_admin/views/templates/active_admin/devise/passwords/new.html.erb +14 -0
  178. data/lib/active_admin/views/templates/active_admin/devise/sessions/new.html.erb +18 -0
  179. data/lib/active_admin/views/templates/active_admin/devise/shared/_links.erb +20 -0
  180. data/lib/active_admin/views/templates/active_admin/devise/unlocks/new.html.erb +12 -0
  181. data/lib/active_admin/views/templates/active_admin/resource/edit.html.arb +1 -0
  182. data/lib/active_admin/views/templates/active_admin/resource/index.csv.erb +20 -0
  183. data/lib/active_admin/views/templates/active_admin/resource/index.html.arb +1 -0
  184. data/lib/active_admin/views/templates/active_admin/resource/new.html.arb +1 -0
  185. data/lib/active_admin/views/templates/active_admin/resource/show.html.arb +1 -0
  186. data/lib/active_admin/views/templates/layouts/active_admin.html.erb +39 -0
  187. data/lib/active_admin/views/templates/layouts/active_admin_logged_out.html.erb +31 -0
  188. data/lib/active_admin/views.rb +8 -0
  189. data/lib/active_admin.rb +71 -0
  190. data/lib/activeadmin.rb +1 -0
  191. data/lib/generators/active_admin/devise/devise_generator.rb +49 -0
  192. data/lib/generators/active_admin/install/install_generator.rb +46 -0
  193. data/lib/generators/active_admin/install/templates/active_admin.js +51 -0
  194. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +78 -0
  195. data/lib/generators/active_admin/install/templates/active_admin_vendor.js +382 -0
  196. data/lib/generators/active_admin/install/templates/dashboards.rb +38 -0
  197. data/lib/generators/active_admin/install/templates/images/admin_notes_icon.png +0 -0
  198. data/lib/generators/active_admin/install/templates/images/loading.gif +0 -0
  199. data/lib/generators/active_admin/install/templates/images/nested_menu_arrow.gif +0 -0
  200. data/lib/generators/active_admin/install/templates/images/nested_menu_arrow_dark.gif +0 -0
  201. data/lib/generators/active_admin/install/templates/images/orderable.png +0 -0
  202. data/lib/generators/active_admin/install/templates/migrations/1_create_admin_notes.rb +16 -0
  203. data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +25 -0
  204. data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
  205. data/lib/generators/active_admin/resource/templates/admin.rb +3 -0
  206. data/spec/integration/belongs_to_spec.rb +42 -0
  207. data/spec/spec_helper.rb +156 -0
  208. data/spec/support/integration_example_group.rb +33 -0
  209. data/spec/support/rails_template.rb +32 -0
  210. data/spec/support/rails_template_with_data.rb +32 -0
  211. data/spec/support/templates/cucumber.rb +24 -0
  212. data/spec/unit/abstract_view_factory_spec.rb +79 -0
  213. data/spec/unit/action_builder_spec.rb +88 -0
  214. data/spec/unit/action_items_spec.rb +27 -0
  215. data/spec/unit/application_spec.rb +67 -0
  216. data/spec/unit/arbre/html/element_finder_methods_spec.rb +54 -0
  217. data/spec/unit/arbre/html/element_spec.rb +224 -0
  218. data/spec/unit/arbre/html/tag_attributes_spec.rb +61 -0
  219. data/spec/unit/arbre/html/tag_spec.rb +63 -0
  220. data/spec/unit/arbre/html_spec.rb +210 -0
  221. data/spec/unit/asset_registration_spec.rb +37 -0
  222. data/spec/unit/auto_link_spec.rb +39 -0
  223. data/spec/unit/belongs_to_spec.rb +45 -0
  224. data/spec/unit/breadcrumbs_spec.rb +110 -0
  225. data/spec/unit/comments_spec.rb +57 -0
  226. data/spec/unit/component_spec.rb +18 -0
  227. data/spec/unit/components/attributes_table_spec.rb +100 -0
  228. data/spec/unit/components/columns_spec.rb +75 -0
  229. data/spec/unit/components/panel_spec.rb +31 -0
  230. data/spec/unit/components/sidebar_section_spec.rb +37 -0
  231. data/spec/unit/components/status_tag_spec.rb +81 -0
  232. data/spec/unit/components/table_for_spec.rb +130 -0
  233. data/spec/unit/controller_filters_spec.rb +27 -0
  234. data/spec/unit/csv_builder_spec.rb +83 -0
  235. data/spec/unit/dashboard_controller_spec.rb +26 -0
  236. data/spec/unit/dashboard_section_spec.rb +56 -0
  237. data/spec/unit/dashboards_spec.rb +59 -0
  238. data/spec/unit/display_name_spec.rb +29 -0
  239. data/spec/unit/event_spec.rb +41 -0
  240. data/spec/unit/filter_form_builder_spec.rb +179 -0
  241. data/spec/unit/form_builder_spec.rb +238 -0
  242. data/spec/unit/menu_item_spec.rb +143 -0
  243. data/spec/unit/menu_spec.rb +53 -0
  244. data/spec/unit/namespace_spec.rb +203 -0
  245. data/spec/unit/pretty_format_spec.rb +35 -0
  246. data/spec/unit/registration_spec.rb +76 -0
  247. data/spec/unit/renderer_spec.rb +108 -0
  248. data/spec/unit/resource_controller/collection_spec.rb +34 -0
  249. data/spec/unit/resource_controller_spec.rb +147 -0
  250. data/spec/unit/resource_spec.rb +290 -0
  251. data/spec/unit/routing_spec.rb +88 -0
  252. data/spec/unit/scope_spec.rb +31 -0
  253. data/spec/unit/tabs_renderer_spec.rb +85 -0
  254. data/spec/unit/view_factory_spec.rb +16 -0
  255. metadata +482 -0
@@ -0,0 +1,79 @@
1
+ module ActiveAdmin
2
+ class ResourceController < ::InheritedResources::Base
3
+
4
+ # Override the InheritedResources actions to use the
5
+ # Active Admin templates.
6
+ #
7
+ # We ensure that the functionality provided by Inherited
8
+ # Resources is still available within any ResourceController
9
+
10
+ def index(options={}, &block)
11
+ super(options) do |format|
12
+ block.call(format) if block
13
+ format.html { render active_admin_template('index.html.arb') }
14
+ format.csv do
15
+ headers['Content-Type'] = 'text/csv; charset=utf-8'
16
+ headers['Content-Disposition'] = %{attachment; filename="#{csv_filename}"}
17
+ render active_admin_template('index.csv.erb')
18
+ end
19
+ end
20
+ end
21
+ alias :index! :index
22
+
23
+ def show(options={}, &block)
24
+ super do |format|
25
+ block.call(format) if block
26
+ format.html { render active_admin_template('show.html.arb') }
27
+ end
28
+ end
29
+ alias :show! :show
30
+
31
+ def new(options={}, &block)
32
+ super do |format|
33
+ block.call(format) if block
34
+ format.html { render active_admin_template('new.html.arb') }
35
+ end
36
+ end
37
+ alias :new! :new
38
+
39
+ def edit(options={}, &block)
40
+ super do |format|
41
+ block.call(format) if block
42
+ format.html { render active_admin_template('edit.html.arb') }
43
+ end
44
+ end
45
+ alias :edit! :edit
46
+
47
+ def create(options={}, &block)
48
+ super(options) do |success, failure|
49
+ block.call(success, failure) if block
50
+ failure.html { render active_admin_template('new.html.arb') }
51
+ end
52
+ end
53
+ alias :create! :create
54
+
55
+ def update(options={}, &block)
56
+ super do |success, failure|
57
+ block.call(success, failure) if block
58
+ failure.html { render active_admin_template('edit.html.arb') }
59
+ end
60
+ end
61
+ alias :update! :update
62
+
63
+ # Make aliases protected
64
+ protected :index!, :show!, :new!, :create!, :edit!, :update!
65
+
66
+ protected
67
+
68
+ # Returns the full location to the Active Admin template path
69
+ def active_admin_template(template)
70
+ "active_admin/resource/#{template}"
71
+ end
72
+
73
+ # Returns a filename for the csv file using the collection_name
74
+ # and current date such as 'my-articles-2011-06-24.csv'.
75
+ def csv_filename
76
+ "#{resource_collection_name.to_s.gsub('_', '-')}-#{Time.now.strftime("%Y-%m-%d")}.csv"
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,47 @@
1
+ module ActiveAdmin
2
+ class ResourceController < ::InheritedResources::Base
3
+
4
+ module Callbacks
5
+ extend ActiveSupport::Concern
6
+ include ::ActiveAdmin::Callbacks
7
+
8
+ included do
9
+ define_active_admin_callbacks :build, :create, :update, :save, :destroy
10
+ end
11
+
12
+ protected
13
+
14
+ def build_resource
15
+ object = super
16
+ run_build_callbacks object
17
+ object
18
+ end
19
+
20
+ def create_resource(object)
21
+ run_create_callbacks object do
22
+ save_resource(object)
23
+ end
24
+ end
25
+
26
+ def save_resource(object)
27
+ run_save_callbacks object do
28
+ object.save
29
+ end
30
+ end
31
+
32
+ def update_resource(object, attributes)
33
+ object.attributes = attributes
34
+ run_update_callbacks object do
35
+ save_resource(object)
36
+ end
37
+ end
38
+
39
+ def destroy_resource(object)
40
+ run_destroy_callbacks object do
41
+ object.destroy
42
+ end
43
+ end
44
+ end
45
+
46
+ end
47
+ end
@@ -0,0 +1,144 @@
1
+ module ActiveAdmin
2
+ class ResourceController < ::InheritedResources::Base
3
+
4
+ # This module deals with the retrieval of collections for resources
5
+ # within the resource controller.
6
+ module Collection
7
+ extend ActiveSupport::Concern
8
+
9
+ included do
10
+ before_filter :setup_pagination_for_csv
11
+ end
12
+
13
+ module BaseCollection
14
+ protected
15
+
16
+ def collection
17
+ get_collection_ivar || set_collection_ivar(active_admin_collection)
18
+ end
19
+
20
+ def active_admin_collection
21
+ scoped_collection
22
+ end
23
+
24
+
25
+ # Override this method in your controllers to modify the start point
26
+ # of our searches and index.
27
+ #
28
+ # This method should return an ActiveRecord::Relation object so that
29
+ # the searching and filtering can be applied on top
30
+ #
31
+ # Note, unless you are doing something special, you should use the
32
+ # scope_to method from the Scoping module instead of overriding this
33
+ # method.
34
+ def scoped_collection
35
+ end_of_association_chain
36
+ end
37
+ end
38
+
39
+
40
+ module Sorting
41
+ protected
42
+
43
+ def active_admin_collection
44
+ sort_order(super)
45
+ end
46
+
47
+ def sort_order(chain)
48
+ params[:order] ||= active_admin_config.sort_order
49
+ table_name = active_admin_config.resource_table_name
50
+ if params[:order] && params[:order] =~ /^([\w\_\.]+)_(desc|asc)$/
51
+ chain.order("#{table_name}.#{$1} #{$2}")
52
+ else
53
+ chain # just return the chain
54
+ end
55
+ end
56
+ end
57
+
58
+
59
+ module Search
60
+ protected
61
+
62
+ def active_admin_collection
63
+ search(super)
64
+ end
65
+
66
+ def search(chain)
67
+ @search = chain.metasearch(clean_search_params(params[:q]))
68
+ @search.relation
69
+ end
70
+
71
+ def clean_search_params(search_params)
72
+ return {} unless search_params.is_a?(Hash)
73
+ search_params = search_params.dup
74
+ search_params.delete_if do |key, value|
75
+ value == ""
76
+ end
77
+ search_params
78
+ end
79
+ end
80
+
81
+
82
+ module Scoping
83
+ protected
84
+
85
+ def active_admin_collection
86
+ scope_collection(super)
87
+ end
88
+
89
+ def scope_collection(chain)
90
+ if current_scope
91
+ @before_scope_collection = chain
92
+
93
+ # ActiveRecord::Base isn't a relation, so let's help you out
94
+ return chain if current_scope.scope_method == :all
95
+
96
+ if current_scope.scope_method
97
+ chain.send(current_scope.scope_method)
98
+ else
99
+ instance_exec chain, &current_scope.scope_block
100
+ end
101
+ else
102
+ chain
103
+ end
104
+ end
105
+
106
+ def current_scope
107
+ @current_scope ||= if params[:scope]
108
+ active_admin_config.get_scope_by_id(params[:scope]) if params[:scope]
109
+ else
110
+ active_admin_config.default_scope
111
+ end
112
+ end
113
+ end
114
+
115
+
116
+ module Pagination
117
+ protected
118
+
119
+ def active_admin_collection
120
+ paginate(super)
121
+ end
122
+
123
+ # Allow more records for csv files
124
+ def setup_pagination_for_csv
125
+ @per_page = 10_000 if request.format == 'text/csv'
126
+ end
127
+
128
+ def paginate(chain)
129
+ chain.page(params[:page]).per(@per_page || active_admin_application.default_per_page)
130
+ end
131
+ end
132
+
133
+ # Include all the Modules. BaseCollection must be first
134
+ # and pagination should be last
135
+ include BaseCollection
136
+ include Sorting
137
+ include Search
138
+ include Scoping
139
+ include Pagination
140
+
141
+ end
142
+ end
143
+ end
144
+
@@ -0,0 +1,58 @@
1
+ module ActiveAdmin
2
+ class ResourceController < ::InheritedResources::Base
3
+
4
+ module Filters
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ helper_method :filters_config
9
+ end
10
+
11
+ module ClassMethods
12
+ def filter(attribute, options = {})
13
+ return false if attribute.nil?
14
+ @filters ||= []
15
+ @filters << options.merge(:attribute => attribute)
16
+ end
17
+
18
+ def filters_config
19
+ @filters && @filters.any? ? @filters : default_filters_config
20
+ end
21
+
22
+ def reset_filters!
23
+ @filters = []
24
+ end
25
+
26
+ # Returns a sane set of filters by default for the object
27
+ def default_filters_config
28
+ default_association_filters + default_content_filters
29
+ end
30
+
31
+ # Returns a default set of filters for the associations
32
+ def default_association_filters
33
+ if resource_class.respond_to?(:reflections)
34
+ resource_class.reflections.collect{|name, r| { :attribute => name }}
35
+ else
36
+ []
37
+ end
38
+ end
39
+
40
+ # Returns a default set of filters for the content columns
41
+ def default_content_filters
42
+ if resource_class.respond_to?(:content_columns)
43
+ resource_class.content_columns.collect{|c| { :attribute => c.name.to_sym } }
44
+ else
45
+ []
46
+ end
47
+ end
48
+ end
49
+
50
+ protected
51
+
52
+ def filters_config
53
+ self.class.filters_config
54
+ end
55
+ end
56
+
57
+ end
58
+ end
@@ -0,0 +1,42 @@
1
+ module ActiveAdmin
2
+ class ResourceController < ::InheritedResources::Base
3
+ module Form
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ helper_method :form_config
8
+ end
9
+
10
+ module ClassMethods
11
+
12
+ def form_config=(config)
13
+ @form_config = config
14
+ end
15
+
16
+ def form_config
17
+ @form_config ||= default_form_config
18
+ end
19
+
20
+ def reset_form_config!
21
+ @form_config = nil
22
+ end
23
+
24
+ def default_form_config
25
+ config = {}
26
+ config[:block] = lambda do |f|
27
+ f.inputs
28
+ f.buttons
29
+ end
30
+ config
31
+ end
32
+ end
33
+
34
+ protected
35
+
36
+ def form_config
37
+ @form_config ||= self.class.form_config
38
+ end
39
+
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,29 @@
1
+ module ActiveAdmin
2
+ class ResourceController < ::InheritedResources::Base
3
+ module Menu
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ before_filter :set_current_tab
8
+ helper_method :current_menu
9
+ end
10
+
11
+ protected
12
+
13
+ def current_menu
14
+ active_admin_config.namespace.menu
15
+ end
16
+
17
+ # Set's @current_tab to be name of the tab to mark as current
18
+ # Get's called through a before filter
19
+ def set_current_tab
20
+ @current_tab = if active_admin_config.belongs_to? && parent?
21
+ active_admin_config.belongs_to_config.target.menu_item_name
22
+ else
23
+ [active_admin_config.parent_menu_item_name, active_admin_config.menu_item_name].compact.join("/")
24
+ end
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,53 @@
1
+ module ActiveAdmin
2
+ class ResourceController < ::InheritedResources::Base
3
+
4
+ module PageConfigurations
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ helper_method :index_config
9
+ helper_method :show_config
10
+ end
11
+
12
+ module ClassMethods
13
+
14
+ def set_page_config(page, options, &block)
15
+ active_admin_config.page_configs[page] = ActiveAdmin::PageConfig.new(options, &block)
16
+ end
17
+
18
+ def get_page_config(page)
19
+ active_admin_config.page_configs[page]
20
+ end
21
+
22
+ def reset_page_config!(page)
23
+ active_admin_config.page_configs[page] = nil
24
+ end
25
+
26
+ # Define the getting and re-setter for each configurable page
27
+ [:index, :show].each do |page|
28
+ # eg: index_config
29
+ define_method :"#{page}_config" do
30
+ get_page_config(page)
31
+ end
32
+
33
+ # eg: reset_index_config!
34
+ define_method :"reset_#{page}_config!" do
35
+ reset_page_config! page
36
+ end
37
+ end
38
+
39
+ end
40
+
41
+ protected
42
+
43
+ def index_config
44
+ @index_config ||= self.class.index_config
45
+ end
46
+
47
+ def show_config
48
+ @show_config ||= self.class.show_config
49
+ end
50
+
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,36 @@
1
+ module ActiveAdmin
2
+ class ResourceController < ::InheritedResources::Base
3
+
4
+ # This module deals with scoping entire controllers to a relation
5
+ module Scoping
6
+ extend ActiveSupport::Concern
7
+
8
+ protected
9
+
10
+ # Override the default InheritedResource #begin_of_association_chain to allow
11
+ # the scope to be defined in the active admin configuration.
12
+ #
13
+ # If scope_to is a proc, we eval it, otherwise we call the method on the controller.
14
+ def begin_of_association_chain
15
+ return nil unless active_admin_config.scope_to
16
+ case active_admin_config.scope_to
17
+ when Proc
18
+ instance_eval &active_admin_config.scope_to
19
+ when Symbol
20
+ send active_admin_config.scope_to
21
+ else
22
+ raise ArgumentError, "#scope_to accepts a symbol or a block"
23
+ end
24
+ end
25
+
26
+ # Overriding from InheritedResources::BaseHelpers
27
+ #
28
+ # Returns the method for the association chain when using
29
+ # the scope_to option
30
+ def method_for_association_chain
31
+ active_admin_config.scope_to_association_method || super
32
+ end
33
+
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,38 @@
1
+ module ActiveAdmin
2
+ class ResourceController < ::InheritedResources::Base
3
+
4
+ module Sidebars
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ self.class_inheritable_accessor :sidebar_sections
9
+ self.sidebar_sections = []
10
+ end
11
+
12
+ module ClassMethods
13
+ def sidebar(name, options = {}, &block)
14
+ self.sidebar_sections << ActiveAdmin::Sidebar::Section.new(name, options, &block)
15
+ end
16
+
17
+ def clear_sidebar_sections!
18
+ self.sidebar_sections = []
19
+ end
20
+
21
+ def sidebar_sections_for(action)
22
+ sidebar_sections.select{|section| section.display_on?(action) }
23
+ end
24
+ end
25
+
26
+ protected
27
+
28
+ def skip_sidebar!
29
+ @skip_sidebar = true
30
+ end
31
+
32
+ def skip_sidebar?
33
+ @skip_sidebar == true
34
+ end
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,119 @@
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
+ require 'active_admin/resource_controller/sidebars'
12
+
13
+ module ActiveAdmin
14
+ class ResourceController < ::InheritedResources::Base
15
+
16
+ helper ::ActiveAdmin::ViewHelpers
17
+
18
+ layout false
19
+
20
+ respond_to :html, :xml, :json
21
+ respond_to :csv, :only => :index
22
+
23
+ before_filter :only_render_implemented_actions
24
+ before_filter :authenticate_active_admin_user
25
+
26
+ include Actions
27
+ include ActiveAdmin::ActionItems
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
+ include Sidebars
37
+
38
+ class << self
39
+
40
+ # Reference to the Resource object which initialized
41
+ # this controller
42
+ attr_accessor :active_admin_config
43
+
44
+ def active_admin_config=(config)
45
+ @active_admin_config = config
46
+ defaults :resource_class => config.resource,
47
+ :route_prefix => config.route_prefix,
48
+ :instance_name => config.underscored_resource_name
49
+ end
50
+
51
+ public :belongs_to
52
+ end
53
+
54
+ # Default Sidebar Sections
55
+ sidebar :filters, :only => :index do
56
+ active_admin_filters_form_for assigns["search"], filters_config
57
+ end
58
+
59
+ # Default Action Item Links
60
+ action_item :only => :show do
61
+ if controller.action_methods.include?('edit')
62
+ link_to(I18n.t('active_admin.edit_model', :model => active_admin_config.resource_name), edit_resource_path(resource))
63
+ end
64
+ end
65
+
66
+ action_item :only => :show do
67
+ if controller.action_methods.include?("destroy")
68
+ link_to(I18n.t('active_admin.delete_model', :model => active_admin_config.resource_name),
69
+ resource_path(resource),
70
+ :method => :delete, :confirm => I18n.t('active_admin.delete_confirmation'))
71
+ end
72
+ end
73
+
74
+ action_item :except => [:new, :show] do
75
+ if controller.action_methods.include?('new')
76
+ link_to(I18n.t('active_admin.new_model', :model => active_admin_config.resource_name), new_resource_path)
77
+ end
78
+ end
79
+
80
+ protected
81
+
82
+ # By default Rails will render un-implemented actions when the view exists. Becuase Active
83
+ # Admin allows you to not render any of the actions by using the #actions method, we need
84
+ # to check if they are implemented.
85
+ def only_render_implemented_actions
86
+ raise AbstractController::ActionNotFound unless action_methods.include?(params[:action])
87
+ end
88
+
89
+ # Calls the authentication method as defined in ActiveAdmin.authentication_method
90
+ def authenticate_active_admin_user
91
+ send(active_admin_application.authentication_method) if active_admin_application.authentication_method
92
+ end
93
+
94
+ def current_active_admin_user
95
+ send(active_admin_application.current_user_method) if active_admin_application.current_user_method
96
+ end
97
+ helper_method :current_active_admin_user
98
+
99
+ def current_active_admin_user?
100
+ !current_active_admin_user.nil?
101
+ end
102
+ helper_method :current_active_admin_user?
103
+
104
+ def active_admin_config
105
+ self.class.active_admin_config
106
+ end
107
+ helper_method :active_admin_config
108
+
109
+ def active_admin_application
110
+ ActiveAdmin.application
111
+ end
112
+
113
+ # Returns the renderer class to use for the given action.
114
+ def renderer_for(action)
115
+ active_admin_application.view_factory["#{action}_page"]
116
+ end
117
+ helper_method :renderer_for
118
+ end
119
+ end