skydb 0.2.2 → 0.2.3

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 (54) hide show
  1. data/bin/sky +4 -0
  2. data/lib/skydb.rb +3 -2
  3. data/lib/skydb/action.rb +19 -0
  4. data/lib/skydb/client.rb +15 -5
  5. data/lib/skydb/event.rb +3 -7
  6. data/lib/skydb/import/importer.rb +236 -59
  7. data/lib/skydb/import/transforms/apache.yml +4 -0
  8. data/lib/skydb/import/transforms/sky.yml +20 -12
  9. data/lib/skydb/message.rb +1 -0
  10. data/lib/skydb/message/add_event.rb +1 -1
  11. data/lib/skydb/message/get_actions.rb +4 -0
  12. data/lib/skydb/message/get_properties.rb +4 -0
  13. data/lib/skydb/message/get_tables.rb +43 -0
  14. data/lib/skydb/message/lua/aggregate.rb +4 -0
  15. data/lib/skydb/property.rb +10 -0
  16. data/lib/skydb/query.rb +44 -59
  17. data/lib/skydb/query/after_condition.rb +104 -0
  18. data/lib/skydb/query/{after.rb → condition.rb} +37 -27
  19. data/lib/skydb/query/on_condition.rb +53 -0
  20. data/lib/skydb/query/selection.rb +131 -1
  21. data/lib/skydb/query/selection_field.rb +25 -0
  22. data/lib/skydb/query/selection_group.rb +21 -0
  23. data/lib/skydb/table.rb +7 -0
  24. data/lib/skydb/version.rb +1 -1
  25. data/test/integration/query_test.rb +102 -0
  26. data/test/test_helper.rb +42 -1
  27. data/test/{client_test.rb → unit/client_test.rb} +0 -0
  28. data/test/{event_test.rb → unit/event_test.rb} +0 -5
  29. data/test/unit/import/importer_test.rb +208 -0
  30. data/test/{import → unit/import}/translator_test.rb +0 -0
  31. data/test/{message → unit/message}/add_action_message_test.rb +0 -0
  32. data/test/{message → unit/message}/add_event_message_test.rb +2 -2
  33. data/test/{message → unit/message}/add_property_message_test.rb +0 -0
  34. data/test/{message → unit/message}/create_table_message_test.rb +0 -0
  35. data/test/{message → unit/message}/delete_table_message_test.rb +0 -0
  36. data/test/{message → unit/message}/get_action_message_test.rb +0 -0
  37. data/test/{message → unit/message}/get_actions_message_test.rb +0 -0
  38. data/test/{message → unit/message}/get_properties_message_test.rb +0 -0
  39. data/test/{message → unit/message}/get_property_message_test.rb +0 -0
  40. data/test/{message → unit/message}/get_table_message_test.rb +0 -0
  41. data/test/unit/message/get_tables_message_test.rb +18 -0
  42. data/test/{message → unit/message}/lookup_message_test.rb +0 -0
  43. data/test/{message → unit/message}/lua_aggregate_message_test.rb +0 -0
  44. data/test/{message → unit/message}/multi_message_test.rb +0 -0
  45. data/test/{message → unit/message}/next_action_message_test.rb +0 -0
  46. data/test/{message → unit/message}/ping_message_test.rb +0 -0
  47. data/test/{message_test.rb → unit/message_test.rb} +0 -0
  48. data/test/unit/query/after_test.rb +89 -0
  49. data/test/{query/after_test.rb → unit/query/on_test.rb} +10 -10
  50. data/test/{query → unit/query}/selection_test.rb +2 -2
  51. data/test/{query_test.rb → unit/query_test.rb} +32 -6
  52. data/test/{skydb_test.rb → unit/skydb_test.rb} +0 -0
  53. metadata +165 -53
  54. data/test/import/importer_test.rb +0 -42
@@ -141,12 +141,12 @@ class TestQuerySelection < MiniTest::Unit::TestCase
141
141
  end
142
142
 
143
143
  def test_max_codegen
144
- @selection.fields = SkyDB::Query::Selection.parse_fields("min(foo) bar")
144
+ @selection.fields = SkyDB::Query::Selection.parse_fields("max(foo) bar")
145
145
  expected =
