vedeu 0.6.4 → 0.6.5

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 (118) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +40 -0
  3. data/README.md +1 -0
  4. data/docs/dsl.md +24 -24
  5. data/lib/vedeu/all.rb +21 -44
  6. data/lib/vedeu/api.rb +13 -13
  7. data/lib/vedeu/application/application_controller.rb +2 -0
  8. data/lib/vedeu/bindings/movement.rb +53 -18
  9. data/lib/vedeu/bindings/refresh.rb +1 -1
  10. data/lib/vedeu/bindings/system.rb +2 -2
  11. data/lib/vedeu/bindings/visibility.rb +3 -3
  12. data/lib/vedeu/borders/all.rb +13 -0
  13. data/lib/vedeu/borders/border.rb +209 -202
  14. data/lib/vedeu/{dsl/border.rb → borders/dsl.rb} +15 -15
  15. data/lib/vedeu/{null/border.rb → borders/null.rb} +9 -9
  16. data/lib/vedeu/borders/render.rb +347 -0
  17. data/lib/vedeu/borders/repository.rb +19 -0
  18. data/lib/vedeu/buffers/all.rb +13 -0
  19. data/lib/vedeu/buffers/buffer.rb +182 -176
  20. data/lib/vedeu/{null/buffer.rb → buffers/null.rb} +8 -8
  21. data/lib/vedeu/buffers/repository.rb +24 -0
  22. data/lib/vedeu/buffers/virtual_buffer.rb +2 -2
  23. data/lib/vedeu/cursors/all.rb +11 -0
  24. data/lib/vedeu/cursors/cursor.rb +276 -0
  25. data/lib/vedeu/cursors/refresh.rb +84 -0
  26. data/lib/vedeu/cursors/repository.rb +34 -0
  27. data/lib/vedeu/dsl/interface.rb +9 -9
  28. data/lib/vedeu/dsl/shared.rb +11 -11
  29. data/lib/vedeu/{exceptions.rb → error.rb} +2 -2
  30. data/lib/vedeu/esc/esc.rb +1 -1
  31. data/lib/vedeu/geometry/all.rb +18 -0
  32. data/lib/vedeu/geometry/area.rb +170 -160
  33. data/lib/vedeu/geometry/coordinate.rb +61 -39
  34. data/lib/vedeu/geometry/dimension.rb +139 -132
  35. data/lib/vedeu/{dsl/geometry.rb → geometry/dsl.rb} +11 -11
  36. data/lib/vedeu/geometry/generic_coordinate.rb +159 -153
  37. data/lib/vedeu/geometry/geometry.rb +310 -212
  38. data/lib/vedeu/geometry/grid.rb +73 -69
  39. data/lib/vedeu/{null/geometry.rb → geometry/null.rb} +10 -10
  40. data/lib/vedeu/geometry/position.rb +124 -120
  41. data/lib/vedeu/geometry/repository.rb +19 -0
  42. data/lib/vedeu/input/editor/document.rb +2 -2
  43. data/lib/vedeu/internal_api.rb +8 -8
  44. data/lib/vedeu/models/escape.rb +2 -2
  45. data/lib/vedeu/models/interface.rb +1 -1
  46. data/lib/vedeu/models/page.rb +89 -0
  47. data/lib/vedeu/models/row.rb +66 -0
  48. data/lib/vedeu/models/toggleable.rb +1 -1
  49. data/lib/vedeu/models/views/char.rb +7 -6
  50. data/lib/vedeu/models/views/line.rb +1 -1
  51. data/lib/vedeu/models/views/view.rb +2 -2
  52. data/lib/vedeu/options.rb +19 -0
  53. data/lib/vedeu/output/clear/named_interface.rb +1 -1
  54. data/lib/vedeu/output/direct.rb +1 -1
  55. data/lib/vedeu/output/presentation.rb +2 -1
  56. data/lib/vedeu/output/viewport.rb +3 -3
  57. data/lib/vedeu/repositories/model.rb +9 -1
  58. data/lib/vedeu/repositories/repository.rb +5 -0
  59. data/lib/vedeu/terminal/terminal.rb +3 -3
  60. data/lib/vedeu/version.rb +1 -1
  61. data/test/lib/vedeu/borders/border_test.rb +299 -291
  62. data/test/lib/vedeu/{dsl/border_test.rb → borders/dsl_test.rb} +6 -6
  63. data/test/lib/vedeu/{null/border_test.rb → borders/null_test.rb} +6 -6
  64. data/test/lib/vedeu/borders/render_test.rb +125 -0
  65. data/test/lib/vedeu/borders/repository_test.rb +17 -0
  66. data/test/lib/vedeu/buffers/buffer_test.rb +116 -112
  67. data/test/lib/vedeu/{null/buffer_test.rb → buffers/null_test.rb} +5 -5
  68. data/test/lib/vedeu/buffers/repository_test.rb +18 -0
  69. data/test/lib/vedeu/cursors/cursor_test.rb +370 -0
  70. data/test/lib/vedeu/cursors/refresh_test.rb +69 -0
  71. data/test/lib/vedeu/cursors/repository_test.rb +41 -0
  72. data/test/lib/vedeu/dsl/interface_test.rb +5 -5
  73. data/test/lib/vedeu/{exceptions_test.rb → error_test.rb} +0 -0
  74. data/test/lib/vedeu/geometry/area_test.rb +141 -137
  75. data/test/lib/vedeu/geometry/coordinate_test.rb +93 -89
  76. data/test/lib/vedeu/geometry/dimension_test.rb +137 -133
  77. data/test/lib/vedeu/{dsl/geometry_test.rb → geometry/dsl_test.rb} +17 -17
  78. data/test/lib/vedeu/geometry/generic_coordinate_test.rb +32 -28
  79. data/test/lib/vedeu/geometry/geometry_test.rb +282 -157
  80. data/test/lib/vedeu/geometry/grid_test.rb +35 -31
  81. data/test/lib/vedeu/{null/geometry_test.rb → geometry/null_test.rb} +5 -5
  82. data/test/lib/vedeu/geometry/position_test.rb +146 -142
  83. data/test/lib/vedeu/geometry/repository_test.rb +19 -0
  84. data/test/lib/vedeu/input/editor/document_test.rb +1 -1
  85. data/test/lib/vedeu/models/escape_test.rb +1 -1
  86. data/test/lib/vedeu/models/interface_test.rb +2 -2
  87. data/test/lib/vedeu/models/page_test.rb +235 -0
  88. data/test/lib/vedeu/models/row_test.rb +111 -0
  89. data/test/lib/vedeu/models/views/char_test.rb +3 -3
  90. data/test/lib/vedeu/options_test.rb +57 -0
  91. data/test/lib/vedeu/output/clear/named_interface_test.rb +1 -1
  92. data/test/lib/vedeu/output/renderers/json_test.rb +1 -1
  93. data/test/lib/vedeu/output/viewport_test.rb +15 -9
  94. data/test/lib/vedeu/refresh/refresh_buffer_test.rb +12 -12
  95. data/test/lib/vedeu/repositories/repositories_test.rb +1 -1
  96. data/test/lib/vedeu/repositories/repository_test.rb +7 -0
  97. data/test/lib/vedeu/terminal/terminal_test.rb +1 -1
  98. data/test/test_helper.rb +1 -1
  99. data/vedeu.gemspec +2 -2
  100. metadata +57 -63
  101. data/lib/vedeu/borders/borders.rb +0 -15
  102. data/lib/vedeu/borders/render_border.rb +0 -331
  103. data/lib/vedeu/buffers/buffers.rb +0 -20
  104. data/lib/vedeu/cursor/cursor.rb +0 -174
  105. data/lib/vedeu/cursor/cursors.rb +0 -30
  106. data/lib/vedeu/cursor/move.rb +0 -239
  107. data/lib/vedeu/cursor/reposition.rb +0 -78
  108. data/lib/vedeu/geometry/geometries.rb +0 -15
  109. data/lib/vedeu/refresh/refresh_cursor.rb +0 -92
  110. data/test/lib/vedeu/borders/borders_test.rb +0 -13
  111. data/test/lib/vedeu/borders/render_border_test.rb +0 -121
  112. data/test/lib/vedeu/buffers/buffers_test.rb +0 -14
  113. data/test/lib/vedeu/cursor/cursor_test.rb +0 -246
  114. data/test/lib/vedeu/cursor/cursors_test.rb +0 -37
  115. data/test/lib/vedeu/cursor/move_test.rb +0 -301
  116. data/test/lib/vedeu/cursor/reposition_test.rb +0 -63
  117. data/test/lib/vedeu/geometry/geometries_test.rb +0 -15
  118. data/test/lib/vedeu/refresh/refresh_cursor_test.rb +0 -65
