datagrid 1.6.3 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
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