grid_table 1.3 → 1.4
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 +4 -4
- data/.rubocop.yml +42 -0
- data/Gemfile +2 -1
- data/Rakefile +1 -2
- data/grid_table.gemspec +11 -10
- data/lib/grid_table/control.rb +24 -30
- data/lib/grid_table/controller.rb +1 -1
- data/lib/grid_table/table.rb +14 -16
- data/lib/grid_table/version.rb +1 -1
- data/lib/grid_table.rb +5 -5
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e0f68c331f3af5023c4259e67dd20e1a54e5679
|
4
|
+
data.tar.gz: 2cf32700cc72c621f88e8d0fb94f76094c638021
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a164408606bd8da871a3e434b5896bad3aba26cb666df8e19a22ef0215b6ee1dc40c7f892083f55f87805f4b6940192e87c5dd9a3b8dff849c1f57700ac87fca
|
7
|
+
data.tar.gz: 12f2edc524f24d218b0ec301a1d59de22853c7a87c146156491b2c593547433573fea095507d05cc49c6c581f7588cd22bd5352e92cac2afeb3c68acc4a07523
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
AllCops:
|
2
|
+
Include:
|
3
|
+
- Rakefile
|
4
|
+
- '**/Gemfile'
|
5
|
+
- config.ru
|
6
|
+
- lib/**/*.rake
|
7
|
+
Exclude:
|
8
|
+
- db/schema.rb
|
9
|
+
- spec/*
|
10
|
+
- test/*
|
11
|
+
|
12
|
+
Metrics/AbcSize:
|
13
|
+
Enabled: false
|
14
|
+
|
15
|
+
# Offense count: 1
|
16
|
+
# Configuration parameters: CountComments.
|
17
|
+
Metrics/ClassLength:
|
18
|
+
Enabled: false
|
19
|
+
|
20
|
+
# Offense count: 16
|
21
|
+
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
|
22
|
+
# URISchemes: http, https
|
23
|
+
Metrics/LineLength:
|
24
|
+
Enabled: false
|
25
|
+
|
26
|
+
# Offense count: 4
|
27
|
+
# Configuration parameters: CountComments.
|
28
|
+
Metrics/MethodLength:
|
29
|
+
Enabled: false
|
30
|
+
|
31
|
+
# Offense count: 2
|
32
|
+
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
33
|
+
# SupportedStyles: nested, compact
|
34
|
+
Style/ClassAndModuleChildren:
|
35
|
+
Enabled: false
|
36
|
+
|
37
|
+
# Offense count: 4
|
38
|
+
Style/Documentation:
|
39
|
+
Enabled: false
|
40
|
+
|
41
|
+
Style/FrozenStringLiteralComment:
|
42
|
+
Enabled: false
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -1,2 +1 @@
|
|
1
|
-
require
|
2
|
-
|
1
|
+
require 'bundler/gem_tasks'
|
data/grid_table.gemspec
CHANGED
@@ -1,23 +1,24 @@
|
|
1
1
|
# coding: utf-8
|
2
|
+
|
2
3
|
lib = File.expand_path('../lib', __FILE__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
5
|
require 'grid_table/version'
|
5
6
|
|
6
7
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
8
|
+
spec.name = 'grid_table'
|
8
9
|
spec.version = GridTable::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
11
|
-
spec.summary =
|
12
|
-
spec.description =
|
13
|
-
spec.homepage =
|
14
|
-
spec.license =
|
10
|
+
spec.authors = ['Jon Principe', 'Mike Raimondi']
|
11
|
+
spec.email = ['jonathan.principe@gmail.com']
|
12
|
+
spec.summary = 'Utility for powerful HTML Tables'
|
13
|
+
spec.description = 'Library to help manage powerful HTML Tables through the Model, View and Controller.'
|
14
|
+
spec.homepage = 'http://github.com/jprincipe/grid_table'
|
15
|
+
spec.license = 'MIT'
|
15
16
|
|
16
17
|
spec.files = `git ls-files -z`.split("\x0")
|
17
18
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
19
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
-
spec.require_paths = [
|
20
|
+
spec.require_paths = ['lib']
|
20
21
|
|
21
|
-
spec.add_development_dependency
|
22
|
-
spec.add_development_dependency
|
22
|
+
spec.add_development_dependency 'bundler', '~> 1.6'
|
23
|
+
spec.add_development_dependency 'rake'
|
23
24
|
end
|
data/lib/grid_table/control.rb
CHANGED
@@ -15,10 +15,8 @@ class GridTable::Control
|
|
15
15
|
# person = Person.new(name: 'bob', age: '18')
|
16
16
|
# person.name # => "bob"
|
17
17
|
# person.age # => "18"
|
18
|
-
def initialize(params={})
|
19
|
-
params
|
20
|
-
self.public_send("#{attr}=", value)
|
21
|
-
end if params
|
18
|
+
def initialize(params = {})
|
19
|
+
params&.each { |attr, value| public_send("#{attr}=", value) }
|
22
20
|
|
23
21
|
super()
|
24
22
|
end
|
@@ -36,36 +34,32 @@ class GridTable::Control
|
|
36
34
|
false
|
37
35
|
end
|
38
36
|
|
39
|
-
attr_writer :model, :attribute, :source, :source_class, :source_column, :filter, :polymorphic
|
37
|
+
attr_writer :model, :attribute, :source, :source_class, :source_column, :source_alias, :filter, :polymorphic
|
40
38
|
|
41
39
|
def filter(param_filter_value, records)
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
}
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
else
|
58
|
-
arel_query = arel_query.or(strategy_map[strategy].call(klass.arel_table[column]))
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
arel_query ||= strategy_map[strategy].call(source_table[column])
|
63
|
-
prepared_records(records).where(arel_query)
|
40
|
+
return if @filter.nil?
|
41
|
+
|
42
|
+
arel_query = nil
|
43
|
+
strategy_map = {
|
44
|
+
exact_match: ->(col) { col.eq(param_filter_value) },
|
45
|
+
prefix: ->(col) { col.matches("#{param_filter_value}%") },
|
46
|
+
suffix: ->(col) { col.matches("%#{param_filter_value}") },
|
47
|
+
fuzzy: ->(col) { col.matches("%#{param_filter_value}%") },
|
48
|
+
array: ->(_col) { "#{column} @> ARRAY[#{[param_filter_value].flatten.join(',')}]" },
|
49
|
+
date_range: ->(_col) { "#{source_table.name}.#{column} BETWEEN #{param_filter_value}" }
|
50
|
+
}
|
51
|
+
|
52
|
+
polymorphic_models.each_with_index do |klass, i|
|
53
|
+
# TODO: implement array filtering
|
54
|
+
arel_query = i.zero? ? strategy_map[strategy].call(klass.arel_table[column]) : arel_query.or(strategy_map[strategy].call(klass.arel_table[column]))
|
64
55
|
end
|
56
|
+
|
57
|
+
arel_query ||= strategy_map[strategy].call(source_table[column])
|
58
|
+
prepared_records(records).where(arel_query)
|
65
59
|
end
|
66
60
|
|
67
61
|
def sort(param_sort_order, records)
|
68
|
-
sort_order = %w[asc
|
62
|
+
sort_order = %w[asc desc].include?(param_sort_order) ? param_sort_order : 'asc'
|
69
63
|
|
70
64
|
if @polymorphic
|
71
65
|
models = polymorphic_models
|
@@ -119,7 +113,7 @@ class GridTable::Control
|
|
119
113
|
end
|
120
114
|
|
121
115
|
def table_with_column
|
122
|
-
"#{source_table.name}.#{column}"
|
116
|
+
@source_alias || "#{source_table.name}.#{column}"
|
123
117
|
end
|
124
118
|
|
125
119
|
def model_fk
|
@@ -132,7 +126,7 @@ class GridTable::Control
|
|
132
126
|
models.each_with_index do |klass, i|
|
133
127
|
if models.length == 1
|
134
128
|
sql = "#{klass.table_name}.#{column}"
|
135
|
-
elsif i
|
129
|
+
elsif i.zero?
|
136
130
|
sql << "(CASE WHEN #{klass.table_name}.#{column} IS NOT NULL THEN #{klass.table_name}.#{column}"
|
137
131
|
elsif i == models.length - 1
|
138
132
|
sql << " ELSE #{klass.table_name}.#{column} END)"
|
data/lib/grid_table/table.rb
CHANGED
@@ -7,15 +7,15 @@ class GridTable::Table
|
|
7
7
|
|
8
8
|
def add_control(model, attribute, options)
|
9
9
|
@controls << GridTable::Control.new(
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
10
|
+
model: model.name.underscore.to_sym,
|
11
|
+
attribute: attribute,
|
12
|
+
source: options[:source],
|
13
|
+
source_class: options[:source_class],
|
14
|
+
source_column: options[:source_column],
|
15
|
+
source_alias: options[:source_alias],
|
16
|
+
filter: options[:filter],
|
17
|
+
polymorphic: options[:polymorphic]
|
18
|
+
)
|
19
19
|
end
|
20
20
|
|
21
21
|
def populate!(resource, params)
|
@@ -26,8 +26,8 @@ class GridTable::Table
|
|
26
26
|
@records = resource
|
27
27
|
|
28
28
|
filter! unless params[:skip_filtering]
|
29
|
+
@total_rows = @records.length
|
29
30
|
sort! unless params[:skip_sorting]
|
30
|
-
@total_rows = @records.size
|
31
31
|
page! unless params[:skip_paging]
|
32
32
|
|
33
33
|
@records
|
@@ -42,7 +42,7 @@ class GridTable::Table
|
|
42
42
|
private
|
43
43
|
|
44
44
|
def common_strong_params
|
45
|
-
[
|
45
|
+
%w[page page_size sort sort_order]
|
46
46
|
end
|
47
47
|
|
48
48
|
def page
|
@@ -54,7 +54,8 @@ class GridTable::Table
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def filter!
|
57
|
-
@params.
|
57
|
+
filter_params = @params.reject { |k| common_strong_params.include?(k) }
|
58
|
+
filter_params.each do |attribute, attribute_value|
|
58
59
|
control = GridTable::Control.find_by_param(attribute, @controls)
|
59
60
|
@records = control.filter(attribute_value, @records) if control.present?
|
60
61
|
end
|
@@ -63,13 +64,10 @@ class GridTable::Table
|
|
63
64
|
def sort!
|
64
65
|
control = GridTable::Control.find_by_param(@params[:sort], @controls)
|
65
66
|
|
66
|
-
if control.present?
|
67
|
-
@records = control.sort(@params[:sort_order], records)
|
68
|
-
end
|
67
|
+
@records = control.sort(@params[:sort_order], records) if control.present?
|
69
68
|
end
|
70
69
|
|
71
70
|
def page!
|
72
71
|
@records = @records.offset(page * page_size).limit(page_size)
|
73
72
|
end
|
74
|
-
|
75
73
|
end
|
data/lib/grid_table/version.rb
CHANGED
data/lib/grid_table.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
1
|
+
require 'grid_table/version'
|
2
|
+
require 'grid_table/control'
|
3
|
+
require 'grid_table/table'
|
4
|
+
require 'grid_table/controller'
|
5
|
+
require 'grid_table/model'
|
6
6
|
|
7
7
|
module GridTable
|
8
8
|
class Engine < ::Rails::Engine
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grid_table
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '1.
|
4
|
+
version: '1.4'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jon Principe
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-08-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -42,12 +42,13 @@ dependencies:
|
|
42
42
|
description: Library to help manage powerful HTML Tables through the Model, View and
|
43
43
|
Controller.
|
44
44
|
email:
|
45
|
-
-
|
45
|
+
- jonathan.principe@gmail.com
|
46
46
|
executables: []
|
47
47
|
extensions: []
|
48
48
|
extra_rdoc_files: []
|
49
49
|
files:
|
50
50
|
- ".gitignore"
|
51
|
+
- ".rubocop.yml"
|
51
52
|
- Gemfile
|
52
53
|
- LICENSE.txt
|
53
54
|
- README.md
|
@@ -80,7 +81,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
80
81
|
version: '0'
|
81
82
|
requirements: []
|
82
83
|
rubyforge_project:
|
83
|
-
rubygems_version: 2.
|
84
|
+
rubygems_version: 2.6.11
|
84
85
|
signing_key:
|
85
86
|
specification_version: 4
|
86
87
|
summary: Utility for powerful HTML Tables
|