activeadmin 0.5.1 → 0.6.0

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 (196) hide show
  1. data/.travis.yml +8 -5
  2. data/CHANGELOG.md +151 -0
  3. data/Gemfile +16 -16
  4. data/LICENSE +1 -1
  5. data/activeadmin.gemspec +1 -0
  6. data/app/assets/images/active_admin/index_list_icons/block_icon.svg +10 -0
  7. data/app/assets/images/active_admin/index_list_icons/blog_icon.svg +4 -0
  8. data/app/assets/images/active_admin/index_list_icons/grid_icon.svg +13 -0
  9. data/app/assets/images/active_admin/index_list_icons/table_icon.svg +3 -0
  10. data/app/assets/javascripts/active_admin/components/jquery.aa.checkbox-toggler.js.coffee +17 -44
  11. data/app/assets/javascripts/active_admin/components/jquery.aa.dropdown-menu.js.coffee +2 -4
  12. data/app/assets/javascripts/active_admin/components/jquery.aa.popover.js.coffee +0 -3
  13. data/app/assets/javascripts/active_admin/components/jquery.aa.table-checkbox-toggler.js.coffee +10 -12
  14. data/app/assets/javascripts/active_admin/pages/application.js.coffee +13 -10
  15. data/app/assets/javascripts/active_admin/pages/batch_actions.js.coffee +3 -3
  16. data/app/assets/stylesheets/active_admin/_base.css.scss +1 -0
  17. data/app/assets/stylesheets/active_admin/_header.css.scss +5 -2
  18. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +2 -2
  19. data/app/assets/stylesheets/active_admin/components/_index_list.scss +12 -0
  20. data/app/assets/stylesheets/active_admin/components/_popovers.css.scss +2 -2
  21. data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +2 -2
  22. data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +4 -4
  23. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +5 -4
  24. data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +1 -1
  25. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +1 -1
  26. data/app/assets/stylesheets/active_admin/print.css.scss +2 -2
  27. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +1 -1
  28. data/app/views/active_admin/devise/unlocks/new.html.erb +14 -12
  29. data/docs/1-general-configuration.md +13 -0
  30. data/docs/10-custom-pages.md +40 -28
  31. data/docs/11-decorators.md +6 -4
  32. data/docs/12-arbre-components.md +1 -1
  33. data/docs/13-authorization-adapter.md +206 -0
  34. data/docs/2-resource-customization.md +129 -14
  35. data/docs/3-index-pages.md +65 -0
  36. data/docs/3-index-pages/create-an-index.md +29 -0
  37. data/docs/3-index-pages/index-as-table.md +35 -11
  38. data/docs/5-forms.md +2 -2
  39. data/features/authorization.feature +64 -0
  40. data/features/authorization_cancan.feature +52 -0
  41. data/features/belongs_to.feature +41 -5
  42. data/features/index/batch_actions.feature +27 -3
  43. data/features/index/formats.feature +27 -0
  44. data/features/index/index_as_table.feature +74 -2
  45. data/features/index/index_parameters.feature +69 -0
  46. data/features/index/index_scopes.feature +7 -11
  47. data/features/index/page_title.feature +18 -0
  48. data/features/index/switch_index_view.feature +73 -0
  49. data/features/menu.feature +27 -0
  50. data/features/registering_pages.feature +21 -0
  51. data/features/step_definitions/additional_web_steps.rb +4 -0
  52. data/features/step_definitions/batch_action_steps.rb +16 -6
  53. data/features/step_definitions/index_scope_steps.rb +3 -3
  54. data/features/step_definitions/index_views_steps.rb +3 -0
  55. data/features/step_definitions/menu_steps.rb +4 -0
  56. data/features/support/env.rb +4 -0
  57. data/features/support/paths.rb +3 -0
  58. data/lib/active_admin.rb +4 -0
  59. data/lib/active_admin/application.rb +43 -76
  60. data/lib/active_admin/authorization_adapter.rb +128 -0
  61. data/lib/active_admin/base_controller.rb +18 -1
  62. data/lib/active_admin/base_controller/authorization.rb +153 -0
  63. data/lib/active_admin/base_controller/menu.rb +8 -3
  64. data/lib/active_admin/batch_actions/resource_extension.rb +8 -7
  65. data/lib/active_admin/batch_actions/views/batch_action_form.rb +1 -1
  66. data/lib/active_admin/cancan_adapter.rb +40 -0
  67. data/lib/active_admin/dashboards.rb +4 -5
  68. data/lib/active_admin/dashboards/dashboard_controller.rb +1 -1
  69. data/lib/active_admin/devise.rb +22 -7
  70. data/lib/active_admin/dsl.rb +18 -5
  71. data/lib/active_admin/engine.rb +1 -1
  72. data/lib/active_admin/filters/dsl.rb +1 -1
  73. data/lib/active_admin/filters/forms.rb +9 -7
  74. data/lib/active_admin/filters/resource_extension.rb +20 -15
  75. data/lib/active_admin/form_builder.rb +44 -49
  76. data/lib/active_admin/helpers/optional_display.rb +4 -8
  77. data/lib/active_admin/inputs/filter_boolean_input.rb +1 -1
  78. data/lib/active_admin/inputs/filter_string_input.rb +5 -1
  79. data/lib/active_admin/locales/bg.yml +1 -1
  80. data/lib/active_admin/locales/ca.yml +1 -1
  81. data/lib/active_admin/locales/cs.yml +26 -25
  82. data/lib/active_admin/locales/da.yml +1 -1
  83. data/lib/active_admin/locales/de.yml +1 -1
  84. data/lib/active_admin/locales/en.yml +11 -1
  85. data/lib/active_admin/locales/es.yml +16 -16
  86. data/lib/active_admin/locales/fr.yml +1 -1
  87. data/lib/active_admin/locales/he.yml +1 -1
  88. data/lib/active_admin/locales/hr.yml +1 -1
  89. data/lib/active_admin/locales/hu.yml +1 -1
  90. data/lib/active_admin/locales/it.yml +1 -1
  91. data/lib/active_admin/locales/ja.yml +4 -1
  92. data/lib/active_admin/locales/ko.yml +1 -1
  93. data/lib/active_admin/locales/lt.yml +1 -1
  94. data/lib/active_admin/locales/lv.yml +12 -1
  95. data/lib/active_admin/locales/nl.yml +2 -2
  96. data/lib/active_admin/locales/no-NB.yml +22 -1
  97. data/lib/active_admin/locales/pl.yml +1 -1
  98. data/lib/active_admin/locales/pt-BR.yml +1 -1
  99. data/lib/active_admin/locales/pt-PT.yml +81 -0
  100. data/lib/active_admin/locales/ro.yml +1 -1
  101. data/lib/active_admin/locales/ru.yml +1 -1
  102. data/lib/active_admin/locales/sv-SE.yml +1 -1
  103. data/lib/active_admin/locales/tr.yml +1 -1
  104. data/lib/active_admin/locales/vi.yml +1 -1
  105. data/lib/active_admin/locales/zh-CN.yml +1 -1
  106. data/lib/active_admin/locales/zh-TW.yml +1 -1
  107. data/lib/active_admin/menu.rb +76 -38
  108. data/lib/active_admin/menu_collection.rb +96 -0
  109. data/lib/active_admin/menu_item.rb +61 -71
  110. data/lib/active_admin/namespace.rb +67 -5
  111. data/lib/active_admin/page.rb +6 -0
  112. data/lib/active_admin/page_controller.rb +13 -3
  113. data/lib/active_admin/resource.rb +11 -20
  114. data/lib/active_admin/resource/action_items.rb +3 -3
  115. data/lib/active_admin/resource/controllers.rb +0 -17
  116. data/lib/active_admin/resource/menu.rb +52 -24
  117. data/lib/active_admin/resource/naming.rb +6 -10
  118. data/lib/active_admin/resource/page_presenters.rb +57 -3
  119. data/lib/active_admin/resource/routes.rb +46 -0
  120. data/lib/active_admin/resource_controller.rb +2 -17
  121. data/lib/active_admin/resource_controller/data_access.rb +299 -0
  122. data/lib/active_admin/resource_controller/decorators.rb +2 -1
  123. data/lib/active_admin/resource_dsl.rb +12 -14
  124. data/lib/active_admin/router.rb +61 -56
  125. data/lib/active_admin/scope.rb +28 -18
  126. data/lib/active_admin/version.rb +1 -1
  127. data/lib/active_admin/view_factory.rb +0 -1
  128. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +13 -19
  129. data/lib/active_admin/view_helpers/fields_for.rb +2 -0
  130. data/lib/active_admin/view_helpers/form_helper.rb +1 -1
  131. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +66 -11
  132. data/lib/active_admin/views/components/attributes_table.rb +7 -4
  133. data/lib/active_admin/views/components/index_list.rb +68 -0
  134. data/lib/active_admin/views/components/paginated_collection.rb +13 -9
  135. data/lib/active_admin/views/components/scopes.rb +2 -8
  136. data/lib/active_admin/views/components/table_for.rb +1 -1
  137. data/lib/active_admin/views/footer.rb +1 -1
  138. data/lib/active_admin/views/header.rb +3 -2
  139. data/lib/active_admin/views/index_as_block.rb +4 -0
  140. data/lib/active_admin/views/index_as_blog.rb +4 -0
  141. data/lib/active_admin/views/index_as_grid.rb +4 -0
  142. data/lib/active_admin/views/index_as_table.rb +49 -7
  143. data/lib/active_admin/views/pages/index.rb +19 -4
  144. data/lib/active_admin/views/tabbed_navigation.rb +10 -54
  145. data/lib/generators/active_admin/install/install_generator.rb +5 -1
  146. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +58 -0
  147. data/spec/integration/{default_namespace.rb → default_namespace_spec.rb} +0 -16
  148. data/spec/spec_helper.rb +3 -0
  149. data/spec/support/detect_rails_version.rb +10 -3
  150. data/spec/support/rails_template.rb +1 -1
  151. data/spec/support/templates/post_decorator.rb +6 -6
  152. data/spec/unit/application_spec.rb +5 -5
  153. data/spec/unit/authorization/authorization_adapter_spec.rb +61 -0
  154. data/spec/unit/authorization/controller_authorization_spec.rb +47 -0
  155. data/spec/unit/base_controller_spec.rb +0 -2
  156. data/spec/unit/batch_actions/resource_spec.rb +1 -1
  157. data/spec/unit/breadcrumbs_spec.rb +3 -3
  158. data/spec/unit/cancan_adapter_spec.rb +35 -0
  159. data/spec/unit/config_shared_examples.rb +9 -30
  160. data/spec/unit/devise_spec.rb +29 -0
  161. data/spec/unit/dsl_spec.rb +61 -0
  162. data/spec/unit/filters/filter_form_builder_spec.rb +58 -4
  163. data/spec/unit/filters/resource_spec.rb +17 -5
  164. data/spec/unit/form_builder_spec.rb +15 -0
  165. data/spec/unit/menu_collection_spec.rb +62 -0
  166. data/spec/unit/menu_item_spec.rb +51 -37
  167. data/spec/unit/menu_spec.rb +33 -29
  168. data/spec/unit/namespace/authorization_spec.rb +31 -0
  169. data/spec/unit/namespace/register_page_spec.rb +6 -28
  170. data/spec/unit/namespace/register_resource_spec.rb +11 -34
  171. data/spec/unit/namespace_spec.rb +63 -2
  172. data/spec/unit/page_controller_spec.rb +0 -3
  173. data/spec/unit/reloader_spec.rb +5 -5
  174. data/spec/unit/resource/menu_spec.rb +1 -13
  175. data/spec/unit/resource/naming_spec.rb +20 -2
  176. data/spec/unit/resource/page_presenters_spec.rb +14 -2
  177. data/spec/unit/resource_controller/{collection_spec.rb → data_access_spec.rb} +31 -13
  178. data/spec/unit/resource_controller_spec.rb +4 -5
  179. data/spec/unit/resource_spec.rb +33 -11
  180. data/spec/unit/routing_spec.rb +43 -0
  181. data/spec/unit/scope_spec.rb +13 -0
  182. data/spec/unit/view_factory_spec.rb +0 -1
  183. data/spec/unit/view_helpers/fields_for_spec.rb +4 -0
  184. data/spec/unit/view_helpers/form_helper_spec.rb +6 -2
  185. data/spec/unit/view_helpers/method_or_proc_helper_spec.rb +97 -0
  186. data/spec/unit/views/components/attributes_table_spec.rb +11 -0
  187. data/spec/unit/views/components/index_list_spec.rb +32 -0
  188. data/spec/unit/views/tabbed_navigation_spec.rb +42 -40
  189. data/tasks/test.rake +1 -1
  190. metadata +127 -40
  191. data/lib/active_admin/menu_builder.rb +0 -65
  192. data/lib/active_admin/resource_controller/callbacks.rb +0 -59
  193. data/lib/active_admin/resource_controller/collection.rb +0 -158
  194. data/lib/active_admin/views/utility_nav.rb +0 -41
  195. data/spec/unit/base_controller_shared_examples.rb +0 -25
  196. data/spec/unit/dsl_include_spec.rb +0 -20
