vedeu 0.4.13 → 0.4.14

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 (251) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -1
  3. data/.travis.yml +2 -1
  4. data/Guardfile +6 -5
  5. data/README.md +3 -30
  6. data/Rakefile +5 -5
  7. data/bin/vedeu_drb_client +1 -1
  8. data/bin/vedeu_drb_server +91 -89
  9. data/bin/vedeu_test +4 -0
  10. data/config/rubocop_enabled.yml +5 -10
  11. data/examples/borders_app.rb +2 -1
  12. data/examples/colours_app.rb +13 -8
  13. data/examples/configuration_app.rb +3 -2
  14. data/examples/cursor_app.rb +16 -11
  15. data/examples/drb_app.rb +88 -89
  16. data/examples/focus_app.rb +31 -32
  17. data/examples/geometry_app.rb +2 -1
  18. data/examples/hello_world.rb +2 -1
  19. data/examples/lines_app.rb +2 -1
  20. data/examples/material_colours_app.rb +126 -0
  21. data/examples/typed_commands/typed_commands_app.rb +5 -1
  22. data/examples/view_templates_app/view_templates_app.rb +6 -3
  23. data/lib/vedeu/all.rb +1 -1
  24. data/lib/vedeu/api.rb +18 -10
  25. data/lib/vedeu/application.rb +0 -1
  26. data/lib/vedeu/bindings.rb +77 -16
  27. data/lib/vedeu/buffers/all.rb +2 -5
  28. data/lib/vedeu/buffers/buffer.rb +69 -25
  29. data/lib/vedeu/buffers/display_buffer.rb +3 -7
  30. data/lib/vedeu/configuration/all.rb +3 -6
  31. data/lib/vedeu/configuration/api.rb +28 -4
  32. data/lib/vedeu/configuration/cli.rb +9 -9
  33. data/lib/vedeu/configuration/configuration.rb +11 -7
  34. data/lib/vedeu/cursor/all.rb +3 -6
  35. data/lib/vedeu/cursor/cursor.rb +22 -14
  36. data/lib/vedeu/cursor/move.rb +32 -22
  37. data/lib/vedeu/cursor/refresh_cursor.rb +1 -1
  38. data/lib/vedeu/debug.rb +2 -1
  39. data/lib/vedeu/distributed/client.rb +1 -7
  40. data/lib/vedeu/distributed/server.rb +0 -4
  41. data/lib/vedeu/distributed/subprocess.rb +1 -1
  42. data/lib/vedeu/distributed/templates/default_configuration.vedeu +1 -1
  43. data/lib/vedeu/distributed/test_application.rb +3 -5
  44. data/lib/vedeu/distributed/uri.rb +2 -2
  45. data/lib/vedeu/dsl/all.rb +6 -6
  46. data/lib/vedeu/dsl/components/all.rb +0 -3
  47. data/lib/vedeu/dsl/components/border.rb +20 -12
  48. data/lib/vedeu/dsl/components/geometry.rb +68 -3
  49. data/lib/vedeu/dsl/components/keymap.rb +1 -2
  50. data/lib/vedeu/dsl/composition.rb +8 -1
  51. data/lib/vedeu/dsl/interface.rb +61 -11
  52. data/lib/vedeu/dsl/line.rb +12 -12
  53. data/lib/vedeu/dsl/shared/all.rb +4 -7
  54. data/lib/vedeu/dsl/shared/colour.rb +2 -2
  55. data/lib/vedeu/dsl/shared/text.rb +2 -35
  56. data/lib/vedeu/dsl/shared/use.rb +2 -2
  57. data/lib/vedeu/dsl/view.rb +4 -4
  58. data/lib/vedeu/events/all.rb +3 -5
  59. data/lib/vedeu/events/event.rb +5 -5
  60. data/lib/vedeu/geometry/all.rb +11 -16
  61. data/lib/vedeu/geometry/area.rb +2 -5
  62. data/lib/vedeu/geometry/canvas.rb +12 -16
  63. data/lib/vedeu/geometry/dimension.rb +20 -22
  64. data/lib/vedeu/geometry/geometry.rb +28 -30
  65. data/lib/vedeu/geometry/grid.rb +1 -1
  66. data/lib/vedeu/geometry/index_position.rb +7 -0
  67. data/lib/vedeu/geometry/null_geometry.rb +61 -0
  68. data/lib/vedeu/geometry/position.rb +0 -3
  69. data/lib/vedeu/geometry/position_index.rb +7 -0
  70. data/lib/vedeu/geometry/position_validator.rb +44 -33
  71. data/lib/vedeu/input/all.rb +5 -4
  72. data/lib/vedeu/input/keymap.rb +0 -1
  73. data/lib/vedeu/input/mapper.rb +1 -3
  74. data/lib/vedeu/launcher.rb +6 -7
  75. data/lib/vedeu/main_loop.rb +1 -2
  76. data/lib/vedeu/models/all.rb +1 -0
  77. data/lib/vedeu/models/cell.rb +5 -8
  78. data/lib/vedeu/models/char.rb +50 -15
  79. data/lib/vedeu/models/composition.rb +8 -1
  80. data/lib/vedeu/models/focus.rb +4 -4
  81. data/lib/vedeu/models/group.rb +3 -3
  82. data/lib/vedeu/models/interface.rb +62 -46
  83. data/lib/vedeu/models/line.rb +1 -1
  84. data/lib/vedeu/models/null.rb +48 -0
  85. data/lib/vedeu/models/stream.rb +5 -5
  86. data/lib/vedeu/output/all.rb +20 -30
  87. data/lib/vedeu/output/border.rb +93 -40
  88. data/lib/vedeu/output/clear.rb +100 -15
  89. data/lib/vedeu/output/colour.rb +56 -12
  90. data/lib/vedeu/output/compressor.rb +59 -0
  91. data/lib/vedeu/output/html_char.rb +4 -2
  92. data/lib/vedeu/output/null_border.rb +16 -4
  93. data/lib/vedeu/output/output.rb +13 -21
  94. data/lib/vedeu/output/presentation.rb +28 -23
  95. data/lib/vedeu/output/refresh.rb +2 -2
  96. data/lib/vedeu/output/renderers/all.rb +80 -3
  97. data/lib/vedeu/output/renderers/file_renderer.rb +38 -2
  98. data/lib/vedeu/output/renderers/html_renderer.rb +6 -4
  99. data/lib/vedeu/output/renderers/json_renderer.rb +52 -0
  100. data/lib/vedeu/output/renderers/null_renderer.rb +14 -0
  101. data/lib/vedeu/output/renderers/terminal_renderer.rb +2 -12
  102. data/lib/vedeu/output/style.rb +33 -3
  103. data/lib/vedeu/output/text.rb +98 -1
  104. data/lib/vedeu/output/translator.rb +30 -7
  105. data/lib/vedeu/output/viewport.rb +43 -79
  106. data/lib/vedeu/output/wordwrap.rb +4 -4
  107. data/lib/vedeu/repositories/all.rb +22 -179
  108. data/lib/vedeu/repositories/collection.rb +11 -13
  109. data/lib/vedeu/repositories/collections/all.rb +8 -0
  110. data/lib/vedeu/repositories/collections/chars.rb +9 -0
  111. data/lib/vedeu/repositories/collections/events.rb +9 -0
  112. data/lib/vedeu/repositories/collections/interfaces.rb +9 -0
  113. data/lib/vedeu/repositories/collections/keys.rb +9 -0
  114. data/lib/vedeu/repositories/collections/lines.rb +9 -0
  115. data/lib/vedeu/repositories/collections/streams.rb +9 -0
  116. data/lib/vedeu/repositories/model.rb +7 -2
  117. data/lib/vedeu/repositories/repositories/all.rb +14 -0
  118. data/lib/vedeu/repositories/repositories/background_colours.rb +14 -0
  119. data/lib/vedeu/repositories/repositories/borders.rb +38 -0
  120. data/lib/vedeu/repositories/repositories/buffers.rb +36 -0
  121. data/lib/vedeu/repositories/repositories/colours.rb +63 -0
  122. data/lib/vedeu/repositories/repositories/cursors.rb +29 -0
  123. data/lib/vedeu/repositories/repositories/events_repository.rb +24 -0
  124. data/lib/vedeu/repositories/repositories/foreground_colours.rb +14 -0
  125. data/lib/vedeu/repositories/repositories/geometries.rb +37 -0
  126. data/lib/vedeu/repositories/repositories/groups.rb +24 -0
  127. data/lib/vedeu/repositories/repositories/interfaces_repository.rb +24 -0
  128. data/lib/vedeu/repositories/repositories/keymaps.rb +24 -0
  129. data/lib/vedeu/repositories/repositories/menus.rb +24 -0
  130. data/lib/vedeu/repositories/repository.rb +29 -47
  131. data/lib/vedeu/storage/all.rb +6 -0
  132. data/lib/vedeu/storage/associative_store.rb +47 -0
  133. data/lib/vedeu/storage/conveyor_store.rb +69 -0
  134. data/lib/vedeu/storage/fifo_store.rb +37 -0
  135. data/lib/vedeu/storage/store.rb +58 -0
  136. data/lib/vedeu/support/all.rb +5 -10
  137. data/lib/vedeu/support/common.rb +0 -8
  138. data/lib/vedeu/support/log.rb +13 -24
  139. data/lib/vedeu/support/template.rb +4 -1
  140. data/lib/vedeu/support/terminal.rb +10 -10
  141. data/lib/vedeu/support/trace.rb +15 -88
  142. data/lib/vedeu/support/visibility.rb +73 -0
  143. data/lib/vedeu.rb +37 -0
  144. data/test/lib/vedeu/api_test.rb +7 -3
  145. data/test/lib/vedeu/application_test.rb +9 -3
  146. data/test/lib/vedeu/bindings_test.rb +21 -0
  147. data/test/lib/vedeu/buffers/buffer_test.rb +110 -134
  148. data/test/lib/vedeu/buffers/display_buffer_test.rb +8 -0
  149. data/test/lib/vedeu/configuration/api_test.rb +5 -1
  150. data/test/lib/vedeu/configuration/configuration_test.rb +4 -6
  151. data/test/lib/vedeu/cursor/cursor_test.rb +25 -17
  152. data/test/lib/vedeu/cursor/move_test.rb +7 -7
  153. data/test/lib/vedeu/distributed/client_test.rb +1 -1
  154. data/test/lib/vedeu/distributed/subprocess_test.rb +3 -1
  155. data/test/lib/vedeu/distributed/uri_test.rb +5 -5
  156. data/test/lib/vedeu/dsl/components/geometry_test.rb +43 -0
  157. data/test/lib/vedeu/dsl/components/keymap_test.rb +1 -1
  158. data/test/lib/vedeu/dsl/composition_test.rb +6 -5
  159. data/test/lib/vedeu/dsl/interface_test.rb +81 -16
  160. data/test/lib/vedeu/dsl/shared/colour_test.rb +4 -4
  161. data/test/lib/vedeu/dsl/shared/text_test.rb +87 -9
  162. data/test/lib/vedeu/dsl/stream_test.rb +1 -1
  163. data/test/lib/vedeu/events/event_test.rb +3 -1
  164. data/test/lib/vedeu/events/trigger_test.rb +8 -4
  165. data/test/lib/vedeu/geometry/dimension_test.rb +1 -1
  166. data/test/lib/vedeu/geometry/geometry_test.rb +5 -3
  167. data/test/lib/vedeu/geometry/index_position_test.rb +30 -7
  168. data/test/lib/vedeu/geometry/null_geometry_test.rb +57 -0
  169. data/test/lib/vedeu/geometry/position_index_test.rb +14 -0
  170. data/test/lib/vedeu/geometry/position_validator_test.rb +17 -3
  171. data/test/lib/vedeu/input/keymap_test.rb +3 -1
  172. data/test/lib/vedeu/input/mapper_test.rb +8 -4
  173. data/test/lib/vedeu/launcher_test.rb +1 -1
  174. data/test/lib/vedeu/models/cell_test.rb +10 -8
  175. data/test/lib/vedeu/models/char_test.rb +52 -28
  176. data/test/lib/vedeu/models/composition_test.rb +26 -4
  177. data/test/lib/vedeu/models/group_test.rb +11 -5
  178. data/test/lib/vedeu/models/interface_test.rb +32 -19
  179. data/test/lib/vedeu/models/line_test.rb +21 -25
  180. data/test/lib/vedeu/models/menu_test.rb +10 -6
  181. data/test/lib/vedeu/models/null_test.rb +66 -0
  182. data/test/lib/vedeu/models/stream_test.rb +13 -10
  183. data/test/lib/vedeu/output/border_test.rb +29 -8
  184. data/test/lib/vedeu/output/clear_test.rb +23 -4
  185. data/test/lib/vedeu/output/colour_test.rb +20 -4
  186. data/test/lib/vedeu/output/compressor_test.rb +43 -0
  187. data/test/lib/vedeu/output/html_char_test.rb +29 -17
  188. data/test/lib/vedeu/output/null_border_test.rb +2 -1
  189. data/test/lib/vedeu/output/output_test.rb +20 -30
  190. data/test/lib/vedeu/output/presentation_test.rb +39 -16
  191. data/test/lib/vedeu/output/refresh_test.rb +14 -10
  192. data/test/lib/vedeu/output/renderers/all_test.rb +96 -0
  193. data/test/lib/vedeu/output/renderers/file_renderer_test.rb +1 -1
  194. data/test/lib/vedeu/output/renderers/html_renderer_test.rb +13 -9
  195. data/test/lib/vedeu/output/renderers/json_renderer_test.rb +52 -0
  196. data/test/lib/vedeu/output/renderers/null_renderer_test.rb +19 -0
  197. data/test/lib/vedeu/output/style_test.rb +41 -1
  198. data/test/lib/vedeu/output/text_test.rb +61 -10
  199. data/test/lib/vedeu/output/translator_test.rb +14 -0
  200. data/test/lib/vedeu/output/viewport_test.rb +22 -3
  201. data/test/lib/vedeu/output/virtual_terminal_test.rb +3 -3
  202. data/test/lib/vedeu/output/wordwrap_test.rb +58 -45
  203. data/test/lib/vedeu/repositories/collections/chars_test.rb +16 -0
  204. data/test/lib/vedeu/repositories/collections/events_test.rb +16 -0
  205. data/test/lib/vedeu/repositories/collections/interfaces_test.rb +16 -0
  206. data/test/lib/vedeu/repositories/collections/keys_test.rb +16 -0
  207. data/test/lib/vedeu/repositories/collections/lines_test.rb +16 -0
  208. data/test/lib/vedeu/repositories/collections/streams_test.rb +16 -0
  209. data/test/lib/vedeu/repositories/repositories/background_colours_test.rb +17 -0
  210. data/test/lib/vedeu/repositories/repositories/borders_test.rb +51 -0
  211. data/test/lib/vedeu/repositories/repositories/buffers_test.rb +52 -0
  212. data/test/lib/vedeu/repositories/repositories/colours_test.rb +16 -0
  213. data/test/lib/vedeu/repositories/repositories/cursors_test.rb +39 -0
  214. data/test/lib/vedeu/repositories/repositories/events_repository_test.rb +17 -0
  215. data/test/lib/vedeu/repositories/repositories/foreground_colours_test.rb +17 -0
  216. data/test/lib/vedeu/repositories/repositories/geometries_test.rb +42 -0
  217. data/test/lib/vedeu/repositories/repositories/groups_test.rb +17 -0
  218. data/test/lib/vedeu/repositories/repositories/interfaces_repositories_test.rb +17 -0
  219. data/test/lib/vedeu/repositories/repositories/keymaps_test.rb +17 -0
  220. data/test/lib/vedeu/repositories/repositories/menus_test.rb +17 -0
  221. data/test/lib/vedeu/repositories/repository_test.rb +16 -36
  222. data/test/lib/vedeu/storage/associative_store_test.rb +69 -0
  223. data/test/lib/vedeu/storage/conveyor_store_test.rb +135 -0
  224. data/test/lib/vedeu/storage/fifo_store_test.rb +47 -0
  225. data/test/lib/vedeu/storage/store_test.rb +123 -0
  226. data/test/lib/vedeu/support/common_test.rb +0 -9
  227. data/test/lib/vedeu/support/terminal_test.rb +78 -55
  228. data/test/lib/vedeu/support/visibility_test.rb +80 -0
  229. data/test/test_helper.rb +13 -11
  230. data/vedeu.gemspec +4 -3
  231. metadata +92 -32
  232. data/lib/vedeu/cursor/toggle.rb +0 -55
  233. data/lib/vedeu/exceptions.rb +0 -37
  234. data/lib/vedeu/geometry/centre.rb +0 -85
  235. data/lib/vedeu/geometry/content.rb +0 -70
  236. data/lib/vedeu/geometry/limit.rb +0 -58
  237. data/lib/vedeu/output/compositor.rb +0 -62
  238. data/lib/vedeu/repositories/collections.rb +0 -41
  239. data/lib/vedeu/support/coercions.rb +0 -60
  240. data/lib/vedeu/support/sentence.rb +0 -91
  241. data/lib/vedeu/support/visible.rb +0 -90
  242. data/test/lib/vedeu/cursor/toggle_test.rb +0 -63
  243. data/test/lib/vedeu/geometry/centre_test.rb +0 -58
  244. data/test/lib/vedeu/geometry/content_test.rb +0 -98
  245. data/test/lib/vedeu/geometry/limit_test.rb +0 -30
  246. data/test/lib/vedeu/output/compositor_test.rb +0 -48
  247. data/test/lib/vedeu/repositories/all_test.rb +0 -135
  248. data/test/lib/vedeu/repositories/collections_test.rb +0 -71
  249. data/test/lib/vedeu/support/coercions_test.rb +0 -84
  250. data/test/lib/vedeu/support/sentence_test.rb +0 -56
  251. data/test/lib/vedeu/support/visible_test.rb +0 -161