@@ -0,0 +1,19 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ module Geometry
6
+
7
+ describe Repository do
8
+
9
+ let(:described) { Vedeu::Geometry::Repository }
10
+
11
+ after { Vedeu.geometries.reset }
12
+
13
+ it { described.must_respond_to(:geometries) }
14
+
15
+ end # Repository
16
+
17
+ end # Geometry
18
+
19
+ end # Vedeu
@@ -52,7 +52,7 @@ module Vedeu
52
52
  }
53
53
 
54
54
  before do
55
- Vedeu::Geometry.new(name: _name, x: 1, y: 1, xn: 5, yn: 5).store
55
+ Vedeu::Geometry::Geometry.new(name: _name, x: 1, y: 1, xn: 5, yn: 5).store
56
56
  Vedeu::Terminal.stubs(:output)
57
57
  Vedeu::Direct.stubs(:write).returns(expected)
58
58
  end
@@ -49,7 +49,7 @@ module Vedeu
49
49
  end
50
50
 
51
51
  describe '#position' do
52
- it { instance.position.must_be_instance_of(Vedeu::Position) }
52
+ it { instance.position.must_be_instance_of(Vedeu::Geometry::Position) }
53
53
  end
54
54
 
55
55
  describe '#value' do
@@ -64,7 +64,7 @@ module Vedeu
64
64
  end
