vedeu 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -0
  3. data/README.md +1 -2
  4. data/Rakefile +5 -5
  5. data/bin/vedeu +8 -4
  6. data/docs/api.md +3 -1
  7. data/docs/events.md +43 -29
  8. data/docs/getting_started.md +2 -0
  9. data/examples/cursor_app/cursor_app.rb +85 -0
  10. data/examples/lines_app/lines_app.rb +60 -0
  11. data/lib/vedeu.rb +9 -3
  12. data/lib/vedeu/api/api.rb +28 -7
  13. data/lib/vedeu/api/composition.rb +2 -0
  14. data/lib/vedeu/api/helpers.rb +2 -0
  15. data/lib/vedeu/api/interface.rb +2 -20
  16. data/lib/vedeu/api/keymap.rb +2 -0
  17. data/lib/vedeu/api/line.rb +2 -0
  18. data/lib/vedeu/api/menu.rb +3 -1
  19. data/lib/vedeu/api/stream.rb +25 -2
  20. data/lib/vedeu/application.rb +4 -4
  21. data/lib/vedeu/configuration/api.rb +327 -0
  22. data/lib/vedeu/configuration/cli.rb +110 -0
  23. data/lib/vedeu/{configuration.rb → configuration/configuration.rb} +49 -99
  24. data/lib/vedeu/launcher.rb +0 -1
  25. data/lib/vedeu/models/attributes/colour_translator.rb +2 -2
  26. data/lib/vedeu/models/colour.rb +0 -1
  27. data/lib/vedeu/models/composition.rb +2 -8
  28. data/lib/vedeu/models/cursor.rb +261 -0
  29. data/lib/vedeu/models/geometry.rb +11 -19
  30. data/lib/vedeu/models/interface.rb +2 -12
  31. data/lib/vedeu/models/keymap.rb +2 -0
  32. data/lib/vedeu/models/line.rb +2 -0
  33. data/lib/vedeu/models/stream.rb +2 -0
  34. data/lib/vedeu/models/style.rb +2 -0
  35. data/lib/vedeu/output/clear.rb +0 -1
  36. data/lib/vedeu/output/compositor.rb +0 -1
  37. data/lib/vedeu/output/refresh.rb +3 -0
  38. data/lib/vedeu/output/render.rb +12 -6
  39. data/lib/vedeu/output/view.rb +1 -0
  40. data/lib/vedeu/repositories/cursors.rb +98 -0
  41. data/lib/vedeu/repositories/events.rb +0 -1
  42. data/lib/vedeu/repositories/focus.rb +18 -0
  43. data/lib/vedeu/repositories/menus.rb +4 -4
  44. data/lib/vedeu/support/common.rb +2 -1
  45. data/lib/vedeu/support/event.rb +1 -10
  46. data/lib/vedeu/support/grid.rb +1 -2
  47. data/lib/vedeu/{repositories → support}/keymap_validator.rb +5 -4
  48. data/lib/vedeu/support/log.rb +3 -0
  49. data/lib/vedeu/support/menu.rb +4 -1
  50. data/lib/vedeu/support/registrar.rb +2 -1
  51. data/test/integration/defining_interfaces_test.rb +0 -1
  52. data/test/integration/views/basic_view_test.rb +741 -739
  53. data/test/lib/vedeu/api/api_test.rb +14 -3
  54. data/test/lib/vedeu/api/helpers_test.rb +3 -3
  55. data/test/lib/vedeu/api/interface_test.rb +17 -70
  56. data/test/lib/vedeu/api/keymap_test.rb +2 -0
  57. data/test/lib/vedeu/api/line_test.rb +4 -4
  58. data/test/lib/vedeu/api/menu_test.rb +6 -5
  59. data/test/lib/vedeu/api/stream_test.rb +18 -0
  60. data/test/lib/vedeu/configuration/api_test.rb +248 -0
  61. data/test/lib/vedeu/configuration/cli_test.rb +88 -0
  62. data/test/lib/vedeu/configuration/configuration_test.rb +67 -0
  63. data/test/lib/vedeu/input/input_test.rb +2 -2
  64. data/test/lib/vedeu/models/attributes/background_test.rb +3 -3
  65. data/test/lib/vedeu/models/attributes/foreground_test.rb +3 -3
  66. data/test/lib/vedeu/models/composition_test.rb +0 -222
  67. data/test/lib/vedeu/models/cursor_test.rb +164 -0
  68. data/test/lib/vedeu/models/interface_test.rb +0 -11
  69. data/test/lib/vedeu/output/compositor_test.rb +2 -4
  70. data/test/lib/vedeu/output/render_test.rb +4 -41
  71. data/test/lib/vedeu/repositories/cursors_test.rb +13 -0
  72. data/test/lib/vedeu/repositories/focus_test.rb +14 -4
  73. data/test/lib/vedeu/repositories/menus_test.rb +36 -29
  74. data/test/lib/vedeu/{repositories → support}/keymap_validator_test.rb +0 -0
  75. data/test/lib/vedeu/support/menu_test.rb +3 -3
  76. data/test/lib/vedeu/support/registrar_test.rb +6 -0
  77. data/test/lib/vedeu/support/terminal_test.rb +2 -2
  78. data/test/test_helper.rb +1 -1
  79. data/vedeu.gemspec +1 -1
  80. metadata +23 -14
  81. data/elements.txt +0 -118
  82. data/lib/vedeu/support/cursor.rb +0 -96
  83. data/test/lib/vedeu/configuration_test.rb +0 -154
  84. data/test/lib/vedeu/support/cursor_test.rb +0 -79
  85. data/test/support/model_test_data.json +0 -437
