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,54 @@
1
+ module ActiveAdmin
2
+ # Page is the primary data storage for page configuration in Active Admin
3
+ #
4
+ # When you register a page (ActiveAdmin.page "Status") you are actually creating
5
+ # a new Page instance within the given Namespace.
6
+ #
7
+ # The instance of the current page is available in PageController and views
8
+ # by calling the #active_admin_config method.
9
+ #
10
+ class Page
11
+
12
+ # The namespace this config belongs to
13
+ attr_reader :namespace
14
+
15
+ # The name of the page
16
+ attr_reader :name
17
+
18
+ module Base
19
+ def initialize(namespace, name, options)
20
+ @namespace = namespace
21
+ @name = name
22
+ @options = options
23
+ end
24
+ end
25
+
26
+ include Base
27
+ include Resource::Controllers
28
+ include Resource::PagePresenters
29
+ include Resource::Sidebars
30
+ include Resource::ActionItems
31
+ include Resource::Menu
32
+ include Resource::Naming
33
+
34
+ # plural_resource_name is singular
35
+ def plural_resource_name
36
+ name
37
+ end
38
+
39
+ def resource_name
40
+ name
41
+ end
42
+
43
+ def belongs_to?
44
+ false
45
+ end
46
+
47
+ def add_default_action_items
48
+ end
49
+
50
+ def add_default_sidebar_sections
51
+ end
52
+
53
+ end
54
+ end
@@ -0,0 +1,15 @@
1
+ module ActiveAdmin
2
+
3
+ # All Pages controllers inherit from this controller.
4
+ class PageController < BaseController
5
+
6
+ # Pages::Page subclasses Page::Base which implements the layout code
7
+ layout false
8
+
9
+ actions :index
10
+
11
+ def index(options={}, &block)
12
+ render "active_admin/page/index"
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,21 @@
1
+ module ActiveAdmin
2
+ # This is the class where all the register_page blocks are instance eval'd
3
+ class PageDSL < DSL
4
+
5
+ # Page content.
6
+ #
7
+ # The block should define the view using Arbre.
8
+ #
9
+ # Example:
10
+ #
11
+ # ActiveAdmin.register "My Page" do
12
+ # content do
13
+ # para "Sweet!"
14
+ # end
15
+ # end
16
+ #
17
+ def content(options = {}, &block)
18
+ config.set_page_presenter :index, ActiveAdmin::PagePresenter.new(options, &block)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,30 @@
1
+ module ActiveAdmin
2
+
3
+ # A simple object that gets used to present different aspects of views
4
+ #
5
+ # Initialize with a set of options and a block. The options become
6
+ # available using hash style syntax.
7
+ #
8
+ # Usage:
9
+ #
10
+ # presenter = PagePresenter.new :as => :table do
11
+ # # some awesome stuff
12
+ # end
13
+ #
14
+ # presenter[:as] #=> :table
15
+ # presenter.block #=> The block passed in to new
16
+ #
17
+ class PagePresenter
18
+
19
+ attr_reader :block, :options
20
+
21
+ def initialize(options = {}, &block)
22
+ @options, @block = options, block
23
+ end
24
+
25
+ def [](key)
26
+ @options[key]
27
+ end
28
+
29
+ end
30
+ end
@@ -1,8 +1,11 @@
1
1
  require 'active_admin/resource/action_items'
2
+ require 'active_admin/resource/controllers'
2
3
  require 'active_admin/resource/menu'
4
+ require 'active_admin/resource/page_presenters'
3
5
  require 'active_admin/resource/naming'
4
6
  require 'active_admin/resource/scopes'
5
7
  require 'active_admin/resource/sidebars'
8
+ require 'active_admin/resource/belongs_to'
6
9
 
7
10
  module ActiveAdmin
8
11
 
@@ -19,17 +22,11 @@ module ActiveAdmin
19
22
  # Event dispatched when a new resource is registered
20
23
  RegisterEvent = 'active_admin.resource.register'.freeze
21
24
 
22
- autoload :BelongsTo, 'active_admin/resource/belongs_to'
23
-
24
- # The namespace this resource belongs to
25
+ # The namespace this config belongs to
25
26
  attr_reader :namespace
26
27
 
27
- # The class this resource wraps. If you register the Post model, Resource#resource
28
- # will point to the Post class
29
- attr_reader :resource
30
-
31
- # A hash of page configurations for the controller indexed by action name
32
- attr_reader :page_configs
28
+ # The name of the resource class
29
+ attr_reader :resource_class_name
33
30
 
34
31
  # An array of member actions defined for this resource
35
32
  attr_reader :member_actions
@@ -46,68 +43,55 @@ module ActiveAdmin
46
43
  # If we're scoping resources, use this method on the parent to return the collection
47
44
  attr_accessor :scope_to_association_method
48
45
 
49
- # Set to false to turn off admin notes
50
- attr_accessor :admin_notes
51
-
52
46
  # Set the configuration for the CSV
53
47
  attr_writer :csv_builder
54
48
 
55
49
  module Base
56
- def initialize(namespace, resource, options = {})
50
+ def initialize(namespace, resource_class, options = {})
57
51
  @namespace = namespace
