andrewroth_activeadmin 0.3.4 → 0.3.4.1

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 (201) hide show
  1. data/CHANGELOG.md +159 -3
  2. data/CONTRIBUTING.md +113 -0
  3. data/LICENSE +1 -1
  4. data/README.rdoc +19 -20
  5. data/activeadmin.gemspec +3 -1
  6. data/app/assets/javascripts/active_admin/application.js +9 -0
  7. data/app/assets/javascripts/active_admin/base.js +4 -12
  8. data/app/assets/stylesheets/active_admin/_base.css.scss +16 -340
  9. data/app/assets/stylesheets/active_admin/_forms.css.scss +13 -7
  10. data/app/assets/stylesheets/active_admin/_header.css.scss +23 -4
  11. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +31 -0
  12. data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
  13. data/app/assets/stylesheets/active_admin/components/_buttons.scss +12 -0
  14. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +2 -0
  15. data/app/assets/stylesheets/active_admin/components/_grid.scss +9 -0
  16. data/app/assets/stylesheets/active_admin/components/_links.scss +5 -0
  17. data/app/assets/stylesheets/active_admin/components/_pagination.scss +34 -0
  18. data/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
  19. data/app/assets/stylesheets/active_admin/components/_scopes.scss +10 -0
  20. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +12 -0
  21. data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +101 -0
  22. data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +2 -1
  23. data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +50 -13
  24. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +9 -1
  25. data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +7 -5
  26. data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +1 -0
  27. data/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
  28. data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +1 -0
  29. data/app/assets/stylesheets/active_admin/pages/_dashboard.scss +5 -0
  30. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
  31. data/app/assets/stylesheets/active_admin/structure/_footer.scss +14 -0
  32. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +26 -0
  33. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +44 -0
  34. data/app/views/active_admin/devise/passwords/edit.html.erb +1 -1
  35. data/app/views/active_admin/devise/passwords/new.html.erb +1 -1
  36. data/app/views/active_admin/devise/sessions/new.html.erb +1 -1
  37. data/app/views/active_admin/devise/shared/_links.erb +1 -1
  38. data/app/views/active_admin/devise/unlocks/new.html.erb +1 -1
  39. data/app/views/active_admin/page/index.html.arb +1 -0
  40. data/app/views/layouts/active_admin_logged_out.html.erb +2 -2
  41. data/cucumber.yml +3 -2
  42. data/docs/1-general-configuration.md +46 -10
  43. data/docs/6-show-screens.md +7 -0
  44. data/docs/8-custom-actions.md +12 -2
  45. data/docs/9-custom-pages.md +84 -0
  46. data/features/belongs_to.feature +27 -0
  47. data/features/comments/commenting.feature +3 -2
  48. data/features/dashboard.feature +18 -0
  49. data/features/development_reloading.feature +19 -0
  50. data/features/index/filter_with_check_boxes.feature +25 -0
  51. data/features/index/index_as_table.feature +14 -0
  52. data/features/index/index_scopes.feature +42 -0
  53. data/features/index/pagination.feature +19 -1
  54. data/features/menu.feature +22 -2
  55. data/features/registering_assets.feature +2 -2
  56. data/features/registering_pages.feature +66 -0
  57. data/features/specifying_actions.feature +5 -0
  58. data/features/step_definitions/action_item_steps.rb +2 -6
  59. data/features/step_definitions/action_link_steps.rb +7 -0
  60. data/features/step_definitions/additional_web_steps.rb +8 -0
  61. data/features/step_definitions/asset_steps.rb +5 -1
  62. data/features/step_definitions/breadcrumb_steps.rb +5 -0
  63. data/features/step_definitions/configuration_steps.rb +56 -8
  64. data/features/step_definitions/dashboard_steps.rb +5 -1
  65. data/features/step_definitions/factory_steps.rb +9 -2
  66. data/features/step_definitions/flash_steps.rb +9 -1
  67. data/features/step_definitions/index_scope_steps.rb +16 -4
  68. data/features/step_definitions/member_link_steps.rb +7 -0
  69. data/features/step_definitions/site_title_steps.rb +15 -0
  70. data/features/support/paths.rb +6 -0
  71. data/features/users/logging_out.feature +11 -0
  72. data/lib/active_admin.rb +25 -10
  73. data/lib/active_admin/application.rb +63 -20
  74. data/lib/active_admin/arbre/html/element.rb +10 -0
  75. data/lib/active_admin/asset_registration.rb +15 -2
  76. data/lib/active_admin/base_controller.rb +61 -0
  77. data/lib/active_admin/{resource_controller → base_controller}/menu.rb +1 -1
  78. data/lib/active_admin/comments.rb +48 -54
  79. data/lib/active_admin/comments/comment.rb +13 -2
  80. data/lib/active_admin/comments/namespace_helper.rb +1 -1
  81. data/lib/active_admin/comments/views/active_admin_comments.rb +7 -3
  82. data/lib/active_admin/dashboards.rb +4 -0
  83. data/lib/active_admin/dashboards/dashboard_controller.rb +20 -4
  84. data/lib/active_admin/dsl.rb +6 -159
  85. data/lib/active_admin/event.rb +5 -3
  86. data/lib/active_admin/filter_form_builder.rb +53 -0
  87. data/lib/active_admin/form_builder.rb +25 -19
  88. data/lib/active_admin/inputs.rb +14 -0
  89. data/lib/active_admin/inputs/datepicker_input.rb +11 -0
  90. data/lib/active_admin/inputs/filter_base.rb +46 -0
  91. data/lib/active_admin/inputs/filter_check_boxes_input.rb +40 -0
  92. data/lib/active_admin/inputs/filter_date_range_input.rb +34 -0
  93. data/lib/active_admin/inputs/filter_numeric_input.rb +55 -0
  94. data/lib/active_admin/inputs/filter_select_input.rb +23 -0
  95. data/lib/active_admin/inputs/filter_string_input.rb +22 -0
  96. data/lib/active_admin/locales/ca.yml +44 -0
  97. data/lib/active_admin/locales/cs.yml +14 -10
  98. data/lib/active_admin/locales/de.yml +43 -0
  99. data/lib/active_admin/locales/en.yml +5 -0
  100. data/lib/active_admin/locales/hr.yml +40 -0
  101. data/lib/active_admin/locales/ko.yml +40 -0
  102. data/lib/active_admin/locales/lv.yml +43 -0
  103. data/lib/active_admin/locales/nl.yml +40 -0
  104. data/lib/active_admin/locales/no-NB.yml +40 -0
  105. data/lib/active_admin/locales/pl.yml +7 -1
  106. data/lib/active_admin/locales/pt-BR.yml +6 -2
  107. data/lib/active_admin/namespace.rb +48 -33
  108. data/lib/active_admin/page.rb +54 -0
  109. data/lib/active_admin/page_controller.rb +15 -0
  110. data/lib/active_admin/page_dsl.rb +21 -0
  111. data/lib/active_admin/page_presenter.rb +30 -0
  112. data/lib/active_admin/resource.rb +38 -44
  113. data/lib/active_admin/resource/action_items.rb +5 -0
  114. data/lib/active_admin/resource/belongs_to.rb +4 -2
  115. data/lib/active_admin/resource/controllers.rb +35 -0
  116. data/lib/active_admin/resource/menu.rb +1 -2
  117. data/lib/active_admin/resource/naming.rb +43 -31
  118. data/lib/active_admin/resource/page_presenters.rb +28 -0
  119. data/lib/active_admin/resource/scopes.rb +16 -3
  120. data/lib/active_admin/resource/sidebars.rb +4 -0
  121. data/lib/active_admin/resource_collection.rb +88 -0
  122. data/lib/active_admin/resource_controller.rb +18 -54
  123. data/lib/active_admin/resource_controller/action_builder.rb +1 -1
  124. data/lib/active_admin/resource_controller/actions.rb +1 -1
  125. data/lib/active_admin/resource_controller/callbacks.rb +1 -1
  126. data/lib/active_admin/resource_controller/collection.rb +8 -4
  127. data/lib/active_admin/resource_controller/filters.rb +1 -1
  128. data/lib/active_admin/resource_controller/resource_class_methods.rb +24 -0
  129. data/lib/active_admin/resource_controller/scoping.rb +1 -1
  130. data/lib/active_admin/resource_controller/sidebars.rb +1 -1
  131. data/lib/active_admin/resource_dsl.rb +157 -0
  132. data/lib/active_admin/router.rb +21 -14
  133. data/lib/active_admin/scope.rb +15 -3
  134. data/lib/active_admin/version.rb +1 -1
  135. data/lib/active_admin/view_factory.rb +4 -3
  136. data/lib/active_admin/view_helpers/auto_link_helper.rb +1 -10
  137. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +25 -21
  138. data/lib/active_admin/view_helpers/filter_form_helper.rb +0 -150
  139. data/lib/active_admin/views/components/attributes_table.rb +1 -1
  140. data/lib/active_admin/views/components/paginated_collection.rb +42 -13
  141. data/lib/active_admin/views/components/scopes.rb +17 -17
  142. data/lib/active_admin/views/components/status_tag.rb +6 -5
  143. data/lib/active_admin/views/components/table_for.rb +6 -2
  144. data/lib/active_admin/views/header_renderer.rb +31 -12
  145. data/lib/active_admin/views/index_as_block.rb +2 -2
  146. data/lib/active_admin/views/index_as_blog.rb +3 -3
  147. data/lib/active_admin/views/index_as_grid.rb +4 -4
  148. data/lib/active_admin/views/index_as_table.rb +13 -6
  149. data/lib/active_admin/views/pages/base.rb +4 -4
  150. data/lib/active_admin/views/pages/form.rb +49 -0
  151. data/lib/active_admin/views/pages/index.rb +18 -6
  152. data/lib/active_admin/views/pages/page.rb +24 -0
  153. data/lib/active_admin/views/pages/show.rb +1 -1
  154. data/lib/generators/active_admin/assets/assets_generator.rb +19 -1
  155. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +38 -12
  156. data/lib/generators/active_admin/install/templates/dashboards.rb +6 -0
  157. data/spec/spec_helper.rb +4 -0
  158. data/spec/support/rails_template.rb +11 -0
  159. data/spec/support/templates/cucumber_with_reloading.rb +5 -0
  160. data/spec/unit/active_admin_spec.rb +8 -0
  161. data/spec/unit/application_spec.rb +48 -2
  162. data/spec/unit/arbre/html/element_finder_methods_spec.rb +58 -2
  163. data/spec/unit/asset_registration_spec.rb +9 -3
  164. data/spec/unit/auto_link_spec.rb +2 -2
  165. data/spec/unit/base_controller_shared_examples.rb +28 -0
  166. data/spec/unit/base_controller_spec.rb +8 -0
  167. data/spec/unit/belongs_to_spec.rb +30 -33
  168. data/spec/unit/comments_spec.rb +45 -15
  169. data/spec/unit/config_shared_examples.rb +108 -0
  170. data/spec/unit/dashboard_controller_spec.rb +44 -0
  171. data/spec/unit/event_spec.rb +6 -0
  172. data/spec/unit/filter_form_builder_spec.rb +9 -0
  173. data/spec/unit/form_builder_spec.rb +8 -14
  174. data/spec/unit/namespace/register_page_spec.rb +102 -0
  175. data/spec/unit/namespace/register_resource_spec.rb +188 -0
  176. data/spec/unit/namespace_spec.rb +11 -183
  177. data/spec/unit/page_controller_spec.rb +8 -0
  178. data/spec/unit/page_spec.rb +60 -0
  179. data/spec/unit/resource/menu_spec.rb +1 -51
  180. data/spec/unit/resource/naming_spec.rb +24 -19
  181. data/spec/unit/resource/page_presenters_spec.rb +32 -0
  182. data/spec/unit/resource/scopes_spec.rb +13 -0
  183. data/spec/unit/resource_collection_spec.rb +101 -0
  184. data/spec/unit/resource_controller_spec.rb +40 -32
  185. data/spec/unit/{registration_spec.rb → resource_registration_spec.rb} +0 -0
  186. data/spec/unit/resource_spec.rb +8 -24
  187. data/spec/unit/routing_spec.rb +50 -1
  188. data/spec/unit/scope_spec.rb +18 -4
  189. data/spec/unit/views/components/paginated_collection_spec.rb +150 -0
  190. data/spec/unit/views/components/status_tag_spec.rb +9 -0
  191. data/tasks/test.rake +43 -27
  192. metadata +140 -31
  193. data/app/assets/javascripts/active_admin/vendor.js +0 -382
  194. data/lib/active_admin/comments/configuration.rb +0 -18
  195. data/lib/active_admin/page_config.rb +0 -15
  196. data/lib/active_admin/resource_controller/form.rb +0 -42
  197. data/lib/active_admin/resource_controller/page_configurations.rb +0 -53
  198. data/lib/active_admin/views/pages/edit.rb +0 -28
  199. data/lib/active_admin/views/pages/new.rb +0 -28
  200. data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +0 -427
  201. data/spec/integration/belongs_to_spec.rb +0 -42
