volt 0.5.18 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/Readme.md +14 -0
  3. data/VERSION +1 -1
  4. data/app/volt/controllers/notices_controller.rb +9 -0
  5. data/app/volt/tasks/live_query/data_store.rb +12 -0
  6. data/app/volt/tasks/live_query/live_query.rb +86 -0
  7. data/app/volt/tasks/live_query/live_query_pool.rb +36 -0
  8. data/app/volt/tasks/live_query/query_tracker.rb +95 -0
  9. data/app/volt/tasks/query_tasks.rb +57 -0
  10. data/app/volt/tasks/store_tasks.rb +4 -17
  11. data/lib/volt.rb +2 -0
  12. data/lib/volt/console.rb +1 -1
  13. data/lib/volt/controllers/model_controller.rb +4 -0
  14. data/lib/volt/extra_core/array.rb +9 -0
  15. data/lib/volt/extra_core/extra_core.rb +1 -0
  16. data/lib/volt/extra_core/hash.rb +11 -0
  17. data/lib/volt/extra_core/object.rb +4 -0
  18. data/lib/volt/models/array_model.rb +56 -0
  19. data/lib/volt/models/model.rb +6 -11
  20. data/lib/volt/models/model_helpers.rb +12 -0
  21. data/lib/volt/models/persistors/array_store.rb +120 -21
  22. data/lib/volt/models/persistors/model_identity_map.rb +12 -0
  23. data/lib/volt/models/persistors/model_store.rb +20 -60
  24. data/lib/volt/models/persistors/query/query_listener.rb +87 -0
  25. data/lib/volt/models/persistors/query/query_listener_pool.rb +9 -0
  26. data/lib/volt/models/persistors/store.rb +11 -13
  27. data/lib/volt/models/url.rb +1 -1
  28. data/lib/volt/page/bindings/attribute_binding.rb +2 -2
  29. data/lib/volt/page/bindings/base_binding.rb +13 -1
  30. data/lib/volt/page/bindings/component_binding.rb +1 -1
  31. data/lib/volt/page/bindings/content_binding.rb +2 -2
  32. data/lib/volt/page/bindings/each_binding.rb +25 -21
  33. data/lib/volt/page/bindings/event_binding.rb +4 -6
  34. data/lib/volt/page/bindings/if_binding.rb +4 -5
  35. data/lib/volt/page/bindings/template_binding.rb +4 -4
  36. data/lib/volt/page/channel.rb +0 -1
  37. data/lib/volt/page/document.rb +7 -0
  38. data/lib/volt/page/page.rb +4 -4
  39. data/lib/volt/page/reactive_template.rb +2 -2
  40. data/lib/volt/page/targets/dom_section.rb +5 -0
  41. data/lib/volt/page/tasks.rb +10 -40
  42. data/lib/volt/page/template_renderer.rb +4 -4
  43. data/lib/volt/reactive/events.rb +14 -0
  44. data/lib/volt/reactive/reactive_array.rb +17 -7
  45. data/lib/volt/reactive/reactive_value.rb +65 -1
  46. data/lib/volt/server.rb +1 -1
  47. data/lib/volt/server/if_binding_setup.rb +3 -1
  48. data/lib/volt/server/socket_connection_handler.rb +7 -5
  49. data/lib/volt/server/template_parser.rb +7 -7
  50. data/lib/volt/tasks/dispatcher.rb +3 -0
  51. data/lib/volt/utils/ejson.rb +9 -0
  52. data/lib/volt/utils/generic_counting_pool.rb +44 -0
  53. data/lib/volt/utils/generic_pool.rb +88 -0
  54. data/spec/models/reactive_array_spec.rb +43 -0
  55. data/spec/models/reactive_generator_spec.rb +58 -0
  56. data/spec/models/reactive_value_spec.rb +6 -0
  57. data/spec/page/bindings/content_binding_spec.rb +36 -0
  58. data/spec/spec_helper.rb +13 -12
  59. data/spec/tasks/live_query_spec.rb +20 -0
  60. data/spec/tasks/query_tasks.rb +10 -0
  61. data/spec/tasks/query_tracker_spec.rb +120 -0
  62. data/spec/templates/template_binding_spec.rb +16 -10
  63. data/spec/utils/generic_counting_pool_spec.rb +36 -0
  64. data/spec/utils/generic_pool_spec.rb +50 -0
  65. metadata +29 -5
  66. data/app/volt/tasks/channel_tasks.rb +0 -55
  67. data/spec/tasks/channel_tasks_spec.rb +0 -74
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: volt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.18
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Stout
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-10 00:00:00.000000000 Z
11
+ date: 2014-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -327,7 +327,11 @@ files:
327
327
  - app/volt/assets/js/sockjs-0.2.1.min.js
328
328
  - app/volt/config/dependencies.rb
329
329
  - app/volt/controllers/notices_controller.rb
330
- - app/volt/tasks/channel_tasks.rb
330
+ - app/volt/tasks/live_query/data_store.rb
331
+ - app/volt/tasks/live_query/live_query.rb
332
+ - app/volt/tasks/live_query/live_query_pool.rb
333
+ - app/volt/tasks/live_query/query_tracker.rb
334
+ - app/volt/tasks/query_tasks.rb
331
335
  - app/volt/tasks/store_tasks.rb
