rgviz 0.45 → 0.46

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.
data/lib/rgviz/lexer.rb CHANGED
@@ -2,10 +2,9 @@ require 'strscan'
2
2
 
3
3
  module Rgviz
4
4
  class Lexer < StringScanner
5
- def initialize(str, options = {})
5
+ def initialize(str)
6
6
  super
7
7
  @token = Token.new
8
- @extensions = options[:extensions]
9
8
  end
10
9
 
11
10
  def next_token
@@ -50,7 +49,7 @@ module Rgviz
50
49
  elsif scan /asc\b/i then Token::Asc
51
50
  elsif scan /avg\b/i then Token::Avg
52
51
  elsif scan /by\b/i then Token::By
53
- elsif @extensions and scan /concat\b/i then Token::Concat
52
+ elsif scan /concat\b/i then Token::Concat
54
53
  elsif scan /contains\b/i then Token::Contains
55
54
  elsif scan /count\b/i then Token::Count
56
55
  elsif scan /date\b/i then Token::Date
@@ -61,6 +60,7 @@ module Rgviz
61
60
  elsif scan /desc\b/i then Token::Desc
62
61
  elsif scan /ends\b/i then Token::Ends
63
62
  elsif scan /false\b/i then Token::False
63
+ elsif scan /floor\b/i then Token::Floor
64
64
  elsif scan /format\b/i then Token::Format
65
65
  elsif scan /group\b/i then Token::Group
66
66
  elsif scan /hour\b/i then Token::Hour
@@ -86,6 +86,7 @@ module Rgviz
86
86
  elsif scan /order\b/i then Token::Order
87
87
  elsif scan /pivot\b/i then Token::Pivot
88
88
  elsif scan /quarter\b/i then Token::Quarter
89
+ elsif scan /round\b/i then Token::Round
89
90
  elsif scan /second\b/i then Token::Second
90
91
  elsif scan /select\b/i then Token::Select
91
92
  elsif scan /starts\b/i then Token::Starts
@@ -12,9 +12,9 @@ module Rgviz
12
12
  @labels = {}
13
13
  end
14
14
 
15
- def execute(query, options = {})
15
+ def execute(query)
16
16
  @query = query
17
- @query = Parser.parse(@query, options) unless @query.kind_of?(Query)
17
+ @query = Parser.parse(@query) unless @query.kind_of?(Query)
18
18
  @table = Table.new
19
19
 
20
20
  process_labels
@@ -454,6 +454,10 @@ module Rgviz
454
454
  @value = val1.sec
455
455
  when ScalarFunctionColumn::Quarter
456
456
  @value = (val1.month / 3.0).ceil
457
+ when ScalarFunctionColumn::Round
458
+ @value = val1.round
459
+ when ScalarFunctionColumn::Floor
460
+ @value = val1.floor
457
461
  when ScalarFunctionColumn::Millisecond
458
462
  raise "Millisecond is not implemented"
459
463
  when ScalarFunctionColumn::Lower
data/lib/rgviz/nodes.rb CHANGED
@@ -422,6 +422,8 @@ module Rgviz
422
422
  Product = Token::STAR
423
423
  Quarter = Token::Quarter
424
424
  Quotient = Token::SLASH
425
+ Round = Token::Round
426
+ Floor = Token::Floor
425
427
  Second = Token::Second
426
428
  Sum = Token::PLUS
427
429
  ToDate = Token::ToDate
data/lib/rgviz/parser.rb CHANGED
@@ -3,14 +3,14 @@ require 'date'
3
3
 
4
4
  module Rgviz
5
5
  class Parser < Lexer
6
- def initialize(string, options = {})
6
+ def initialize(string)
7
7
  super
8
8
  @query = Query.new
9
9
  next_token
10
10
  end
11
11
 
12
- def self.parse(string, options = {})
13
- Parser.new(string, options).parse
12
+ def self.parse(string)
13
+ Parser.new(string).parse
14
14
  end
15
15
 
16
16
  def parse
@@ -386,7 +386,8 @@ module Rgviz
386
386
  when Token::Year, Token::Month, Token::Day,
387
387
  Token::Hour, Token::Minute, Token::Second, Token::Millisecond,
388
388
  Token::Now, Token::DateDiff, Token::Lower, Token::Upper,