@@ -0,0 +1,28 @@
1
+ module ActiveAdmin
2
+ class Resource
3
+ module PagePresenters
4
+
5
+ # A hash of page configurations for the controller indexed by action name
6
+ def page_presenters
7
+ @page_presenters ||= {}
8
+ end
9
+
10
+ # Sets a page config for a given action
11
+ #
12
+ # @param [String, Symbol] action The action to store this configuration for
13
+ # @param [PagePresenter] page_presenter The instance of PagePresenter to store
14
+ def set_page_presenter(action, page_presenter)
15
+ page_presenters[action.to_sym] = page_presenter
16
+ end
17
+
18
+ # Returns a stored page config
19
+ #
20
+ # @param [Symbol, String] action The action to get the config for
21
+ # @returns [PagePresenter, nil]
22
+ def get_page_presenter(action)
23
+ page_presenters[action.to_sym]
24
+ end
25
+
26
+ end
27
+ end
28
+ end
@@ -22,10 +22,23 @@ module ActiveAdmin
22
22
  # to your i18n files a key like "active_admin.scopes.scope_method".
23
23
  def scope(*args, &block)
24
24
  options = args.extract_options!
25
- self.scopes << ActiveAdmin::Scope.new(*args, &block)
26
- if options[:default]
27
- @default_scope = scopes.last
25
+ title = args[0] rescue nil
26
+ method = args[1] rescue nil
27
+
28
+ scope = ActiveAdmin::Scope.new(title, method, options, &block)
29
+
30
+ # Finds and replaces a scope by the same name if it already exists
31
+ existing_scope_index = scopes.index{|existing_scope| existing_scope.id == scope.id }
32
+ if existing_scope_index
33
+ scopes.delete_at(existing_scope_index)
34
+ scopes.insert(existing_scope_index, scope)
35
+ else
36
+ self.scopes << scope
28
37
  end
