ucb_rails 0.0.2 → 0.0.3
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.
- 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
|