@@ -6,6 +6,12 @@ module Vedeu
6
6
 
7
7
  before { Event.stubs(:new).returns(event) }
8
8
 
9
+ describe '.configure' do
10
+ it 'raises an exception unless a block was given' do
11
+ proc { Vedeu.configure }.must_raise(InvalidSyntax)
12
+ end
13
+ end
14
+
9
15
  describe '.defined' do
10
16
  it 'returns a reference to the API::Defined module' do
11
17
  Vedeu.defined.must_equal(Vedeu::API::Defined)
@@ -28,6 +34,12 @@ module Vedeu
28
34
  end
29
35
  end
30
36
 
37
+ describe '.focus' do
38
+ it 'sets the named interface to be focussed' do
39
+ skip
40
+ end
41
+ end
42
+
31
43
  describe '.height' do
32
44
  it 'returns the terminal height' do
33
45
  IO.console.stub(:winsize, [24, 40]) do
@@ -139,12 +151,11 @@ module Vedeu
139
151
  {
140
152
  interfaces: [{
141
153
  name: "some_interface",
142
- group: "",
154
+ group: '',
143
155
  lines: [],
144
156
  colour: {},
145
- style: "",
157
+ style: '',
146
158
  geometry: {},
147
- cursor: true,
148
159
  delay: 0.0,
149
160
  parent: {}
150
161
  }]
@@ -48,7 +48,7 @@ module Vedeu
48
48
  HelpersTestClass.new.style do
49
49
  #...
50
50
  end.must_equal(
51
- [{ colour: {}, style: [], text: "", width: nil, align: :left, parent: nil, }]
51
+ [{ colour: {}, style: [], text: '', width: nil, align: :left, parent: nil, }]
52
52
  )
53
53
  end
54
54
 
@@ -60,7 +60,7 @@ module Vedeu
60
60
  {
61
61
  colour: {},
62
62
  style: ['italic'],
63
- text: "",
63
+ text: '',
64
64
  width: nil,
65
65
  align: :left,
66
66
  parent: nil,
@@ -77,7 +77,7 @@ module Vedeu
77
77
  {
78
78
  colour: {},
79
79
  style: ['italic', 'blink'],
80
- text: "",
80
+ text: '',
81
81
  width: nil,
82
82
  align: :left,
83
83
  parent: nil,
@@ -21,12 +21,11 @@ module Vedeu
21
21
  group: '',
22
22
  lines: [],
23
23
  colour: {
24
- foreground: "#aadd00",
25
- background: "#222222"
24
+ foreground: '#aadd00',
25
+ background: '#222222'
26
26
  },
27
- style: "",
27
+ style: '',
28
28
  geometry: {},
29
- cursor: true,
30
29
  delay: 0.0,
31
30
  parent: nil,
32
31
  }
@@ -44,7 +43,6 @@ module Vedeu
44
43
  colour: {},
45
44
  style: "underline",
46
45
  geometry: {},
47
- cursor: true,
48
46
  delay: 0.0,
49
47
  parent: nil,
50
48
  }
@@ -64,14 +62,13 @@ module Vedeu
64
62
  y use('my_interface').south
65
63
  end.must_equal({
66
64
  name: "my_other_interface",
67
- group: "",
65
+ group: '',
68
66
  lines: [],
69
67
  colour: {},
70
- style: "",
68
+ style: '',
71
69
  geometry: {
72
70
  y: 11
73
71
  },
74
- cursor: true,
75
72
  delay: 0.0,
76
73
  parent: nil,
77
74
  })
@@ -88,9 +85,8 @@ module Vedeu
88
85
  group: '',
89
86
  lines: [],
90
87
  colour: {},
91
- style: "",
88
+ style: '',
92
89
  geometry: {},
93
- cursor: true,
94
90
  delay: 1.0,
95
91
  parent: nil,
96
92
  })