58
- @resource = resource
52
+ @resource_class_name = "::#{resource_class.name}"
59
53
  @options = default_options.merge(options)
60
54
  @sort_order = @options[:sort_order]
61
- @page_configs = {}
62
55
  @member_actions, @collection_actions = [], []
63
56
  end
64
57
  end
65
58
 
66
59
  include Base
60
+ include Controllers
61
+ include PagePresenters
67
62
  include ActionItems
68
- include Menu
69
63
  include Naming
70
64
  include Scopes
71
65
  include Sidebars
66
+ include Menu
72
67
 
73
-
74
- def resource_table_name
75
- resource.quoted_table_name
76
- end
77
-
78
- # Returns a properly formatted controller name for this
79
- # resource within its namespace
80
- def controller_name
81
- [namespace.module_name, camelized_resource_name.pluralize + "Controller"].compact.join('::')
68
+ # The class this resource wraps. If you register the Post model, Resource#resource_class
69
+ # will point to the Post class
70
+ def resource_class
71
+ ActiveSupport::Dependencies.constantize(resource_class_name)
82
72
  end
83
73
 
84
- # Returns the controller for this resource
85
- def controller
86
- @controller ||= controller_name.constantize
74
+ def resource_table_name
75
+ resource_class.quoted_table_name
87
76
  end
88
77
 
89
- # Returns the routes prefix for this resource
90
- def route_prefix
91
- namespace.module_name.try(:underscore)
78
+ # Returns the named route for an instance of this resource
79
+ def route_instance_path
80
+ [route_prefix, controller.resources_configuration[:self][:route_instance_name], 'path'].compact.join('_').to_sym
92
81
  end
93
82
 
94
83
  # Returns a symbol for the route to use to get to the
95
84
  # collection of this resource
96
85
  def route_collection_path
97
- route = [route_prefix, controller.resources_configuration[:self][:route_collection_name]]
86
+ route = super
98
87
 
88
+ # Handle plural resources.
99
89
  if controller.resources_configuration[:self][:route_collection_name] ==
100
- controller.resources_configuration[:self][:route_instance_name]
101
- route << "index"
90
+ controller.resources_configuration[:self][:route_instance_name]
91
+ route = route.to_s.gsub('_path', '_index_path').to_sym
102
92
  end
103
93
 
104
- route << 'path'
105
- route.compact.join('_').to_sym
106
- end
107
-
108
- # Returns the named route for an instance of this resource
109
- def route_instance_path
110
- [route_prefix, controller.resources_configuration[:self][:route_instance_name], 'path'].compact.join('_').to_sym
94
+ route
111
95
  end
112
96
 
113
97
  # Clears all the member actions this resource knows about
@@ -138,22 +122,32 @@ module ActiveAdmin
138
122
  !belongs_to_config.nil?
139
123
  end
140
124
 
125
+ def include_in_menu?
126
+ super && !(belongs_to? && !belongs_to_config.optional?)
127
+ end
128
+
141
129
  # The csv builder for this resource
142
130
  def csv_builder
143
131
  @csv_builder || default_csv_builder
144
132
  end
145
133
 
134
+ # @deprecated
135
+ def resource
136
+ @resource_class
137
+ end
138
+ ActiveAdmin::Deprecation.deprecate self, :resource,
139
+ "ActiveAdmin::Resource#resource is deprecated. Please use #resource_class instead."
140
+
146
141
  private
147
142
 
148
143
  def default_options
149
144
  {
150
- :namespace => ActiveAdmin.application.default_namespace,
151
- :sort_order => "#{resource.respond_to?(:primary_key) ? resource.primary_key : 'id'}_desc"
145
+ :sort_order => "#{resource_class.respond_to?(:primary_key) ? resource_class.primary_key : 'id'}_desc"
152
146
  }
153
147
  end
154
148
 
155
149
  def default_csv_builder
156
- @default_csv_builder ||= CSVBuilder.default_for_resource(resource)
150
+ @default_csv_builder ||= CSVBuilder.default_for_resource(resource_class)
157
151
  end
158
152
  end # class Resource
159
153
  end # module ActiveAdmin
@@ -42,6 +42,11 @@ module ActiveAdmin
42
42
  @action_items = []
43
43
  end
44
44
 
45
+ # Used by active_admin Base view
46
+ def action_items?
47
+ !!@action_items && @action_items.any?
48
+ end
49
+
45
50
  private
46
51
 
47
52
  # Adds the default action items to each resource
@@ -1,3 +1,5 @@
1
+ require 'active_admin/resource'
2
+
1
3
  module ActiveAdmin
2
4
  class Resource
3
5
  class BelongsTo
@@ -14,8 +16,8 @@ module ActiveAdmin
14
16
 
15
17
  # Returns the target resource class or raises an exception if it doesn't exist
16
18
  def target
17
- namespace.resources[@target_name.to_s.camelize] or
18
- raise TargetNotFound, "Could not find registered resource #{@target_name} in #{namespace.name} with #{namespace.resources.keys.inspect}"
19
+ namespace.resources.find_by_key(@target_name.to_s.camelize) or
20
+ raise TargetNotFound, "Could not find registered resource #{@target_name} in #{namespace.name} with #{namespace.resources.inspect}"
19
21
  end