38
+
39
+ @default_scope = scope if options[:default]
40
+
41
+ scope
29
42
  end
30
43
 
31
44
  end
@@ -22,6 +22,10 @@ module ActiveAdmin
22
22
  sidebar_sections.select{|section| section.display_on?(action) }
23
23
  end
24
24
 
25
+ def sidebar_sections?
26
+ !!@sidebar_sections && @sidebar_sections.any?
27
+ end
28
+
25
29
  private
26
30
 
27
31
  def add_default_sidebar_sections
@@ -0,0 +1,88 @@
1
+ module ActiveAdmin
2
+
3
+ class ResourceMismatchError < StandardError; end
4
+
5
+ # Holds on to a collection of Resources. Is an Enumerable object
6
+ # so it has some Array like qualities.
7
+ #
8
+ # Adding a resource assumes that the object responds to #resource_key
9
+ class ResourceCollection
10
+ include Enumerable
11
+
12
+ def initialize
13
+ @resource_hash = {}
14
+ end
15
+
16
+ # Add a new resource to the collection. If the resource_key already
17
+ # exists, the exiting resource is returned.
18
+ #
19
+ # @param [Resource, Page] resource The resource to add to the collection
20
+ #
21
+ # @returns [Resource, Page] Either the existing resource or the new one
22
+ def add(resource)
23
+ if has_key?(resource.resource_key)
24
+ existing_resource = find_by_key(resource.resource_key)
25
+ ensure_resource_classes_match!(existing_resource, resource)
26
+ existing_resource
27
+ else
28
+ @resource_hash[resource.resource_key] = resource
29
+ end
30
+ end
31
+
32
+ # @returns [Array] An array of all the resources
33
+ def resources
34
+ @resource_hash.values
35
+ end
36
+
37
+ # For enumerable
38
+ def each(&block)
39
+ @resource_hash.values.each(&block)
40
+ end
41
+
42
+ # @returns [Array] An array of all the keys registered in the collection
43
+ def keys
44
+ @resource_hash.keys
45
+ end
46
+
47
+ # @returns [Boolean] If the key has been registered in the collection
48
+ def has_key?(resource_key)
49
+ @resource_hash.has_key?(resource_key)
50
+ end
51
+
52
+ # Finds a resource by a given key
53
+ def find_by_key(resource_key)
54
+ @resource_hash[resource_key]
55
+ end
56
+
57
+ # Finds a resource based on it's class. Looks up the class Heirarchy if its
58
+ # a subclass of an Active Record class (ie: implementes base_class)
59
+ def find_by_resource_class(resource_class)
60
+ resource_class_name = resource_class.to_s
61
+ match = resources_with_a_resource_class.find{|r| r.resource_class.to_s == resource_class_name }
62
+ return match if match
63
+
64
+ if resource_class.respond_to?(:base_class)
65
+ base_class_name = resource_class.base_class.to_s
66
+ resources_with_a_resource_class.find{|r| r.resource_class.to_s == base_class_name }
67
+ else
68
+ nil
69
+ end
70
+ end
71
+
72
+ private
73
+
74
+ def resources_with_a_resource_class
75
+ select{|resource| resource.respond_to?(:resource_class) }
76
+ end
77
+
78
+ def ensure_resource_classes_match!(existing_resource, resource)
79
+ return unless existing_resource.respond_to?(:resource_class) && resource.respond_to?(:resource_class)
80
+
81
+ if existing_resource.resource_class != resource.resource_class
82
+ raise ActiveAdmin::ResourceMismatchError,
83
+ "Tried to register #{resource.resource_class} as #{resource.resource_key} but already registered to #{existing_resource.resource_class}"
84
+ end
85
+ end
86
+
87
+ end
88
+ end
@@ -4,24 +4,18 @@ require 'active_admin/resource_controller/action_builder'
4
4
  require 'active_admin/resource_controller/callbacks'
