volt 0.5.18 → 0.6.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.
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