datagrid 1.2.3 → 1.3.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8de0a49e930204781d435c0511d30f851660187e
4
+ data.tar.gz: b078647180e79a1b9bbcb2f76af728f39c2af9ea
5
+ SHA512:
6
+ metadata.gz: eaa488b20a9949bbb4e94876b376bdcdea83560ff1e254509e464f7087d6e3bc07e77f0b024bd758fa163f5e81fdd28732b26e68e4059dc460f2761015bd7a01
7
+ data.tar.gz: ad2ea23cbf87bb2ec73fdf776904c524b8444e16db9df85a7be20aed445c4e15be624ce9d198f66f4b84168dcff5a91f9df402a4872dbef2c572f0fb1ac9477c
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.2.3
1
+ 1.3.0
@@ -2,14 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
+ # stub: datagrid 1.3.0 ruby lib
5
6
 
6
7
  Gem::Specification.new do |s|
7
8
  s.name = "datagrid"
8
- s.version = "1.2.3"
9
+ s.version = "1.3.0"
9
10
 
10
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib"]
11
13
  s.authors = ["Bogdan Gusiev"]
12
- s.date = "2014-07-01"
14
+ s.date = "2014-07-23"
13
15
  s.description = "This allows you to easily build datagrid aka data tables with sortable columns and filters"
14
16
  s.email = "agresso@gmail.com"
15
17
  s.extra_rdoc_files = [
@@ -117,12 +119,11 @@ Gem::Specification.new do |s|
117
119
  ]
118
120
  s.homepage = "http://github.com/bogdan/datagrid"
119
121
  s.licenses = ["MIT"]
120
- s.require_paths = ["lib"]
121
- s.rubygems_version = "1.8.25"
122
+ s.rubygems_version = "2.2.2"
122
123
  s.summary = "Ruby gem to create datagrids"
123
124
 
124
125
  if s.respond_to? :specification_version then
125
- s.specification_version = 3
126
+ s.specification_version = 4
126
127
 
127
128
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
128
129
  s.add_runtime_dependency(%q<rails>, [">= 3.0"])
@@ -21,6 +21,9 @@ module Datagrid
21
21
  self.columns_array = []
22
22
 
23
23
  class_attribute :dynamic_block, :instance_writer => false
24
+
25
+ class_attribute :cached
26
+ self.cached = false
24
27
 
25
28
  end
26
29
  base.send :include, InstanceMethods
@@ -302,7 +305,7 @@ module Datagrid
302
305
  end
303
306
  end
304
307
 
305
- # Returns a CSV representation of the data in the table
308
+ # Returns a CSV representation of the data in the grid
306
309
  # You are able to specify which columns you want to see in CSV.
307
310
  # All data columns are included by default
308
311
  # Also you can specify options hash as last argument that is proxied to
@@ -382,7 +385,7 @@ module Datagrid
382
385
  end
383
386
  end
384
387
 
385
- # Returns an object representing a table row.
388
+ # Returns an object representing a grid row.
386
389
  # Allows to access column values
387
390
  #
388
391
  # Example:
@@ -439,16 +442,71 @@ module Datagrid
439
442
 
440
443
  # Return a cell data value for given column name and asset
441
444
  def data_value(column_name, asset)
442
- column_by_name(column_name).data_value(asset, self)
445
+ column = column_by_name(column_name)
446
+ cache(column, asset, :data_value) do
447
+ raise "no data value for #{column.name} column" unless column.data?
448
+ result = generic_value(column, asset)
449
+ result.is_a?(Datagrid::Columns::Column::ResponseFormat) ? result.call_data : result
450
+ end
443
451
  end
444
452
 
445
453
  # Return a cell HTML value for given column name and asset and view context
446
454
  def html_value(column_name, context, asset)
447
- column_by_name(column_name).html_value(context, asset, self)
455
+ column = column_by_name(column_name)
456
+ cache(column, asset, :html_value) do
457
+ if column.html? && column.html_block
458
+ value_from_html_block(context, asset, column)
459
+ else
460
+ result = generic_value(column, asset)
461
+ result.is_a?(Datagrid::Columns::Column::ResponseFormat) ? result.call_html(context) : result
462
+ end
463
+ end
464
+ end
465
+
466
+
467
+ def generic_value(column, model) #:nodoc:
468
+ cache(column, model, :generic_value) do
469
+ unless column.enabled?(self)
470
+ raise Datagrid::ColumnUnavailableError, "Column #{column.name} disabled for #{inspect}"
471
+ end
472
+
473
+ if column.data_block.arity >= 1
474
+ Datagrid::Utils.apply_args(model, self, data_row(model), &column.data_block)
475
+ else
476
+ model.instance_eval(&column.data_block)
477
+ end
478
+ end
479
+
448
480
  end
