datatable_utils 0.0.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f3323148ed37fcadf255ce89cf9962f1ac48e0d8
4
+ data.tar.gz: 9d16b189ce6a2c512f59a84ca1786c09c3b17516
5
+ SHA512:
6
+ metadata.gz: 6ac4b860f001ff5338c082eea3542c370358ff08cff6e82b54d758391f34f0858933fd200c6084045fe9f7f527a9284ecf93ddefb82752f9c53874d90c68dee7
7
+ data.tar.gz: 2e1cc1e667c3fcfdbc41cffa0d9300b9f8d68c443c9f69f56cbb09e2b32ff99027733b3d17936ae529a911d84e0f3a6d4f64680c25cb5522761fa7867e21baf5
@@ -0,0 +1,5 @@
1
+ Based on http://railscasts.com/episodes/340-datatables
2
+
3
+ Common methods separated into module, and placed into this gem.
4
+
5
+ TODO: usage documentation.
@@ -0,0 +1,95 @@
1
+ module DatatableUtils
2
+ def self.included(base)
3
+ base.class_eval do
4
+ delegate :params, :h, :l, :link_to, to: :@view
5
+ end
6
+ end
7
+
8
+ def initialize(view, collection, controller = nil)
9
+ @view = view
10
+ @collection = collection
11
+ @controller = controller
12
+ end
13
+
14
+ def as_json(options = {})
15
+ {
16
+ sEcho: params[:sEcho].to_i,
17
+ iTotalRecords: records_count,
18
+ iTotalDisplayRecords: (paginate? ? cached_collection.total_entries : records_count),
19
+ aaData: data
20
+ }
21
+ end
22
+
23
+ private
24
+
25
+ def data
26
+ cached_collection.map do |objekt|
27
+ data_proc.call objekt
28
+ end
29
+ end
30
+
31
+ def cached_collection
32
+ @cached_collection ||= fetch_collection
33
+ end
34
+
35
+ def order_default
36
+ ''
37
+ end
38
+
39
+ def fetch_collection
40
+ collection = @collection.where(columns_search).order(sort)
41
+
42
+ if paginate?
43
+ collection = collection.page(page).per_page(per_page)
44
+ end
45
+
46
+ if params[:search].present? and params[:search][:value].present?
47
+ collection = collection.search(params[:search][:value])
48
+ end
49
+ collection
50
+ end
51
+
52
+ def page
53
+ params[:start].to_i/per_page + 1
54
+ end
55
+
56
+ def per_page
57
+ params[:length].to_i > 0 ? params[:length].to_i : 10
58
+ end
59
+
60
+ def paginate?
61
+ params[:length].to_i > 0
62
+ end
63
+
64
+ def records_count
65
+ @records_count ||= @collection.count
66
+ end
67
+
68
+ def sort
69
+ if params[:order]
70
+ params[:order].each_value.map do |order|
71
+ "#{columns[order['column'].to_i]} #{order['dir']}"
72
+ end.join(', ')
73
+ else
74
+ order_default
75
+ end
76
+ end
77
+
78
+ def columns_search
79
+ params[:columns].select{|_, v| v['search']['value'].present?}.each.map do |i, param|
80
+ "#{columns_for_search[i.to_i]} ILIKE '%#{param['search']['value']}%'"
81
+ end.join(' AND ') if params[:columns]
82
+ end
83
+
84
+ def condition_map
85
+ end
86
+
87
+ def columns
88
+ condition_map ? self.class::COLUMNS.filter(condition_map) : self.class::COLUMNS
89
+ end
90
+
91
+ def columns_for_search
92
+ condition_map ? self.class::COLUMNS_FOR_SEARCH.filter(condition_map) :
93
+ self.class::COLUMNS_FOR_SEARCH
94
+ end
95
+ end
@@ -0,0 +1,5 @@
1
+ class Array
2
+ def filter(matrix)
3
+ self.each_with_index.map {|item, i| item if matrix[i]}.compact
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ module DatatableUtils
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,62 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: datatable_utils
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - denispeplin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: Module for including into server-side datatables class
28
+ email:
29
+ - denis.peplin@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - README.md
35
+ - lib/datatable_utils.rb
36
+ - lib/datatable_utils/array.rb
37
+ - lib/datatable_utils/version.rb
38
+ homepage: https://github.com/denispeplin/datatable_utils
39
+ licenses:
40
+ - MIT
41
+ metadata: {}
42
+ post_install_message:
43
+ rdoc_options: []
44
+ require_paths:
45
+ - lib
46
+ required_ruby_version: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: '0'
51
+ required_rubygems_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ requirements: []
57
+ rubyforge_project:
58
+ rubygems_version: 2.4.2
59
+ signing_key:
60
+ specification_version: 4
61
+ summary: Utilites for server-side datatables
62
+ test_files: []