389
- Token::Quarter, Token::DayOfWeek, Token::ToDate, Token::Concat
389
+ Token::Quarter, Token::DayOfWeek, Token::ToDate, Token::Concat,
390
+ Token::Round,Token::Floor
390
391
  function = @token.value
391
392
  string = @token.string
392
393
  next_token
@@ -428,12 +429,12 @@ module Rgviz
428
429
  check *token_values
429
430
  next_token
430
431
  end
431
-
432
+
432
433
  protected
433
434
  def parse_date(date_string)
434
435
  Date.parse(date_string)
435
436
  end
436
-
437
+
437
438
  def parse_time(time_string)
438
439
  Time.parse(time_string)
439
440
  end
data/lib/rgviz/token.rb CHANGED
@@ -16,6 +16,7 @@ module Rgviz
16
16
  DayOfWeek = :dayOfWeek
17
17
  Ends = :ends
18
18
  False = :false
19
+ Floor = :floor
19
20
  Format = :format
20
21
  Group = :group
21
22
  Hour = :hour
@@ -41,6 +42,7 @@ module Rgviz
41
42
  Order = :order
42
43
  Pivot = :pivot
43
44
  Quarter = :quarter
45
+ Round = :round
44
46
  Second = :second
45
47
  Select = :select
46
48
  Starts = :starts
@@ -53,17 +55,17 @@ module Rgviz
53
55
  Where = :where
54
56
  With = :with
55
57
  Year = :year
56
-
58
+
57
59
  ID = :ID
58
60
  INTEGER = :INTEGER
59
61
  DECIMAL = :DECIMAL
60
62
  STRING = :STRING
61
-
63
+
62
64
  PLUS = :'+'
63
65
  MINUS = :'-'
64
66
  STAR = :'*'
65
67
  SLASH = :'/'
66
-
68
+
67
69
  COMMA = :','
68
70
  LPAREN = :'('
69
71
  RPAREN = :')'
@@ -73,9 +75,9 @@ module Rgviz
73
75
  GT = :'>'
74
76
  GTE = :'>='
75
77
  NEQ = :'!='
76
-
78
+
77
79
  EOF = :'<EOF>'
78
-
80
+
79
81
  attr_accessor :start
80
82
  attr_accessor :value
81
83
  attr_accessor :string
@@ -3,20 +3,20 @@ require 'rgviz'
3
3
  include Rgviz
4
4
 
5
5
  describe Lexer do
6
- def self.it_lexes_keyword(str, token_value, options = {})
6
+ def self.it_lexes_keyword(str, token_value)
7
7
  it "lexes #{str}" do
8
- lex = Lexer.new str, options
8
+ lex = Lexer.new str
9
9
  tok = lex.next_token
10
10
  tok.value.should == token_value
11
11
  end
12
-
12
+
13
13
  it "lexes #{str} upcase" do
14
- lex = Lexer.new str.upcase, options
14
+ lex = Lexer.new str.upcase
15
15
  tok = lex.next_token
16
16
  tok.value.should == token_value
17
17
  end
18
18
  end
19
-
19
+
20
20
  def self.it_lexes_id(str, id = str)
21
21
  it "lexes identifier #{str}" do
22
22
  lex = Lexer.new str
@@ -25,7 +25,7 @@ describe Lexer do
25
25
  tok.string.should == id
26
26
  end
27
27
  end
28
-
28
+
29
29
  def self.it_lexes_string(str, id = str)
30
30
  it "lexes string #{str}" do
31
31
  lex = Lexer.new str
@@ -34,7 +34,7 @@ describe Lexer do
34
34
  tok.string.should == id
35
35
  end
36
36
  end
37
-
37
+
38
38
  def self.it_lexes_token(str, token_value)
39
39
  it "lexes #{str}" do
40
40
  lex = Lexer.new str
@@ -42,7 +42,7 @@ describe Lexer do
42
42
  tok.value.should == token_value
43
43
  end
44
44
  end
45
-
45
+
46
46
  def self.it_lexes_integer(str, number)
47
47
  it "lexes #{str}" do
48
48
  lex = Lexer.new str
@@ -51,7 +51,7 @@ describe Lexer do
51
51
  tok.number.should == number
52
52
  end
53
53
  end