449
481
 
450
482
  protected
451
483
 
484
+ def cache(column, asset, type)
485
+ @cache ||= {}
486
+ unless cached?
487
+ @cache.clear
488
+ return yield
489
+ end
490
+ key = cache_key(asset)
491
+ unless key
492
+ raise(Datagrid::CacheKeyError, "Datagrid Cache key is #{key.inspect} for #{asset.inspect}.")
493
+ end
494
+ @cache[column.name] ||= {}
495
+ @cache[column.name][key] ||= {}
496
+ @cache[column.name][key][type] ||= yield
497
+ end
498
+
499
+ def cache_key(asset)
500
+ if cached.respond_to?(:call)
501
+ cached.call(asset)
502
+ else
503
+ driver.default_cache_key(asset)
504
+ end
505
+ rescue NotImplementedError
506
+ raise Datagrid::ConfigurationError, "#{self} is setup to use cache. But there was appropriate cache key found for #{asset.inspect}. Please set cached option to block with asset as argument and cache key as returning value to resolve the issue."
507
+ end
508
+
509
+
452
510
  def map_with_batches(&block)
453
511
  result = []
454
512
  each_with_batches do |asset|
@@ -475,6 +533,20 @@ module Datagrid
475
533
  end
476
534
  end
477
535
 
536
+ def value_from_html_block(context, asset, column)
537
+ args = []
538
+ remaining_arity = column.html_block.arity
539
+
540
+ if column.data?
541
+ args << data_value(column, asset)
542
+ remaining_arity -= 1
543
+ end
544
+
545
+ args << asset if remaining_arity > 0
546
+ args << self if remaining_arity > 1
547
+
548
+ context.instance_exec(*args, &column.html_block)
549
+ end
478
550
  end # InstanceMethods
479
551
 
480
552
  class DataRow
@@ -46,9 +46,8 @@ class Datagrid::Columns::Column
46
46
  end
47
47
 
48
48
  def data_value(model, grid)
49
- raise "no data value for #{name} column" unless data?
50
- result = generic_value(model,grid)
51
- result.is_a?(ResponseFormat) ? result.call_data : result
49
+ # backward compatibility method
50
+ grid.data_value(name, model)
52
51
  end
53
52
 
54
53
 
@@ -75,7 +74,7 @@ class Datagrid::Columns::Column
75
74
 
76
75
  def order_by_value(model, grid)
77
76
  if options[:order_by_value] == true
78
- data_value(model, grid)
77
+ grid.data_value(self, model)
79
78
  else
80
79
  Datagrid::Utils.apply_args(model, grid, &options[:order_by_value])
81
80
  end
@@ -115,28 +114,9 @@ class Datagrid::Columns::Column
115
114
  end
116
115
 
117
116
  def html_value(context, asset, grid)
118
- if html? && html_block
119
- value_from_html_block(context, asset, grid)
120
- else
121
- result = generic_value(asset,grid)
122
- result.is_a?(ResponseFormat) ? result.call_html(context) : result
123
- end
117
+ grid.html_value(name, context, asset)
124
118
  end
125
119
 
126
- def value_from_html_block(context, asset, grid)
127
- args = []
128
- remaining_arity = html_block.arity
129
-
130
- if data?
131
- args << data_value(asset,grid)
132
- remaining_arity -= 1
133
- end
134
-
135
- args << asset if remaining_arity > 0
136
- args << grid if remaining_arity > 1
137
-
138
- return context.instance_exec(*args, &html_block)
139
- end
140
120
 
141
121
  def block
142
122
  Datagrid::Utils.warn_once("Datagrid::Columns::Column#block is deprecated. Use #html_block or #data_block instead")
@@ -144,14 +124,7 @@ class Datagrid::Columns::Column
144
124
  end
145
125
 
