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.
@@ -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
- # format.json { render json: UsersDatatable.new(view_context) }
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
- extra_class = params['result-link-class'].presence || 'result-link-default'
47
- "result-link #{extra_class}"
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
@@ -1,3 +1,4 @@
1
+ / not used: see UcbRails::UsersDatatable
1
2
  %tr[user]
2
3
  = td_bln(user.admin)
3
4
  = td_bln(user.inactive)
@@ -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
- = render partial: 'ucb_rails/admin/users/user', collection: @users
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
 
@@ -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
@@ -3,6 +3,7 @@ require 'ucb_rails/log_tagger'
3
3
 
4
4
  require 'haml'
5
5
  require 'haml-rails'
6
+ require 'kaminari'
6
7
  require 'omniauth'
7
8
  require 'omniauth-cas'
8
9
  require 'sass-rails'
@@ -1,3 +1,3 @@
1
1
  module UcbRails
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
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.2
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