332
336
  - app/volt/views/notices/index.html
333
337
  - bin/volt
@@ -343,6 +347,7 @@ files:
343
347
  - lib/volt/extra_core/array.rb
344
348
  - lib/volt/extra_core/blank.rb
345
349
  - lib/volt/extra_core/extra_core.rb
350
+ - lib/volt/extra_core/hash.rb
346
351
  - lib/volt/extra_core/numeric.rb
347
352
  - lib/volt/extra_core/object.rb
348
353
  - lib/volt/extra_core/string.rb
@@ -360,8 +365,11 @@ files:
360
365
  - lib/volt/models/persistors/array_store.rb
361
366
  - lib/volt/models/persistors/base.rb
362
367
  - lib/volt/models/persistors/flash.rb
368
+ - lib/volt/models/persistors/model_identity_map.rb
363
369
  - lib/volt/models/persistors/model_store.rb
364
370
  - lib/volt/models/persistors/params.rb
371
+ - lib/volt/models/persistors/query/query_listener.rb
372
+ - lib/volt/models/persistors/query/query_listener_pool.rb
365
373
  - lib/volt/models/persistors/store.rb
366
374
  - lib/volt/models/persistors/store_factory.rb
367
375
  - lib/volt/models/url.rb
@@ -375,6 +383,7 @@ files:
375
383
  - lib/volt/page/bindings/template_binding.rb
376
384
  - lib/volt/page/channel.rb
377
385
  - lib/volt/page/channel_stub.rb
386
+ - lib/volt/page/document.rb
378
387
  - lib/volt/page/document_events.rb
379
388
  - lib/volt/page/draw_cycle.rb
380
389
  - lib/volt/page/memory_test.rb
@@ -420,6 +429,9 @@ files:
420
429
  - lib/volt/server/template_parser.rb
421
430
  - lib/volt/store/mongo.rb
422
431
  - lib/volt/tasks/dispatcher.rb
432
+ - lib/volt/utils/ejson.rb
433
+ - lib/volt/utils/generic_counting_pool.rb
434
+ - lib/volt/utils/generic_pool.rb
423
435
  - lib/volt/volt/environment.rb
424
436
  - spec/app/bootstrap/assets/js/bootstrap.js
425
437
  - spec/app/main/assets/js/test1.js
@@ -433,10 +445,12 @@ files:
433
445
  - spec/models/persistors/params_spec.rb
434
446
  - spec/models/persistors/store_spec.rb
435
447
  - spec/models/reactive_array_spec.rb
448
+ - spec/models/reactive_generator_spec.rb
436
449
  - spec/models/reactive_tags_spec.rb
437
450
  - spec/models/reactive_value_spec.rb
438
451
  - spec/models/store_spec.rb
439
452
  - spec/models/string_extensions_spec.rb
453
+ - spec/page/bindings/content_binding_spec.rb
440
454
  - spec/page/sub_context_spec.rb
441
455
  - spec/router/routes_spec.rb
442
456
  - spec/server/rack/asset_files_spec.rb
@@ -444,9 +458,13 @@ files:
444
458
  - spec/server/template_parser_spec.rb
445
459
  - spec/spec_helper.rb
446
460
  - spec/store/mongo_spec.rb
447
- - spec/tasks/channel_tasks_spec.rb
461
+ - spec/tasks/live_query_spec.rb
462
+ - spec/tasks/query_tasks.rb
463
+ - spec/tasks/query_tracker_spec.rb
448
464
  - spec/templates/targets/binding_document/component_node_spec.rb
449
465
  - spec/templates/template_binding_spec.rb
466
+ - spec/utils/generic_counting_pool_spec.rb
467
+ - spec/utils/generic_pool_spec.rb
450
468
  - templates/.gitignore
451
469
  - templates/newgem/Gemfile.tt
452
470
  - templates/newgem/LICENSE.txt.tt
@@ -524,10 +542,12 @@ test_files:
524
542
  - spec/models/persistors/params_spec.rb
525
543
  - spec/models/persistors/store_spec.rb
526
544
  - spec/models/reactive_array_spec.rb
545
+ - spec/models/reactive_generator_spec.rb
527
546
  - spec/models/reactive_tags_spec.rb
528
547
  - spec/models/reactive_value_spec.rb
529
548
  - spec/models/store_spec.rb
530
549
  - spec/models/string_extensions_spec.rb
550
+ - spec/page/bindings/content_binding_spec.rb
531
551
  - spec/page/sub_context_spec.rb
532
552
  - spec/router/routes_spec.rb
533
553
  - spec/server/rack/asset_files_spec.rb
@@ -535,7 +555,11 @@ test_files:
535
555
  - spec/server/template_parser_spec.rb
536
556
  - spec/spec_helper.rb
537
557
  - spec/store/mongo_spec.rb