146
146
  <<-BLOCK.unindent
147
147
  function select(cursor, data)
148
148
  target = data
149
- if(target.bar == nil or target.bar > cursor.event.foo()) then
149
+ if(target.bar == nil or target.bar < cursor.event.foo()) then
150
150
  target.bar = cursor.event.foo()
151
151
  end
152
152
  end
@@ -64,12 +64,12 @@ class TestQuery < MiniTest::Unit::TestCase
64
64
  def test_after
65
65
  @query.select('count()').after('foo')
66
66
  assert_equal :count, @query.selection.fields[0].aggregation_type
67
- assert_equal 'foo', @query.conditions[0].action.name
67
+ assert_equal 'foo', @query.selection.conditions[0].action.name
68
68
  end
69
69
 
70
70
  def test_after_with_hash
71
71
  @query.select('count()').after(:action => 'foo')
72
- assert_equal 'foo', @query.conditions[0].action.name
72
+ assert_equal 'foo', @query.selection.conditions[0].action.name
73
73
  end
74
74
 
75
75
 
@@ -87,6 +87,7 @@ class TestQuery < MiniTest::Unit::TestCase
87
87
  end
88
88
 
89
89
  function __condition1(cursor, data)
90
+ if cursor:eos() or cursor:eof() then return false end
90
91
  repeat
91
92
  if cursor.event.action_id == 10 then
92
93
  cursor:next()
@@ -97,6 +98,7 @@ class TestQuery < MiniTest::Unit::TestCase
97
98
  end
98
99
 
99
100
  function __condition2(cursor, data)
101
+ if cursor:eos() or cursor:eof() then return false end
100
102
  repeat
101
103
  if cursor.event.action_id == 20 then
102
104
  cursor:next()
@@ -106,7 +108,7 @@ class TestQuery < MiniTest::Unit::TestCase
106
108
  return false
107
109
  end
108
110
 
109
- function aggregate(cursor, data)
111
+ function select_all(cursor, data)
110
112
  while cursor:next_session() do
111
113
  while cursor:next() do
112
114
  if __condition1(cursor, data) and __condition2(cursor, data) then
@@ -121,12 +123,16 @@ class TestQuery < MiniTest::Unit::TestCase
121
123
  b = data
122
124
  a.count = (a.count or 0) + (b.count or 0)
123
125
  end
126
+
127
+ function aggregate(cursor, data)
128
+ select_all(cursor, data)
129
+ end
124
130
  BLOCK
125
131
  assert_equal expected.chomp, @query.codegen().chomp
126
132
  end
127
133
 
128
134
  def test_codegen_with_session
129
- @query.select('count()').session(7200)
135
+ @query.session(7200).select('count()')
130
136
  expected =
131
137
  <<-BLOCK.unindent
132
138
  function select(cursor, data)
@@ -134,8 +140,8 @@ class TestQuery < MiniTest::Unit::TestCase
134
140
  target.count = (target.count or 0) + 1
135
141
  end
136
142
 
137
- function aggregate(cursor, data)
138
- cursor:set_session_idle(7200)
143
+
144
+ function select_all(cursor, data)
139
145
  while cursor:next_session() do
140
146
  while cursor:next() do
141
147
  if true then
@@ -150,7 +156,27 @@ class TestQuery < MiniTest::Unit::TestCase
150
156
  b = data
151
157
  a.count = (a.count or 0) + (b.count or 0)
152
158
  end
159
+
160
+ function aggregate(cursor, data)
161
+ cursor:set_session_idle(7200)
162
+ select_all(cursor, data)
163
+ end
153
164
  BLOCK
154
165
  assert_equal expected.chomp, @query.codegen().chomp
155
166
  end
167
+
168
+
169
+ ######################################
170
+ # Serialization
171
+ ######################################
172
+
173
+ def test_to_hash
174
+ @query.select('count()').group_by("action_id").on(:enter).after(:action => 10, :within => {:quantity => 1, :unit => 'step'}).after(20)
175
+ assert_equal IO.read("fixtures/unit/query/query.json"), JSON.pretty_generate(@query.to_hash)
176
+ end
177
+
178
+ def test_from_json
179
+ @query.from_hash(JSON.parse(IO.read("fixtures/unit/query/query.json")))
180
+ assert_equal IO.read("fixtures/unit/query/query.json"), JSON.pretty_generate(@query.to_hash)
181
+ end
156
182
  end