54
-
54
+
55
55
  def self.it_lexes_decimal(str, number)
56
56
  it "lexes #{str}" do
57
57
  lex = Lexer.new str
@@ -60,7 +60,7 @@ describe Lexer do
60
60
  tok.number.should == number
61
61
  end
62
62
  end
63
-
63
+
64
64
  def self.it_lexes_eof(str)
65
65
  it "lexes eof #{str}" do
66
66
  lex = Lexer.new str
@@ -68,7 +68,7 @@ describe Lexer do
68
68
  tok.value.should == Token::EOF
69
69
  end
70
70
  end
71
-
71
+
72
72
  def self.it_lexes_error(str)
73
73
  it "lexes error #{str}" do
74
74
  lex = Lexer.new "x#{str}"
@@ -78,7 +78,7 @@ describe Lexer do
78
78
  lambda { lex.next_token }.should raise_error(ParseException)
79
79
  end
80
80
  end
81
-
81
+
82
82
  it_lexes_keyword 'and', Token::And
83
83
  it_lexes_keyword 'asc', Token::Asc
84
84
  it_lexes_keyword 'avg', Token::Avg
@@ -130,7 +130,7 @@ describe Lexer do
130
130
  it_lexes_keyword 'where', Token::Where
131
131
  it_lexes_keyword 'with', Token::With
132
132
  it_lexes_keyword 'year', Token::Year
133
-
133
+
134
134
  it_lexes_id 'selected'
135
135
  it_lexes_id ' selected ', 'selected'
136
136
  it_lexes_id '`selected`', 'selected'
@@ -139,12 +139,12 @@ describe Lexer do
139
139
  it_lexes_id 'hello_123_bye'
140
140
  it_lexes_string "'hello world'", "hello world"
141
141
  it_lexes_string '"hello world"', "hello world"
142
-
142
+
143
143
  it_lexes_token '+', Token::PLUS
144
144
  it_lexes_token '-', Token::MINUS
145
145
  it_lexes_token '*', Token::STAR
146
146
  it_lexes_token '/', Token::SLASH
147
-
147
+
148
148
  it_lexes_token ',', Token::COMMA
149
149
  it_lexes_token '(', Token::LPAREN
150
150
  it_lexes_token ')', Token::RPAREN
@@ -155,20 +155,21 @@ describe Lexer do
155
155
  it_lexes_token '>=', Token::GTE
156
156
  it_lexes_token '!=', Token::NEQ
157
157
  it_lexes_token '<>', Token::NEQ
158
-
158
+
159
159
  it_lexes_integer '1', 1
160
160
  it_lexes_integer '0123', 123
161
161
  it_lexes_integer '45678791230', 45678791230
162
162
  it_lexes_decimal '123.456', 123.456
163
163
  it_lexes_decimal '.456', 0.456
164
-
164
+
165
165
  it_lexes_eof ''
166
166
  it_lexes_eof " \t\n\r"
167
-
167
+
168
168
  it_lexes_error '!'
169
169
  it_lexes_error '?'
170
170
  it_lexes_error ':'
171
171
 
172
- it_lexes_id 'concat'
173
- it_lexes_keyword 'concat', Token::Concat, :extensions => true
172
+ it_lexes_keyword 'concat', Token::Concat
173
+ it_lexes_keyword 'round', Token::Round
174
+ it_lexes_keyword 'floor', Token::Floor
174
175
  end
@@ -3,31 +3,31 @@ require 'rgviz'
3
3
  include Rgviz
4
4
 
5
5
  describe Parser do
6
- def parse(string, options = {})
7
- Parser.parse(string, options)
6
+ def parse(string)
7
+ Parser.parse(string)
8
8
  end
9
9
 
10
- def parse_select_single_column(string, options = {})
11
- query = parse "select #{string}", options
10
+ def parse_select_single_column(string)
11
+ query = parse "select #{string}"
12
12
  select = query.select
13
13
  select.columns.length.should == 1
14
-
14
+
15
15
  select.columns[0]
16
16
  end
17
-
17
+
18
18
  def parse_where(string)
19
19
  query = parse "where #{string}"
20
20
  query.where.expression
21
21
  end
22
-
22
+
23
23
  def self.it_parses_as_identifier(str)
24
24
  it "parses #{str} as identifier" do