@@ -0,0 +1,52 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe Buffers do
6
+
7
+ let(:described) { Vedeu::Buffers }
8
+ let(:instance) { described.buffers }
9
+
10
+ describe '.buffers' do
11
+ subject { instance }
12
+
13
+ it { subject.must_be_instance_of(described) }
14
+ end
15
+
16
+ describe '#clear' do
17
+ let(:_name) { 'silicon' }
18
+ let(:buffer) { Vedeu::Buffer.new }
19
+
20
+ subject { instance.clear(_name) }
21
+
22
+ context 'when the buffer exists' do
23
+ before { instance.stubs(:find!).returns(buffer) }
24
+
25
+ it { buffer.expects(:clear); subject }
26
+ end
27
+
28
+ context 'when the buffer does not exist' do
29
+ it { proc { subject }.must_raise(ModelNotFound) }
30
+ end
31
+ end
32
+
33
+ describe '#render' do
34
+ let(:_name) { 'silicon' }
35
+ let(:buffer) { Vedeu::Buffer.new }
36
+
37
+ subject { instance.render(_name) }
38
+
39
+ context 'when the buffer exists' do
40
+ before { instance.stubs(:find!).returns(buffer) }
41
+
42
+ it { buffer.expects(:render); subject }
43
+ end
44
+
45
+ context 'when the buffer does not exist' do
46
+ it { proc { subject }.must_raise(ModelNotFound) }
47
+ end
48
+ end
49
+
50
+ end # Buffers
51
+
52
+ end # Vedeu
@@ -0,0 +1,16 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe Colours do
6
+
7
+ let(:described) { Vedeu::Colours }
8
+ let(:instance) { described.new }
9
+
10
+ describe '#initialize' do
11
+ it { instance.must_be_instance_of(described) }
12
+ end
13
+
14
+ end # Colours
15
+
16
+ end # Vedeu
@@ -0,0 +1,39 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe Cursors do
6
+
7
+ let(:described) { Vedeu::Cursors }
8
+
9
+ describe '.cursors' do
10
+ subject { described.cursors }
11
+
12
+ it { subject.must_be_instance_of(described) }
13
+ end
14
+
15
+ describe '.cursor' do
16
+ subject { Vedeu.cursor }
17
+
18
+ context 'when there are cursors are defined' do
19
+ before do
20
+ Vedeu::Focus.add('Vedeu.cursor')
21
+ Vedeu::Cursor.new(name: 'Vedeu.cursor').store
22
+ end
23
+
24
+ it { subject.must_be_instance_of(Vedeu::Cursor) }
25
+ end
26
+
27
+ context 'when there are no cursors defined' do
28
+ before do
29
+ Vedeu::Focus.reset
30
+ Vedeu.cursors.reset
31
+ end
32
+
33
+ it { subject.must_be_instance_of(NilClass) }
34
+ end
35
+ end
36
+
37
+ end # Cursors
38
+
39
+ end # Vedeu
@@ -0,0 +1,17 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe EventsRepository do
6
+
7
+ let(:described) { Vedeu::EventsRepository }
8
+
9
+ describe '.events' do
10
+ subject { described.events }
11
+
12
+ it { subject.must_be_instance_of(described) }
13
+ end
14
+
15
+ end # EventsRepository
16
+
17
+ end # Vedeu
@@ -0,0 +1,17 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe ForegroundColours do
6
+
7
+ let(:described) { Vedeu::ForegroundColours }
8
+
9
+ describe '.foreground_colours' do
10
+ subject { described.foreground_colours }
11
+
12
+ it { subject.must_be_instance_of(described) }
13
+ end
14
+
15
+ end # ForegroundColours
16
+
17
+ end # Vedeu
@@ -0,0 +1,42 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe Geometries do
6
+
7
+ let(:described) { Vedeu::Geometries }
8
+
9
+ describe '.geometries' do
10
+ subject { described.geometries }
11
+
12
+ it { subject.must_be_instance_of(described) }
13
+ end
14
+
15
+ describe '#by_name' do
16
+ let(:_name) { 'carbon' }
17
+
18
+ subject { described.geometries.by_name(_name) }
19
+
20
+ context 'when the geometry exists' do
21
+ before do
22
+ Vedeu.geometry 'carbon' do
23
+ x 1
24
+ xn 3
25
+ y 1
26
+ yn 3
27
+ end
28
+ end
29
+
30
+ it { subject.must_be_instance_of(Vedeu::Geometry) }
31
+ end
32
+
33
+ context 'when the geometry does not exist' do
34
+ let(:_name) { 'nitrogen' }
35
+
36
+ it { subject.must_be_instance_of(Vedeu::NullGeometry) }
37
+ end
38
+ end
39
+
40
+ end # Geometries
41
+
42
+ end # Vedeu
@@ -0,0 +1,17 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe Groups do
6
+
7
+ let(:described) { Vedeu::Groups }
8
+
9
+ describe '.groups' do
10
+ subject { described.groups }
11
+
12
+ it { subject.must_be_instance_of(described) }
13
+ end
14
+
15
+ end # Groups
16
+
17
+ end # Vedeu
@@ -0,0 +1,17 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe InterfacesRepository do
6
+
7
+ let(:described) { Vedeu::InterfacesRepository }
8
+
9
+ describe '.interfaces' do
10
+ subject { described.interfaces }
11
+
12
+ it { subject.must_be_instance_of(described) }
13
+ end
14
+
15
+ end # InterfacesRepository
16
+
17
+ end # Vedeu
@@ -0,0 +1,17 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe Keymaps do
6
+
7
+ let(:described) { Vedeu::Keymaps }
8
+
9
+ describe '.keymaps' do
10
+ subject { described.keymaps }
11
+
12
+ it { subject.must_be_instance_of(described) }
13
+ end
14
+
15
+ end # Keymaps
16
+
17
+ end # Vedeu
@@ -0,0 +1,17 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe Menus do
6
+
7
+ let(:described) { Vedeu::Menus }
8
+
9
+ describe '.menus' do
10
+ subject { described.menus }
11
+
12
+ it { subject.must_be_instance_of(described) }
13
+ end
14
+
15
+ end # Menus
16
+
17
+ end # Vedeu
@@ -39,36 +39,28 @@ module Vedeu
39
39
  it { instance.instance_variable_get('@storage').must_equal(storage) }