File without changes
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: skydb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
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: 2013-01-23 00:00:00.000000000 Z
12
+ date: 2013-02-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: msgpack
@@ -91,6 +91,70 @@ dependencies:
91
91
  - - ~>
92
92
  - !ruby/object:Gem::Version
93
93
  version: 1.4.12
94
+ - !ruby/object:Gem::Dependency
95
+ name: yajl-ruby
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: 1.1.0
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 1.1.0
110
+ - !ruby/object:Gem::Dependency
111
+ name: bzip2-ruby
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: 0.2.7
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: 0.2.7
126
+ - !ruby/object:Gem::Dependency
127
+ name: apachelogregex
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ~>
132
+ - !ruby/object:Gem::Version
133
+ version: 0.1.0
134
+ type: :runtime
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ~>
140
+ - !ruby/object:Gem::Version
141
+ version: 0.1.0
142
+ - !ruby/object:Gem::Dependency
143
+ name: useragent
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ~>
148
+ - !ruby/object:Gem::Version
149
+ version: 0.4.16
150
+ type: :runtime
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ~>
156
+ - !ruby/object:Gem::Version
157
+ version: 0.4.16
94
158
  - !ruby/object:Gem::Dependency
95
159
  name: rake
96
160
  requirement: !ruby/object:Gem::Requirement
@@ -147,7 +211,7 @@ dependencies:
147
211
  - - ~>
148
212
  - !ruby/object:Gem::Version
149
213
  version: 0.1.0
150
- type: :runtime
214
+ type: :development
151
215
  prerelease: false
152
216
  version_requirements: !ruby/object:Gem::Requirement
153
217
  none: false
@@ -155,6 +219,38 @@ dependencies:
155
219
  - - ~>
156
220
  - !ruby/object:Gem::Version
157
221
  version: 0.1.0
222
+ - !ruby/object:Gem::Dependency
223
+ name: simplecov
224
+ requirement: !ruby/object:Gem::Requirement
225
+ none: false
226
+ requirements:
227
+ - - ~>
228
+ - !ruby/object:Gem::Version
229
+ version: 0.7.1
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ none: false
234
+ requirements:
235
+ - - ~>
236
+ - !ruby/object:Gem::Version
237
+ version: 0.7.1
238
+ - !ruby/object:Gem::Dependency
239
+ name: m
240
+ requirement: !ruby/object:Gem::Requirement
241
+ none: false
242
+ requirements:
243
+ - - ~>
244
+ - !ruby/object:Gem::Version
245
+ version: 1.3.1
246
+ type: :development
247
+ prerelease: false
248
+ version_requirements: !ruby/object:Gem::Requirement
249
+ none: false
250
+ requirements:
251
+ - - ~>
252
+ - !ruby/object:Gem::Version
253
+ version: 1.3.1
158
254
  description:
159
255
  email:
160
256
  - benbjohnson@yahoo.com
@@ -170,6 +266,7 @@ files:
170
266
  - lib/skydb/client.rb
171
267
  - lib/skydb/event.rb
172
268
  - lib/skydb/import/importer.rb
269
+ - lib/skydb/import/transforms/apache.yml
173
270
  - lib/skydb/import/transforms/sky.yml
174
271
  - lib/skydb/import/transforms/snowplow.yml
175
272
  - lib/skydb/import/translator.rb
@@ -184,6 +281,7 @@ files:
184
281
  - lib/skydb/message/get_properties.rb
185
282
  - lib/skydb/message/get_property.rb
186
283
  - lib/skydb/message/get_table.rb
284
+ - lib/skydb/message/get_tables.rb
187
285
  - lib/skydb/message/lookup.rb
188
286
  - lib/skydb/message/lua/aggregate.rb
189
287
  - lib/skydb/message/multi.rb
@@ -192,11 +290,13 @@ files:
192
290
  - lib/skydb/message.rb