20
22
 
21
23
  def namespace
@@ -0,0 +1,35 @@
1
+ module ActiveAdmin
2
+ class Resource
3
+ module Controllers
4
+
5
+ # Returns a properly formatted controller name for this
6
+ # config within its namespace
7
+ def controller_name
8
+ [namespace.module_name, plural_camelized_resource_name + "Controller"].compact.join('::')
9
+ end
10
+
11
+ # Returns the controller for this config
12
+ def controller
13
+ @controller ||= controller_name.constantize
14
+ end
15
+
16
+ # Returns the routes prefix for this config
17
+ def route_prefix
18
+ namespace.module_name.try(:underscore)
19
+ end
20
+
21
+ # Returns a symbol for the route to use to get to the
22
+ # collection of this resource
23
+ def route_collection_path
24
+ route = [
25
+ route_prefix,
26
+ controller.resources_configuration[:self][:route_collection_name],
27
+ 'path'
28
+ ]
29
+
30
+ route.compact.join('_').to_sym
31
+ end
32
+
33
+ end
34
+ end
35
+ end
@@ -36,8 +36,7 @@ module ActiveAdmin
36
36
 
37
37
  # Should this resource be added to the menu system?
38
38
  def include_in_menu?
39
- return false if menu_options[:display] == false
40
- !(belongs_to? && !belongs_to_config.optional?)
39
+ menu_options[:display] != false
41
40
  end
42
41
 
43
42
  end
@@ -1,49 +1,61 @@
1
1
  module ActiveAdmin
2
2
  class Resource
3
3
  module Naming
4
+ # Returns the name to call this resource such as "Bank Account"
5
+ def resource_name
6
+ @resource_name ||= @options[:as]
7
+ @resource_name ||= singular_human_name
8
+ @resource_name ||= resource_class.name.gsub('::',' ')
9
+ end
4
10
 
5
- # An underscored safe representation internally for this resource
6
- def underscored_resource_name
7
- @underscored_resource_name ||= if @options[:as]
8
- @options[:as].gsub(' ', '').underscore.singularize
9
- else
10
- resource.name.gsub('::','').underscore
11
- end
11
+ # Returns the plural version of this resource such as "Bank Accounts"
12
+ def plural_resource_name
13
+ @plural_resource_name ||= @options[:as].pluralize if @options[:as]
14
+ @plural_resource_name ||= plural_human_name
15
+ @plural_resource_name ||= resource_name.pluralize
16
+ end
17
+
18
+ # A name used internally to uniquely identify this resource
19
+ def resource_key
20
+ camelized_resource_name
12
21
  end
13
22
 
14
23
  # A camelized safe representation for this resource
15
24
  def camelized_resource_name
16
- underscored_resource_name.camelize
25
+ resource_name.titleize.gsub(' ', '')
17
26
  end
18
27
 
19
- # Returns the name to call this resource.
20
- # By default will use resource.model_name.human
21
- def resource_name
22
- @resource_name ||= if @options[:as] || !resource.respond_to?(:model_name)
23
- underscored_resource_name.titleize
24
- else
25
- resource.model_name.human.titleize
26
- end
28
+ def plural_camelized_resource_name
29
+ plural_resource_name.titleize.gsub(' ', '')
27
30
  end
28
31
 
29
- # Returns the plural version of this resource
30
- def plural_resource_name
31
- @plural_resource_name ||= if @options[:as] || !resource.respond_to?(:model_name)
32
- resource_name.pluralize
33
- else
34
- # Check if we have a translation available otherwise pluralize
35
- begin
36
- I18n.translate!("activerecord.models.#{resource.model_name.underscore}")
37
- resource.model_name.human(:count => 3)
38
- rescue I18n::MissingTranslationData
39
- resource_name.pluralize
40
- end
41
- end
32
+ # An underscored safe representation internally for this resource
33
+ def underscored_resource_name
34
+ camelized_resource_name.underscore
42
35
  end
43
-
36
+
44
37
  # Returns the plural and underscored version of this resource. Useful for element id's.
45
38
  def plural_underscored_resource_name
46
- plural_resource_name.underscore.gsub(/\s/, '_')
39
+ plural_camelized_resource_name.underscore
40
+ end
41
+
42
+ private
43
+
44
+ # @return [String] Titleized human name via ActiveRecord I18n or nil
45
+ def singular_human_name
46
+ return nil unless resource_class.respond_to?(:model_name)
47
+ resource_class.model_name.human.titleize
48
+ end
49
+
50
+ # @return [String] Titleized plural human name via ActiveRecord I18n or nil
51
+ def plural_human_name
52
+ return nil unless resource_class.respond_to?(:model_name)
53
+
54
+ begin
55
+ I18n.translate!("activerecord.models.#{resource_class.model_name.underscore}.other").titleize
56
+ rescue I18n::MissingTranslationData
57
+ nil
58
+ end
47
59
  end
48
60
  end
49
61
  end