activeadmin 2.13.0 → 2.14.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of activeadmin might be problematic. Click here for more details.

Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +69 -0
  3. data/CONTRIBUTING.md +3 -4
  4. data/README.md +2 -2
  5. data/app/assets/javascripts/active_admin/base.js +1 -4
  6. data/app/assets/stylesheets/active_admin/_forms.scss +1 -1
  7. data/app/assets/stylesheets/active_admin/structure/_footer.scss +6 -1
  8. data/app/views/layouts/active_admin_logged_out.html.erb +5 -4
  9. data/config/locales/fr.yml +3 -3
  10. data/config/locales/vi.yml +34 -7
  11. data/config/locales/zh-CN.yml +36 -17
  12. data/lib/active_admin/application.rb +4 -4
  13. data/lib/active_admin/asset_registration.rb +3 -3
  14. data/lib/active_admin/authorization_adapter.rb +2 -0
  15. data/lib/active_admin/base_controller/authorization.rb +2 -2
  16. data/lib/active_admin/dependency.rb +0 -4
  17. data/lib/active_admin/engine.rb +1 -1
  18. data/lib/active_admin/filters/resource_extension.rb +4 -4
  19. data/lib/active_admin/namespace.rb +2 -2
  20. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +1 -1
  21. data/lib/active_admin/orm/active_record/comments.rb +8 -8
  22. data/lib/active_admin/pundit_adapter.rb +0 -2
  23. data/lib/active_admin/resource/action_items.rb +2 -2
  24. data/lib/active_admin/version.rb +1 -1
  25. data/lib/active_admin/view_helpers/auto_link_helper.rb +1 -1
  26. data/lib/active_admin/views/index_as_table.rb +1 -1
  27. data/lib/active_admin/views/pages/base.rb +4 -3
  28. data/lib/active_admin/views/pages/index.rb +1 -1
  29. data/lib/active_admin.rb +1 -1
  30. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +17 -0
  31. metadata +5 -44
  32. data/docs/.gitignore +0 -1
  33. data/docs/0-installation.md +0 -142
  34. data/docs/1-general-configuration.md +0 -224
  35. data/docs/10-custom-pages.md +0 -150
  36. data/docs/11-decorators.md +0 -70
  37. data/docs/12-arbre-components.md +0 -214
  38. data/docs/13-authorization-adapter.md +0 -285
  39. data/docs/14-gotchas.md +0 -138
  40. data/docs/2-resource-customization.md +0 -475
  41. data/docs/3-index-pages/custom-index.md +0 -35
  42. data/docs/3-index-pages/index-as-block.md +0 -19
  43. data/docs/3-index-pages/index-as-blog.md +0 -69
  44. data/docs/3-index-pages/index-as-grid.md +0 -27
  45. data/docs/3-index-pages/index-as-table.md +0 -234
  46. data/docs/3-index-pages.md +0 -328
  47. data/docs/4-csv-format.md +0 -74
  48. data/docs/5-forms.md +0 -238
  49. data/docs/6-show-pages.md +0 -93
  50. data/docs/7-sidebars.md +0 -75
  51. data/docs/8-custom-actions.md +0 -177
  52. data/docs/9-batch-actions.md +0 -237
  53. data/docs/CNAME +0 -1
  54. data/docs/Gemfile +0 -4
  55. data/docs/Gemfile.lock +0 -283
  56. data/docs/README.md +0 -24
  57. data/docs/_config.yml +0 -4
  58. data/docs/_includes/footer.html +0 -8
  59. data/docs/_includes/google-analytics.html +0 -16
  60. data/docs/_includes/head.html +0 -7
  61. data/docs/_includes/toc.html +0 -98
  62. data/docs/_includes/top-menu.html +0 -17
  63. data/docs/_layouts/default.html +0 -21
  64. data/docs/documentation.md +0 -60
  65. data/docs/images/activeadmin.png +0 -0
  66. data/docs/images/code-header.png +0 -0
  67. data/docs/images/divider.png +0 -0
  68. data/docs/images/features.png +0 -0
  69. data/docs/images/tidelift.svg +0 -14
  70. data/docs/index.html +0 -226
  71. data/docs/stylesheets/main.css +0 -1205
