vedeu 0.6.4 → 0.6.5

Sign up to get free protection for your applications and to get access to all the features.
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