datagrid 1.6.3 → 1.8.0
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/CHANGELOG.md +19 -1
- data/Readme.markdown +11 -11
- data/app/views/datagrid/_enum_checkboxes.html.erb +2 -2
- data/app/views/datagrid/_form.html.erb +2 -3
- data/app/views/datagrid/_order_for.html.erb +2 -2
- data/app/views/datagrid/_range_filter.html.erb +3 -3
- data/datagrid.gemspec +10 -14
- data/lib/datagrid/active_model.rb +25 -29
- data/lib/datagrid/column_names_attribute.rb +11 -9
- data/lib/datagrid/columns/column.rb +10 -8
- data/lib/datagrid/columns.rb +142 -176
- data/lib/datagrid/configuration.rb +6 -1
- data/lib/datagrid/core.rb +63 -30
- data/lib/datagrid/drivers/abstract_driver.rb +2 -1
- data/lib/datagrid/drivers/active_record.rb +4 -3
- data/lib/datagrid/drivers/array.rb +2 -1
- data/lib/datagrid/drivers/mongo_mapper.rb +2 -1
- data/lib/datagrid/drivers/mongoid.rb +3 -2
- data/lib/datagrid/drivers/sequel.rb +8 -3
- data/lib/datagrid/drivers.rb +2 -1
- data/lib/datagrid/engine.rb +3 -2
- data/lib/datagrid/filters/base_filter.rb +8 -4
- data/lib/datagrid/filters/boolean_filter.rb +2 -1
- data/lib/datagrid/filters/composite_filters.rb +8 -12
- data/lib/datagrid/filters/dynamic_filter.rb +1 -1
- data/lib/datagrid/filters/extended_boolean_filter.rb +2 -1
- data/lib/datagrid/filters/select_options.rb +34 -1
- data/lib/datagrid/filters.rb +52 -30
- data/lib/datagrid/form_builder.rb +53 -35
- data/lib/datagrid/helper.rb +43 -61
- data/lib/datagrid/locale/en.yml +5 -1
- data/lib/datagrid/ordering.rb +15 -15
- data/lib/datagrid/renderer.rb +71 -15
- data/lib/datagrid/rspec.rb +4 -4
- data/lib/datagrid/scaffold.rb +1 -1
- data/lib/datagrid/utils.rb +1 -0
- data/lib/datagrid/version.rb +1 -1
- data/lib/datagrid.rb +2 -1
- data/templates/grid.rb.erb +1 -1
- data/templates/index.html.erb +1 -1
- metadata +8 -9
- data/lib/datagrid/filters/boolean_enum_filter.rb +0 -17
data/lib/datagrid/renderer.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
require "action_view"
|
2
2
|
|
3
3
|
module Datagrid
|
4
|
-
|
4
|
+
# @!visibility private
|
5
|
+
class Renderer
|
5
6
|
|
6
7
|
def self.for(template)
|
7
8
|
new(template)
|
@@ -40,9 +41,9 @@ module Datagrid
|
|
40
41
|
|
41
42
|
_render_partial('table', options[:partials],
|
42
43
|
{
|
43
|
-
:
|
44
|
-
:
|
45
|
-
:
|
44
|
+
grid: grid,
|
45
|
+
options: options,
|
46
|
+
assets: assets
|
46
47
|
})
|
47
48
|
end
|
48
49
|
|
@@ -55,22 +56,20 @@ module Datagrid
|
|
55
56
|
|
56
57
|
def rows(grid, assets = grid.assets, **options, &block)
|
57
58
|
result = assets.map do |asset|
|
58
|
-
|
59
|
-
@template.capture do
|
60
|
-
yield(Datagrid::Helper::HtmlRow.new(@template, grid, asset))
|
61
|
-
end
|
62
|
-
else
|
63
|
-
_render_partial( 'row', options[:partials], {
|
64
|
-
:grid => grid,
|
65
|
-
:options => options,
|
66
|
-
:asset => asset
|
67
|
-
})
|
68
|
-
end
|
59
|
+
row(grid, asset, **options, &block)
|
69
60
|
end.to_a.join
|
70
61
|
|
71
62
|
_safe(result)
|
72
63
|
end
|
73
64
|
|
65
|
+
def row(grid, asset, **options, &block)
|
66
|
+
Datagrid::Helper::HtmlRow.new(self, grid, asset, options).tap do |row|
|
67
|
+
if block_given?
|
68
|
+
return @template.capture(row, &block)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
74
73
|
def order_for(grid, column, options = {})
|
75
74
|
_render_partial('order_for', options[:partials],
|
76
75
|
{ :grid => grid, :column => column })
|
@@ -98,4 +97,61 @@ module Datagrid
|
|
98
97
|
})
|
99
98
|
end
|
100
99
|
end
|
100
|
+
|
101
|
+
module Helper
|
102
|
+
# Represents a datagrid row that provides access to column values for the given asset
|
103
|
+
# @example
|
104
|
+
# row = datagrid_row(grid, user)
|
105
|
+
# row.class # => Datagrid::Helper::HtmlRow
|
106
|
+
# row.first_name # => "<strong>Bogdan</strong>"
|
107
|
+
# row.grid # => Grid object
|
108
|
+
# row.asset # => User object
|
109
|
+
# row.each do |value|
|
110
|
+
# puts value
|
111
|
+
# end
|
112
|
+
class HtmlRow
|
113
|
+
|
114
|
+
include Enumerable
|
115
|
+
|
116
|
+
attr_reader :grid, :asset, :options
|
117
|
+
|
118
|
+
# @!visibility private
|
119
|
+
def initialize(renderer, grid, asset, options)
|
120
|
+
@renderer = renderer
|
121
|
+
@grid = grid
|
122
|
+
@asset = asset
|
123
|
+
@options = options
|
124
|
+
end
|
125
|
+
|
126
|
+
# @return [Object] a column value for given column name
|
127
|
+
def get(column)
|
128
|
+
@renderer.format_value(@grid, column, @asset)
|
129
|
+
end
|
130
|
+
|
131
|
+
# Iterates over all column values that are available in the row
|
132
|
+
# param block [Proc] column value iterator
|
133
|
+
def each(&block)
|
134
|
+
(@options[:columns] || @grid.html_columns).each do |column|
|
135
|
+
block.call(get(column))
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def to_s
|
140
|
+
@renderer.send(:_render_partial, 'row', options[:partials], {
|
141
|
+
:grid => grid,
|
142
|
+
:options => options,
|
143
|
+
:asset => asset
|
144
|
+
})
|
145
|
+
end
|
146
|
+
|
147
|
+
protected
|
148
|
+
def method_missing(method, *args, &blk)
|
149
|
+
if column = @grid.column_by_name(method)
|
150
|
+
get(column)
|
151
|
+
else
|
152
|
+
super
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
101
157
|
end
|
data/lib/datagrid/rspec.rb
CHANGED
@@ -32,14 +32,14 @@ shared_examples_for "Datagrid" do
|
|
32
32
|
describe "filter ##{filter.name}" do
|
33
33
|
|
34
34
|
let(:filter_value) do
|
35
|
-
|
35
|
+
|
36
36
|
case Datagrid::Filters::FILTER_TYPES.invert[filter.class]
|
37
37
|
when :default, :string
|
38
38
|
"text"
|
39
39
|
when :date
|
40
40
|
1.day.ago
|
41
|
-
when :xboolean
|
42
|
-
Datagrid::Filters::
|
41
|
+
when :xboolean
|
42
|
+
Datagrid::Filters::ExtendedBooleanFilter::YES
|
43
43
|
when :boolean
|
44
44
|
true
|
45
45
|
when :integer
|
@@ -58,7 +58,7 @@ shared_examples_for "Datagrid" do
|
|
58
58
|
end
|
59
59
|
|
60
60
|
it "should be supported" do
|
61
|
-
subject.assets.should_not be_nil
|
61
|
+
subject.assets.should_not be_nil
|
62
62
|
#TODO: better matcher.
|
63
63
|
end
|
64
64
|
end
|
data/lib/datagrid/scaffold.rb
CHANGED
data/lib/datagrid/utils.rb
CHANGED
data/lib/datagrid/version.rb
CHANGED
data/lib/datagrid.rb
CHANGED
@@ -23,6 +23,7 @@ module Datagrid
|
|
23
23
|
|
24
24
|
autoload :Engine
|
25
25
|
|
26
|
+
# @!visibility private
|
26
27
|
def self.included(base)
|
27
28
|
base.class_eval do
|
28
29
|
|
@@ -34,7 +35,7 @@ module Datagrid
|
|
34
35
|
include ::Datagrid::Ordering
|
35
36
|
|
36
37
|
end
|
37
|
-
end
|
38
|
+
end
|
38
39
|
|
39
40
|
class ConfigurationError < StandardError; end
|
40
41
|
class ArgumentError < ::ArgumentError; end
|
data/templates/grid.rb.erb
CHANGED
data/templates/index.html.erb
CHANGED
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: datagrid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bogdan Gusiev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-12-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: railties
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '6.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '6.0'
|
27
27
|
description: This allows you to easily build datagrid aka data tables with sortable
|
28
28
|
columns and filters
|
29
29
|
email: agresso@gmail.com
|
@@ -62,7 +62,6 @@ files:
|
|
62
62
|
- lib/datagrid/engine.rb
|
63
63
|
- lib/datagrid/filters.rb
|
64
64
|
- lib/datagrid/filters/base_filter.rb
|
65
|
-
- lib/datagrid/filters/boolean_enum_filter.rb
|
66
65
|
- lib/datagrid/filters/boolean_filter.rb
|
67
66
|
- lib/datagrid/filters/composite_filters.rb
|
68
67
|
- lib/datagrid/filters/date_filter.rb
|
@@ -90,7 +89,7 @@ files:
|
|
90
89
|
- templates/controller.rb.erb
|
91
90
|
- templates/grid.rb.erb
|
92
91
|
- templates/index.html.erb
|
93
|
-
homepage:
|
92
|
+
homepage: https://github.com/bogdan/datagrid
|
94
93
|
licenses:
|
95
94
|
- MIT
|
96
95
|
metadata:
|
@@ -107,14 +106,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
107
106
|
requirements:
|
108
107
|
- - ">="
|
109
108
|
- !ruby/object:Gem::Version
|
110
|
-
version: '2.
|
109
|
+
version: '2.7'
|
111
110
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
112
111
|
requirements:
|
113
112
|
- - ">="
|
114
113
|
- !ruby/object:Gem::Version
|
115
114
|
version: '0'
|
116
115
|
requirements: []
|
117
|
-
rubygems_version: 3.
|
116
|
+
rubygems_version: 3.4.15
|
118
117
|
signing_key:
|
119
118
|
specification_version: 4
|
120
119
|
summary: Ruby gem to create datagrids
|
@@ -1,17 +0,0 @@
|
|
1
|
-
class Datagrid::Filters::BooleanEnumFilter < Datagrid::Filters::EnumFilter #:nodoc:
|
2
|
-
|
3
|
-
YES = "YES"
|
4
|
-
NO = "NO"
|
5
|
-
|
6
|
-
def initialize(report, attribute, options = {}, &block)
|
7
|
-
options[:select] = [YES, NO].map do |key, value|
|
8
|
-
[I18n.t("datagrid.filters.eboolean.#{key.downcase}", :default => key.downcase.capitalize), key]
|
9
|
-
end
|
10
|
-
super(report, attribute, options, &block)
|
11
|
-
end
|
12
|
-
|
13
|
-
|
14
|
-
def checkbox_id(value)
|
15
|
-
[object_name, name, value].join('_').underscore
|
16
|
-
end
|
17
|
-
end
|