@@ -1,69 +0,0 @@
1
- ---
2
- redirect_from: /docs/3-index-pages/index-as-blog.html
3
- ---
4
-
5
- # Index as Blog
6
-
7
- Render your index page as a set of posts. The post has two main options:
8
- title and body.
9
-
10
- ```ruby
11
- index as: :blog do
12
- title :my_title # Calls #my_title on each resource
13
- body :my_body # Calls #my_body on each resource
14
- end
15
- ```
16
-
17
- ## Post Title
18
-
19
- The title is the content that will be rendered within a link to the
20
- resource. There are two main ways to set the content for the title
21
-
22
- First, you can pass in a method to be called on your resource. For example:
23
-
24
- ```ruby
25
- index as: :blog do
26
- title :a_method_to_call
27
- end
28
- ```
29
-
30
- Second, you can pass a block to the tile option which will then be
31
- used as the contents of the title. The resource being rendered
32
- is passed in to the block. For Example:
33
-
34
- ```ruby
35
- index as: :blog do
36
- title do |post|
37
- span post.title, class: 'title'
38
- span post.created_at, class: 'created_at'
39
- end
40
- end
41
- ```
42
-
43
- ## Post Body
44
-
45
- The body is rendered underneath the title of each post. The same two
46
- style of options work as the Post Title above.
47
-
48
- Call a method on the resource as the body:
49
-
50
- ```ruby
51
- index as: :blog do
52
- title :my_title
53
- body :my_body
54
- end
55
- ```
56
-
57
- Or, render a block as the body:
58
-
59
- ```ruby
60
- index as: :blog do
61
- title :my_title
62
- body do |post|
63
- div truncate post.title
64
- div class: 'meta' do
65
- span "Post in #{post.categories.join(', ')}"
66
- end
67
- end
68
- end
69
- ```
@@ -1,27 +0,0 @@
1
- ---
2
- redirect_from: /docs/3-index-pages/index-as-grid.html
3
- ---
4
-
5
- # Index as a Grid
6
-
7
- Sometimes you want to display the index screen for a set of resources as a grid
8
- (possibly a grid of thumbnail images). To do so, use the :grid option for the
9
- index block.
10
-
11
- ```ruby
12
- index as: :grid do |product|
13
- link_to image_tag(product.image_path), admin_product_path(product)
14
- end
15
- ```
16
-
17
- The block is rendered within a cell in the grid once for each resource in the
18
- collection. The resource is passed into the block for you to use in the view.
19
-
20
- You can customize the number of columns that are rendered using the columns
21
- option:
22
-
23
- ```ruby
24
- index as: :grid, columns: 5 do |product|
25
- link_to image_tag(product.image_path), admin_product_path(product)
26
- end
27
- ```
@@ -1,234 +0,0 @@
1
- ---
2
- redirect_from: /docs/3-index-pages/index-as-table.html
3
- ---
4
-
5
- # Index as a Table
6
-
7
- By default, the index page is a table with each of the models content columns and links to
8
- show, edit and delete the object. There are many ways to customize what gets
9
- displayed.
10
-
11
- ## Defining Columns
12
-
13
- To display an attribute or a method on a resource, simply pass a symbol into the
14
- column method:
15
-
16
- ```ruby
17
- index do
18
- selectable_column
19
- column :title
20
- end
21
- ```
22
-
23
- For association columns we make an educated guess on what to display by
24
- calling the following methods in the following order:
25
-
26
- ```ruby
27
- :display_name, :full_name, :name, :username, :login, :title, :email, :to_s
28
- ```
29
-
30
- This can be customized in `config/initializers/active_admin.rb`.
31
-
32
- If the default title does not work for you, pass it as the first argument:
33
-
34
- ```ruby
35
- index do
36
- selectable_column
37
- column "My Custom Title", :title
38
- end
39
- ```
40
-
41
- Sometimes that just isn't enough and you need to write some view-specific code.
42
- For example, say we wanted a "Title" column that links to the posts admin screen.
43
-
44
- `column` accepts a block that will be rendered for each of the objects in the collection.
45
- The block is called once for each resource, which is passed as an argument to the block.
46
-
47
- ```ruby
48
- index do
49
- selectable_column
50
- column "Title" do |post|
51
- link_to post.title, admin_post_path(post)
52
- end
53
- end
54
- ```
55
-
56
- ## Defining Actions
57
-
58
- To setup links to View, Edit and Delete a resource, use the `actions` method:
59
-
60
- ```ruby
61
- index do
62
- selectable_column
63
- column :title
64
- actions
65
- end
66
- ```
67
-
68
- You can also append custom links to the default links:
69
-
70
- ```ruby
71
- index do
72
- selectable_column
73
- column :title
74
- actions do |post|
75
- item "Preview", admin_preview_post_path(post), class: "member_link"
76
- end
77
- end
78
- ```
79
-
80
- Or forego the default links entirely:
81
-
82
- ```ruby
83
- index do
84
- column :title
85
- actions defaults: false do |post|
86
- item "View", admin_post_path(post)
87
- end
88
- end
89
- ```
90
-
91
- Or append custom action with custom html via arbre:
92
-
93
- ```ruby
94
- index do
95
- column :title
96
- actions do |post|
97
- a "View", href: admin_post_path(post)
98
- end
99
- end
100
- ```
101
-
102
- In case you prefer to list actions links in a dropdown menu:
103
-
104
- ```ruby
105
- index do
106
- selectable_column
107
- column :title
108
- actions dropdown: true do |post|
109
- item "Preview", admin_preview_post_path(post)
110
- end
111
- end
112
- ```
113
-
114
- In addition, you can insert the position of the row in the greater
115
- collection by using the index_column special command:
116
-
117
- ```ruby
118
- index do
119
- selectable_column
120
- index_column
121
- column :title
122
- end
123
- ```
124
-
125
- index_column take an optional offset parameter to allow a developer to set
126
- the starting number for the index (default is 1).
127
-
128
- ## Sorting
129
-
130
- When a column is generated from an Active Record attribute, the table is
131
- sortable by default. If you are creating a custom column, you may need to give
132
- Active Admin a hint for how to sort the table.
133
-
134
- You can pass the key specifying the attribute which gets used to sort objects using Active Record.
135
- By default, this is the column on the resource's table that the attribute corresponds to.
136
- Otherwise, any attribute that the resource collection responds to can be used.
137
-
138
- ```ruby
139
- index do
140
- column :title, sortable: :title do |post|
141
- link_to post.title, admin_post_path(post)
142
- end
143
- end
144
- ```
145
-
146
- You can turn off sorting on any column by passing false:
147
-
148
- ```ruby
149
- index do
150
- column :title, sortable: false
151
- end
152
- ```
153
-
154
- It's also possible to sort by PostgreSQL's hstore column key. You should set `sortable`
155
- option to a `column->'key'` value:
156
-
157
- ```ruby
158
- index do
159
- column :keywords, sortable: "meta->'keywords'"
160
- end
161
- ```
162
-
163
- ## Custom sorting
164
-
165
- It is also possible to use database specific expressions and options for sorting by column
166
-
167
- ```ruby
168
- order_by(:title) do |order_clause|
169
- if order_clause.order == 'desc'
170
- [order_clause.to_sql, 'NULLS LAST'].join(' ')
171
- else
172
- [order_clause.to_sql, 'NULLS FIRST'].join(' ')
173
- end
174
- end
175
-
176
- index do
177
- column :title
178
- end
179
- ```
180
-
181
- ## Associated Sorting
182
-
183
- You're normally able to sort columns alphabetically, but by default you
184
- can't sort by associated objects. Though with a few simple changes, you can.
185
-
186
- Assuming you're on the Books index page, and Book has_one Publisher:
187
-
188
- ```ruby
189
- controller do
190
- def scoped_collection
191
- super.includes :publisher # prevents N+1 queries to your database
192
- end
193
- end
194
- ```
195
-
196
- You can also define associated objects to include outside of the
197
- `scoped_collection` method:
198
-
199
- ```ruby
200
- includes :publisher
201
- ```
202
-
203
- Then it's simple to sort by any Publisher attribute from within the index table:
204
-
205
- ```ruby
206
- index do
207
- column :publisher, sortable: 'publishers.name'
208
- end
209
- ```
210
-
211
- ## Showing and Hiding Columns
212
-
213
- The entire index block is rendered within the context of the view, so you can
214
- easily do things that show or hide columns based on the current context.
215
-
216
- For example, if you were using CanCan:
217
-
218
- ```ruby
219
- index do
220
- column :title, sortable: false
221
- column :secret_data if can? :manage, Post
222
- end
223
- ```
224
-
225
- ## Custom row class
226
-
227
- In order to add special class to table rows pass the proc object as a `:row_class` option
228
- of the `index` method.
229
-
230
- ```ruby
231
- index row_class: ->elem { 'active' if elem.active? } do
232
- # columns
233
- end
234
- ```
@@ -1,328 +0,0 @@
1
- ---
2
- redirect_from: /docs/3-index-pages.html
3
- ---
4
-
5
- # Customizing the Index Page
6
-
7
- Filtering and listing resources is one of the most important tasks for
8
- administering a web application. Active Admin provides many different tools for
9
- you to build a compelling interface into your data for the admin staff.
10
-
11
- Built in, Active Admin has the following index renderers:
12
-
13
- * *Table*: A table drawn with each row being a resource ([View Table Docs](3-index-pages/index-as-table.md))
14
- * *Grid*: A set of rows and columns each cell being a resource ([View Grid Docs](3-index-pages/index-as-grid.md))
15
- * *Blocks*: A set of rows (not tabular) each row being a resource ([View Blocks Docs](3-index-pages/index-as-block.md))
16
- * *Blog*: A title and body content, similar to a blog index ([View Blog Docs](3-index-pages/index-as-blog.md))
17
-
18
- All index pages also support scopes, filters, pagination, action items, and
19
- sidebar sections.
20
-
21
- ## Multiple Index Pages
22
-
23
- Sometime you may want more than one index page for a resource to represent
24
- different views to the user. If multiple index pages exist, Active Admin will
25
- automatically build links at the top of the default index page. Including
26
- multiple views is simple and requires creating multiple index components in
27
- your resource.
28
-
29
- ```ruby
30
- index do
31
- id_column
32
- column :image_title
33
- actions
34
- end
35
-
36
- index as: :grid do |product|
37
- link_to image_tag(product.image_path), admin_product_path(product)
38
- end
39
- ```
40
-
41
- The first index component will be the default index page unless you indicate
42
- otherwise by setting `:default` to true.
43
-
44
- ```ruby
45
- index do
46
- column :image_title
47
- actions
48
- end
49
-
50
- index as: :grid, default: true do |product|
51
- link_to image_tag(product.image_path), admin_product_path(product)
52
- end
53
- ```
54
-
55
- ## Custom Index
56
-
57
- Active Admin does not limit the index page to be a table, block, blog or grid.
58
- If you've created your own [custom index](3-index-pages/custom-index.md) page it
59
- can be included by setting `:as` to the class of the index component you created.
60
-
61
- ```ruby
62
- index as: ActiveAdmin::Views::IndexAsMyIdea do
63
- column :image_title
64
- actions
65
- end
66
- ```
67
-
68
- ## Index Filters
69
-
70
- By default the index screen includes a "Filters" sidebar on the right hand side
71
- with a filter for each attribute of the registered model. You can customize the
72
- filters that are displayed as well as the type of widgets they use.
73
-
74
- To display a filter for an attribute, use the `filter` method
75
-
76
- ```ruby
77
- ActiveAdmin.register Post do
78
- filter :title
79
- end
80
- ```
81
-
82
- Out of the box, Active Admin supports the following filter types:
83
-
84
- * *:string* - A drop down for selecting "Contains", "Equals", "Starts with",
85
- "Ends with" and an input for a value.
86
- * *:date_range* - A start and end date field with calendar inputs
87
- * *:numeric* - A drop down for selecting "Equal To", "Greater Than" or "Less
88
- Than" and an input for a value.
89
- * *:select* - A drop down which filters based on a selected item in a collection
90
- or all.
91
- * *:check_boxes* - A list of check boxes users can turn on and off to filter
92
-
93
- By default, Active Admin will pick the most relevant filter based on the
94
- attribute type. You can force the type by passing the `:as` option.
95
-
96
- ```ruby
97
- filter :author, as: :check_boxes
98
- ```
99
-
100
- The `:check_boxes` and `:select` types accept options for the collection. By default
101
- it attempts to create a collection based on an association. But you can pass in
102
- the collection as a proc to be called at render time.
103
-
104
- ```ruby
105
- filter :author, as: :check_boxes, collection: proc { Author.all }
106
- ```
107
-
108
- To override options for string or numeric filter pass `filters` option.
109
-
110
- ```ruby
111
- filter :title, filters: [:starts_with, :ends_with]
112
- ```
113
-
114
- Also, if you don't need the select with the options 'contains', 'equals',
115
- 'starts_with' or 'ends_with' just add the option to the filter name with an
116
- underscore.
117
-
118
- For example:
119
-
120
- ```ruby
121
- filter :name_equals
122
- # or
123
- filter :name_contains
124
- ```
125
-
126
- You can change the filter label by passing a label option:
127
-
128
- ```ruby
129
- filter :author, label: 'Something else'
130
- ```
131
-
132
- By default, Active Admin will try to use ActiveModel I18n to determine the label.
133
-
134
- You can also filter on more than one attribute of a model using the [Ransack
135
- search predicate
136
- syntax](https://github.com/activerecord-hackery/ransack/wiki/Basic-Searching).
137
- If using a custom search method, you will also need to specify the field type
138
- using `:as` and the label.
139
-
140
- ```ruby
141
- filter :first_name_or_last_name_cont, as: :string, label: "Name"
142
- ```
143
-
144
- Filters can also be disabled for a resource, a namespace or the entire
145
- application.
146
-
147
- To disable for a specific resource:
148
-
149
- ```ruby
150
- ActiveAdmin.register Post do
151
- config.filters = false
152
- end
153
- ```
154
-
155
- To disable for a namespace, in the initializer:
156
-
157
- ```ruby
158
- ActiveAdmin.setup do |config|
159
- config.namespace :my_namespace do |my_namespace|
160
- my_namespace.filters = false
161
- end
162
- end
163
- ```
164
-
165
- Or to disable for the entire application:
166
-
167
- ```ruby
168
- ActiveAdmin.setup do |config|
169
- config.filters = false
170
- end
171
- ```
172
-
173
- You can also add a filter and still preserve the default filters:
174
-
175
- ```ruby
176
- preserve_default_filters!
177
- filter :author
178
- ```
179
-
180
- Or you can also remove a filter and still preserve the default filters:
181
-
182
- ```ruby
183
- preserve_default_filters!
184
- remove_filter :id
185
- ```
186
-
187
- ## Index Scopes
188
-
189
- You can define custom scopes for your index page. This will add a tab bar above
190
- the index table to quickly filter your collection on pre-defined scopes. There
191
- are a number of ways to define your scopes:
192
-
193
- ```ruby
194
- scope :all, default: true
195
-
196
- # assumes the model has a scope called ':active'
197
- scope :active
198
-
199
- # renames model scope ':leaves' to ':subcategories'
200
- scope "Subcategories", :leaves
201
-
202
- # Dynamic scope name
203
- scope ->{ Date.today.strftime '%A' }, :published_today
204
-
205
- # custom scope not defined on the model
206
- scope("Inactive") { |scope| scope.where(active: false) }
207
-
208
- # conditionally show a custom controller scope
209
- scope "Published", if: -> { current_admin_user.can? :manage, Posts } do |posts|
210
- posts.published
211
- end
212
- ```
213
-
214
- Scopes can be labelled with a translation, e.g.
215
- `active_admin.scopes.scope_method`.
216
-
217
- ### Scopes groups
218
-
219
- You can assign group names to scopes to keep related scopes together and separate them from the rest.
220
-
221
- ```ruby
222
- # a scope in the default group
223
- scope :all
224
-
225
- # two scopes used to filter by status
226
- scope :active, group: :status
227
- scope :inactive, group: :status
228
-
229
- # two scopes used to filter by date
230
- scope :today, group: :date
231
- scope :tomorrow, group: :date
232
- ```
233
-
234
- ## Index default sort order
235
-
236
- You can define the default sort order for index pages:
237
-
238
- ```ruby
239
- ActiveAdmin.register Post do
240
- config.sort_order = 'name_asc'
241
- end
242
- ```
243
-
244
- ## Index pagination
245
-
246
- You can set the number of records per page as default:
247
-
248
- ```ruby
249
- ActiveAdmin.setup do |config|
250
- config.default_per_page = 30
251
- end
252
- ```
253
-
254
- You can set the number of records per page per resources:
255
-
256
- ```ruby
257
- ActiveAdmin.register Post do
258
- config.per_page = 10
259
- end
260
- ```
261
-
262
- Or allow users to choose themselves using dropdown with values
263
-
264
- ```ruby
265
- ActiveAdmin.register Post do
266
- config.per_page = [10, 50, 100]
267
- end
268
- ```
269
-
270
- You can change it per request / action too:
271
-
272
- ```ruby
273
- controller do
274
- before_action only: :index do
275
- @per_page = 100
276
- end
277
- end
278
- ```
279
-
280
- You can also disable pagination:
281
-
282
- ```ruby
283
- ActiveAdmin.register Post do
284
- config.paginate = false
285
- end
286
- ```
287
-
288
- If you have a very large database, you might want to disable `SELECT COUNT(*)`
289
- queries caused by the pagination info at the bottom of the page:
290
-
291
- ```ruby
292
- ActiveAdmin.register Post do
293
- index pagination_total: false do
294
- # ...
295
- end
296
- end
297
- ```
298
-
299
- ## Customizing Download Links
300
-
301
- You can easily remove or customize the download links you want displayed:
302
-
303
- ```ruby
304
- # Per resource:
305
- ActiveAdmin.register Post do
306
-
307
- index download_links: false
308
- index download_links: [:pdf]
309
- index download_links: proc{ current_user.can_view_download_links? }
310
-
311
- end
312
-
313
- # For the entire application:
314
- ActiveAdmin.setup do |config|
315
-
316
- config.download_links = false
317
- config.download_links = [:csv, :xml, :json, :pdf]
318
- config.download_links = proc { current_user.can_view_download_links? }
319
-
320
- end
321
- ```
322
-
323
- Note: you have to actually implement PDF rendering for your action, ActiveAdmin
324
- does not provide this feature. This setting just allows you to specify formats
325
- that you want to show up under the index collection.
326
-
327
- You'll need to use a PDF rendering library like PDFKit or WickedPDF to get the
328
- PDF generation you want.