active_data_tables 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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0968cb879414b94cfd6aa775d86af244de488dd8
4
+ data.tar.gz: 99ce42080efc06f1187ba24bf64c803470b9fcb1
5
+ SHA512:
6
+ metadata.gz: b2d5aa2cb9fdccb153f08967b5c947a2a795c098ba6e8b656c86c057f664ae69bd14e429f2014eb413567ea533cf24a456286b2e40e8ec6758822f487c2513c0
7
+ data.tar.gz: 776f7b50ffc5905b0744d370674cd4b3325ff7e4f0578cc540dafaf08d7be27028fffd5e9cf8cad56b4ad03d28ed6af7a9ec8a16a4c16360f74293d2306e0970
@@ -0,0 +1,97 @@
1
+ require 'jbuilder'
2
+
3
+ class ActiveDataTables
4
+
5
+ def initialize(query, params)
6
+ @query = query
7
+ @params = params
8
+ end
9
+
10
+ def execute
11
+ total = @query.count
12
+ filtered = total # don't currently support filtering records so this will be the same as the total
13
+
14
+ apply_paging
15
+ apply_ordering
16
+
17
+ DataTablesResult.new(@params[:draw].to_i, @query, total, filtered)
18
+ end
19
+
20
+ def self.find(query, params)
21
+ new(query, params).execute
22
+ end
23
+
24
+ class DataTablesResult
25
+
26
+ attr_accessor :data, :draw, :records_total, :records_filtered
27
+
28
+ def initialize(draw, data, records_total, records_filtered)
29
+ @draw = draw
30
+ @data = data
31
+ @records_total = records_total
32
+ @records_filtered = records_filtered
33
+ end
34
+
35
+ def to_json
36
+ data = @data.map do |a|
37
+ a.is_a?(OpenStruct) ? a.marshal_dump : a
38
+ end
39
+ Jbuilder.encode do |json|
40
+ json.draw @draw
41
+ json.recordsTotal @records_total
42
+ json.recordsFiltered @records_filtered
43
+ json.data data
44
+ end
45
+ end
46
+
47
+ end
48
+
49
+ private
50
+
51
+ def apply_paging
52
+ if @params[:start]
53
+ if @query.respond_to?(:offset)
54
+ @query = @query.offset(@params[:start])
55
+ else
56
+ @query = @query.drop(@params[:start].to_i)
57
+ end
58
+ end
59
+
60
+ if @params[:length]
61
+ if @query.respond_to?(:limit)
62
+ @query = @query.limit(@params[:length])
63
+ else
64
+ @query = @query.first(@params[:length].to_i)
65
+ end
66
+ end
67
+ end
68
+
69
+ def apply_ordering
70
+ order_instructions = @params[:order] || {}
71
+
72
+ columns = load_columns
73
+ order = {}
74
+ order_instructions.each_pair do |k, v|
75
+ column_index = v[:column]
76
+ column_name = columns[column_index.to_sym][:data]
77
+ order[column_name.to_sym] = v[:dir].to_sym
78
+ end
79
+
80
+ if @query.respond_to?(:reorder)
81
+ @query = @query.reorder(order)
82
+ else
83
+ @query = @query.sort do |row1, row2|
84
+ keys = order.map{ |key, direction|
85
+ val = direction == :desc ? -1 : 1
86
+ val * (row1[key] <=> row2[key])
87
+ }
88
+ keys.find { |x| x != 0 } || 0
89
+ end
90
+ end
91
+ end
92
+
93
+ def load_columns
94
+ @params[:columns] || {}
95
+ end
96
+
97
+ end
@@ -0,0 +1 @@
1
+ require_relative 'active_data_tables/active_data_tables'
metadata ADDED
@@ -0,0 +1,115 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: active_data_tables
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Luke Smith
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-10-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: jbuilder
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: activerecord
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: sqlite3
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: Server side processing for datatables.net
84
+ email: me@lukesmith.net
85
+ executables: []
86
+ extensions: []
87
+ extra_rdoc_files: []
88
+ files:
89
+ - lib/active_data_tables.rb
90
+ - lib/active_data_tables/active_data_tables.rb
91
+ homepage: http://rubygems.org/gems/active_data_tables
92
+ licenses:
93
+ - MIT
94
+ metadata: {}
95
+ post_install_message:
96
+ rdoc_options: []
97
+ require_paths:
98
+ - lib
99
+ required_ruby_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ required_rubygems_version: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ requirements: []
110
+ rubyforge_project:
111
+ rubygems_version: 2.4.6
112
+ signing_key:
113
+ specification_version: 4
114
+ summary: Server side processing for datatables.net
115
+ test_files: []