25
- col = parse_select_single_column "#{str}"
25
+ col = parse_select_single_column "#{str}"
26
26
  col.should be_a_kind_of IdColumn
27
27
  col.name.should == "#{str}"
28
28
  end
29
29
  end
30
-
30
+
31
31
  def self.it_parses_columns_container(str, method)
32
32
  it "parses #{str}" do
33
33
  query = parse "#{str} foo"
@@ -37,7 +37,7 @@ describe Parser do
37
37
  cols.columns[0].name.should == 'foo'
38
38
  end
39
39
  end
40
-
40
+
41
41
  def self.it_raises_on(str)
42
42
  it "raises on #{str}" do
43
43
  lambda { parse "#{str}" }.should raise_error(ParseException)
@@ -54,81 +54,81 @@ describe Parser do
54
54
  select = query.select
55
55
  select.columns.should be_empty
56
56
  end
57
-
57
+
58
58
  it "parses select simple columns" do
59
59
  query = parse 'select one, two, three'
60
60
  select = query.select
61
-
61
+
62
62
  select.columns.length.should == 3
63
-
63
+
64
64
  ['one', 'two', 'three'].each_with_index do |name, i|
65
65
  select.columns[i].should be_a_kind_of IdColumn
66
66
  select.columns[i].name.should == name
67
67
  end
68
68
  end
69
-
69
+
70
70
  it "parses select number" do
71
71
  col = parse_select_single_column '1'
72
72
  col.should be_a_kind_of NumberColumn
73
73
  col.value.should == 1
74
74
  end
75
-
75
+
76
76
  it "parses select number with minus" do
77
77
  col = parse_select_single_column '-1'
78
78
  col.should be_a_kind_of NumberColumn
79
79
  col.value.should == -1
80
80
  end
81
-
81
+
82
82
  it "parses select number with plus" do
83
83
  col = parse_select_single_column '+1'
84
84
  col.should be_a_kind_of NumberColumn
85
85
  col.value.should == 1
86
86
  end
87
-
87
+
88
88
  it "parses select parenthesized number" do
89
89
  col = parse_select_single_column '(1)'
90
90
  col.should be_a_kind_of NumberColumn
91
91
  col.value.should == 1
92
92
  end
93
-
93
+
94
94
  it "parses select string" do
95
95
  col = parse_select_single_column '"hello"'
96
96
  col.should be_a_kind_of StringColumn
97
97
  col.value.should == 'hello'
98
98
  end
99
-
99
+
100
100
  it "parses select false" do
101
101
  col = parse_select_single_column 'false'
102
102
  col.should be_a_kind_of BooleanColumn
103
103
  col.value.should == false
104
104
  end
105
-
105
+
106
106
  it "parses select true" do
107
107
  col = parse_select_single_column 'true'
108
108
  col.should be_a_kind_of BooleanColumn
109
109
  col.value.should == true
110
110
  end
111
-
111
+
112
112
  it "parses select date" do
113
- col = parse_select_single_column 'date "2010-01-02"'
113
+ col = parse_select_single_column 'date "2010-01-02"'
114
114
  col.should be_a_kind_of DateColumn
115
115
  col.value.should == Date.parse('2010-01-02')
116
116
  end
117
-
117
+
118
118
  it "parses select timeofday" do
119
- col = parse_select_single_column 'timeofday "12:01:02"'
119
+ col = parse_select_single_column 'timeofday "12:01:02"'
120
120
  col.should be_a_kind_of TimeOfDayColumn
121
121
  col.value.hour.should == 12
122
122
  col.value.min.should == 1
123
123
  col.value.sec.should == 2
124
124
  end
125
-
125
+
126
126
  it "parses select datetime" do
127
- col = parse_select_single_column 'datetime "2010-01-02 12:02:03"'
127
+ col = parse_select_single_column 'datetime "2010-01-02 12:02:03"'
128
128
  col.should be_a_kind_of DateTimeColumn
129
129
  col.value.should == Time.parse('2010-01-02 12:02:03')
130
130
  end