@@ -1,65 +0,0 @@
1
- module ActiveAdmin
2
-
3
- class MenuBuilder
4
-
5
- def self.build_for_namespace(namespace)
6
- new(namespace).menu
7
- end
8
-
9
- attr_reader :menu
10
-
11
- def initialize(namespace)
12
- @namespace = namespace
13
- end
14
-
15
- def menu
16
- @menu ||= build_menu
17
- end
18
-
19
- private
20
-
21
- def namespace
22
- @namespace
23
- end
24
-
25
- def build_menu
26
- menu = Menu.new
27
-
28
- Dashboards.add_to_menu(namespace, menu)
29
-
30
- namespace.resources.each do |resource|
31
- register_with_menu(menu, resource) if resource.include_in_menu?
32
- end
33
-
34
- menu
35
- end
36
-
37
- # Does all the work of registernig a config with the menu system
38
- def register_with_menu(menu, resource)
39
- # The menu we're going to add this resource to
40
- add_to = menu
41
-
42
- # Adding as a child
43
- if resource.parent_menu_item_name
44
- # Create the parent if it doesn't exist
45
- unless menu[resource.parent_menu_item_name]
46
- item = MenuItem.new(:label => resource.parent_menu_item_name, :url => "#", :id => resource.parent_menu_item_name)
47
- add_to.add(item)
48
- end
49
-
50
- add_to = menu[resource.parent_menu_item_name]
51
- end
52
-
53
- if add_to[resource.menu_item.id]
54
- existing = add_to[resource.menu_item.id]
55
- add_to.children.delete(existing)
56
- add_to.add(resource.menu_item)
57
- resource.menu_item.add(*existing.children)
58
- else
59
- add_to.add resource.menu_item
60
- end
61
- end
62
-
63
- end
64
-
65
- end
@@ -1,59 +0,0 @@
1
- module ActiveAdmin
2
- class ResourceController < BaseController
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
- # Inherited resources 1.3.0 calls the method passing an array instead of a parameters hash.
34
- # The array contains in the first position the parameters which update the object and in the second position
35
- # possibly contains the role, it's optional, to use in mass assignment. This feature is provided by Rails 3.1
36
- if attributes.is_a?(Array)
37
- if object.respond_to?(:assign_attributes)
38
- object.assign_attributes(*attributes)
39
- else
40
- object.attributes = attributes[0]
41
- end
42
- else
43
- object.attributes = attributes
44
- end
45
-
46
- run_update_callbacks object do
47
- save_resource(object)
48
- end
49
- end
50
-
51
- def destroy_resource(object)
52
- run_destroy_callbacks object do
53
- object.destroy
54
- end
55
- end
56
- end
57
-
58
- end
59
- end
@@ -1,158 +0,0 @@
1
- module ActiveAdmin
2
- class ResourceController < BaseController
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
- module BaseCollection
10
- protected
11
-
12
- def collection
13
- get_collection_ivar || set_collection_ivar(active_admin_collection)
14
- end
15
-
16
- def active_admin_collection
17
- scoped_collection
18
- end
19
-
20
-
21
- # Override this method in your controllers to modify the start point
22
- # of our searches and index.
23
- #
24
- # This method should return an ActiveRecord::Relation object so that
25
- # the searching and filtering can be applied on top
26
- #
27
- # Note, unless you are doing something special, you should use the
28
- # scope_to method from the Scoping module instead of overriding this
29
- # method.
30
- def scoped_collection
31
- end_of_association_chain
32
- end
33
- end
34
-
35
-
36
- module Sorting
37
- protected
38
-
39
- def active_admin_collection
40
- sort_order(super)
41
- end
42
-
43
- def sort_order(chain)
44
- params[:order] ||= active_admin_config.sort_order
45
- if params[:order] && params[:order] =~ /^([\w\_\.]+)_(desc|asc)$/
46
- column = $1
47
- order = $2
48
- table = active_admin_config.resource_table_name
49
- table_column = (column =~ /\./) ? column :
50
- "#{table}.#{active_admin_config.resource_quoted_column_name(column)}"
51
-
52
- chain.reorder("#{table_column} #{order}")
53
- else
54
- chain # just return the chain
55
- end
56
- end
57
- end
58
-
59
-
60
- module Search
61
- protected
62
-
63
- def active_admin_collection
64
- search(super)
65
- end
66
-
67
- def search(chain)
68
- @search = chain.metasearch(clean_search_params(params[:q]))
69
- @search.relation
70
- end
71
-
72
- def clean_search_params(search_params)
73
- return {} unless search_params.is_a?(Hash)
74
- search_params = search_params.dup
75
- search_params.delete_if do |key, value|
76
- value == ""
77
- end
78
- search_params
79
- end
80
- end
81
-
82
-
83
- module Scoping
84
- protected
85
-
86
- def active_admin_collection
87
- scope_current_collection(super)
88
- end
89
-
90
- def scope_current_collection(chain)
91
- @collection_before_scope = chain
92
-
93
- if current_scope
94
- scope_chain(current_scope, chain)
95
- else
96
- chain
97
- end
98
- end
99
-
100
- def collection_before_scope
101
- @collection_before_scope
102
- end
103
-
104
-
105
- include ActiveAdmin::ScopeChain
106
-
107
- def current_scope
108
- @current_scope ||= if params[:scope]
109
- active_admin_config.get_scope_by_id(params[:scope]) if params[:scope]
110
- else
111
- active_admin_config.default_scope
112
- end
113
- end
114
- end
115
-
116
-
117
- module Pagination
118
- protected
119
-
120
- def active_admin_collection
121
- paginate(super)
122
- end
123
-
124
- def paginate(chain)
125
- page_method_name = Kaminari.config.page_method_name
126
- page = params[Kaminari.config.param_name]
127
-
128
- chain.send(page_method_name, page).per(per_page)
129
- end
130
-
131
- def per_page
132
- return max_csv_records if request.format == 'text/csv'
133
- return max_per_page if active_admin_config.paginate == false
134
-
135
- @per_page || active_admin_config.per_page
136
- end
137
-
138
- def max_csv_records
139
- 10_000
140
- end
141
-
142
- def max_per_page
143
- 10_000
144
- end
145
- end
146
-
147
- # Include all the Modules. BaseCollection must be first
148
- # and pagination should be last
149
- include BaseCollection
150
- include Sorting
151
- include Search
152
- include Scoping
153
- include Pagination
154
-
155
- end
156
- end
157
- end
158
-
@@ -1,41 +0,0 @@
1
- module ActiveAdmin
2
- module Views
3
- class UtilityNav < Component
4
- def tag_name
5
- "p"
6
- end
7
-
8
- def build(namespace)
9
- super(:id => "utility_nav", :class => "header-item")
10
- @namespace = namespace
11
-
12
- if current_active_admin_user?
13
- build_current_user
14
- build_logout_link
15
- end
16
- end
17
-
18
- private
19
-
20
- def build_current_user
21
- span display_name(current_active_admin_user), :class => "current_user"
22
- end
23
-
24
- def build_logout_link
25
- if @namespace.logout_link_path
26
- text_node helpers.link_to(I18n.t('active_admin.logout'), active_admin_logout_path, :method => logout_method)
27
- end
28
- end
29
-
30
- # Returns the logout path from the application settings
31
- def active_admin_logout_path
32
- helpers.render_or_call_method_or_proc_on(self, @namespace.logout_link_path)
33
- end
34
-
35
- def logout_method
36
- @namespace.logout_link_method || :get
37
- end
38
-
39
- end
40
- end
41
- end
@@ -1,25 +0,0 @@
1
- # Required methods:
2
- # * controller_class
3
- # * controller
4
- #
5
- shared_examples_for "BaseController" do
6
- let(:controller_class) { described_class }
7
-
8
- describe "Menu" do
9
- describe "setting the current tab" do
10
- before do
11
- controller.stub!(:active_admin_config => resource, :parent? => true)
12
- controller.send :set_current_tab # Run the before filter
13
- end
14
- subject{ controller.instance_variable_get(:@current_tab) }
15
-
16
- context "when menu item name is 'Resources' without a parent menu item" do
17
- let(:menu_item){ stub }
18
- let(:resource){ mock(:menu_item => menu_item, :parent_menu_item_name => nil, :belongs_to? => false) }
19
- it { should == menu_item }
20
- end
21
-
22
- end
23
- end
24
-
25
- end
@@ -1,20 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module MockModuleToInclude
4
- def self.included(dsl)
5
- end
6
- end
7
-
8
-
9
- describe ActiveAdmin::DSL, "#include" do
10
-
11
- let(:dsl){ ActiveAdmin::DSL.new(mock) }
12
-
13
- it "should call the included class method on the module that is included" do
14
- MockModuleToInclude.should_receive(:included).with(dsl)
15
- dsl.run_registration_block do
16
- include MockModuleToInclude
17
- end
18
- end
19
-
20
- end