40
40
  end
41
41
 
42
- describe '#all' do
43
- subject { instance.all }
44
-
45
- it 'returns the whole repository' do
46
- subject.must_equal(storage)
47
- end
48
- end
49
-
50
- describe '#each' do
51
- subject { instance.each }
52
-
53
- it { subject.must_be_instance_of(Enumerator) }
54
- end
42
+ describe '#find' do
43
+ subject { instance.find(model_name) }
55
44
 
56
- describe '#empty?' do
57
- subject { instance.empty? }
45
+ context 'when the model cannot be found' do
46
+ let(:model_name) { 'not_found' }
58
47
 
59
- context 'when the storage is empty' do
60
- it { subject.must_equal(true) }
48
+ it { subject.must_be_instance_of(NilClass) }
61
49
  end
62
50
 
63
- context 'when the storage is not empty' do
64
- let(:storage) { [:item] }
51
+ context 'when the model is found' do
52
+ let(:model_instance) { model.new('terbium') }
65
53
 
66
- it { subject.must_equal(false) }
54
+ before { instance.store(model_instance) }
55
+
56
+ it 'returns the stored model' do
57
+ subject.must_equal(model_instance)
58
+ end
67
59
  end
68
60
  end
69
61
 
70
- describe '#find' do
71
- subject { instance.find(model_name) }
62
+ describe '#find!' do
63
+ subject { instance.find!(model_name) }
72
64
 
