admini 0.1.1 → 0.1.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2951544c110448fa3e238ec1d2e06df1d3c22ca1
4
- data.tar.gz: 726e830aa6a0e8b7bcf64f28fe9c78c33830f0be
3
+ metadata.gz: b1ca246591999312d4fb645e07db0908545a3d0d
4
+ data.tar.gz: fea1ddd7562e51df56f487d21b5773df2bfca5e7
5
5
  SHA512:
6
- metadata.gz: fe48c9b92753655f75b136593ce5a38cec6b8a6026f130ebbef1f2fecb4be111511e31ecdcbb49cc606d4179dddb6038bc320a126df2a8e8a9ea1c1e166c5d9f
7
- data.tar.gz: 915b6a16f2266be298a44e5d1fa3ad933bccbdb147a9f0f8e6a5e020c37ecac74fda88f36bb4fbde36d562b78cb3d4ae5a04cb7b2b28ceebb823b10db2ecb2e7
6
+ metadata.gz: 6a0353dcbf993d93d98caac46c09d17313d1008093fe01a25a5416c548e0c4bc12b5d9d32a5ee2fa591a3956971307339780ff5bd044a61d1a4d1d602ebb0696
7
+ data.tar.gz: e06b9a436f94a80b041adeabbfaa1cd873f96aca71988111b9623224731b5f17c3634c567342188ad3294d3c41c9b6a3f6c95aa98ada4ae60f960db21b157704
data/README.md CHANGED
@@ -1,10 +1,48 @@
1
1
  # Admini
2
- Short description and motivation.
3
2
 