5
5
  require 'active_admin/resource_controller/collection'
6
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
7
  require 'active_admin/resource_controller/scoping'
8
+ require 'active_admin/resource_controller/resource_class_methods'
11
9
 
12
10
  module ActiveAdmin
13
- class ResourceController < ::InheritedResources::Base
14
-
15
- helper ::ActiveAdmin::ViewHelpers
16
-
11
+ # All Resources Controller inherits from this controller.
12
+ # It implements actions and helpers for resources.
13
+ class ResourceController < BaseController
17
14
  layout :determine_active_admin_layout
18
15
 
19
16
  respond_to :html, :xml, :json
20
17
  respond_to :csv, :only => :index
21
18
 
22
- before_filter :only_render_implemented_actions
23
- before_filter :authenticate_active_admin_user
24
-
25
19
  ACTIVE_ADMIN_ACTIONS = [:index, :show, :new, :create, :edit, :update, :destroy]
26
20
 
27
21
  include Actions
@@ -29,37 +23,30 @@ module ActiveAdmin
29
23
  include Callbacks
30
24
  include Collection
31
25
  include Filters
32
- include Form
33
- include Menu
34
- include PageConfigurations
35
26
  include Scoping
27
+ extend ResourceClassMethods
36
28
 
37
29
  class << self