146
126
  def generic_value(model, grid)
147
- unless enabled?(grid)
148
- raise Datagrid::ColumnUnavailableError, "Column #{name} disabled for #{grid.inspect}"
149
- end
150
- if self.data_block.arity >= 1
151
- Datagrid::Utils.apply_args(model, grid, grid.data_row(model), &data_block)
152
- else
153
- model.instance_eval(&self.data_block)
154
- end
127
+ grid.generic_value(self, model)
155
128
  end
156
129
 
157
130
  private
@@ -90,6 +90,10 @@ module Datagrid
90
90
  end
91
91
  end
92
92
 
93
+ def default_cache_key(asset)
94
+ raise NotImplementedError
95
+ end
96
+
93
97
  protected
94
98
  def timestamp_class?(klass)
95
99
  TIMESTAMP_CLASSES.include?(klass)
@@ -105,6 +105,10 @@ module Datagrid
105
105
  scope.find_each(batch_size ? { :batch_size => batch_size} : {}, &block)
106
106
  end
107
107
 
108
+ def default_cache_key(asset)
109
+ asset.id || raise(NotImplementedError)
110
+ end
111
+
108
112
  protected
109
113
 
110
114
  def prefix_table_name(scope, field)
@@ -68,6 +68,10 @@ module Datagrid
68
68
  def batch_each(scope, batch_size, &block)
69
69
  scope.each(&block)
70
70
  end
71
+
72
+ def default_cache_key(asset)
73
+ asset
74
+ end
71
75
  end
72
76
  end
73
77
  end
@@ -67,6 +67,10 @@ module Datagrid
67
67
  current_page+=1
68
68
  end
69
69
  end
70
+
71
+ def default_cache_key(asset)
72
+ raise NotImplementedError
73
+ end
70
74
  end
71
75
  end
72
76
  end
@@ -90,6 +90,10 @@ module Datagrid
90
90
  current_page+=1
91
91
  end
92
92
  end
93
+
94
+ def default_cache_key(asset)
95
+ asset.id || raise(NotImplementedError)
96
+ end
93
97
  end
94
98
  end
95
99
  end
@@ -406,4 +406,22 @@ describe Datagrid::Columns do
406
406
  }.to raise_error(Datagrid::ColumnUnavailableError)
407
407
  end
408
408
  end
409
+
410
+ describe "caching" do
411
+ it "should work when enabled in class" do
412
+ grid = test_report do
413
+ scope {Entry}
414
+ self.cached = true
415
+ column(:random1) {rand(10**9)}
416
+ column(:random2) {rand(10**9)}
417
+ end
418
+
419
+ row = grid.data_row(Entry.create!)
420
+ expect(row.random1).to eq(row.random1)
421
+ expect(row.random2).to_not eq(row.random1)
422
+ grid.cached = false
423
+ expect(row.random2).to_not eq(row.random2)
424
+ expect(row.random2).to_not eq(row.random1)
425
+ end
426
+ end
409
427
  end
@@ -16,7 +16,7 @@ describe Datagrid::Helper do
16
16
  before(:each) do
17
17
  allow(subject).to receive(:params).and_return({})
18
18
  allow(subject).to receive(:url_for) do |options|
19
- options.to_param
19
+ options.is_a?(String) ? options : ["/location", options.to_param.presence].compact.join('?')
20
20
  end
21
21
 
22
22
  end
@@ -341,8 +341,8 @@ describe Datagrid::Helper do
341
341
  grid = OrderedGrid.new(:descending => true, :order => :category)
342
342
  expect(subject.datagrid_order_for(grid, grid.column_by_name(:category))).to equal_to_dom(<<-HTML)
343
343
  <div class="order">
344
- <a href="ordered_grid%5Bdescending%5D=false&amp;ordered_grid%5Border%5D=category" class="asc">&uarr;</a>
345
- <a href="ordered_grid%5Bdescending%5D=true&amp;ordered_grid%5Border%5D=category" class="desc">&darr;</a>
344
+ <a href="/location?ordered_grid%5Bdescending%5D=false&amp;ordered_grid%5Border%5D=category" class="asc">&uarr;</a>
345
+ <a href="/location?ordered_grid%5Bdescending%5D=true&amp;ordered_grid%5Border%5D=category" class="desc">&darr;</a>
346
346
  </div>
