ucb_rails 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/app/controllers/ucb_rails/admin/users_controller.rb +2 -1
- data/app/datatables/ucb_rails/base_datatable.rb +115 -0
- data/app/datatables/ucb_rails/users_datatable.rb +32 -0
- data/app/helpers/ucb_rails/renderer/ldap_person_search_result_link.rb +8 -2
- data/app/views/ucb_rails/admin/users/_user.html.haml +1 -0
- data/app/views/ucb_rails/admin/users/index.html.haml +2 -20
- data/lib/generators/ucb_rails/templates/app/assets/javascripts/{lps.js → ucb_rails/lps.js} +0 -0
- data/lib/generators/ucb_rails/templates/app/assets/javascripts/{lps_typeahead.js → ucb_rails/lps_typeahead.js} +0 -0
- data/lib/generators/ucb_rails/templates/app/assets/javascripts/{typeahead.js → ucb_rails/typeahead.js} +0 -0
- data/lib/generators/ucb_rails/templates/app/assets/javascripts/ucb_rails/users_datatable.js +26 -0
- data/lib/ucb_rails.rb +1 -0
- data/lib/ucb_rails/version.rb +1 -1
- metadata +23 -4
@@ -1,10 +1,11 @@
|
|
1
1
|
class UcbRails::Admin::UsersController < UcbRails::Admin::BaseController
|
2
2
|
before_filter :find_user, :only => [:edit, :update, :destroy]
|
3
|
+
respond_to :html, :js
|
3
4
|
|
4
5
|
def index
|
5
6
|
respond_to do |format|
|
6
7
|
format.html { @users = UcbRails::User.all }
|
7
|
-
|
8
|
+
format.json { render json: UcbRails::UsersDatatable.new(view_context) }
|
8
9
|
end
|
9
10
|
end
|
10
11
|
|
@@ -0,0 +1,115 @@
|
|
1
|
+
# Base class for server-side processing for datatable.js
|
2
|
+
#
|
3
|
+
# Inspired by http://railscasts.com/episodes/340-datatables
|
4
|
+
#
|
5
|
+
# Documentation on datatable.js parameters: http://datatables.net/usage/server-side
|
6
|
+
#
|
7
|
+
# class MyUsersController < BaseController
|
8
|
+
#
|
9
|
+
# def index
|
10
|
+
# respond_to do |format|
|
11
|
+
# format.html
|
12
|
+
# format.json { render json: MyUsersDatatable.new(view_context) }
|
13
|
+
# end
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
# class MyUserDatatable < BaseDatatable
|
19
|
+
#
|
20
|
+
# private
|
21
|
+
#
|
22
|
+
# def default_scope
|
23
|
+
# User
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
# def column_names
|
27
|
+
# @column_names ||= %w[first_name last_name]
|
28
|
+
# end
|
29
|
+
#
|
30
|
+
# # Must return valid argument(s) to ActiveRecord::Relation#where()
|
31
|
+
# # (Won't be called if _search_term_ is blank)
|
32
|
+
# def search(search_term)
|
33
|
+
# where("first_name like :search or last_name like :search", search: "#{search_term}%")
|
34
|
+
# end
|
35
|
+
#
|
36
|
+
# def record_to_data(user)
|
37
|
+
# [
|
38
|
+
# h(user.first_name),
|
39
|
+
# h(user.last_name),
|
40
|
+
# link_to("Edit", edit_admin_user_path(user), :id => dom_id(user)),
|
41
|
+
# ]
|
42
|
+
# end
|
43
|
+
#
|
44
|
+
# end
|
45
|
+
#
|
46
|
+
class UcbRails::BaseDatatable
|
47
|
+
|
48
|
+
def initialize(view)
|
49
|
+
@view = view
|
50
|
+
end
|
51
|
+
|
52
|
+
# Data structure required by datatable.js server calls
|
53
|
+
def as_json(options = {})
|
54
|
+
{
|
55
|
+
sEcho: params[:sEcho].to_i,
|
56
|
+
iTotalRecords: default_scope.count,
|
57
|
+
iTotalDisplayRecords: records.total_count,
|
58
|
+
aaData: data
|
59
|
+
}
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
# Returns Array of Array.
|
65
|
+
def data
|
66
|
+
@data ||= records.map { |record| record_to_data(record) }
|
67
|
+
end
|
68
|
+
|
69
|
+
# Returns ActiveRecord::Relation
|
70
|
+
def records
|
71
|
+
@records ||= default_scope
|
72
|
+
.where(base_search)
|
73
|
+
.order(order)
|
74
|
+
.page(page)
|
75
|
+
.per(per)
|
76
|
+
end
|
77
|
+
|
78
|
+
def base_search
|
79
|
+
search_term = params[:sSearch]
|
80
|
+
|
81
|
+
if search_term.present?
|
82
|
+
search(search_term)
|
83
|
+
else
|
84
|
+
{}
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def per
|
89
|
+
params[:iDisplayLength].to_i > 0 ? params[:iDisplayLength].to_i : 10
|
90
|
+
end
|
91
|
+
|
92
|
+
def page
|
93
|
+
params[:iDisplayStart].to_i/per + 1
|
94
|
+
end
|
95
|
+
|
96
|
+
def order
|
97
|
+
order_clauses.join(', ')
|
98
|
+
end
|
99
|
+
|
100
|
+
def order_clauses
|
101
|
+
(0...params['iSortingCols'].to_i).map { |i| order_clause(i) }
|
102
|
+
end
|
103
|
+
|
104
|
+
def order_clause(i)
|
105
|
+
column_key = "iSortCol_#{i}"
|
106
|
+
direction_key = "sSortDir_#{i}"
|
107
|
+
"#{column_names[params[column_key].to_i]} #{params[direction_key]}"
|
108
|
+
end
|
109
|
+
|
110
|
+
# Delegate unknown methods to the view. These are mostly standard View Helper methods.
|
111
|
+
def method_missing(*args, &block)
|
112
|
+
@view.send(*args, &block)
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class UcbRails::UsersDatatable < UcbRails::BaseDatatable
|
2
|
+
|
3
|
+
private
|
4
|
+
|
5
|
+
def default_scope
|
6
|
+
UcbRails::User
|
7
|
+
end
|
8
|
+
|
9
|
+
def column_names
|
10
|
+
@column_names ||= %w[admin inactive first_name last_name email phone last_request_at uid]
|
11
|
+
end
|
12
|
+
|
13
|
+
def search(search_term)
|
14
|
+
["first_name like :search or last_name like :search", search: "#{search_term}%"]
|
15
|
+
end
|
16
|
+
|
17
|
+
def record_to_data(user)
|
18
|
+
[
|
19
|
+
bln(user.admin),
|
20
|
+
bln(user.inactive),
|
21
|
+
h(user.first_name),
|
22
|
+
h(user.last_name),
|
23
|
+
h(user.email),
|
24
|
+
h(user.phone),
|
25
|
+
h(user.last_request_at),
|
26
|
+
h(user.uid),
|
27
|
+
link_to("Edit", edit_ucb_rails_admin_user_path(user), :id => dom_id(user)),
|
28
|
+
link_to('Delete', ucb_rails_admin_user_path(user), :method => :delete, :confirm => 'Are you sure?'),
|
29
|
+
]
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -43,8 +43,14 @@ module UcbRails
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def classes
|
46
|
-
|
47
|
-
|
46
|
+
['result-link', params['result-link-class'].presence, default_class].select(&:presence)
|
47
|
+
end
|
48
|
+
|
49
|
+
# default class if no url, no result-link-class
|
50
|
+
def default_class
|
51
|
+
return nil if url_param.present?
|
52
|
+
return nil if params['result-link-class'].present?
|
53
|
+
'result-link-default'
|
48
54
|
end
|
49
55
|
|
50
56
|
def item_url
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
%p= link_to_new_user
|
4
4
|
|
5
|
-
= ucbr_table_tag UcbRails::User do
|
5
|
+
= ucbr_table_tag UcbRails::User, data: {url: ucb_rails_admin_users_path(format: "json")} do
|
6
6
|
%thead
|
7
7
|
%tr
|
8
8
|
%th.min Admin?
|
@@ -16,25 +16,7 @@
|
|
16
16
|
%th.min Edit
|
17
17
|
%th.min Delete
|
18
18
|
%tbody.highlight
|
19
|
-
|
19
|
+
=# render partial: 'ucb_rails/admin/users/user', collection: @users
|
20
20
|
|
21
21
|
= render :partial => 'ucb_rails/lps/modal'
|
22
|
-
|
23
|
-
:javascript
|
24
|
-
$('#ucb_rails_users').dataTable({
|
25
|
-
"sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
|
26
|
-
"sPaginationType": "bootstrap",
|
27
|
-
"bStateSave": true,
|
28
|
-
"iDisplayLength": 20,
|
29
|
-
"aLengthMenu": [[10, 20, 50, -1], [10, 20, 50, 'All']],
|
30
|
-
"aaSorting": [[ 5, "desc" ]],
|
31
|
-
"aoColumnDefs": [
|
32
|
-
{ "aDataSort": [ 0, 2, 3 ], "aTargets": [ 0 ] }, // admin
|
33
|
-
{ "aDataSort": [ 1, 2, 3 ], "aTargets": [ 0 ] }, // active
|
34
|
-
{ "aDataSort": [ 1, 2 ], "aTargets": [ 2 ] }, // first name
|
35
|
-
{ "aDataSort": [ 2, 1], "aTargets": [ 3 ] }, // last name
|
36
|
-
{ "bSortable": false, "aTargets": [ 8 ] }, // edit
|
37
|
-
{ "bSortable": false, "aTargets": [ 9 ] }, // delete
|
38
|
-
]
|
39
|
-
});
|
40
22
|
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,26 @@
|
|
1
|
+
$(function() {
|
2
|
+
|
3
|
+
$('#ucb_rails_users').dataTable({
|
4
|
+
"sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
|
5
|
+
"sPaginationType": "bootstrap",
|
6
|
+
"bProcessing": true,
|
7
|
+
"bServerSide": true,
|
8
|
+
"sAjaxSource": $('#ucb_rails_users').data('url'),
|
9
|
+
"bStateSave": true,
|
10
|
+
"iDisplayLength": 20,
|
11
|
+
"oLanguage": {
|
12
|
+
"sSearch": "First or Last Name starts with:"
|
13
|
+
},
|
14
|
+
"aLengthMenu": [[10, 20, 50, -1], [10, 20, 50, 'All']],
|
15
|
+
"aaSorting": [[ 5, "desc" ]],
|
16
|
+
"aoColumnDefs": [
|
17
|
+
{ "aDataSort": [ 0, 2, 3 ], "aTargets": [ 0 ] }, // admin
|
18
|
+
{ "aDataSort": [ 1, 2, 3 ], "aTargets": [ 0 ] }, // active
|
19
|
+
{ "aDataSort": [ 2, 3 ], "aTargets": [ 2 ] }, // first name
|
20
|
+
{ "aDataSort": [ 3, 2], "aTargets": [ 3 ] }, // last name
|
21
|
+
{ "bSortable": false, "aTargets": [ 8 ] }, // edit
|
22
|
+
{ "bSortable": false, "aTargets": [ 9 ] }, // delete
|
23
|
+
]
|
24
|
+
}).fnSetFilteringDelay(250);
|
25
|
+
|
26
|
+
});
|
data/lib/ucb_rails.rb
CHANGED
data/lib/ucb_rails/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ucb_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -187,6 +187,22 @@ dependencies:
|
|
187
187
|
- - ~>
|
188
188
|
- !ruby/object:Gem::Version
|
189
189
|
version: 1.11.2
|
190
|
+
- !ruby/object:Gem::Dependency
|
191
|
+
name: kaminari
|
192
|
+
requirement: !ruby/object:Gem::Requirement
|
193
|
+
none: false
|
194
|
+
requirements:
|
195
|
+
- - ! '>='
|
196
|
+
- !ruby/object:Gem::Version
|
197
|
+
version: '0'
|
198
|
+
type: :runtime
|
199
|
+
prerelease: false
|
200
|
+
version_requirements: !ruby/object:Gem::Requirement
|
201
|
+
none: false
|
202
|
+
requirements:
|
203
|
+
- - ! '>='
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: '0'
|
190
206
|
- !ruby/object:Gem::Dependency
|
191
207
|
name: rails_environment
|
192
208
|
requirement: !ruby/object:Gem::Requirement
|
@@ -521,6 +537,8 @@ files:
|
|
521
537
|
- app/controllers/ucb_rails/home_controller.rb
|
522
538
|
- app/controllers/ucb_rails/ldap_person_search_controller.rb
|
523
539
|
- app/controllers/ucb_rails/sessions_controller.rb
|
540
|
+
- app/datatables/ucb_rails/base_datatable.rb
|
541
|
+
- app/datatables/ucb_rails/users_datatable.rb
|
524
542
|
- app/helpers/ucb_rails/admin/users_helper.rb
|
525
543
|
- app/helpers/ucb_rails/extractable_helper.rb
|
526
544
|
- app/helpers/ucb_rails/icons_helper.rb
|
@@ -553,9 +571,10 @@ files:
|
|
553
571
|
- config/routes.rb
|
554
572
|
- lib/generators/ucb_rails/install_generator.rb
|
555
573
|
- lib/generators/ucb_rails/templates/app/assets/javascripts/application.js
|
556
|
-
- lib/generators/ucb_rails/templates/app/assets/javascripts/lps.js
|
557
|
-
- lib/generators/ucb_rails/templates/app/assets/javascripts/lps_typeahead.js
|
558
|
-
- lib/generators/ucb_rails/templates/app/assets/javascripts/typeahead.js
|
574
|
+
- lib/generators/ucb_rails/templates/app/assets/javascripts/ucb_rails/lps.js
|
575
|
+
- lib/generators/ucb_rails/templates/app/assets/javascripts/ucb_rails/lps_typeahead.js
|
576
|
+
- lib/generators/ucb_rails/templates/app/assets/javascripts/ucb_rails/typeahead.js
|
577
|
+
- lib/generators/ucb_rails/templates/app/assets/javascripts/ucb_rails/users_datatable.js
|
559
578
|
- lib/generators/ucb_rails/templates/app/assets/stylesheets/application.css
|
560
579
|
- lib/generators/ucb_rails/templates/app/assets/stylesheets/bootstrap_and_overrides.css.scss
|
561
580
|
- lib/generators/ucb_rails/templates/app/assets/stylesheets/ucb_rails.css.scss
|