38
- # Ensure that this method is available for the DSL
39
- public :actions
40
-
41
- # Reference to the Resource object which initialized
42
- # this controller
43
- attr_accessor :active_admin_config
44
-
45
30
  def active_admin_config=(config)
46
31
  @active_admin_config = config
47
- defaults :resource_class => config.resource,
32
+
33
+ defaults :resource_class => config.resource_class,
48
34
  :route_prefix => config.route_prefix,
49
35
  :instance_name => config.underscored_resource_name
50
36
  end
51
37
 
38
+ # Inherited Resources uses the inherited(base) hook method to
39
+ # add in the Base.resource_class class method. To override it, we
40
+ # need to install our resource_class method each time we're inherited from.
41
+ def inherited(base)
42
+ super(base)
43
+ base.override_resource_class_methods!
44
+ end
45
+
52
46
  public :belongs_to
53
47
  end
54
48
 
55
- protected
56
-
57
- # By default Rails will render un-implemented actions when the view exists. Becuase Active
58
- # Admin allows you to not render any of the actions by using the #actions method, we need
59
- # to check if they are implemented.
60
- def only_render_implemented_actions
61
- raise AbstractController::ActionNotFound unless action_methods.include?(params[:action])
62
- end
49
+ private
63
50
 
64
51
  # Determine which layout to use.