347
347
  HTML
348
348
  end
@@ -368,7 +368,7 @@ describe Datagrid::Helper do
368
368
  "form .filter label" => "Category",
369
369
  "form .filter input.category.default_filter[name='form_for_grid[category]'][value=hello]" => 1,
370
370
  "form input[name=commit][value=Search]" => 1,
371
- "form a.datagrid-reset[href='']" => 1
371
+ "form a.datagrid-reset[href='/location']" => 1
372
372
  )
373
373
  end
374
374
  it "should support html classes for grid class with namespace" do
@@ -459,5 +459,28 @@ describe Datagrid::Helper do
459
459
  end
460
460
  expect(subject.datagrid_value(report, :name, entry)).to eq("<a href=\"/profile\">Star</a>")
461
461
  end
462
+
463
+ it "should use cache" do
464
+ grid = test_report do
465
+ scope {Entry}
466
+ self.cached = true
467
+ column(:random1, html: true) {rand(10**9)}
468
+ column(:random2) {|model| format(rand(10**9)) {|value| value}}
469
+ end
470
+
471
+ entry = Entry.create!
472
+
473
+ data_row = grid.data_row(entry)
474
+ html_row = subject.datagrid_row(grid, entry)
475
+ expect(html_row.random1).to eq(html_row.random1)
476
+ expect(html_row.random2).to_not eq(html_row.random1)
477
+ expect(data_row.random2).to eq(html_row.random2)
478
+ expect(data_row.random2).to_not eq(html_row.random1)
479
+ grid.cached = false
480
+ expect(html_row.random2).to_not eq(html_row.random2)
481
+ expect(html_row.random2).to_not eq(html_row.random1)
482
+ expect(data_row.random2).to_not eq(html_row.random2)
483
+ expect(data_row.random2).to_not eq(html_row.random1)
484
+ end
462
485
  end
463
486
  end
metadata CHANGED
@@ -1,164 +1,144 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datagrid
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.3
5
- prerelease:
4
+ version: 1.3.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Bogdan Gusiev
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-07-01 00:00:00.000000000 Z
11
+ date: 2014-07-23 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rails
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '3.0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '3.0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: bundler
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: jeweler
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ">="
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - ">="
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: debugger
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - ">="
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - ">="
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: byebug
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - ">="
84
74
  - !ruby/object:Gem::Version
85
75
  version: '0'
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - ">="
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: ruby-debug
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ! '>='
87
+ - - ">="
100
88
  - !ruby/object:Gem::Version
101
89
  version: '0'
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ! '>='
94
+ - - ">="
108
95
  - !ruby/object:Gem::Version
109
96
  version: '0'
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: rspec
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
- - - ! '>='
101
+ - - ">="
116
102
  - !ruby/object:Gem::Version
117
103
  version: '3'
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
- - - ! '>='
108
+ - - ">="
124
109
  - !ruby/object:Gem::Version
125
110
  version: '3'
126
111
  - !ruby/object:Gem::Dependency
127
112
  name: nokogiri
128
113
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
114
  requirements:
131
- - - ! '>='
115
+ - - ">="
132
116
  - !ruby/object:Gem::Version
133
117
  version: '0'
134
118
  type: :development
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
121
  requirements:
139
- - - ! '>='
122
+ - - ">="
140
123
  - !ruby/object:Gem::Version
141
124
  version: '0'
142
125
  - !ruby/object:Gem::Dependency
143
126
  name: sqlite3
144
127
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
128
  requirements:
147
- - - ! '>='
129
+ - - ">="
148
130
  - !ruby/object:Gem::Version
149
131
  version: '0'
150
132
  type: :development
151
133
  prerelease: false
152
134
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
135
  requirements:
155
- - - ! '>='
136
+ - - ">="
156
137
  - !ruby/object:Gem::Version
157
138
  version: '0'
158
139
  - !ruby/object:Gem::Dependency
159
140
  name: mongoid
160
141
  requirement: !ruby/object:Gem::Requirement
161
- none: false
162
142
  requirements:
163
143
  - - '='
164
144
  - !ruby/object:Gem::Version
@@ -166,7 +146,6 @@ dependencies:
166
146
  type: :development
167
147
  prerelease: false
168
148
  version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
149
  requirements:
171
150
  - - '='
