vedeu 0.4.53 → 0.4.54

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 (45) hide show
  1. checksums.yaml +4 -4
  2. data/lib/vedeu/api.rb +68 -5
  3. data/lib/vedeu/bindings/system.rb +0 -15
  4. data/lib/vedeu/bindings/visibility.rb +57 -13
  5. data/lib/vedeu/buffers/buffer.rb +5 -56
  6. data/lib/vedeu/cursor/cursor.rb +24 -16
  7. data/lib/vedeu/exceptions.rb +1 -1
  8. data/lib/vedeu/models/group.rb +39 -4
  9. data/lib/vedeu/models/interface.rb +41 -5
  10. data/lib/vedeu/null/buffer.rb +5 -0
  11. data/lib/vedeu/null/interface.rb +15 -0
  12. data/lib/vedeu/output/all.rb +1 -1
  13. data/lib/vedeu/output/background.rb +1 -1
  14. data/lib/vedeu/output/clear/named_interface.rb +0 -2
  15. data/lib/vedeu/output/{translator.rb → colour_translator.rb} +5 -5
  16. data/lib/vedeu/output/foreground.rb +1 -1
  17. data/lib/vedeu/output/render_border.rb +0 -1
  18. data/lib/vedeu/repositories/model.rb +15 -6
  19. data/lib/vedeu/repositories/repositories/buffers.rb +6 -0
  20. data/lib/vedeu/repositories/repositories/cursors.rb +6 -0
  21. data/lib/vedeu/repositories/repositories/groups.rb +6 -0
  22. data/lib/vedeu/repositories/repositories/interfaces.rb +6 -0
  23. data/lib/vedeu/support/all.rb +1 -2
  24. data/lib/vedeu/support/template.rb +7 -0
  25. data/lib/vedeu/support/toggleable.rb +98 -0
  26. data/lib/vedeu/version.rb +1 -1
  27. data/test/lib/vedeu/api_test.rb +7 -1
  28. data/test/lib/vedeu/bindings/system_test.rb +5 -16
  29. data/test/lib/vedeu/bindings/visibility_test.rb +4 -0
  30. data/test/lib/vedeu/buffers/buffer_test.rb +9 -91
  31. data/test/lib/vedeu/cursor/cursor_test.rb +4 -6
  32. data/test/lib/vedeu/dsl/geometry_test.rb +24 -0
  33. data/test/lib/vedeu/models/group_test.rb +16 -14
  34. data/test/lib/vedeu/models/interface_test.rb +1 -1
  35. data/test/lib/vedeu/null/buffer_test.rb +6 -0
  36. data/test/lib/vedeu/null/interface_test.rb +18 -0
  37. data/test/lib/vedeu/output/clear/named_interface_test.rb +10 -19
  38. data/test/lib/vedeu/output/{translator_test.rb → colour_translator_test.rb} +5 -5
  39. data/test/lib/vedeu/support/toggleable_test.rb +69 -0
  40. data/vedeu.gemspec +1 -1
  41. metadata +10 -13
  42. data/lib/vedeu/support/options.rb +0 -70
  43. data/lib/vedeu/support/visibility.rb +0 -122
  44. data/test/lib/vedeu/support/options_test.rb +0 -70
  45. data/test/lib/vedeu/support/visibility_test.rb +0 -95
@@ -0,0 +1,98 @@
1
+ module Vedeu
2
+
3
+ # Toggleable instance methods for certain models.
4
+ #
5
+ # @api private
6
+ module Toggleable
7
+
8
+ # @!attribute [rw] visible
9
+ # @return [Boolean] Whether the toggleable is visible.
10
+ attr_accessor :visible
11
+ alias_method :visible?, :visible
12
+
13
+ # @return [FalseClass]
14
+ def hide
15
+ @visible = false
16
+
17
+ store
18
+ end
19
+
20
+ # @return [TrueClass]
21
+ def show
22
+ @visible = true
23
+
24
+ store
25
+ end
26
+
27
+ # @return [FalseClass|TrueClass]
28
+ def toggle
29
+ if visible?
30
+ hide
31
+
32
+ else
33
+ show
34
+
35
+ end
36
+ end
37
+
38
+ # Toggleable class methods for models.
39
+ #
40
+ # @api private
41
+ module ClassMethods
42
+
43
+ # @param name [String]
44
+ # @return [void]
45
+ def hide(name = nil)
46
+ model_by_name(name, self.repository).hide
47
+ end
48
+ alias_method :hide_cursor, :hide
49
+ alias_method :hide_group, :hide
50
+ alias_method :hide_interface, :hide
51
+
52
+ # @param name [String]
53
+ # @return [void]
54
+ def show(name = nil)
55
+ model_by_name(name, self.repository).show
56
+ end
57
+ alias_method :show_cursor, :show
58
+ alias_method :show_group, :show
59
+ alias_method :show_interface, :show
60
+
61
+ # @param name [String]
62
+ # @return [void]
63
+ def toggle(name = nil)
64
+ model_by_name(name, self.repository).toggle
65
+ end
66
+ alias_method :toggle_cursor, :toggle
67
+ alias_method :toggle_group, :toggle
68
+ alias_method :toggle_interface, :toggle
69
+
70
+ private
71
+
72
+ # @param name [String]
73
+ # @param klass [void] The repository of the model.
74
+ # @return [void]
75
+ def model_by_name(name = nil, klass)
76
+ klass.by_name(model_name(name))
77
+ end
78
+
79
+ # @param name [String]
80
+ # @return [void]
81
+ def model_name(name = nil)
82
+ return name || Vedeu.focus
83
+ end
84
+
85
+ end # ClassMethods
86
+
87
+ # When this module is included in a class, provide ClassMethods as class
88
+ # methods for the class.
89
+ #
90
+ # @param klass [Class]
91
+ # @return [void]
92
+ def self.included(klass)
93
+ klass.send :extend, ClassMethods
94
+ end
95
+
96
+ end # Toggleable
97
+
98
+ end # Vedeu
data/lib/vedeu/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Vedeu
2
2
 
3
3
  # The current version of Vedeu.
4
- VERSION = '0.4.53'
4
+ VERSION = '0.4.54'
5
5
 
6
6
  end
@@ -52,7 +52,13 @@ module Vedeu
52
52
  it { Vedeu.must_respond_to(:clear_by_group) }
53
53
  it { Vedeu.must_respond_to(:hide_cursor) }
54
54
  it { Vedeu.must_respond_to(:show_cursor) }
55
-
55
+ it { Vedeu.must_respond_to(:toggle_cursor) }
56
+ it { Vedeu.must_respond_to(:hide_group) }
57
+ it { Vedeu.must_respond_to(:show_group) }
58
+ it { Vedeu.must_respond_to(:toggle_group) }
59
+ it { Vedeu.must_respond_to(:hide_interface) }
60
+ it { Vedeu.must_respond_to(:show_interface) }
61
+ it { Vedeu.must_respond_to(:toggle_interface) }
56
62
  end # API
57
63
 
58
64
  end # Vedeu
@@ -7,36 +7,25 @@ module Vedeu
7
7
  describe System do
8
8
 
9
9
  context 'the system events needed by Vedeu to run are defined' do
10
- it { Vedeu.bound?(:_clear_).must_equal(true) }
11
- it { Vedeu.bound?(:_clear_group_).must_equal(true) }
12
10
  it { Vedeu.bound?(:_cleanup_).must_equal(true) }
11
+ it { Vedeu.bound?(:_clear_).must_equal(true) }
13
12
  it { Vedeu.bound?(:_command_).must_equal(true) }
14
13
  it { Vedeu.bound?(:_exit_).must_equal(true) }