73
65
  context 'when the model cannot be found' do
74
66
  let(:model_name) { 'not_found' }
@@ -92,8 +84,6 @@ module Vedeu
92
84
 
93
85
  subject { instance.find_or_create(model_name) }
94
86
 
95
- it { instance.find_or_create('zinc').must_be_instance_of(Vedeu::TestModel) }
96
-
97
87
  context 'when the model exists' do
98
88
  let(:model_name) { 'niobium' }
99
89
 
@@ -119,7 +109,7 @@ module Vedeu
119
109
  context 'when the storage is a Hash' do
120
110
  it 'returns a collection of the names of all the registered entities' do
121
111
  repo = RepositoriesTestClass.new
122
- repo.add({ 'rutherfordium' => { name: 'rutherfordium' } })
112
+ repo.add('rutherfordium' => { name: 'rutherfordium' })
123
113
 
124
114
  repo.registered.must_equal(['rutherfordium'])
125
115
  end
@@ -163,7 +153,7 @@ module Vedeu
163
153
 
164
154
  it 'returns false when the model is not registered' do
165
155
  repo = RepositoriesTestClass.new
166
- repo.add({ name: 'samarium' })
156
+ repo.add(name: 'samarium')
167
157
 
168
158
  repo.registered?('terbium').must_equal(false)