193
291
  - lib/skydb/property/type.rb
194
292
  - lib/skydb/property.rb
195
- - lib/skydb/query/after.rb
293
+ - lib/skydb/query/after_condition.rb
196
294
  - lib/skydb/query/ast/selection_field_syntax_node.rb
197
295
  - lib/skydb/query/ast/selection_fields_syntax_node.rb
198
296
  - lib/skydb/query/ast/selection_group_syntax_node.rb
199
297
  - lib/skydb/query/ast/selection_groups_syntax_node.rb
298
+ - lib/skydb/query/condition.rb
299
+ - lib/skydb/query/on_condition.rb
200
300
  - lib/skydb/query/selection.rb
201
301
  - lib/skydb/query/selection_field.rb
202
302
  - lib/skydb/query/selection_fields_grammar.treetop
@@ -211,31 +311,34 @@ files:
211
311
  - lib/skydb/version.rb
212
312
  - lib/skydb.rb
213
313
  - README.md
214
- - test/client_test.rb
215
- - test/event_test.rb
216
- - test/import/importer_test.rb
217
- - test/import/translator_test.rb
218
- - test/message/add_action_message_test.rb
219
- - test/message/add_event_message_test.rb
220
- - test/message/add_property_message_test.rb
221
- - test/message/create_table_message_test.rb
222
- - test/message/delete_table_message_test.rb
223
- - test/message/get_action_message_test.rb
224
- - test/message/get_actions_message_test.rb
225
- - test/message/get_properties_message_test.rb
226
- - test/message/get_property_message_test.rb
227
- - test/message/get_table_message_test.rb
228
- - test/message/lookup_message_test.rb
229
- - test/message/lua_aggregate_message_test.rb
230
- - test/message/multi_message_test.rb
231
- - test/message/next_action_message_test.rb
232
- - test/message/ping_message_test.rb
233
- - test/message_test.rb
234
- - test/query/after_test.rb
235
- - test/query/selection_test.rb
236
- - test/query_test.rb
237
- - test/skydb_test.rb
314
+ - test/integration/query_test.rb
238
315
  - test/test_helper.rb
316
+ - test/unit/client_test.rb
317
+ - test/unit/event_test.rb
318
+ - test/unit/import/importer_test.rb
319
+ - test/unit/import/translator_test.rb
320
+ - test/unit/message/add_action_message_test.rb
321
+ - test/unit/message/add_event_message_test.rb
322
+ - test/unit/message/add_property_message_test.rb
323
+ - test/unit/message/create_table_message_test.rb
324
+ - test/unit/message/delete_table_message_test.rb
325
+ - test/unit/message/get_action_message_test.rb
326
+ - test/unit/message/get_actions_message_test.rb
327
+ - test/unit/message/get_properties_message_test.rb
328
+ - test/unit/message/get_property_message_test.rb
329
+ - test/unit/message/get_table_message_test.rb
330
+ - test/unit/message/get_tables_message_test.rb
331
+ - test/unit/message/lookup_message_test.rb
332
+ - test/unit/message/lua_aggregate_message_test.rb
333
+ - test/unit/message/multi_message_test.rb
334
+ - test/unit/message/next_action_message_test.rb
335
+ - test/unit/message/ping_message_test.rb
336
+ - test/unit/message_test.rb
337
+ - test/unit/query/after_test.rb
338
+ - test/unit/query/on_test.rb
339
+ - test/unit/query/selection_test.rb
340
+ - test/unit/query_test.rb
341
+ - test/unit/skydb_test.rb
239
342
  - bin/sky
240
343
  homepage: http://github.com/skydb/sky.rb
241
344
  licenses: []
@@ -249,41 +352,50 @@ required_ruby_version: !ruby/object:Gem::Requirement
249
352
  - - ! '>='
250
353
  - !ruby/object:Gem::Version
251
354
  version: '0'
355
+ segments:
356
+ - 0
357
+ hash: -3253768369424236185
252
358
  required_rubygems_version: !ruby/object:Gem::Requirement
253
359
  none: false
254
360
  requirements:
255
361
  - - ! '>='
256
362
  - !ruby/object:Gem::Version