65
52
  #
@@ -72,34 +59,11 @@ module ActiveAdmin
72
59
  ACTIVE_ADMIN_ACTIONS.include?(params[:action].to_sym) ? false : 'active_admin'
73
60
  end
74
61
 
75
- # Calls the authentication method as defined in ActiveAdmin.authentication_method
76
- def authenticate_active_admin_user
77
- send(active_admin_application.authentication_method) if active_admin_application.authentication_method
78
- end
79
-
80
- def current_active_admin_user
81
- send(active_admin_application.current_user_method) if active_admin_application.current_user_method
82
- end
83
- helper_method :current_active_admin_user
84
-
85
- def current_active_admin_user?
86
- !current_active_admin_user.nil?
87
- end
88
- helper_method :current_active_admin_user?
89
-
90
- def active_admin_config
91
- self.class.active_admin_config
92
- end
93
- helper_method :active_admin_config
94
-
95
- def active_admin_application
96
- ActiveAdmin.application
97
- end
98
-
99
62
  # Returns the renderer class to use for the given action.
100
63
  def renderer_for(action)
101
- active_admin_application.view_factory["#{action}_page"]
64
+ active_admin_namespace.view_factory["#{action}_page"]
102
65
  end
103
66
  helper_method :renderer_for
67
+
104
68
  end
105
69
  end
@@ -1,5 +1,5 @@
1
1
  module ActiveAdmin
2
- class ResourceController < ::InheritedResources::Base
2
+ class ResourceController < BaseController
3
3
 
4
4
  module ActionBuilder
5
5
  extend ActiveSupport::Concern
@@ -1,5 +1,5 @@
1
1
  module ActiveAdmin
2
- class ResourceController < ::InheritedResources::Base
2
+ class ResourceController < BaseController
3
3
 
4
4
  # Override the InheritedResources actions to use the
5
5
  # Active Admin templates.
@@ -1,5 +1,5 @@
1
1
  module ActiveAdmin
2
- class ResourceController < ::InheritedResources::Base
2
+ class ResourceController < BaseController
3
3
 
4
4
  module Callbacks
5
5
  extend ActiveSupport::Concern
@@ -1,5 +1,5 @@
1
1
  module ActiveAdmin
