datagrid 1.2.3 → 1.3.0

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