@@ -102,32 +98,12 @@ module Vedeu
102
98
  group 'my_group'
103
99
  end.must_equal(
104
100
  {
105
- name: "",
101
+ name: '',
106
102
  group: "my_group",
107
103
  lines: [],
108
104
  colour: {},
109
- style: "",
110
- geometry: {},
111
- cursor: true,
112
- delay: 0.0,
113
- parent: nil,
114
- }
115
- )
116
- end
117
-
118
- it 'allows the setting of the cursor for the interface to be shown ' \
119
- 'or hidden' do
120
- Interface.build do
121
- cursor false
122
- end.must_equal(
123
- {
124
- name: "",
125
- group: "",
126
- lines: [],
127
- colour: {},
128
- style: "",
105
+ style: '',
129
106
  geometry: {},
130
- cursor: false,
131
107
  delay: 0.0,
132
108
  parent: nil,
133
109
  }
@@ -161,32 +137,6 @@ module Vedeu
161
137
  end
162
138
  end
163
139
 
164
- describe '#cursor' do
165
- it 'raises an exception if the value is invalid' do
166
- proc {
167
- Vedeu.interface 'beryllium' do
168
- cursor :invalid
169
- end
170
- }.must_raise(InvalidSyntax)
171
- end
172
-
173
- it 'sets the cursor to true (visible)' do
174
- Vedeu.interface 'beryllium' do
175
- cursor true
176
- end
177
-
178
- Vedeu.use('beryllium').attributes[:cursor].must_equal(true)
179
- end
180
-
181
- it 'sets the cursor to false (hidden)' do
182
- Vedeu.interface 'beryllium' do
183
- cursor false
184
- end
185
-
186
- Vedeu.use('beryllium').attributes[:cursor].must_equal(false)
187
- end
188
- end
189
-
190
140
  describe '#delay' do
191
141
  it 'sets the delay attribute' do
192
142
  Vedeu.interface 'cobalt' do
@@ -221,22 +171,21 @@ module Vedeu
221
171
  interface.must_be_instance_of(API::Interface)
222
172
  interface.attributes.must_equal(
223
173
  {
224
- name: "carbon",
225
- group: "",
174
+ name: 'carbon',
175
+ group: '',
226
176
  lines: [
227
177
  {
228
178
  colour: {},
229
179
  streams: {
230
- text: ""
180
+ text: ''
231
181
  },
232
182
  style: [],
233
183
  parent: interface.view_attributes,
234
184
  }
235
185
  ],
236
186
  colour: {},
237
- style: "",
187
+ style: '',
238
188
  geometry: {},
239
- cursor: true,
240
189
  delay: 0.0,
241
190
  parent: nil,
242
191
  }
@@ -250,8 +199,8 @@ module Vedeu
250
199
  interface.must_be_instance_of(API::Interface)
251
200
  interface.attributes.must_equal(
252
201
  {
253
- name: "carbon",
254
- group: "",
202
+ name: 'carbon',
203
+ group: '',
255
204
  lines: [
256
205
  {
257
206
  colour: {},
@@ -263,9 +212,8 @@ module Vedeu
263
212
  }
264
213
  ],
265
214
  colour: {},
266
- style: "",
215
+ style: '',
267
216
  geometry: {},
268
- cursor: true,
269
217
  delay: 0.0,
270
218
  parent: nil,
271
219
  }
@@ -282,7 +230,7 @@ module Vedeu
282
230
  interface.attributes.must_equal(
283
231
  {
284
232
  name: "silicon",
285
- group: "",
233
+ group: '',
286
234
  lines: [
287
235
  {
288
236
  colour: {},
@@ -296,9 +244,8 @@ module Vedeu
296
244
  }
297
245
  ],
298
246
  colour: {},
299
- style: "",
247
+ style: '',
300
248
  geometry: {},
301
- cursor: true,
302
249
  delay: 0.0,
303
250
  parent: nil
304
251
  }
@@ -6,6 +6,8 @@ module Vedeu
6
6
  describe Keymap do
7
7
 
8
8
  describe '#key' do
9
+ before { Vedeu::Keymaps.reset }
10
+
9
11
  it 'raises an exception when a block is not given' do
10
12
  proc {
11
13
  Vedeu.keys do
@@ -48,28 +48,28 @@ module Vedeu
48
48
  describe '#foreground' do
49
49
  it 'returns the value assigned' do
50
50
  attrs = Line.new.foreground('#ff0000')
51
- attrs.first[:colour].must_equal({ foreground: "#ff0000" })
51
+ attrs.first[:colour].must_equal({ foreground: '#ff0000' })
52
52
  end
53
53
 
54
54
  it 'returns the value assigned with a block' do
55
55
  attrs = Line.new.foreground('#00ff00') do
56
56
  # ...
57
57
  end
58
- attrs.first[:colour].must_equal({ foreground: "#00ff00" })
58
+ attrs.first[:colour].must_equal({ foreground: '#00ff00' })
59
59
  end
60
60
  end
61
61
 
62
62
  describe '#background' do
63
63
  it 'returns the value assigned' do
64
64
  attrs = Line.new.background('#00ff00')
65
- attrs.first[:colour].must_equal({ background: "#00ff00" })
65
+ attrs.first[:colour].must_equal({ background: '#00ff00' })
66
66
  end
67
67
 
68
68
  it 'returns the value assigned with a block' do
69
69
  attrs = Line.new.background('#0000ff') do
70
70
  # ...
71
71
  end
72
- attrs.first[:colour].must_equal({ background: "#0000ff" })
72
+ attrs.first[:colour].must_equal({ background: '#0000ff' })
73
73
  end
74
74
  end
75
75
  end
@@ -38,15 +38,16 @@ module Vedeu
38
38
  end
39
39
 
40
40
  describe '#items' do
41
- it 'returns an instance of Vedeu::Menu' do
42
- menu = Menu.new
43
- menu.items.must_be_instance_of(Vedeu::Menu)
41
+ it 'returns an empty collection when no items are provided' do
42
+ Menu.new.items.must_equal([])
44
43
  end
45
44
 
46
45
  it 'assigns the instance of Vedeu::Menu to the attributes' do
46
+ items = [:sodium, :magnesium, :aluminium, :silicon]
47
+
47
48
  menu = Menu.new
48
- menu.items([:sodium, :magnesium, :aluminium, :silicon])
49
- menu.attributes[:items].must_be_instance_of(Vedeu::Menu)
49
+ menu.items(items)
50
+ menu.attributes[:items].must_equal(items)
50
51
  end
51
52
  end
52
53
 
@@ -17,6 +17,24 @@ module Vedeu
17
17
  end
18
18
  end
19
19
 
20
+ describe '#left' do
21
+ it 'returns a Symbol' do
22
+ Stream.new.left.must_equal(:left)
23
+ end
24
+ end
25
+
26
+ describe '#right' do
27
+ it 'returns a Symbol' do
28
+ Stream.new.right.must_equal(:right)
29
+ end
30
+ end
31
+
32
+ describe '#centre' do
33
+ it 'returns a Symbol' do
34
+ Stream.new.centre.must_equal(:centre)
35
+ end
36
+ end
37
+
20
38
  describe '#text' do
21
39
  it 'returns the value assigned' do
22
40
  Stream.new.text('Some text...').must_equal('Some text...')
@@ -0,0 +1,248 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+ module Configuration
5
+
6
+ describe API do
7
+
8
+ before { Configuration.reset }
9
+ after { Configuration.reset }
10
+
11
+ describe '.configure' do
12
+ it 'returns the default configuration' do
13
+ Vedeu.configure do
14
+ # ...
15
+ end.must_equal(
16
+ {
17
+ colour_mode: 16777216,
18
+ debug: false,
19
+ interactive: true,
20
+ once: false,
21
+ system_keys: {
22
+ exit: 'q',
23
+ focus_next: :tab,
24
+ focus_prev: :shift_tab,
25
+ mode_switch: :escape
26
+ },
27
+ terminal_mode: :raw,
28
+ trace: false
29
+ }
30
+ )
31
+ end
32
+ end
33
+
34
+ describe '#interactive!' do
35
+ it 'sets the option to the desired value' do
36
+ configuration = Vedeu.configure { interactive! }
37
+ configuration[:interactive].must_equal(true)
38
+ end
39
+
40
+ it 'sets the option to the desired value' do
41
+ configuration = Vedeu.configure { interactive(false) }
42
+ configuration[:interactive].must_equal(false)
43
+ end
44
+
45
+ it 'sets the option to the desired value' do
46
+ configuration = Vedeu.configure { interactive(true) }
47
+ configuration[:interactive].must_equal(true)
48
+ end
49
+
50
+ it 'sets the option to the desired value' do
51
+ configuration = Vedeu.configure { interactive }
52
+ configuration[:interactive].must_equal(true)
53
+ end
54
+ end
55
+
56
+ describe '#standalone!' do
57
+ it 'sets the option to the desired value' do
58
+ configuration = Vedeu.configure { standalone! }
59
+ configuration[:interactive].must_equal(false)
60
+ end
61
+
62
+ it 'sets the option to the desired value' do
63
+ configuration = Vedeu.configure { standalone(false) }
64
+ configuration[:interactive].must_equal(true)
65
+ end
66
+
67
+ it 'sets the option to the desired value' do
68
+ configuration = Vedeu.configure { standalone(true) }
69
+ configuration[:interactive].must_equal(false)
70
+ end
71
+
72
+ it 'sets the option to the desired value' do
73
+ configuration = Vedeu.configure { standalone }
74
+ configuration[:interactive].must_equal(false)
75
+ end
76
+ end
77
+
78
+ describe '#run_once!' do
79
+ it 'sets the option to the desired value' do
80
+ configuration = Vedeu.configure { run_once! }
81
+ configuration[:once].must_equal(true)
82
+ end
83
+
84
+ it 'sets the option to the desired value' do
85
+ configuration = Vedeu.configure { run_once(false) }
86
+ configuration[:once].must_equal(false)
87
+ end
88
+
89
+ it 'sets the option to the desired value' do
90
+ configuration = Vedeu.configure { run_once(true) }
91
+ configuration[:once].must_equal(true)
92
+ end
93
+
94
+ it 'sets the option to the desired value' do
95
+ configuration = Vedeu.configure { run_once }
96
+ configuration[:once].must_equal(true)
97
+ end
98
+ end
99
+
100
+ describe '#cooked!' do
101
+ it 'sets the option to the desired value' do
102
+ configuration = Vedeu.configure { cooked! }
103
+ configuration[:terminal_mode].must_equal(:cooked)
104
+ end
105
+ end
106
+
107
+ describe '#raw!' do
108
+ it 'sets the option to the desired value' do
109
+ configuration = Vedeu.configure { raw! }
110
+ configuration[:terminal_mode].must_equal(:raw)
111
+ end
112
+ end
113
+
114
+ describe '#debug!' do
115
+ it 'sets the option to the desired value' do
116
+ configuration = Vedeu.configure { debug! }
117
+ configuration[:debug].must_equal(true)
118
+ end
119
+
120
+ it 'sets the option to the desired value' do
121
+ configuration = Vedeu.configure { debug(true) }
122
+ configuration[:debug].must_equal(true)
123
+ end
124
+
125
+ it 'sets the option to the desired value' do
126
+ configuration = Vedeu.configure { debug(false) }
127
+ configuration[:debug].must_equal(false)
128
+ end
129
+
130
+ it 'sets the option to the desired value' do
131
+ configuration = Vedeu.configure { trace(true) }
132
+ configuration[:debug].must_equal(true)
133
+ end
134
+
135
+ it 'sets the option to the desired value' do
136
+ configuration = Vedeu.configure do
137
+ debug(false)
138
+ trace(true)
139
+ end
140
+
141
+ configuration[:debug].must_equal(true)
142
+ end
143
+
144
+ it 'sets the option to the desired value' do
145
+ configuration = Vedeu.configure do
146
+ debug(true)
147
+ trace(false)
148
+ end
149
+
150
+ configuration[:debug].must_equal(true)
151
+ end
152
+
153
+ it 'sets the option to the desired value' do
154
+ configuration = Vedeu.configure do
155
+ debug(false)
156
+ trace(false)
157
+ end
158
+
159
+ configuration[:debug].must_equal(false)
160
+ end
161
+ end
162
+
163
+ describe '#trace!' do
164
+ it 'sets the option to the desired value' do
165
+ configuration = Vedeu.configure { trace! }
166
+
167
+ configuration[:trace].must_equal(true)
168
+ end
169
+
170
+ it 'sets the option to the desired value' do
171
+ configuration = Vedeu.configure { trace(false) }
172
+
173
+ configuration[:trace].must_equal(false)
174
+ configuration[:debug].must_equal(false)
175
+ end
176
+
177
+ it 'sets the option to the desired value' do
178
+ configuration = Vedeu.configure { trace(true) }
179
+
180
+ configuration[:trace].must_equal(true)
181
+ configuration[:debug].must_equal(true)
182
+ end
183
+ end
184
+
185
+ describe '#colour_mode' do
186
+ it 'raises an exception for an invalid value' do
187
+ proc {
188
+ Vedeu.configure { colour_mode(nil) }
189
+ }.must_raise(InvalidSyntax)
190
+ end
191
+
192
+ it 'raises an exception for an invalid value' do
193
+ proc {
194
+ Vedeu.configure { colour_mode('') }
195
+ }.must_raise(InvalidSyntax)
196
+ end
197
+
198
+ it 'raises an exception for an invalid value' do
199
+ proc {
200
+ Vedeu.configure { colour_mode(1234) }
201
+ }.must_raise(InvalidSyntax)
202
+ end
203
+
204
+ it 'sets the option to the desired value' do
205
+ configuration = Vedeu.configure { colour_mode(256) }
206
+ configuration[:colour_mode].must_equal(256)
207
+ end
208
+ end
209
+
210
+ describe 'redefining system keys' do
211
+ methods_and_keys = {
212
+ exit_key: :exit,
213
+ focus_next_key: :focus_next,
214
+ focus_prev_key: :focus_prev,
215
+ mode_switch_key: :mode_switch,
216
+ }
217
+
218
+ context 'when using an invalid value' do
219
+ invalid_params = [nil, '', 123, 'oops']
220
+
221
+ methods_and_keys.each do |meth, _|
222
+ invalid_params.each do |param|
223
+ it 'raises an exception with an invalid parameter' do
224
+ proc { Vedeu.configure { send(meth, param) } }.must_raise(InvalidSyntax)
225
+ end
226
+ end
227
+ end
228
+ end
229
+
230
+ context 'when using a valid value' do
231
+ valid_params = ['v', :f1]
232
+
233
+ methods_and_keys.each do |meth, key|
234
+ valid_params.each do |param|
235
+ it 'sets the system key to the desired value' do
236
+ configuration = Vedeu.configure { send(meth, param) }
237
+
238
+ configuration[:system_keys][key].must_equal(param)
239
+ end
240
+ end
241
+ end
242
+ end
243
+ end
244
+
245
+ end
246
+
247
+ end
248
+ end