2
- class ResourceController < ::InheritedResources::Base
2
+ class ResourceController < BaseController
3
3
 
4
4
  # This module deals with the retrieval of collections for resources
5
5
  # within the resource controller.
@@ -46,9 +46,13 @@ module ActiveAdmin
46
46
 
47
47
  def sort_order(chain)
48
48
  params[:order] ||= active_admin_config.sort_order
49
- table_name = active_admin_config.resource_table_name
50
49
  if params[:order] && params[:order] =~ /^([\w\_\.]+)_(desc|asc)$/
51
- chain.order("#{table_name}.#{$1} #{$2}")
50
+ column = $1
51
+ order = $2
52
+ table = active_admin_config.resource_table_name
53
+ table_column = (column =~ /\./) ? column : "#{table}.#{column}"
54
+
55
+ chain.order("#{table_column} #{order}")
52
56
  else
53
57
  chain # just return the chain
54
58
  end
@@ -120,7 +124,7 @@ module ActiveAdmin
120
124
  end
121
125
 
122
126
  def paginate(chain)
123
- chain.page(params[:page]).per(@per_page || active_admin_application.default_per_page)
127
+ chain.page(params[:page]).per(@per_page || active_admin_namespace.default_per_page)
124
128
  end
125
129
  end
126
130
 
@@ -1,5 +1,5 @@
1
1
  module ActiveAdmin
2
- class ResourceController < ::InheritedResources::Base
2
+ class ResourceController < BaseController
3
3
 
4
4
  module Filters
5
5
  extend ActiveSupport::Concern
@@ -0,0 +1,24 @@
1
+ module ActiveAdmin
2
+ class ResourceController < BaseController
3
+ module ResourceClassMethods
4
+
5
+ # Override the default resource_class class and instance
6
+ # methods to only return the class defined in the instance
7
+ # of ActiveAdmin::Resource
8
+ def override_resource_class_methods!
9
+ self.class_eval do
10
+ def self.resource_class=(klass); end
11
+
12
+ def self.resource_class
13
+ @active_admin_config ? @active_admin_config.resource_class : nil
14
+ end
15
+
16
+ def resource_class
17
+ self.class.resource_class
18
+ end
19
+ end
20
+ end
21
+
22
+ end
23
+ end
24
+ end
@@ -1,5 +1,5 @@
1
1
  module ActiveAdmin
2
- class ResourceController < ::InheritedResources::Base
2
+ class ResourceController < BaseController
3
3
 
4
4
  # This module deals with scoping entire controllers to a relation
5
5
  module Scoping
@@ -1,5 +1,5 @@
1
1
  module ActiveAdmin
2
- class ResourceController < ::InheritedResources::Base
2
+ class ResourceController < BaseController
3
3
 
4
4
  module Sidebars
5
5
 