65
65
 
66
66
  describe '#hide' do
67
- let(:buffer) { Vedeu::Buffer.new }
67
+ let(:buffer) { Vedeu::Buffers::Buffer.new }
68
68
 
69
69
  before { Vedeu.buffers.stubs(:by_name).returns(buffer) }
70
70
 
@@ -77,7 +77,7 @@ module Vedeu
77
77
  end
78
78
 
79
79
  describe '#show' do
80
- let(:buffer) { Vedeu::Buffer.new }
80
+ let(:buffer) { Vedeu::Buffers::Buffer.new }
81
81
 
82
82
  before { Vedeu.buffers.stubs(:by_name).returns(buffer) }
83
83
 
@@ -0,0 +1,235 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe Page do
6
+
7
+ let(:described) { Vedeu::Page }
8
+ let(:instance) { described.new(rows) }
9
+ let(:rows) {
10
+ [
11
+ [:hydrogen, :helium, :lithium],
12
+ [:beryllium, :boron, :carbon],
13
+ [:nitrogen, :oxygen, :fluorine],
14
+ ]
15
+ }
16
+
17
+ describe '#initialize' do
18
+ it { instance.must_be_instance_of(described) }
19
+
20
+ context 'when there are no rows' do
21
+ let(:rows) {}
22
+
23
+ it { instance.instance_variable_get('@rows').must_equal([]) }
24
+ end
25
+
26
+ context 'when there are rows' do
27
+ it { instance.instance_variable_get('@rows').must_equal(rows) }
28
+ end
29
+ end
30
+
31
+ describe '.coerce' do
32
+ let(:_value) {}
33
+
34
+ subject { described.coerce(_value) }
35
+
36
+ it { proc { subject }.must_raise(Vedeu::Error::InvalidSyntax) }
37
+
38
+ context 'when the value is a Vedeu::Page' do
39
+ let(:_value) { Vedeu::Page.new }
40
+
41
+ it { subject.must_equal(_value) }
42
+ end
43
+
44
+ context 'when the value is a Vedeu::Row' do
45
+ let(:_value) { Vedeu::Row.new }
46
+ let(:expected) { Vedeu::Page.new([_value]) }
47
+
48
+ it { subject.must_equal(expected) }
49
+ end
50
+
51
+ context 'when the value is an Array' do
52
+ context 'and the value is empty' do
53
+ let(:_value) { [] }
54
+ let(:expected) { Vedeu::Page.coerce(Vedeu::Row.coerce(_value)) }
55
+
56
+ it { subject.must_be_instance_of(Vedeu::Page) }
57
+ it { subject.must_equal(expected) }
58
+ end
59
+
60
+ context 'and the value is not empty, the content is' do
61
+ context 'is an empty Array' do
62
+ let(:_value) { [[]] }
63
+ let(:expected) { Vedeu::Page.coerce(Vedeu::Row.coerce([])) }
64
+
65
+ it { subject.must_be_instance_of(Vedeu::Page) }
66
+ it { subject.must_equal(expected) }
67
+ end
68
+
69
+ context 'an array of Vedeu::Row objects' do
70
+ let(:_value) {
71
+ [
72
+ Vedeu::Row.new([:hydrogen, :helium]),
73
+ Vedeu::Row.new([:lithium, :beryllium]),
74
+ ]
75
+ }
76
+ let(:expected) { Vedeu::Page.new(_value) }
77
+
78
+ it { subject.must_equal(expected) }
79
+ end
80
+
81
+ context 'a mix of Vedeu::Row objects and other objects' do
82
+ let(:_value) {
83
+ [
84
+ Vedeu::Row.new([:hydrogen, :helium]),
85
+ [:lithium],
86
+ Vedeu::Row.new([:beryllium, :boron]),
87
+ ]
88
+ }
89
+ let(:expected) {
90
+ Vedeu::Page.new([
91
+ Vedeu::Row.new([:hydrogen, :helium]),
92
+ Vedeu::Row.new([:lithium]),
93
+ Vedeu::Row.new([:beryllium, :boron]),
94
+ ])
95
+ }
96
+
97
+ it { subject.must_equal(expected) }
98
+ end
99
+
100
+ context 'a mix of Vedeu::Row objects, other objects and nils' do
101
+ let(:_value) {
102
+ [
103
+ Vedeu::Row.new([:hydrogen, :helium]),
104
+ nil,
105
+ [:lithium],
106
+ Vedeu::Row.new([:beryllium, :boron]),
107
+ [nil, :carbon],
108
+ ]
109
+ }
110
+ let(:expected) {
111
+ Vedeu::Page.new([
112
+ Vedeu::Row.new([:hydrogen, :helium]),
113
+ Vedeu::Row.new([]),
114
+ Vedeu::Row.new([:lithium]),
115
+ Vedeu::Row.new([:beryllium, :boron]),
116
+ Vedeu::Row.new([:carbon]),
117
+ ])
118
+ }
119
+
120
+ it { subject.must_equal(expected) }
121
+ end
122
+
123
+ end
124
+
125
+ end
126
+ end
127
+
128
+ describe '#each' do
129
+ subject { instance.each }
130
+
131
+ it { subject.must_be_instance_of(Enumerator) }
132
+ end
133
+
134
+ describe '#eql?' do
135
+ let(:other) { instance }
136
+
137
+ subject { instance.eql?(other) }
138
+
139
+ it { subject.must_equal(true) }
140
+
141
+ context 'when different to other' do
142
+ let(:other) { described.new([:hydrogen]) }
143
+
144
+ it { subject.must_equal(false) }
145
+ end
146
+ end
147
+
148
+ describe '#row' do
149
+ let(:index) {}
150
+
151
+ subject { instance.row(index) }
152
+
153
+ context 'when the index is nil' do
154
+ it { subject.must_equal(nil) }
155
+ end
156
+
157
+ context 'when the index is not nil' do
158
+ context 'and the index is in range' do
159
+ let(:index) { 1 }
160
+
161
+ it { subject.must_equal([:beryllium, :boron, :carbon]) }
162
+ end
163
+
164
+ context 'and the index is out of range' do
165
+ let(:index) { 4 }
166
+
167
+ it { subject.must_equal(nil) }
168
+ end
169
+
170
+ context 'and the index is out of range' do
171
+ let(:index) { -4 }
172
+
173
+ it { subject.must_equal(nil) }
174
+ end
175
+ end
176
+ end
177
+
178
+ describe '#cell' do
179
+ let(:row_index) {}
180
+ let(:cell_index) {}
181
+
182
+ subject { instance.cell(row_index, cell_index) }
183
+
184
+ context 'when the row_index is nil' do
185
+ it { subject.must_equal(nil) }
186
+ end
187
+
188
+ context 'when the row_index is not nil' do
189
+ let(:row_index) { 1 }
190
+
191
+ context 'and the row_index is in range' do
192
+ let(:row_index) { 1 }
193
+
194
+ context 'when the cell_index is nil' do
195
+ it { subject.must_equal(nil) }
196
+ end
197
+
198
+ context 'when the cell_index is not nil' do
199
+ context 'and the cell_index is in range' do
200
+ let(:cell_index) { 2 }
201
+
202
+ it { subject.must_equal(:carbon) }
203
+ end
204
+
205
+ context 'and the cell_index is out of range' do
206
+ let(:cell_index) { 4 }
207
+
208
+ it { subject.must_equal(nil) }
209
+ end
210
+
211
+ context 'and the cell_index is out of range' do
212
+ let(:cell_index) { -4 }
213
+
214
+ it { subject.must_equal(nil) }
215
+ end
216
+ end
217
+ end
218
+
219
+ context 'and the row_index is out of range' do
220
+ let(:row_index) { 4 }
221
+
222
+ it { subject.must_equal(nil) }
223
+ end
224
+
225
+ context 'and the row_index is out of range' do
226
+ let(:row_index) { -4 }
227
+
228
+ it { subject.must_equal(nil) }
229
+ end
230
+ end
231
+ end
232
+
233
+ end # Page
234
+
235
+ end # Vedeu
@@ -0,0 +1,111 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe Row do
6
+
7
+ let(:described) { Vedeu::Row }
8
+ let(:instance) { described.new(cells) }
9
+ let(:cells) { [:hydrogen, :helium, :lithium] }
10
+
11
+ describe '#initialize' do
12
+ it { instance.must_be_instance_of(described) }
13
+
14
+ context 'when there are no cells' do
15
+ let(:cells) {}
16
+
17
+ it { instance.instance_variable_get('@cells').must_equal([]) }
18
+ end
19
+
20
+ context 'when there are cells' do
21
+ it { instance.instance_variable_get('@cells').must_equal(cells) }
22
+ end
23
+ end
24
+
25
+ describe '.coerce' do
26
+ subject { described.coerce(_value) }
27
+
28
+ context 'when the value is a Vedeu::Row' do
29
+ let(:_value) { Vedeu::Row.new }
30
+
31
+ it { subject.must_equal(_value) }
32
+ end
33
+
34
+ context 'when the value is an Array' do
35
+ let(:_value) { [:hydrogen, :helium, :lithium] }
36
+
37
+ it { subject.must_equal(Vedeu::Row.new(_value)) }
38
+ end
39
+
40
+ context 'when the value is an Array containing nil objects' do
41
+ let(:_value) { [:hydrogen, nil, :lithium] }
42
+
43
+ it { subject.must_equal(Vedeu::Row.new([:hydrogen, :lithium])) }
44
+ end
45
+
46
+ context 'when the value is nil' do
47
+ let(:_value) {}
48
+
49
+ it { subject.must_equal(Vedeu::Row.new) }
50
+ end
51
+
52
+ context 'when the value is anything else' do
53
+ let(:_value) { :beryllium }
54
+
55
+ it { subject.must_equal(Vedeu::Row.new([_value])) }
56
+ end
57
+ end
58
+
59
+ describe '#each' do
60
+ subject { instance.each }
61
+
62
+ it { subject.must_be_instance_of(Enumerator) }
63
+ end
64
+
65
+ describe '#eql?' do
66
+ let(:other) { instance }
67
+
68
+ subject { instance.eql?(other) }
69
+
70
+ it { subject.must_equal(true) }
71
+
72
+ context 'when different to other' do
73
+ let(:other) { described.new([:hydrogen]) }
74
+
75
+ it { subject.must_equal(false) }
76
+ end
77
+ end
78
+
79
+ describe '#cell' do
80
+ let(:index) {}
81
+
82
+ subject { instance.cell(index) }
83
+
84
+ context 'when the index is nil' do
85
+ it { subject.must_equal(nil) }
86
+ end
87
+
88
+ context 'when the index is not nil' do
89
+ context 'and the index is in range' do
90
+ let(:index) { 1 }
91
+
92
+ it { subject.must_equal(:helium) }
93
+ end
94
+
95
+ context 'and the index is out of range' do
96
+ let(:index) { 4 }
97
+
98
+ it { subject.must_equal(nil) }
99
+ end
100
+
101
+ context 'and the index is out of range' do
102
+ let(:index) { -4 }
103
+
104
+ it { subject.must_equal(nil) }
105
+ end
106
+ end
107
+ end
108
+
109
+ end # Row
110
+
111
+ end # Vedeu
@@ -118,7 +118,7 @@ module Vedeu
118
118
  it { subject.must_be_instance_of(String) }