538
- - spec/tasks/channel_tasks_spec.rb
558
+ - spec/tasks/live_query_spec.rb
559
+ - spec/tasks/query_tasks.rb
560
+ - spec/tasks/query_tracker_spec.rb
539
561
  - spec/templates/targets/binding_document/component_node_spec.rb
540
562
  - spec/templates/template_binding_spec.rb
563
+ - spec/utils/generic_counting_pool_spec.rb
564
+ - spec/utils/generic_pool_spec.rb
541
565
  has_rdoc:
@@ -1,55 +0,0 @@
1
- class ChannelTasks
2
- @@listeners = {}
3
- @@channel_listeners = {}
4
-
5
- # The dispatcher passes its self in
6
- def initialize(channel, dispatcher=nil)
7
- @channel = channel
8
- end
9
-
10
- def add_listener(channel_name, scope={})
11
- # Track every channel that is listening
12
- @@listeners[channel_name] ||= []
13
- @@listeners[channel_name] << @channel
14
-
15
- # Also keep track of which channel names a channel is listening
16
- # on so it can be removed if a channel is closed.
17
- @@channel_listeners[@channel] ||= {}
18
- @@channel_listeners[@channel][channel_name] = true
19
- end
20
-
21
- def remove_listener(channel_name, scope={})
22
- if @@listeners[channel_name]
23
- @@listeners[channel_name].delete(@channel)
24
- if @@channel_listeners[@channel]
25
- @@channel_listeners[@channel].delete(channel_name)
26
- end
27
- end
28
- end
29
-
30
- # Called when a channel is closed, removes its listeners from
31
- # all channels.
32
- def close!
33
- channel_names = @@channel_listeners.delete(@channel)
34
-
35
- if channel_names
36
- channel_names.each_pair do |channel_name,val|
37
- remove_listener(channel_name)
38
- end
39
- end
40
- end
41
-
42
- def self.send_message_to_channel(channel_name, message, skip_channel=nil)
43
- listeners = @@listeners[channel_name]
44
-
45
- if listeners
46
- listeners.each do |listener|
47
- # We might need to skip a channel if the update came in on this
48
- # channel.
49
- next if listener == skip_channel
50
-
51
- listener.send_message(*message)
52
- end
53
- end
54
- end
55
- end
@@ -1,74 +0,0 @@
1
- if RUBY_PLATFORM != 'opal'
2
- describe "ChannelTasks" do
3
- before do
4
- load File.join(File.dirname(__FILE__), "../../app/volt/tasks/channel_tasks.rb")
5
- end
6
-
7
- after do
8
- Object.send(:remove_const, :ChannelTasks)
9
- end
10
-
11
- it "should let channels be added and removed" do
12
- connection = double('socket connection')
13
-
14
- expect(connection).to receive(:send_message).with('message')
15
-
16
- @channel_task = ChannelTasks.new(connection)
17
- @channel_task.add_listener('channel1')
18
-
19
- ChannelTasks.send_message_to_channel('channel1', 'message')
20
- end
21
-
22
- it "shouldn't send to channels that aren't listening" do
23
- connection1 = double('socket connection1')
24
- connection2 = double('socket connection2')
25
-
26
- expect(connection1).to receive(:send_message).with('message for 1')
27
- expect(connection1).to_not receive(:send_message).with('message for 2')
28
-
29
- expect(connection2).to_not receive(:send_message).with('message for 1')
30
- expect(connection2).to receive(:send_message).with('message for 2')
31
-
32
- @channel_task = ChannelTasks.new(connection1)
33
- @channel_task.add_listener('channel1')
34
-
35
- @channel_task = ChannelTasks.new(connection2)
36
- @channel_task.add_listener('channel2')
37
-
38
- ChannelTasks.send_message_to_channel('channel1', 'message for 1')
39
- ChannelTasks.send_message_to_channel('channel2', 'message for 2')
40
- end
41
-
42
- it "should remove channels" do
43
- connection = double('socket connection')
44
-
45
- expect(connection).to_not receive(:send_message).with('message for channel1')
46
- expect(connection).to receive(:send_message).with('message for channel2')
47
-
48
- @channel_task = ChannelTasks.new(connection)
49
- @channel_task.add_listener('channel1')
50
- @channel_task.add_listener('channel2')
51
-
52
- ChannelTasks.new(connection).remove_listener('channel1')
53
-
54
- ChannelTasks.send_message_to_channel('channel1', 'message for channel1')
55
- ChannelTasks.send_message_to_channel('channel2', 'message for channel2')
56
- end
57
-
58
- it "should remove all when the socket is closed" do
59
- connection = double('socket connection')
60
-
61
- expect(connection).to_not receive(:send_message).with('message for channel1')
62
- expect(connection).to_not receive(:send_message).with('message for channel2')
63
-
64
- @channel_task = ChannelTasks.new(connection)
65
- @channel_task.add_listener('channel1')
66
- @channel_task.add_listener('channel2')
67
-
68
- ChannelTasks.new(connection).close!
69
-
70
- ChannelTasks.send_message_to_channel('channel1', 'message for channel1')
71
- ChannelTasks.send_message_to_channel('channel2', 'message for channel2')
72
- end
73
- end
74
- end