131
-
131
+
132
132
  [
133
133
  ['*', ScalarFunctionColumn::Product],
134
134
  ['/', ScalarFunctionColumn::Quotient],
@@ -139,25 +139,25 @@ describe Parser do
139
139
  col = parse_select_single_column "1 #{str} one"
140
140
  col.should be_a_kind_of ScalarFunctionColumn
141
141
  col.function.should == func
142
-
143
- args = col.arguments
142
+
143
+ args = col.arguments
144
144
  args.length.should == 2
145
-
145
+
146
146
  args[0].should be_a_kind_of NumberColumn
147
147
  args[0].value.should == 1
148
-
148
+
149
149
  args[1].should be_a_kind_of IdColumn
150
150
  args[1].name.should == "one"
151
151
  end
152
152
  end
153
-
153
+
154
154
  it "parses compound arithmetic" do
155
155
  col = parse_select_single_column "1 * 2 + 3 * 4"
156
156
  col.should be_kind_of ScalarFunctionColumn
157
157
  col.function.should == ScalarFunctionColumn::Sum
158
-
158
+
159
159
  col.arguments.length.should == 2
160
-
160
+
161
161
  [0, 1].each do |i|
162
162
  sub = col.arguments[i]
163
163
  sub.should be_kind_of ScalarFunctionColumn
@@ -165,7 +165,7 @@ describe Parser do
165
165
  sub.arguments.length.should == 2
166
166
  end
167
167
  end
168
-
168
+
169
169
  [
170
170
  ['min', AggregateColumn::Min],
171
171
  ['max', AggregateColumn::Max],
@@ -174,17 +174,17 @@ describe Parser do
174
174
  ['sum', AggregateColumn::Sum]
175
175
  ].each do |str, function|
176
176
  it "parses #{str} aggregation" do
177
- col = parse_select_single_column "#{str}(col)"
177
+ col = parse_select_single_column "#{str}(col)"
178
178
  col.should be_a_kind_of AggregateColumn
179
179
  col.function.should == function
180
-
180
+
181
181
  col.argument.should be_a_kind_of IdColumn
182
182
  col.argument.name.should == 'col'
183
183
  end
184
-
184
+
185
185
  it_parses_as_identifier str
186
186
  end
187
-
187
+
188
188
  [
189
189
  ['year', ScalarFunctionColumn::Year],
190
190
  ['month', ScalarFunctionColumn::Month],
@@ -200,31 +200,33 @@ describe Parser do
200
200
  ['quarter', ScalarFunctionColumn::Quarter],
201
201
  ['dayofweek', ScalarFunctionColumn::DayOfWeek],
202
202
  ['todate', ScalarFunctionColumn::ToDate],
203
- ['concat', ScalarFunctionColumn::Concat, true],
204
- ].each do |str, function, extensions|
203
+ ['concat', ScalarFunctionColumn::Concat],
204
+ ['round', ScalarFunctionColumn::Round],
205
+ ['floor', ScalarFunctionColumn::Floor]
206
+ ].each do |str, function|
205
207
  it "parses #{str} function" do
206
- col = parse_select_single_column "#{str}(col)", :extensions => extensions
208
+ col = parse_select_single_column "#{str}(col)"
207
209
  col.should be_a_kind_of ScalarFunctionColumn
208
210
  col.function.should == function
209
-
211
+
210
212
  col.arguments.length.should == 1
211
213
  col.arguments[0].should be_a_kind_of IdColumn
212
214
  col.arguments[0].name.should == 'col'
213
215
  end
214
-
216
+
215
217
  it_parses_as_identifier str
216
218
  end
217
-
219
+
218
220
  it "parses datediff function with many arguments" do
219
- col = parse_select_single_column "datediff(1, 2)"
221
+ col = parse_select_single_column "datediff(1, 2)"
220
222
  col.should be_a_kind_of ScalarFunctionColumn
221
223
  col.function.should == ScalarFunctionColumn::DateDiff
222
-
224
+
223
225
  col.arguments.length.should == 2
224
226
  col.arguments[0].value == 1
225
227
  col.arguments[1].value == 2
226
228
  end