119
119
 
120
120
  context 'when a position is specified' do
121
- let(:position) { Vedeu::Position[17, 2] }
121
+ let(:position) { Vedeu::Geometry::Position[17, 2] }
122
122
 
123
123
  it { subject.must_equal("\e[17;2Ha") }
124
124
  end
@@ -204,7 +204,7 @@ module Vedeu
204
204
  end
205
205
 
206
206
  describe '#x' do
207
- let(:position) { Vedeu::Position[17, 2] }
207
+ let(:position) { Vedeu::Geometry::Position[17, 2] }
208
208
 
209
209
  subject { instance.x }
210
210
 
@@ -220,7 +220,7 @@ module Vedeu
220
220
  end
221
221
 
222
222
  describe '#y' do
223
- let(:position) { Vedeu::Position[17, 2] }
223
+ let(:position) { Vedeu::Geometry::Position[17, 2] }
224
224
 
225
225
  subject { instance.y }
226
226
 
@@ -0,0 +1,57 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ describe Options do
6
+
7
+ let(:described) { Vedeu::Options }
8
+ let(:instance) { described.new(options, defaults) }
9
+ let(:options) {}
10
+ let(:defaults) {}
11
+
12
+ describe '#initialize' do
13
+ subject { instance }
14
+
15
+ it { instance.must_be_instance_of(described) }
16
+
17
+ context 'when the options are nil and defaults are nil' do
18
+ it { instance.instance_variable_get('@options').must_equal({}) }
19
+ it { instance.instance_variable_get('@defaults').must_equal({}) }
20
+ end
21
+
22
+ context 'when the options are empty and the defaults are empty' do
23
+ let(:options) { {} }
24
+ let(:defaults) { {} }
25
+
26
+ it { instance.instance_variable_get('@options').must_equal({}) }
27
+ it { instance.instance_variable_get('@defaults').must_equal({}) }
28
+ end
29
+
30
+ context 'when an option is set but no default is set' do
31
+ let(:options) { { element: :hydrogen } }
32
+ let(:defaults) { {} }
33
+
34
+ it { (instance.methods - Object.methods).must_equal([:element]) }
35
+ it { instance.element.must_equal(:hydrogen) }
36
+ end
37
+
38
+ context 'when an option is set but a default is set' do
39
+ let(:options) { { element: :lithium } }
40
+ let(:defaults) { { element: :helium } }
41
+
42
+ it { (instance.methods - Object.methods).must_equal([:element]) }
43
+ it { instance.element.must_equal(:lithium) }
44
+ end
45
+
46
+ context 'when no option is set but a default is set' do
47
+ let(:options) { {} }
48
+ let(:defaults) { { element: :beryllium } }
49
+
50
+ it { (instance.methods - Object.methods).must_equal([:element]) }
51
+ it { instance.element.must_equal(:beryllium) }
52
+ end
53
+ end
54
+
55
+ end # Options
56
+
57
+ end # Vedeu