169
159
  end
@@ -200,16 +190,6 @@ module Vedeu
200
190
  end
201
191
  end
202
192
 
203
- describe '#reset' do
204
- it 'returns a Hash' do
205
- instance.reset.must_be_instance_of(Hash)
206
- end
207
-
208
- it 'resets the repository' do
209
- instance.reset.must_equal({})
210
- end
211
- end
212
-
213
193
  describe '#store' do
214
194
  subject { instance.store(model_instance) }
215
195
 
@@ -0,0 +1,69 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe AssociativeStore do
6
+
7
+ let(:described) { Vedeu::AssociativeStore }
8
+ let(:instance) { described.new(storage) }
9
+ let(:storage) { {} }
10
+
11
+ describe '#initialize' do
12
+ it { instance.must_be_instance_of(Vedeu::AssociativeStore) }
13
+ it { instance.instance_variable_get('@storage').must_equal(storage) }
14
+ end
15
+
16
+ describe '#load' do
17
+ let(:_name) {}
18
+
19
+ subject { instance.load(_name) }
20
+
21
+ context 'when the storage is empty' do
22
+ it { subject.must_equal(nil) }
23
+ end
24
+
25
+ context 'when the storage is not empty' do
26
+ let(:storage) { { hydrogen: '1', helium: '2' } }
27
+
28
+ context 'when the named entry exists' do
29
+ let(:_name) { :helium }
30
+
31
+ it { subject.must_equal('2') }
32
+ end
33
+
34
+ context 'when the named entry does not exist' do
35
+ let(:_name) { :beryllium }
36
+
37
+ it { subject.must_equal(nil) }
38
+ end
39
+ end
40
+ end
41
+
42
+ describe '#save' do
43
+ let(:data) { [:some_data] }
44
+ let(:_name) {}
45
+
46
+ subject { instance.save(data, _name) }
47
+
48
+ context 'when a name is given' do
49
+ let(:_name) { :hydrogen }
50
+
51
+ it { subject.must_equal(hydrogen: [:some_data]) }
52
+ end
53
+
54
+ context 'when a name is not given' do
55
+ context 'when the data respond to name' do
56
+ let(:data) { ModelTestClass.new(name: 'helium')}
57
+
58
+ it { subject.key?('helium').must_equal(true) }
59
+ end
60
+
61
+ context 'when the data does not respond to name' do
62
+ it { subject.must_equal({}) }
63
+ end
64
+ end
65
+ end
66
+
67
+ end # AssociativeStore
68
+
69
+ end # Vedeu
@@ -0,0 +1,135 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe ConveyorStore do
6
+
7
+ let(:described) { Vedeu::ConveyorStore }
8
+ let(:instance) { described.new(storage) }
9
+ let(:storage) { [] }
10
+
11
+ describe 'alias methods' do
12
+ it { instance.must_respond_to(:current) }
13
+ end
14
+
15
+ describe '#initialize' do
16
+ it { instance.must_be_instance_of(Vedeu::ConveyorStore) }
17
+ it { instance.instance_variable_get('@storage').must_equal(storage) }
18
+ end
19
+
20
+ describe '#load' do
21
+ subject { instance.load }
22
+
23
+ context 'when the storage is empty' do
24
+ it { subject.must_equal(nil) }
25
+ end
26
+
27
+ context 'when the storage is not empty' do
28
+ let(:storage) { [:hydrogen] }
29
+
30
+ it { subject.must_equal(:hydrogen) }
31
+ end
32
+ end
33
+
34
+ describe '#load_named' do
35
+ let(:_name) {}
36
+
37
+ subject { instance.load_named(_name) }
38
+
39
+ context 'when the storage is empty' do
40
+ it { subject.must_equal(nil) }
41
+ end
42
+
43
+ context 'when the storage is not empty' do
44
+ let(:storage) { [:lithium, :helium, :hydrogen] }
45
+
46
+ context 'when the named entry exists' do
47
+ let(:_name) { :helium }
48
+
49
+ it { subject.must_equal(:helium) }
50
+
51
+ it 'rotates the store to the named entry' do
52
+ instance.storage.must_equal([:lithium, :helium, :hydrogen])
53
+ subject
54
+ instance.storage.must_equal([:helium, :hydrogen, :lithium])
55
+ end
56
+ end
57
+
58
+ context 'when the named entry does not exist' do
59
+ let(:_name) { :beryllium }
60
+
61
+ it { subject.must_equal(nil) }
62
+ end
63
+ end
64
+ end
65
+
66
+ describe '#load_next' do
67
+ subject { instance.load_next }
68
+
69
+ context 'when the storage is empty' do
70
+ it { subject.must_equal(nil) }
71
+ end
72
+
73
+ context 'when the storage is not empty' do
74
+ let(:storage) { [:lithium, :helium, :hydrogen] }
75
+
76
+ it { subject.must_equal(:helium) }
77
+
78
+ it 'rotates the store' do
79
+ instance.storage.must_equal([:lithium, :helium, :hydrogen])
80
+ instance.load_next
81
+ instance.load_next
82
+ instance.storage.must_equal([:hydrogen, :lithium, :helium])
83
+ end
84
+ end
85
+ end
86
+
87
+ describe '#load_previous' do
88
+ subject { instance.load_previous }
89
+
90
+ context 'when the storage is empty' do
91
+ it { subject.must_equal(nil) }
92
+ end
93
+
94
+ context 'when the storage is not empty' do
95
+ let(:storage) { [:lithium, :helium, :hydrogen] }
96
+
97
+ it { subject.must_equal(:hydrogen) }
98
+
99
+ it 'rotates the store' do
100
+ instance.storage.must_equal([:lithium, :helium, :hydrogen])
101
+ instance.load_previous
102
+ instance.load_previous
103
+ instance.storage.must_equal([:helium, :hydrogen, :lithium])
104
+ end
105
+ end
106
+ end
107
+
108
+ describe '#save' do
109
+ let(:data) { :beryllium }
110
+ let(:front) { false }
111
+
112
+ subject { instance.save(data, front) }
113
+
114
+ context 'when the storage is empty' do
115
+ it { subject.must_equal([:beryllium]) }
116
+ end
117
+
118
+ context 'when the storage is not empty' do
119
+ let(:storage) { [:lithium, :helium, :hydrogen] }
120
+
121
+ context 'and `front` is false' do
122
+ it { subject.must_equal([:beryllium, :lithium, :helium, :hydrogen]) }
123
+ end
124
+
125
+ context 'and `front` is true' do
126
+ let(:front) { true }
127
+
128
+ it { subject.must_equal([:lithium, :helium, :hydrogen, :beryllium]) }
129
+ end
130
+ end
131
+ end
132
+
133
+ end # ConveyorStore
134
+
135
+ end # Vedeu
@@ -0,0 +1,47 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe FifoStore do
6
+
7
+ let(:described) { Vedeu::FifoStore }
8
+ let(:instance) { described.new(storage) }
9
+ let(:storage) { [] }
10
+
11
+ describe '#initialize' do
12
+ it { instance.must_be_instance_of(Vedeu::FifoStore) }
13
+ it { instance.instance_variable_get('@storage').must_equal(storage) }
14
+ end
15
+
16
+ describe '#load' do
17
+ subject { instance.load }
18
+
19
+ context 'when the storage is empty' do
20
+ it { subject.must_equal(nil) }
21
+ end
22
+
23
+ context 'when the storage is not empty' do
24
+ let(:storage) { [:lithium, :helium, :hydrogen] }
25
+
26
+ it { subject.must_equal(:hydrogen) }
27
+
28
+ it 'removes the item from storage on retrieval' do
29
+ instance.size.must_equal(3)
30
+ subject
31
+ instance.size.must_equal(2)
32
+ end
33
+ end
34
+ end
35
+
36
+ describe '#save' do
37
+ let(:data) { :beryllium }
38
+ let(:storage) { [:lithium, :helium, :hydrogen] }
39
+
40
+ subject { instance.save(data) }
41
+
42
+ it { subject.must_equal([:beryllium, :lithium, :helium, :hydrogen]) }
43
+ end
44
+
45
+ end # FifoStore
46
+
47
+ end # Vedeu