activeadmin 2.13.1 → 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 (68) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +58 -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/asset_registration.rb +3 -3
  13. data/lib/active_admin/authorization_adapter.rb +2 -0
  14. data/lib/active_admin/base_controller/authorization.rb +2 -2
  15. data/lib/active_admin/dependency.rb +0 -4
  16. data/lib/active_admin/engine.rb +1 -1
  17. data/lib/active_admin/filters/resource_extension.rb +4 -4
  18. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +1 -1
  19. data/lib/active_admin/orm/active_record/comments.rb +8 -8
  20. data/lib/active_admin/pundit_adapter.rb +0 -2
  21. data/lib/active_admin/resource/action_items.rb +2 -2
  22. data/lib/active_admin/version.rb +1 -1
  23. data/lib/active_admin/view_helpers/auto_link_helper.rb +1 -1
  24. data/lib/active_admin/views/index_as_table.rb +1 -1
  25. data/lib/active_admin/views/pages/base.rb +4 -3
  26. data/lib/active_admin/views/pages/index.rb +1 -1
  27. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +17 -0
  28. metadata +5 -44
  29. data/docs/.gitignore +0 -1
  30. data/docs/0-installation.md +0 -142
  31. data/docs/1-general-configuration.md +0 -224
  32. data/docs/10-custom-pages.md +0 -150
  33. data/docs/11-decorators.md +0 -70
  34. data/docs/12-arbre-components.md +0 -214
  35. data/docs/13-authorization-adapter.md +0 -285
  36. data/docs/14-gotchas.md +0 -138
  37. data/docs/2-resource-customization.md +0 -475
  38. data/docs/3-index-pages/custom-index.md +0 -35
  39. data/docs/3-index-pages/index-as-block.md +0 -19
  40. data/docs/3-index-pages/index-as-blog.md +0 -69
  41. data/docs/3-index-pages/index-as-grid.md +0 -27
  42. data/docs/3-index-pages/index-as-table.md +0 -234
  43. data/docs/3-index-pages.md +0 -328
  44. data/docs/4-csv-format.md +0 -74
  45. data/docs/5-forms.md +0 -238
  46. data/docs/6-show-pages.md +0 -93
  47. data/docs/7-sidebars.md +0 -75
  48. data/docs/8-custom-actions.md +0 -177
  49. data/docs/9-batch-actions.md +0 -237
  50. data/docs/CNAME +0 -1
  51. data/docs/Gemfile +0 -4
  52. data/docs/Gemfile.lock +0 -283
  53. data/docs/README.md +0 -24
  54. data/docs/_config.yml +0 -4
  55. data/docs/_includes/footer.html +0 -8
  56. data/docs/_includes/google-analytics.html +0 -16
  57. data/docs/_includes/head.html +0 -7
  58. data/docs/_includes/toc.html +0 -98
  59. data/docs/_includes/top-menu.html +0 -17
  60. data/docs/_layouts/default.html +0 -21
  61. data/docs/documentation.md +0 -60
  62. data/docs/images/activeadmin.png +0 -0
  63. data/docs/images/code-header.png +0 -0
  64. data/docs/images/divider.png +0 -0
  65. data/docs/images/features.png +0 -0
  66. data/docs/images/tidelift.svg +0 -14
  67. data/docs/index.html +0 -226
  68. data/docs/stylesheets/main.css +0 -1205
@@ -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.
data/docs/4-csv-format.md DELETED
@@ -1,74 +0,0 @@
1
- ---
2
- redirect_from: /docs/4-csv-format.html
3
- ---
4
-
5
- # Customizing the CSV format
6
-
7
- Active Admin provides CSV file downloads on the index screen for each Resource.
8
- By default it will render a CSV file with all the content columns of your
9
- registered model.
10
-
11
- Customizing the CSV format is as simple as customizing the index page.
12
-
13
- ```ruby
14
- ActiveAdmin.register Post do
15
- csv do
16
- column :title
17
- column(:author) { |post| post.author.full_name }
18
- column('bODY', humanize_name: false) # preserve case
19
- end
20
- end
21
- ```
22
-
23
- You can also set custom CSV settings for an individual resource:
24
-
25
- ```ruby
26
- ActiveAdmin.register Post do
27
- csv force_quotes: true, col_sep: ';', column_names: false do
28
- column :title
29
- column(:author) { |post| post.author.full_name }
30
- end
31
- end
32
- ```
33
-
34
- Or system-wide:
35
-
36
- ```ruby
37
- # config/initializers/active_admin.rb
38
-
39
- # Set the CSV builder separator
40
- config.csv_options = { col_sep: ';' }
41
-
42
- # Force the use of quotes
43
- config.csv_options = { force_quotes: true }
44
- ```
45
-
46
- You can customize the filename by overriding `csv_filename` in the controller block.
47
-
48
- ```ruby
49
- ActiveAdmin.register User do
50
- controller do
51
- def csv_filename
52
- 'User Details.csv'
53
- end
54
- end
55
- end
56
- ```
57
-
58
- ## Streaming
59
-
60
- By default Active Admin streams the CSV response to your browser as it's generated.
61
- This is good because it prevents request timeouts, for example the infamous H12
62
- error on Heroku.
63
-
64
- However if an exception occurs while generating the CSV, the request will eventually
65
- time out, with the last line containing the exception message. CSV streaming is
66
- disabled in development to help debug these exceptions. That lets you use tools like
67
- better_errors and web-console to debug the issue. If you want to customize the
68
- environments where CSV streaming is disabled, you can change this setting:
69
-
70
- ```ruby
71
- # config/initializers/active_admin.rb
72
-
73
- config.disable_streaming_in = ['development', 'staging']
74
- ```