227
-
229
+
228
230
  [
229
231
  ['=', BinaryExpression::Eq],
230
232
  ['!=', BinaryExpression::Neq],
@@ -249,7 +251,7 @@ describe Parser do
249
251
  exp.right.value.should == 1
250
252
  end
251
253
  end
252
-
254
+
253
255
  it_parses_as_identifier 'contains'
254
256
  it_parses_as_identifier 'starts'
255
257
  it_parses_as_identifier 'ends'
@@ -260,10 +262,10 @@ describe Parser do
260
262
  it_parses_as_identifier 'no_format'
261
263
  it_parses_as_identifier 'is'
262
264
  it_parses_as_identifier 'null'
263
-
265
+
264
266
  it_parses_columns_container 'group by', :group_by
265
267
  it_parses_columns_container 'pivot', :pivot
266
-
268
+
267
269
  [
268
270
  ['', Sort::Asc],
269
271
  [' asc', Sort::Asc],
@@ -272,86 +274,86 @@ describe Parser do
272
274
  it "parses order by" do
273
275
  query = parse "order by foo #{order}, bar #{order}"
274
276
  order_by = query.order_by
275
-
276
- sorts = order_by.sorts
277
-
277
+
278
+ sorts = order_by.sorts
279
+
278
280
  sorts.length.should == 2
279
-
281
+
280
282
  sorts[0].column.should be_a_kind_of IdColumn
281
283
  sorts[0].column.name.should == 'foo'
282
284
  sorts[0].order.should == order
283
-
285
+
284
286
  sorts[1].column.should be_a_kind_of IdColumn
285
287
  sorts[1].column.name.should == 'bar'
286
288
  sorts[1].order.should == order
287
289
  end
288
290
  end
289
-
291
+
290
292
  it "parses limit" do
291
293
  query = parse "limit 10"
292
294
  query.limit.should == 10
293
295
  end
294
-
296
+
295
297
  it "parses offset" do
296
298
  query = parse "offset 10"
297
299
  query.offset.should == 10
298
300
  end
299
-
301
+
300
302
  it "parses label" do
301
303
  query = parse "label one 'unu', two 'du'"
302
304
  labels = query.labels
303
305
  labels.length.should == 2
304
-
306
+
305
307
  labels[0].column.should be_a_kind_of IdColumn
306
308
  labels[0].column.name.should == 'one'
307
309
  labels[0].label.should == 'unu'
308
-
310
+
309
311
  labels[1].column.should be_a_kind_of IdColumn
310
312
  labels[1].column.name.should == 'two'
311
313
  labels[1].label.should == 'du'
312
314
  end
313
-
315
+
314
316
  it "parses format" do
315
317
  query = parse "format one 'unu', two 'du'"
316
318
  formats = query.formats
317
319
  formats.length.should == 2
318
-
320
+
319
321
  formats[0].column.should be_a_kind_of IdColumn
320
322
  formats[0].column.name.should == 'one'
321
323
  formats[0].pattern.should == 'unu'
322
-
324
+
323
325
  formats[1].column.should be_a_kind_of IdColumn
324
326
  formats[1].column.name.should == 'two'
325
327
  formats[1].pattern.should == 'du'
326
328
  end
327
-
329
+
328
330
  it "parses options" do
329
331
  query = parse "options no_values no_format"
330
332
  options = query.options
331
333
  options.no_values.should be_true
332
334
  options.no_format.should be_true
333
335
  end
334
-
336
+
335
337
  [
336
338
  ['and', LogicalExpression::And],
337
339
  ['or', LogicalExpression::Or]
338
340
  ].each do |str, op|
339
341
  it "parses where with two #{str}" do
340
342
  query = parse "where 1 = 1 #{str} 1 = 2 #{str} 1 = 3"
341
- exp = query.where.expression
342
-
343
+ exp = query.where.expression
344
+
343
345
  exp.should be_a_kind_of LogicalExpression
344
346
  exp.operator.should == op
345
347
  exp.operands.length.should == 3
346
348
  end
347
349
  end
348
-
350
+
349
351
  ['+', '-', '*', '/'].each do |op|
350
352
  it "parses where with two #{op}" do
351
353
  parse "where 1 #{op} 2 #{op} 3 = 4"
352
354
  end
353
355
  end
354
-
356
+
355
357
  it_raises_on 'select'
356
358
  it_raises_on 'where'
357
359
  it_raises_on 'where 1'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rgviz
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.45'
4
+ version: '0.46'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2010-06-08 00:00:00.000000000Z
12
+ date: 2010-06-08 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Google Visualization API Query Language written in Ruby.
15
15
  email: aborenszweig@manas.com.ar