4
- ## Usage
5
- How to use my plugin.
3
+ [![Gem Version](https://badge.fury.io/rb/admini.svg)](https://badge.fury.io/rb/admini)
4
+
5
+ Admini is a minimal administration framework for Ruby on Rails application.
6
+
7
+ The core feature is just provides CRUD actions as Active Support's Concern module.
8
+ So you can implement administration page as usual.
9
+
10
+ Admini solves the same problem as [ActiveAdmin](https://github.com/activeadmin/activeadmin), [RailsAdmin](https://github.com/sferik/rails_admin) and [Administrate](https://github.com/thoughtbot/administrate).
11
+ Admini is the simplest framework, so you can create administration page according to the Rails way.
12
+
13
+ **Note**: Admini is still under development, and there may be breaking changes to the API.
14
+
15
+ ## Table of contents
16
+
17
+ - [Demo](#demo)
18
+ - [Installation](#installation)
19
+ - [Basic usage](#basic-usage)
20
+ - [Customization](#customization)
21
+ - [Customize attributes](#customize-attributes)
22
+ - [Customize rendering text](#customize-rendering-text)
23
+ - [Search items](#search-items)
24
+ - [Enum as select tag](#enum-as-select-tag)
25
+ - [Override CRUD actions](#override-crud-actions)
26
+ - [Authorize user](#authorize-user)
27
+ - [Use default theme](#use-default-theme)
28
+ - [Edit header menu](#edit-header-menu)
29
+ - [Override specify view](#override-specify-view)
30
+ - [Change namespace of form object](#change-namespace-of-form-object)
31
+ - [Change paginates per](#change-paginates-per)
32
+ - [ToDo](#todo)
33
+ - [Need help?](#need-help?)
34
+ - [Contributing](#contributing)
35
+ - [License](#license)
36
+
37
+ ## Demo
38
+
39
+ You can try an administration page built with Admini at following link.
40
+ The code of the demo can be found [here]().
41
+
42
+ - http://example.com
6
43
 
7
44
  ## Installation
45
+
8
46
  Add this line to your application's Gemfile:
9
47
 
10
48
  ```ruby
@@ -12,17 +50,302 @@ gem 'admini'
12
50
  ```
13
51
 
14
52
  And then execute:
53
+
15
54
  ```bash
16
55
  $ bundle
17
56
  ```
18
57
 
19
- Or install it yourself as:
20
- ```bash
21
- $ gem install admini
58
+ ## Basic usage
59
+
60
+ If the namespace of your administration page is `:admin`, you probably create `Admin::ApplicationController` like this:
61
+
62
+ ```ruby
63
+ class Admin::ApplicationController < ActionController::Base
64
+ protect_from_forgery with: :exception
65
+
66
+ # If you use Devise:
67
+ # before_action :authenticate_user!
68
+ end
69
+ ```
70
+
71
+ There's no code related to Admini.
72
+ You can implement as you like, such as an authentication.
73
+
74
+ Now everything is ready to create administration page.
75
+ For example, to create the page manages Post model, you have to do the following steps:
76
+
77
+ 1. Create `Admin::PostsController` and include `Admini::Resources`
78
+ 2. Add routing
79
+
80
+ The example codes is below:
81
+
82
+ ```ruby
83
+ class Admin::PostsController < Admin::ApplicationController
84
+ include Admini::Resources
85
+ end
86
+ ```
87
+
88
+ ```ruby
89
+ namespace :admin do
90
+ resources :posts
91
+ end
92
+ ```
93
+
94
+ That's it, and now you can take action `index`, `new`, `create`, `show`, `edit`, `update`, `destroy` the posts at `/admin/posts`.
95
+
96
+ ## Customization
97
+
98
+ ### Customize attributes
99
+
100
+ The items rendering on `index`, `new`, `show` and `edit` can customize using `#xxx_attributes`.
101
+ If you define following methods to controller, the items have changed:
102
+
103
+ - `#index_attributes`
104
+ - `#show_attributes` (default: `#index_attributes`)
105
+ - `#new_attributes`
106
+ - `#edit_attributes` (default: `#new_attributes`)
107
+
108
+ Examples:
109
+
110
+ ```ruby
111
+ class Admin::PostsController < Admin::ApplicationController
112
+ include Admini::Resources
113
+
114
+ private
115
+
116
+ def index_attributes
117
+ %i(id title status created_at)
118
+ end
119
+
120
+ def show_attributes
121
+ %i(id title status created_at content)
122
+ end
123
+
124
+ def new_attributes
125
+ %i(title status content)
126
+ end
127
+ end
128
+ ```
129
+
130
+ ### Customize rendering text
131
+
132
+ The items rendering text on `index` and `show` are also customizable as you like.
133
+ If you define `#render_xxx` on your controller, Admini renders text according to the method.
134
+
135
+ Here is an example that renders a title with link to post instead of just title.
136
+
137
+ ```ruby
138
+ class Admin::PostsController < Admin::ApplicationController
139
+ include Admini::Resources
140
+ include ActionView::Helpers::UrlHelper
141
+
142
+ private
143
+
144
+ def render_title(resource)
145
+ path = case resource.status
146
+ when 'draft'
147
+ preview_post_path(resource, token: resource.preview_token)
148
+ else
149
+ post_path(resource)
150
+ end
151
+ link_to resource.title, path
152
+ end
153
+ end
154
+ ```
155
+
156
+ In the same way, a method name to customize the `content` is `#render_content`, or `created_at` is `#render_created_at`.
157
+
158
+ ### Search items
159
+
160
+ If you want to enable the search form, you should just define `#search_attributes` on your controller.
161
+
162
+ Following examples enable the search form searched by `title` and `content`.
163
+
164
+ ```ruby
165
+ class Admin::PostsController < Admin::ApplicationController
166
+ include Admini::Resources
167
+
168
+ private
169
+
170
+ def search_attributes
171
+ %i(title content)
172
+ end
173
+ end
174
+ ```
175
+
176
+ ### Enum as select tag
177
+
178
+ Enum is treated as Integer by database, so enum form has created as text field by default.
179
+ If you want to show the form as select box, you should define `#enum_attributes`.
180
+
181
+ ```ruby
182
+ class Admin::PostsController < Admin::ApplicationController
183
+ include Admini::Resources
184
+
185
+ private
186
+
187
+ def enum_attributes
188
+ %i(status)
189
+ end
190
+ end
191
+ ```
192
+
193
+ ### Override CRUD actions
194
+
195
+ Often we want to override CRUD actions, especially `create` and `update`.
196
+
197
+ To do this, just define `#create` or `#update` on your controller.
198
+ If you want to delegate to `super` defined by Admini, you should call `#super` on the action.
199
+
200
+ ```ruby
201
+ class Admin::PostsController < Admin::ApplicationController
202
+ include Admini::Resources
203
+
204
+ def create
205
+ @resource.user = current_user
206
+ super
207
+ end
208
+ end
22
209
  ```
23
210
 
211
+ ### Authorize user
212
+
213
+ You can simply authorize user using [CanCanCan](https://github.com/CanCanCommunity/cancancan), [Pundit](https://github.com/elabs/pundit) or your own code.
214
+
215
+ When you define the following methods on your controller, Admini authorizes user with it, and raise `Admini::AuthorizationError` if user has not authorized.
216
+
217
+ - `#can_create?`
218
+ - `#can_read?`
219
+ - `#can_update?`
220
+ - `#can_delete?`
221
+
222
+ Examples using CanCanCan:
223
+
224
+ ```ruby
225
+ class Admin::PostsController < Admin::ApplicationController
226
+ include Admini::Resources
227
+
228
+ private
229
+
230
+ def can_create?
231
+ can? :create, Post
232
+ end
233
+ end
234
+ ```
235
+
236
+ Also you can define custom error handler.
237
+ This is realized by to define `#authorization_error` on your `Admin::ApplicationController`.
238
+
239
+ ```ruby
240
+ class Admin::ApplicationController < ActionController::Base
241
+ private
242
+
243
+ def authorization_error
244
+ puts 'Authorization error'
245
+ end
246
+ end
247
+ ```
248
+
249
+ ### Use default theme
250
+
251
+ Admini doesn't apply any styles to administration pages by default.
252
+ Because Admini should be minimal.
253
+ If you want to apply basic style created by Admini, you should require the stylesheet.
254
+
255
+ `app/assets/stylesheets/admini/application.css`:
256
+
257
+ ```css
258
+ /*
259
+ *= require admini/default
260
+ */
261
+ ```
262
+
263
+ Needless to say, you can write your own styles here as you like.
264
+
265
+ ### Edit header menu
266
+
267
+ Admini is minimal, so the links to pages will **not** added automatically.
268
+ The default view generated by Admini doesn't have any links [like this](https://github.com/kami-zh/admini/blob/master/app/views/admini/layouts/_header.html.erb).
269
+
270
+ However, you can override header menu by editing `app/views/admini/layouts/_header.html.erb`.
271
+
272
+ Examples:
273
+
274
+ ```html
275
+ <div class="header">
276
+ <div class="container">
277
+ <%= link_to 'Admin', admin_root_path, class: 'header-title' %>
278
+ <%= link_to 'Posts', admin_posts_path %>
279
+ <%= link_to 'Users', admin_users_path %>
280
+ <div class="right">
281
+ <%= link_to 'Logout', destroy_user_session_path, method: :delete %>
282
+ </div>
283
+ </div>
284
+ </div>
285
+ ```
286
+
287
+ ### Override specify view
288
+
289
+ The view has rendered with a [common views](https://github.com/kami-zh/admini/tree/master/app/views/admini).
290
+ If you want to implement original views, you should place your own views according to Rails convention.
291
+
292
+ For example, to customize the view of `admin/posts#show`, you should create `app/views/admin/posts/show.html.erb`.
293
+
294
+ ```html
295
+ <h1>admin/posts#show</h1>
296
+ ```
297
+
298
+ In the same way, you can override all views, including `application.html.erb`, `_header.html.erb`, `_nav.html.erb`.
299
+
300
+ ### Change namespace of form object
301
+
302
+ Admini sets `[:admin, @resource]` as the namespace of form object by default.
303
+ This is because generally we adopt `:admin` as administration page's namespace.
304
+
305
+ If your administration page has a different namespace like `:editor`, you should define `#resource_object` on your `Editor::ApplicationController`.
306
+
307
+ ```ruby
308
+ class Editor::ApplicationController < ActionController::Base
309
+ private
310
+
311
+ def resource_object
312
+ [:editor, @resource]
313
+ end
314
+ end
315
+ ```
316
+
317
+ ### Change paginates per
318
+
319
+ Admini depends on [Kaminari](https://github.com/amatsuda/kaminari) as paginater, and it paginates per `25` items.
320
+ You can override this number by `#paginates_per` method.
321
+
322
+ ```ruby
323
+ class Admin::ApplicationController < ActionController::Base
324
+ private
325
+
326
+ def paginates_per
327
+ 10
328
+ end
329
+ end
330
+ ```
331
+
332
+ ## ToDo
333
+
334
+ - [ ] Add spec
335
+ - [ ] Improve README (Because I'm not good at English :no_good:)
336
+
337
+ ## Need help?
338
+
339
+ Feel free to ask me in [Issues](https://github.com/kami-zh/admini/issues) or [author's twitter](https://twitter.com/kami_zh).
340
+
24
341
  ## Contributing
25
- Contribution directions go here.
342
+
343
+ 1. Fork it ( https://github.com/kami-zh/admini/fork )
344
+ 2. Create your feature branch (git checkout -b my-new-feature)
345
+ 3. Commit your changes (git commit -am 'Add some feature')
346
+ 4. Push to the branch (git push origin my-new-feature)
347
+ 5. Create a new Pull Request
26
348
 
27
349
  ## License
350
+
28
351
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
@@ -103,3 +103,7 @@ textarea {
103
103
  select {
104
104
  vertical-align: middle;
105
105
  }
106
+
107
+ .pagination {
108
+ margin-bottom: 20px;
109
+ }
@@ -1,9 +1,9 @@
1
1
  <div class="header">
2
2
  <div class="container">
3
- <%= link_to t('admini.header.title'), '#', class: 'header-title' %>
4
- <%= link_to t('admini.header.menu'), '#' %>
3
+ <%= link_to t('admini.title'), '#', class: 'header-title' %>
4
+ <%= link_to t('admini.menu'), '#' %>
5
5
  <div class="right">
6
- <%= link_to t('admini.header.logout'), '#' %>
6
+ <%= link_to t('admini.logout'), '#' %>
7
7
  </div>
8
8
  </div>
9
9
  </div>
@@ -1 +1 @@
1
- <% if enable_action?(:destroy) && can_delete? %><%= link_to t('admini.link.delete'), { action: :destroy, id: resource.id }, method: :delete, data: { confirm: t('admini.confirm') } %><% end %>
1
+ <% if enable_action?(:destroy) && can_delete? %><%= link_to t('admini.action.delete'), { action: :destroy, id: resource.id }, method: :delete, data: { confirm: t('admini.confirm') } %><% end %>
@@ -1 +1 @@
1
- <% if enable_action?(:update) && can_update? %><%= link_to t('admini.link.edit'), { action: :edit, id: resource.id } %><% end %>
1
+ <% if enable_action?(:update) && can_update? %><%= link_to t('admini.action.edit'), { action: :edit, id: resource.id } %><% end %>
@@ -1 +1 @@
1
- <% if enable_action?(:index) && can_read? %><%= link_to t('admini.link.index'), action: :index %><% end %>
1
+ <% if enable_action?(:index) && can_read? %><%= link_to t('admini.action.index'), action: :index %><% end %>
@@ -1 +1 @@
1
- <% if enable_action?(:new) && can_create? %><%= link_to t('admini.link.new'), action: :new %><% end %>
1
+ <% if enable_action?(:new) && can_create? %><%= link_to t('admini.action.new'), action: :new %><% end %>
@@ -1 +1 @@
1
- <% if enable_action?(:show) %><%= link_to t('admini.link.show'), { action: :show, id: resource.id } %><% end %>
1
+ <% if enable_action?(:show) %><%= link_to t('admini.action.show'), { action: :show, id: resource.id } %><% end %>
@@ -1,14 +1,13 @@
1
1
  en:
2
2
  admini:
3
- header:
4
- title: Admin
5
- menu: Menu
6
- logout: Logout
7
- link:
3
+ confirm: Are you sure?
4
+ logout: Logout
5
+ menu: Menu
6
+ search: Search
7
+ title: Admin
8
+ action:
8
9
  index: Index
9
10
  new: New
10
11
  edit: Edit
11
12
  show: Show
12
13
  delete: Delete
13
- confirm: Are you sure?
14
- search: Search
@@ -1,14 +1,13 @@
1
1
  ja:
2
2
  admini:
3
- header:
4
- title: 管理画面
5
- menu: メニュー
6
- logout: ログアウト
7
- link:
3
+ confirm: 本当によろしいですか?
4
+ logout: ログアウト
5
+ menu: メニュー
6
+ search: 検索する
7
+ title: 管理画面
8
+ action:
8
9
  index: 一覧
9
10
  new: 作成
10
11
  edit: 編集
11
12
  show: 表示
12
13
  delete: 削除
13
- confirm: 本当によろしいですか?
14
- search: 検索する
@@ -1,3 +1,3 @@
1
1
  module Admini
2
- VERSION = '0.1.1'
2
+ VERSION = '0.1.2'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: admini
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - kami
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-30 00:00:00.000000000 Z
11
+ date: 2016-10-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack