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.
@@ -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