257
363
  version: '0'
364
+ segments:
365
+ - 0
366
+ hash: -3253768369424236185
258
367
  requirements: []
259
368
  rubyforge_project:
260
- rubygems_version: 1.8.24
369
+ rubygems_version: 1.8.25
261
370
  signing_key:
262
371
  specification_version: 3
263
372
  summary: A Ruby client for the Sky database
264
373
  test_files:
265
- - test/client_test.rb
266
- - test/event_test.rb
267
- - test/import/importer_test.rb
268
- - test/import/translator_test.rb
269
- - test/message/add_action_message_test.rb
270
- - test/message/add_event_message_test.rb
271
- - test/message/add_property_message_test.rb
272
- - test/message/create_table_message_test.rb
273
- - test/message/delete_table_message_test.rb
274
- - test/message/get_action_message_test.rb
275
- - test/message/get_actions_message_test.rb
276
- - test/message/get_properties_message_test.rb
277
- - test/message/get_property_message_test.rb
278
- - test/message/get_table_message_test.rb
279
- - test/message/lookup_message_test.rb
280
- - test/message/lua_aggregate_message_test.rb
281
- - test/message/multi_message_test.rb
282
- - test/message/next_action_message_test.rb
283
- - test/message/ping_message_test.rb
284
- - test/message_test.rb
285
- - test/query/after_test.rb
286
- - test/query/selection_test.rb
287
- - test/query_test.rb
288
- - test/skydb_test.rb
374
+ - test/integration/query_test.rb
289
375
  - test/test_helper.rb
376
+ - test/unit/client_test.rb
377
+ - test/unit/event_test.rb
378
+ - test/unit/import/importer_test.rb
379
+ - test/unit/import/translator_test.rb
380
+ - test/unit/message/add_action_message_test.rb
381
+ - test/unit/message/add_event_message_test.rb
382
+ - test/unit/message/add_property_message_test.rb
383
+ - test/unit/message/create_table_message_test.rb
384
+ - test/unit/message/delete_table_message_test.rb
385
+ - test/unit/message/get_action_message_test.rb
386
+ - test/unit/message/get_actions_message_test.rb
387
+ - test/unit/message/get_properties_message_test.rb
388
+ - test/unit/message/get_property_message_test.rb
389
+ - test/unit/message/get_table_message_test.rb
390
+ - test/unit/message/get_tables_message_test.rb
391
+ - test/unit/message/lookup_message_test.rb
392
+ - test/unit/message/lua_aggregate_message_test.rb
393
+ - test/unit/message/multi_message_test.rb
394
+ - test/unit/message/next_action_message_test.rb
395
+ - test/unit/message/ping_message_test.rb
396
+ - test/unit/message_test.rb
397
+ - test/unit/query/after_test.rb
398
+ - test/unit/query/on_test.rb
399
+ - test/unit/query/selection_test.rb
400
+ - test/unit/query_test.rb
401
+ - test/unit/skydb_test.rb
@@ -1,42 +0,0 @@
1
- require 'test_helper'
2
-
3
- class TestImporter < MiniTest::Unit::TestCase
4
- def setup
5
- @importer = SkyDB::Import::Importer.new()
6
- @input = {
7
- 'myString' => 'Hello',
8
- 'foo' => 100
9
- }
10
- @output = {}
11
- end
12
-
13
-
14
- ######################################
15
- # Transform File
16
- ######################################
17
-
18
- def test_load_simple_transform
19
- @importer.load_transform(
20
- <<-BLOCK.unindent
21
- fields:
22
- name: myString
23
- BLOCK
24
- )
25
-
26
- assert_equal "myString", @importer.translators.first.input_field
27
- assert_equal "name", @importer.translators.first.output_field
28
- assert_equal "string", @importer.translators.first.format
29
- end
30
-
31
- def test_load_simple_proc
32
- @importer.load_transform(
33
- <<-BLOCK.unindent
34
- fields:
35
- name: "{ output['foo'] * 10 }"
36
- BLOCK
37
- )
38
-
39
- assert_equal "name", @importer.translators.first.output_field
40
- assert !@importer.translators.first.translate_function.nil?
41
- end
42
- end