172
151
  - !ruby/object:Gem::Version
@@ -174,23 +153,20 @@ dependencies:
174
153
  - !ruby/object:Gem::Dependency
175
154
  name: mongo_mapper
176
155
  requirement: !ruby/object:Gem::Requirement
177
- none: false
178
156
  requirements:
179
- - - ! '>='
157
+ - - ">="
180
158
  - !ruby/object:Gem::Version
181
159
  version: 0.11.0
182
160
  type: :development
183
161
  prerelease: false
184
162
  version_requirements: !ruby/object:Gem::Requirement
185
- none: false
186
163
  requirements:
187
- - - ! '>='
164
+ - - ">="
188
165
  - !ruby/object:Gem::Version
189
166
  version: 0.11.0
190
167
  - !ruby/object:Gem::Dependency
191
168
  name: bson
192
169
  requirement: !ruby/object:Gem::Requirement
193
- none: false
194
170
  requirements:
195
171
  - - '='
196
172
  - !ruby/object:Gem::Version
@@ -198,7 +174,6 @@ dependencies:
198
174
  type: :development
199
175
  prerelease: false
200
176
  version_requirements: !ruby/object:Gem::Requirement
201
- none: false
202
177
  requirements:
203
178
  - - '='
204
179
  - !ruby/object:Gem::Version
@@ -206,7 +181,6 @@ dependencies:
206
181
  - !ruby/object:Gem::Dependency
207
182
  name: bson_ext
208
183
  requirement: !ruby/object:Gem::Requirement
209
- none: false
210
184
  requirements:
211
185
  - - '='
212
186
  - !ruby/object:Gem::Version
@@ -214,7 +188,6 @@ dependencies:
214
188
  type: :development
215
189
  prerelease: false
216
190
  version_requirements: !ruby/object:Gem::Requirement
217
- none: false
218
191
  requirements:
219
192
  - - '='
220
193
  - !ruby/object:Gem::Version
@@ -222,17 +195,15 @@ dependencies:
222
195
  - !ruby/object:Gem::Dependency
223
196
  name: fastercsv
224
197
  requirement: !ruby/object:Gem::Requirement
225
- none: false
226
198
  requirements:
227
- - - ! '>='
199
+ - - ">="
228
200
  - !ruby/object:Gem::Version
229
201
  version: '0'
230
202
  type: :development
231
203
  prerelease: false
232
204
  version_requirements: !ruby/object:Gem::Requirement
233
- none: false
234
205
  requirements:
235
- - - ! '>='
206
+ - - ">="
236
207
  - !ruby/object:Gem::Version
237
208
  version: '0'
238
209
  description: This allows you to easily build datagrid aka data tables with sortable
@@ -243,9 +214,9 @@ extensions: []
243
214
  extra_rdoc_files:
244
215
  - LICENSE.txt
245
216
  files:
246
- - .document
247
- - .rspec
248
- - .travis.yml
217
+ - ".document"
218
+ - ".rspec"
219
+ - ".travis.yml"
249
220
  - Gemfile
250
221
  - LICENSE.txt
251
222
  - Rakefile
@@ -344,29 +315,25 @@ files:
344
315
  homepage: http://github.com/bogdan/datagrid
345
316
  licenses:
346
317
  - MIT
318
+ metadata: {}
347
319
  post_install_message:
348
320
  rdoc_options: []
349
321
  require_paths:
350
322
  - lib
351
323
  required_ruby_version: !ruby/object:Gem::Requirement
352
- none: false
353
324
  requirements:
354
- - - ! '>='
325
+ - - ">="
355
326
  - !ruby/object:Gem::Version
356
327
  version: '0'
357
- segments:
358
- - 0
359
- hash: 1488750085625410873
360
328
  required_rubygems_version: !ruby/object:Gem::Requirement
361
- none: false
362
329
  requirements:
363
- - - ! '>='
330
+ - - ">="
364
331
  - !ruby/object:Gem::Version
365
332
  version: '0'
366
333
  requirements: []
367
334
  rubyforge_project:
368
- rubygems_version: 1.8.25
335
+ rubygems_version: 2.2.2
369
336
  signing_key:
370
- specification_version: 3
337
+ specification_version: 4
371
338
  summary: Ruby gem to create datagrids
372
339
  test_files: []