14
+ it { Vedeu.bound?(:_focus_by_name_).must_equal(true) }
15
+ it { Vedeu.bound?(:_focus_next_).must_equal(true) }
16
+ it { Vedeu.bound?(:_focus_prev_).must_equal(true) }
15
17
  it { Vedeu.bound?(:_initialize_).must_equal(true) }
16
18
  it { Vedeu.bound?(:_keypress_).must_equal(true) }
17
19
  it { Vedeu.bound?(:_log_).must_equal(true) }
20
+ it { Vedeu.bound?(:_maximise_).must_equal(true) }
18
21
  it { Vedeu.bound?(:_mode_switch_).must_equal(true) }
19
22
  it { Vedeu.bound?(:_refresh_).must_equal(true) }
20
23
  it { Vedeu.bound?(:_refresh_cursor_).must_equal(true) }
21
24
  it { Vedeu.bound?(:_refresh_group_).must_equal(true) }
22
25
  it { Vedeu.bound?(:_resize_).must_equal(true) }
23
- end
24
-
25
- context 'the geometry specific events are defined' do
26
- it { Vedeu.bound?(:_maximise_).must_equal(true) }
27
26
  it { Vedeu.bound?(:_unmaximise_).must_equal(true) }
28
27
  end
29
28
 
30
- context 'the focus specific events are defined' do
31
- it { Vedeu.bound?(:_focus_by_name_).must_equal(true) }
32
- it { Vedeu.bound?(:_focus_next_).must_equal(true) }
33
- it { Vedeu.bound?(:_focus_prev_).must_equal(true) }
34
- end
35
-
36
- context 'the refresh event for all registered interfaces is defined' do
37
- it { Vedeu.bound?(:_refresh_).must_equal(true) }
38
- end
39
-
40
29
  end # System
41
30
 
42
31
  end # Bindings
@@ -7,13 +7,17 @@ module Vedeu
7
7
  describe Visibility do
8
8
 
9
9
  context 'the visibility events are defined' do
10
+ it { Vedeu.bound?(:_clear_group_).must_equal(true) }
11
+
10
12
  it { Vedeu.bound?(:_cursor_hide_).must_equal(true) }
11
13
  it { Vedeu.bound?(:_cursor_show_).must_equal(true) }
12
14
  it { Vedeu.bound?(:_hide_cursor_).must_equal(true) }
13
15
  it { Vedeu.bound?(:_show_cursor_).must_equal(true) }
16
+ it { Vedeu.bound?(:_toggle_cursor_).must_equal(true) }
14
17
 
15
18
  it { Vedeu.bound?(:_hide_group_).must_equal(true) }
16
19
  it { Vedeu.bound?(:_show_group_).must_equal(true) }
20
+ it { Vedeu.bound?(:_toggle_group_).must_equal(true) }
17
21
 
18
22
  it { Vedeu.bound?(:_hide_interface_).must_equal(true) }
19
23
  it { Vedeu.bound?(:_show_interface_).must_equal(true) }
@@ -95,12 +95,6 @@ module Vedeu
95
95
  end
96
96
  end
97
97
 
98
- describe '#clear' do
99
- subject { instance.clear }
100
-
101
- it { subject.must_be_instance_of(Array) }
102
- end
103
-
104
98
  describe '#front?' do
105
99
  subject { instance.front? }
106
100
 
@@ -141,99 +135,25 @@ module Vedeu
141
135
  end
142
136
 
143
137
  describe '#hide' do
144
- let(:interface) {
145
- Vedeu::Interface.new({ name: _name, visible: visible }).store
146
- }
147
- let(:_name) { 'Buffer#hide' }
148
- let(:visible) {}
149
-
150
- before do
151
- Vedeu::Output.stubs(:render)
152
- Vedeu::Visibility.stubs(:hide)
153
- end
138
+ before { Vedeu::Output.stubs(:render) }
154
139
 
155
140
  subject { instance.hide }
156
141
 
157
- context 'when the interface is visible' do
158
- let(:visible) { true }
159
-
160
- it {
161
- Vedeu::Visibility.expects(:hide).with(interface)
162
- subject
163
- }
164
- end
165
-
166
- context 'when the interface is not visible' do
167
- let(:visible) { false }
168
-
169
- it { subject.must_be_instance_of(NilClass) }
170
- end
142
+ it {
143
+ Vedeu::Output.expects(:render)
144
+ subject
145
+ }
171
146
  end
172
147
 
173
148
  describe '#show' do
174
- let(:interface) {
175
- Vedeu::Interface.new({ name: _name, visible: visible }).store
176
- }
177
- let(:_name) { 'Buffer#show' }
178
- let(:visible) {}
179
-
180
- before do
181
- Vedeu::Output.stubs(:render)
182
- Vedeu::Visibility.stubs(:show)
183
- end
149
+ before { Vedeu::Output.stubs(:render) }
184
150
 
185
151
  subject { instance.show }
186
152
 
187
- context 'when the interface is visible' do
188
- let(:visible) { true }
189
-
190
- it { subject.must_be_instance_of(NilClass) }
191
- end
192
-
193
- context 'when the interface is not visible' do
194
- let(:visible) { false }
195
-
196
- it {
197
- Vedeu::Visibility.expects(:show).with(interface)
198
- subject
199
- }
200
- end
201
- end
202
-
203
- describe '#toggle' do
204
- let(:interface) {
205
- Vedeu::Interface.new({ name: _name, visible: visible }).store
153
+ it {
154
+ Vedeu::Output.expects(:render)
155
+ subject
206
156
  }
207
- let(:_name) { 'Buffer#toggle' }
208
- let(:visible) {}
209
-
210
- before do
211
- Vedeu::Output.stubs(:render)
212
- end
213
-
214
- subject { instance.toggle }
215
-
216
- context 'when the interface is visible' do
217
- let(:visible) { true }
218
-
219
- before { Vedeu::Visibility.stubs(:hide) }
220
-
221
- it {
222
- Vedeu::Visibility.expects(:hide).with(interface)
223
- subject
224
- }
225
- end
226
-
227
- context 'when the interface is not visible' do
228
- let(:visible) { false }
229
-
230
- before { Vedeu::Visibility.stubs(:show) }
231
-
232
- it {
233
- Vedeu::Visibility.expects(:show).with(interface)
234
- subject
235
- }
236
- end
237
157
  end
238
158
 
239
159
  describe '#render' do
@@ -241,8 +161,6 @@ module Vedeu
241
161
 
242
162
  subject { instance.render }
243
163
 
244
- it { instance.must_respond_to(:content) }
245
-
246
164
  # @todo
247
165
  # it { skip }
248
166
  # it { subject.must_be_instance_of(Array) }
@@ -47,16 +47,14 @@ module Vedeu
47
47
  it { instance.must_respond_to(:oy) }
48
48
  it { instance.must_respond_to(:oy=) }
49
49
  it { instance.must_respond_to(:state) }
50
- it { instance.must_respond_to(:visible) }
51
- it { instance.must_respond_to(:visible?) }
52
50
  it { instance.must_respond_to(:x) }
53
51
  it { instance.must_respond_to(:x=) }
54
52
  it { instance.must_respond_to(:y) }
55
53
  it { instance.must_respond_to(:y=) }
56
54
  end
57
55
 
58
- describe '#hide_cursor' do
59
- subject { instance.hide_cursor }
56
+ describe '#hide' do
57
+ subject { instance.hide }
60
58
 
61
59
  it { subject.must_be_instance_of(Vedeu::EscapeChar) }
62
60
  it { subject.to_s.must_equal("\e[?25l") }
@@ -77,8 +75,8 @@ module Vedeu
77
75
  it { subject.must_be_instance_of(Vedeu::Position) }
78
76
  end
79
77
 
80
- describe '#show_cursor' do
81
- subject { instance.show_cursor }
78
+ describe '#show' do
79
+ subject { instance.show }
82
80
 
83
81
  it { subject.must_be_instance_of(Vedeu::EscapeChar) }
84
82
  it { subject.to_s.must_equal("\e[?25h") }
@@ -59,6 +59,18 @@ module Vedeu
59
59
  subject { instance.columns(3) }
60
60
 
61
61
  it { subject.must_equal(18) }
62
+
63
+ context 'DSL #columns' do
64
+ before { Vedeu.stubs(:width).returns(80) }
65
+
66
+ subject {
67
+ Vedeu.geometry 'geometry' do
68
+ width columns(8)
69
+ end
70
+ }
71
+
72
+ it { subject.width.must_equal(48) }
73
+ end
62
74
  end
63
75
 
64
76
  describe '#height' do
@@ -87,6 +99,18 @@ module Vedeu
87
99
  subject { instance.rows(3) }
88
100
 
89
101
  it { subject.must_equal(6) }
102
+
103
+ context 'DSL #rows' do
104
+ before { Vedeu.stubs(:height).returns(38) }
105
+
106
+ subject {
107
+ Vedeu.geometry 'geometry' do
108
+ height rows(8)
109
+ end
110
+ }
111
+
112
+ it { subject.height.must_equal(24) }
113
+ end
90
114
  end
91
115
 
92
116
  describe '#use' do
@@ -8,12 +8,15 @@ module Vedeu
8
8
  let(:instance) { described.new(attributes) }
9
9
  let(:attributes) {
10
10
  {
11
- name: _name,
12
- members: members,
11
+ name: _name,
12
+ members: members,
13
+ repository: Vedeu.groups,
14
+ visible: visible,
13
15
  }
14
16
  }
15
17
  let(:_name) { 'organics' }
16
18
  let(:members) { ['carbon', 'nitrogen', 'oxygen'] }
19
+ let(:visible) { true }
17
20
 
18
21
  describe '#initialize' do
19
22
  it { instance.must_be_instance_of(described) }
@@ -25,12 +28,21 @@ module Vedeu
25
28
  it {
26
29
  instance.instance_variable_get('@repository').must_equal(Vedeu.groups)
27
30
  }
31
+ it { instance.instance_variable_get('@visible').must_equal(visible) }
32
+ end
33
+
34
+ describe 'accessors' do
35
+ it { instance.must_respond_to(:name) }
36
+ it { instance.must_respond_to(:name=) }
37
+ it { instance.must_respond_to(:visible) }
38
+ it { instance.must_respond_to(:visible=) }
39
+ it { instance.must_respond_to(:visible?) }
28
40
  end
29
41
 
30
42
  describe '#add' do
31
43
  subject { instance.add('hydrogen') }
32
44
 
33
- it { subject.must_be_instance_of(Group) }
45
+ it { subject.must_be_instance_of(Vedeu::Group) }
34
46
 
35
47
  context 'when the member already exists' do
36
48
  it 'does not add the member again but returns a new Group' do
@@ -65,16 +77,6 @@ module Vedeu
65
77
  end
66
78
  end
67
79
 
68
- describe '#name' do
69
- subject { instance.name }
70
-
71
- it { subject.must_equal('organics') }
72
- end
73
-
74
- describe '#name=' do
75
- it { instance.must_respond_to(:name=) }
76
- end
77
-
78
80
  describe '#remove' do
79
81
  let(:member) { 'hydrogen' }
80
82
 
@@ -104,7 +106,7 @@ module Vedeu
104
106
  describe '#reset' do
105
107
  subject { instance.reset }
106
108
 
107
- it { subject.must_be_instance_of(Group) }
109
+ it { subject.must_be_instance_of(Vedeu::Group) }
108
110
  it { subject.members.must_be_empty }
109
111
  end
110
112