andrewroth_activeadmin 0.3.4 → 0.3.4.1

Sign up to get free protection for your applications and to get access to all the features.
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