@@ -0,0 +1,157 @@
1
+ module ActiveAdmin
2
+ # This is the class where all the register blocks are instance eval'd
3
+ class ResourceDSL < DSL
4
+ private
5
+
6
+ def belongs_to(target, options = {})
7
+ config.belongs_to(target, options)
8
+ end
9
+
10
+ # Scope this controller to some object which has a relation
11
+ # to the resource. Can either accept a block or a symbol
12
+ # of a method to call.
13
+ #
14
+ # Eg:
15
+ #
16
+ # ActiveAdmin.register Post do
17
+ # scope_to :current_user
18
+ # end
19
+ #
20
+ # Then every time we instantiate and object, it would call
21
+ #
22
+ # current_user.posts.build
23
+ #
24
+ # By default Active Admin will use the resource name to build a
25
+ # method to call as the association. If its different, you can
26
+ # pass in the association_method as an option.
27
+ #
28
+ # scope_to :current_user, :association_method => :blog_posts
29
+ #
30
+ # will result in the following
31
+ #
32
+ # current_user.blog_posts.build
33
+ #
34
+ def scope_to(*args, &block)
35
+ options = args.extract_options!
36
+ method = args.first
37
+
38
+ config.scope_to = block_given? ? block : method
39
+ config.scope_to_association_method = options[:association_method]
40
+ end
41
+
42
+ # Create a scope
43
+ def scope(*args, &block)
44
+ config.scope(*args, &block)
45
+ end
46
+
47
+ # Configure the index page for the resource
48
+ def index(options = {}, &block)
49
+ options[:as] ||= :table
50
+ config.set_page_presenter :index, ActiveAdmin::PagePresenter.new(options, &block)
51
+ end
52
+
53
+ # Configure the show page for the resource
54
+ def show(options = {}, &block)
55
+ config.set_page_presenter :show, ActiveAdmin::PagePresenter.new(options, &block)
56
+ end
57
+
58
+ def form(options = {}, &block)
59
+ config.set_page_presenter :form, ActiveAdmin::PagePresenter.new(options, &block)
60
+ end
61
+
62
+ # Configure the CSV format
63
+ #
64
+ # For example:
65
+ #
66
+ # csv do
67
+ # column :name
68
+ # column("Author") { |post| post.author.full_name }
69
+ # end
70
+ #
71
+ def csv(&block)
72
+ config.csv_builder = CSVBuilder.new(&block)
73
+ end
74
+
75
+ # Member Actions give you the functionality of defining both the
76
+ # action and the route directly from your ActiveAdmin registration
77
+ # block.
78
+ #
79
+ # For example:
80
+ #
81
+ # ActiveAdmin.register Post do
82
+ # member_action :comments do
83
+ # @post = Post.find(params[:id]
84
+ # @comments = @post.comments
85
+ # end
86
+ # end
87
+ #
88
+ # Will create a new controller action comments and will hook it up to
89
+ # the named route (comments_admin_post_path) /admin/posts/:id/comments
90
+ #
91
+ # You can treat everything within the block as a standard Rails controller
92
+ # action.
93
+ #
94
+ def member_action(name, options = {}, &block)
95
+ config.member_actions << ControllerAction.new(name, options)
96
+ controller do
97
+ define_method(name, &block || Proc.new{})
98
+ end
99
+ end
100
+
101
+ def collection_action(name, options = {}, &block)
102
+ config.collection_actions << ControllerAction.new(name, options)
103
+ controller do
104
+ define_method(name, &block || Proc.new{})
105
+ end
106
+ end
107
+
108
+ # Defined Callbacks
109
+ #
110
+ # == After Build
111
+ # Called after the resource is built in the new and create actions.
112
+ #
113
+ # ActiveAdmin.register Post do
114
+ # after_build do |post|
115
+ # post.author = current_user
116
+ # end
117
+ # end
118
+ #
119
+ # == Before / After Create
120
+ # Called before and after a resource is saved to the db on the create action.
121
+ #
122
+ # == Before / After Update
123
+ # Called before and after a resource is saved to the db on the update action.
124
+ #
125
+ # == Before / After Save
126
+ # Called before and after the object is saved in the create and update action.
127
+ # Note: Gets called after the create and update callbacks
128
+ #
129
+ # == Before / After Destroy
130
+ # Called before and after the object is destroyed from the database.
131
+ #
132
+ delegate :before_build, :after_build, :to => :controller
133
+ delegate :before_create, :after_create, :to => :controller
134
+ delegate :before_update, :after_update, :to => :controller
135
+ delegate :before_save, :after_save, :to => :controller
136
+ delegate :before_destroy, :after_destroy, :to => :controller
137
+
138
+ # Filters
139
+ delegate :filter, :to => :controller
140
+
141
+
142
+ # Standard rails filters
143
+ delegate :before_filter, :skip_before_filter, :after_filter, :around_filter, :to => :controller
144
+
145
+ # Specify which actions to create in the controller
146
+ #
147
+ # Eg:
148
+ #
149
+ # ActiveAdmin.register Post do
150
+ # actions :index, :show
151
+ # end
152
+ #
153
+ # Will only create the index and show actions (no create, update or delete)
154
+ delegate :actions, :to => :controller
155
+
156
+ end
157
+ end