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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +19 -1
  3. data/Readme.markdown +11 -11
  4. data/app/views/datagrid/_enum_checkboxes.html.erb +2 -2
  5. data/app/views/datagrid/_form.html.erb +2 -3
  6. data/app/views/datagrid/_order_for.html.erb +2 -2
  7. data/app/views/datagrid/_range_filter.html.erb +3 -3
  8. data/datagrid.gemspec +10 -14
  9. data/lib/datagrid/active_model.rb +25 -29
  10. data/lib/datagrid/column_names_attribute.rb +11 -9
  11. data/lib/datagrid/columns/column.rb +10 -8
  12. data/lib/datagrid/columns.rb +142 -176
  13. data/lib/datagrid/configuration.rb +6 -1
  14. data/lib/datagrid/core.rb +63 -30
  15. data/lib/datagrid/drivers/abstract_driver.rb +2 -1
  16. data/lib/datagrid/drivers/active_record.rb +4 -3
  17. data/lib/datagrid/drivers/array.rb +2 -1
  18. data/lib/datagrid/drivers/mongo_mapper.rb +2 -1
  19. data/lib/datagrid/drivers/mongoid.rb +3 -2
  20. data/lib/datagrid/drivers/sequel.rb +8 -3
  21. data/lib/datagrid/drivers.rb +2 -1
  22. data/lib/datagrid/engine.rb +3 -2
  23. data/lib/datagrid/filters/base_filter.rb +8 -4
  24. data/lib/datagrid/filters/boolean_filter.rb +2 -1
  25. data/lib/datagrid/filters/composite_filters.rb +8 -12
  26. data/lib/datagrid/filters/dynamic_filter.rb +1 -1
  27. data/lib/datagrid/filters/extended_boolean_filter.rb +2 -1
  28. data/lib/datagrid/filters/select_options.rb +34 -1
  29. data/lib/datagrid/filters.rb +52 -30
  30. data/lib/datagrid/form_builder.rb +53 -35
  31. data/lib/datagrid/helper.rb +43 -61
  32. data/lib/datagrid/locale/en.yml +5 -1
  33. data/lib/datagrid/ordering.rb +15 -15
  34. data/lib/datagrid/renderer.rb +71 -15
  35. data/lib/datagrid/rspec.rb +4 -4
  36. data/lib/datagrid/scaffold.rb +1 -1
  37. data/lib/datagrid/utils.rb +1 -0
  38. data/lib/datagrid/version.rb +1 -1
  39. data/lib/datagrid.rb +2 -1
  40. data/templates/grid.rb.erb +1 -1
  41. data/templates/index.html.erb +1 -1
  42. metadata +8 -9
  43. data/lib/datagrid/filters/boolean_enum_filter.rb +0 -17
@@ -1,7 +1,8 @@
1
1
  require "action_view"
2
2
 
3
3
  module Datagrid
4
- class Renderer #:nodoc:
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
- :grid => grid,
44
- :options => options,
45
- :assets => assets
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
- if block_given?
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
@@ -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, :eboolean
42
- Datagrid::Filters::BooleanEnumFilter::YES
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
@@ -124,6 +124,6 @@ RUBY
124
124
 
125
125
  def file_exists?(name)
126
126
  name = Rails.root.join(name) unless name.to_s.first == "/"
127
- File.exists?(name)
127
+ File.exist?(name)
128
128
  end
129
129
  end
@@ -1,4 +1,5 @@
1
1
  module Datagrid
2
+ # @!visibility private
2
3
  module Utils # :nodoc:
3
4
  class << self
4
5
 
@@ -1,3 +1,3 @@
1
1
  module Datagrid
2
- VERSION = "1.6.3"
2
+ VERSION = "1.8.0"
3
3
  end
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 # self.included
38
+ end
38
39
 
39
40
  class ConfigurationError < StandardError; end
40
41
  class ArgumentError < ::ArgumentError; end
@@ -5,7 +5,7 @@ class <%= grid_class_name %> < BaseGrid
5
5
  end
6
6
 
7
7
  filter(:id, :integer)
8
- filter(:created_at, :date, :range => true)
8
+ filter(:created_at, :date, range: true)
9
9
 
10
10
  column(:id)
11
11
  column(:name)
@@ -1,4 +1,4 @@
1
- <%%= datagrid_form_for @grid, :method => :get, :url => <%= grid_route_name %> %>
1
+ <%%= datagrid_form_for @grid, method: :get, url: <%= grid_route_name %> %>
2
2
 
3
3
  <%%= <%=pagination_helper_code%> %>
4
4
  <%%= datagrid_table @grid %>
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.6.3
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: 2020-09-07 00:00:00.000000000 Z
11
+ date: 2023-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rails
14
+ name: railties
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '4.0'
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: '4.0'
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: http://github.com/bogdan/datagrid
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.0'
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.2.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