vedeu 0.6.23 → 0.6.24

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4242ab9d58186c12c3f4884987b54da9740b138d
4
- data.tar.gz: 9129f04bc359fa77f802414074136695417003f7
3
+ metadata.gz: 31ffcc8349f9218094f5a70a9aad877413bd7190
4
+ data.tar.gz: c2cba91b9c9c55055ca68aff099fb974005b6c03
5
5
  SHA512:
6
- metadata.gz: 449cf59c90d7017af8b6558e59dcf077ec89cb935f750365e36d0ba8b36d6a09e75f07f329ea6ab7acfa5eeaab55b9f14a35613aaef72c39b45a3be71bf21be0
7
- data.tar.gz: 723cd0a76e4d71187bd28390f61fef953fe1ed73de24b976a21eaff46928d595f0d5ab8682016dd29cebf9a2aac28aa062aa364f63798c9eac1f65a920327b36
6
+ metadata.gz: e70bd67f435d4db9713ffdc8cb729463e7a7189bfd5ce4d4aa3a4d1d22c699ad3c43647d5410492632497450e51786f1a2cab57345e3b3bc7407783820c857df
7
+ data.tar.gz: d3cbb5f04bc6eb6f12d452e51c0711254f2203d82b2c929c97157a0e7c98d9d922e5443d3323bf7a69cfa92d90cf568d3ae2a461bc9759e0ebadd0551131ba42
@@ -57,7 +57,7 @@ module Vedeu
57
57
 
58
58
  # @return [Array<Array<Vedeu::Views::Char>>]
59
59
  def render
60
- Vedeu::Output::Output.render(output) if enabled? && Vedeu.ready?
60
+ Vedeu::Output::Output.render(output) if enabled?
61
61
  end
62
62
 
63
63
  protected
@@ -75,7 +75,7 @@ module Vedeu
75
75
 
76
76
  # @return [Array<Array<Vedeu::Views::Char>>]
77
77
  def output
78
- Vedeu.timer("Bordering: '#{name}'") do
78
+ Vedeu.timer("Drawing border: '#{name}'") do
79
79
  out = [top, bottom]
80
80
 
81
81
  height.times { |y| out << [left(y), right(y)] }
@@ -42,9 +42,7 @@ module Vedeu
42
42
  def by_name
43
43
  Vedeu.trigger(:_clear_view_content_, name)
44
44
 
45
- Vedeu.timer("Refresh Buffer: '#{name}'") do
46
- Vedeu.buffers.by_name(name).render
47
- end
45
+ Vedeu.buffers.by_name(name).render
48
46
 
49
47
  Vedeu.trigger(:_refresh_border_, name) unless content_only?
50
48
  end
@@ -14,6 +14,9 @@ module Vedeu
14
14
  :height,
15
15
  :width
16
16
 
17
+ # @example
18
+ # Vedeu.trigger(:_refresh_cursor_, name)
19
+ #
17
20
  # @param (see #initialize)
18
21
  def self.by_name(name = nil)
19
22
  new(name).by_name
@@ -7,41 +7,58 @@ module Vedeu
7
7
  #
8
8
  class Cropper
9
9
 
10
+ extend Forwardable
11
+
12
+ def_delegators :border,
13
+ :bx,
14
+ :bxn,
15
+ :by,
16
+ :byn,
17
+ :height,
18
+ :width
19
+
10
20
  # Returns a new instance of Vedeu::Editor::Cropper.
11
21
  #
12
22
  # @param lines [Vedeu::Editor::Lines]
13
- # @param height [Fixnum]
14
- # @param width [Fixnum]
23
+ # @param name [String|Symbol]
15
24
  # @param ox [Fixnum]
16
25
  # @param oy [Fixnum]
17
26
  # @return [Vedeu::Editor::Cropper]
18
- def initialize(lines:, height:, width:, ox:, oy:)
19
- @lines = lines
20
- @height = height
21
- @width = width
22
- @ox = ox
23
- @oy = oy
27
+ def initialize(lines:, ox:, oy:, name:)
28
+ @lines = lines
29
+ @name = name
30
+ @ox = ox
31
+ @oy = oy
24
32
  end
25
33
 
26
- # Returns the lines cropped.
27
- #
28
- # @note If there are no lines of content, we return an empty
29
- # array. If there are any empty lines, then they are discarded.
34
+ # Returns the visible lines as a sequence of {Vedeu::View::Char}
35
+ # objects.
30
36
  #
31
37
  # @return [Array<void>]
32
- def cropped
33
- lines.map { |line| columns(line) }
38
+ def viewport
39
+ out = []
40
+
41
+ visible.each_with_index do |line, iy|
42
+ line.chars.each_with_index do |char, ix|
43
+ out << Vedeu::Views::Char.new(parent: interface,
44
+ position: [(by + iy), (bx + ix)],
45
+ value: char)
46
+ end
47
+ end
48
+
49
+ out
34
50
  end
35
51
 
36
- protected
52
+ # @return [Array<void>]
53
+ def to_a
54
+ visible
55
+ end
37
56
 
38
- # @!attribute [r] height
39
- # @return [Fixnum]
40
- attr_reader :height
57
+ protected
41
58
 
42
- # @!attribute [r] width
43
- # @return [Fixnum]
44
- attr_reader :width
59
+ # @!attribute [r] name
60
+ # @return [String|Symbol]
61
+ attr_reader :name
45
62
 
46
63
  # @!attribute [r] ox
47
64
  # @return [Fixnum]
@@ -53,6 +70,16 @@ module Vedeu
53
70
 
54
71
  private
55
72
 
73
+ # Returns the visible lines.
74
+ #
75
+ # @note If there are no lines of content, we return an empty
76
+ # array. If there are any empty lines, then they are discarded.
77
+ #
78
+ # @return [Array<void>]
79
+ def visible
80
+ lines.map { |line| columns(line) }
81
+ end
82
+
56
83
  # Return a range of visible lines.
57
84
  #
58
85
  # @return [Vedeu::Editor::Lines]
@@ -60,6 +87,11 @@ module Vedeu
60
87
  @lines[oy...(oy + height)] || []
61
88
  end
62
89
 
90
+ # @return [Vedeu::Models::Interface]
91
+ def interface
92
+ @interface ||= Vedeu.interfaces.by_name(name)
93
+ end
94
+
63
95
  # Return a range of visible characters from each line.
64
96
  #
65
97
  # @return [String]
@@ -67,6 +99,11 @@ module Vedeu
67
99
  line[ox...(ox + width)] || ''
68
100
  end
69
101
 
102
+ # @return [Vedeu::Borders::Border]
103
+ def border
104
+ @border ||= Vedeu.borders.by_name(name)
105
+ end
106
+
70
107
  end # Editor
71
108
 
72
109
  end # Cropper
@@ -7,21 +7,13 @@ module Vedeu
7
7
  #
8
8
  class Cursor
9
9
 
10
- # @!attribute [rw] bx
11
- # @return [Fixnum]
12
- attr_accessor :bx
13
-
14
- # @!attribute [rw] by
15
- # @return [Fixnum]
16
- attr_accessor :by
10
+ extend Forwardable
17
11
 
18
- # @!attribute [rw] bxn
19
- # @return [Fixnum]
20
- attr_accessor :bxn
21
-
22
- # @!attribute [rw] byn
23
- # @return [Fixnum]
24
- attr_accessor :byn
12
+ def_delegators :border,
13
+ :bx,
14
+ :bxn,
15
+ :by,
16
+ :byn
25
17
 
26
18
  # @!attribute [r] name
27
19
  # @return [String|Symbol]
@@ -49,10 +41,6 @@ module Vedeu
49
41
  # @option attributes y [Fixnum] The current line.
50
42
  # @option attributes x [Fixnum] The current character with the
51
43
  # line.
52
- # @option attributes by [Fixnum]
53
- # @option attributes bx [Fixnum]
54
- # @option attributes byn [Fixnum]
55
- # @option attributes bxn [Fixnum]
56
44
  # @option attributes name [String|Symbol]
57
45
  # @option attributes oy [Fixnum]
58
46
  # @option attributes ox [Fixnum]
@@ -97,7 +85,8 @@ module Vedeu
97
85
  # document being edited.
98
86
  #
99
87
  # @return [Vedeu::Editor::Cursor]
100
- def store
88
+ # @todo GL 2015-10-02 Should ox/oy be 0; or set to @ox/@oy?
89
+ def refresh
101
90
  Vedeu::Cursors::Cursor.store(name: name,
102
91
  x: real_x,
103
92
  y: real_y,
@@ -105,6 +94,8 @@ module Vedeu
105
94
  oy: 0,
106
95
  visible: true)
107
96
 
97
+ Vedeu.trigger(:_refresh_cursor_, name)
98
+
108
99
  self
109
100
  end
110
101
 
@@ -165,20 +156,21 @@ module Vedeu
165
156
 
166
157
  private
167
158
 
159
+ # @return [Vedeu::Borders::Border]
160
+ def border
161
+ @border ||= Vedeu.borders.by_name(name)
162
+ end
163
+
168
164
  # Returns the default options/attributes for this class.
169
165
  #
170
- # @return [Hash<Symbol => Fixnum|NilClass>]
166
+ # @return [Hash<Symbol => Fixnum|NilClass|String|Symbol>]
171
167
  def defaults
172
168
  {
173
- y: 0,
174
- x: 0,
175
- by: nil,
176
- bx: nil,
177
- byn: nil,
178
- bxn: nil,
179
169
  name: '',
180
170
  ox: 0,
181
171
  oy: 0,
172
+ x: 0,
173
+ y: 0,
182
174
  }
183
175
  end
184
176
 
@@ -9,25 +9,12 @@ module Vedeu
9
9
  include Vedeu::Repositories::Model
10
10
  extend Forwardable
11
11
 
12
- def_delegators :border,
13
- :bx,
14
- :bxn,
15
- :by,
16
- :byn,
17
- :height,
18
- :width
19
-
20
12
  def_delegators :cursor,
21
- :bol,
22
13
  :ox,
23
14
  :oy,
24
15
  :x,
25
16
  :y
26
17
 
27
- def_delegators :interface,
28
- :colour,
29
- :style
30
-
31
18
  # @!attribute [r] attributes
32
19
  # @return [Hash]
33
20
  attr_reader :attributes
@@ -54,13 +41,6 @@ module Vedeu
54
41
  end
55
42
  end
56
43
 
57
- # Clear the document content in the terminal.
58
- #
59
- # @return [void]
60
- def clear
61
- Vedeu.trigger(:_clear_view_content_, name)
62
- end
63
-
64
44
  # Deletes the character from the line where the cursor is
65
45
  # currently positioned.
66
46
  #
@@ -69,8 +49,6 @@ module Vedeu
69
49
  @lines = lines.delete_character(y, x - 1)
70
50
 
71
51
  left
72
-
73
- refresh
74
52
  end
75
53
 
76
54
  # Delete a line.
@@ -82,15 +60,6 @@ module Vedeu
82
60
  up
83
61
  end
84
62
 
85
- # Move the virtual cursor down.
86
- #
87
- # @return [Vedeu::Editor::Document]
88
- def down
89
- cursor.down
90
-
91
- refresh
92
- end
93
-
94
63
  # Returns the document as a string with line breaks if there is
95
64
  # more than one line.
96
65
  #
@@ -100,7 +69,7 @@ module Vedeu
100
69
 
101
70
  reset!
102
71
 
103
- clear
72
+ Vedeu.trigger(:_clear_view_content_, name)
104
73
 
105
74
  Vedeu.trigger(:_command_, command)
106
75
 
@@ -129,17 +98,6 @@ module Vedeu
129
98
  @lines = lines.insert_line(Vedeu::Editor::Line.new, y)
130
99
 
131
100
  bol
132
-
133
- refresh
134
- end
135
-
136
- # Move the virtual cursor left.
137
- #
138
- # @return [Vedeu::Editor::Document]
139
- def left
140
- cursor.left
141
-
142
- refresh
143
101
  end
144
102
 
145
103
  # Returns the current line from the collection of lines.
@@ -157,15 +115,6 @@ module Vedeu
157
115
  @lines ||= Vedeu::Editor::Lines.coerce(data)
158
116
  end
159
117
 
160
- # Render the document content in the terminal.
161
- #
162
- # @return [void]
163
- def render
164
- clear
165
-
166
- Vedeu::Output::Output.render(output)
167
- end
168
-
169
118
  # Reset the document to the empty state.
170
119
  #
171
120
  # @return [Vedeu::Editor::Document]
@@ -178,17 +127,30 @@ module Vedeu
178
127
  end
179
128
 
180
129
  # Store the document in the documents repository, clear and
181
- # render the view.
130
+ # send the content to the terminal.
182
131
  #
183
132
  # @return [Vedeu::Editor::Document]
184
133
  def refresh
185
134
  store
186
135
 
187
- render
136
+ Vedeu.trigger(:_clear_view_content_, name)
137
+
138
+ Vedeu::Output::Output.render(output)
139
+
140
+ cursor.refresh
188
141
 
189
142
  self
190
143
  end
191
144
 
145
+ # Move the virtual cursor left.
146
+ #
147
+ # @return [Vedeu::Editor::Document]
148
+ def left
149
+ cursor.left
150
+
151
+ refresh
152
+ end
153
+
192
154
  # Move the virtual cursor right.
193
155
  #
194
156
  # @return [Vedeu::Editor::Document]
@@ -207,21 +169,26 @@ module Vedeu
207
169
  refresh
208
170
  end
209
171
 
210
- private
211
-
212
- # Retrieve the dimensions of the document from the interface of
213
- # the same name.
172
+ # Move the virtual cursor down.
214
173
  #
215
- # @return [Vedeu::Borders::Border]
216
- def border
217
- @border ||= Vedeu.borders.by_name(name)
174
+ # @return [Vedeu::Editor::Document]
175
+ def down
176
+ cursor.down
177
+
178
+ refresh
218
179
  end
219
180
 
220
- # @return [Vedeu::Models::Interface]
221
- def interface
222
- @interface ||= Vedeu.interfaces.by_name(name)
181
+ # Move the virtual cursor to the beginning of the line.
182
+ #
183
+ # @return [Vedeu::Editor::Document]
184
+ def bol
185
+ cursor.bol
186
+
187
+ refresh
223
188
  end
224
189
 
190
+ private
191
+
225
192
  # Returns the default options/attributes for this class.
226
193
  #
227
194
  # @return [Hash<Symbol => void|Symbol]
@@ -233,25 +200,17 @@ module Vedeu
233
200
  }
234
201
  end
235
202
 
236
- # Return the data needed to render the document.
203
+ # Return the data needed to render the document, based on the
204
+ # current virtual cursor position. This output may be a cropped
205
+ # representation of the full document depending on the size of
206
+ # the interface.
237
207
  #
238
- # @return [String]
208
+ # @return [Array<Vedeu::Views::Char>]
239
209
  def output
240
- out = []
241
-
242
- visible_lines.each_with_index do |line, y_index|
243
- line.chars.each_with_index do |char, x_index|
244
- position = [(by + y_index), (bx + x_index)]
245
-
246
- out << Vedeu::Views::Char.new(value: char,
247
- parent: interface,
248
- position: position)
249
- end
250
- end
251
-
252
- cursor.store
253
-
254
- out.flatten
210
+ Vedeu::Editor::Cropper.new(lines: lines,
211
+ name: name,
212
+ ox: ox,
213
+ oy: oy).viewport
255
214
  end
256
215
 
257
216
  # Return a virtual cursor to track the cursor position within
@@ -259,25 +218,7 @@ module Vedeu
259
218
  #
260
219
  # @return [Vedeu::Editor::Cursor]
261
220
  def cursor
262
- @cursor ||= Vedeu::Editor::Cursor.new(y: 0,
263
- x: 0,
264
- by: by,
265
- bx: bx,
266
- byn: byn,
267
- bxn: bxn,
268
- name: name)
269
- end
270
-
271
- # Return only the visible lines for the document based on the
272
- # current virtual cursor position.
273
- #
274
- # @return [Vedeu::Editor::Lines]
275
- def visible_lines
276
- Vedeu::Editor::Cropper.new(lines: lines,
277
- height: height,
278
- width: width,
279
- ox: ox,
280
- oy: oy).cropped
221
+ @cursor ||= Vedeu::Editor::Cursor.new(name: name)
281
222
  end
282
223
 
283
224
  end # Document
@@ -173,6 +173,8 @@ module Vedeu
173
173
  # @return [Array]
174
174
  def refresh
175
175
  Vedeu.trigger(:_refresh_view_, current)
176
+
177
+ Vedeu.trigger(:_refresh_cursor_, current)
176
178
  end
177
179
 
178
180
  # Returns a collection of the names of all the registered
@@ -55,8 +55,8 @@ module Vedeu
55
55
  #
56
56
  # @param name [String|Symbol]
57
57
  # @return [void]
58
- def hide(name = nil)
59
- model_by_name(repository, name).hide
58
+ def hide(name = Vedeu.focus)
59
+ repository.by_name(name).hide
60
60
  end
61
61
  alias_method :hide_cursor, :hide
62
62
  alias_method :hide_group, :hide
@@ -71,8 +71,8 @@ module Vedeu
71
71
  #
72
72
  # @param name [String|Symbol]
73
73
  # @return [void]
74
- def show(name = nil)
75
- model_by_name(repository, name).show
74
+ def show(name = Vedeu.focus)
75
+ repository.by_name(name).show
76
76
  end
77
77
  alias_method :show_cursor, :show
78
78
  alias_method :show_group, :show
@@ -87,24 +87,13 @@ module Vedeu
87
87
  #
88
88
  # @param name [String|Symbol]
89
89
  # @return [void]
90
- def toggle(name = nil)
91
- model_by_name(repository, name).toggle
90
+ def toggle(name = Vedeu.focus)
91
+ repository.by_name(name).toggle
92
92
  end
93
93
  alias_method :toggle_cursor, :toggle
94
94
  alias_method :toggle_group, :toggle
95
95
  alias_method :toggle_interface, :toggle
96
96
 
97
- private
98
-
99
- # Fetch the model by name.
100
- #
101
- # @param name [String|Symbol]
102
- # @param klass [void] The repository of the model.
103
- # @return [void]
104
- def model_by_name(klass, name = nil)
105
- klass.by_name(name || Vedeu.focus)
106
- end
107
-
108
97
  end # ClassMethods
109
98
 
110
99
  # When this module is included in a class, provide ClassMethods as
@@ -51,7 +51,7 @@ module Vedeu
51
51
 
52
52
  # @return [Array<Array<Vedeu::Views::Char>>]
53
53
  def render
54
- Vedeu::Output::Output.render(output) if Vedeu.ready?
54
+ Vedeu::Output::Output.render(output)
55
55
  end
56
56
 
57
57
  protected
@@ -132,9 +132,9 @@ module Vedeu
132
132
 
133
133
  # @return [String]
134
134
  def clearing
135
- return '(content only)' if content_only?
135
+ return 'content' if content_only?
136
136
 
137
- '(all)'
137
+ 'interface'
138
138
  end
139
139
 
140
140
  # @return [Fixnum]
@@ -44,7 +44,7 @@ module Vedeu
44
44
  #
45
45
  # @return [Array<Array<String>>|NilClass]
46
46
  def render
47
- Vedeu::Output::Output.render(output) if visible? && Vedeu.ready?
47
+ Vedeu::Output::Output.render(output) if visible?
48
48
  end
49
49
 
50
50
  # Returns a string representation of the viewport.
@@ -65,7 +65,7 @@ module Vedeu
65
65
 
66
66
  # @return [Array<Array<Vedeu::Views::Char>>]
67
67
  def output
68
- Vedeu.timer("Rendering: '#{name}'") do
68
+ Vedeu.timer("Rendering content: '#{name}'") do
69
69
  out = []
70
70
 
71
71
  show.each_with_index do |line, iy|
@@ -13,6 +13,7 @@ module Vedeu
13
13
  class << self
14
14
 
15
15
  # :nocov:
16
+
16
17
  # Start the main loop.
17
18
  #
18
19
  # @return [void]
@@ -21,9 +22,9 @@ module Vedeu
21
22
  @started = true
22
23
  @loop = true
23
24
 
24
- while @loop
25
- Vedeu.trigger(:_refresh_cursor_, Vedeu.focus)
25
+ Vedeu.trigger(:_refresh_cursor_, Vedeu.focus)
26
26
 
27
+ while @loop
27
28
  yield
28
29
 
29
30
  safe_exit_point!
@@ -32,6 +33,7 @@ module Vedeu
32
33
  Vedeu.log(type: :info,
33
34
  message: 'Vedeu execution interrupted, exiting.')
34
35
  end
36
+
35
37
  # :nocov:
36
38
 
37
39
  # Signal that we wish to terminate the running application.
@@ -42,6 +44,7 @@ module Vedeu
42
44
  end
43
45
 
44
46
  # :nocov:
47
+
45
48
  # Check the application has started and we wish to continue
46
49
  # running.
47
50
  #
@@ -51,6 +54,7 @@ module Vedeu
51
54
  def safe_exit_point!
52
55
  fail Vedeu::Error::Interrupt if @started && !@loop
53
56
  end
57
+
54
58
  # :nocov:
55
59
 
56
60
  end # Eigenclass
@@ -81,7 +81,7 @@ module Vedeu
81
81
  #
82
82
  # @return [Array<Array<Vedeu::Models::Cell>>]
83
83
  def reset
84
- @output = empty_buffer if Vedeu.ready?
84
+ @output = empty_buffer
85
85
  end
86
86
 
87
87
  # Write a collection of cells to the virtual terminal.
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.6.23'
4
+ VERSION = '0.6.24'
5
5
 
6
6
  end
@@ -8,29 +8,43 @@ module Vedeu
8
8
 
9
9
  let(:described) { Vedeu::Editor::Cropper }
10
10
  let(:instance) {
11
- described.new(lines: lines,
12
- height: height,
13
- width: width,
14
- ox: ox,
15
- oy: oy)
11
+ described.new(lines: lines, name: _name, ox: ox, oy: oy)
16
12
  }
13
+ let(:_name) { 'editor_cropper' }
17
14
  let(:lines) { Vedeu::Editor::Lines.new }
18
- let(:height) { 3 }
19
- let(:width) { 5 }
20
15
  let(:ox) { 1 }
21
16
  let(:oy) { 1 }
22
17
 
18
+ let(:border) {
19
+ Vedeu::Borders::Border.new(name: _name, enabled: false)
20
+ }
21
+ let(:geometry) {
22
+ Vedeu::Geometry::Geometry.new(name: _name,
23
+ x: 1,
24
+ y: 1,
25
+ xn: 5,
26
+ yn: 3)
27
+ }
28
+ let(:interface) {
29
+ Vedeu::Models::Interface.new(name: _name)
30
+ }
31
+
32
+ before do
33
+ Vedeu.geometries.stubs(:by_name).with(_name).returns(geometry)
34
+ Vedeu.borders.stubs(:by_name).with(_name).returns(border)
35
+ Vedeu.interfaces.stubs(:by_name).with(_name).returns(interface)
36
+ end
37
+
23
38
  describe '#initialize' do
24
39
  it { instance.must_be_instance_of(described) }
25
40
  it { instance.instance_variable_get('@lines').must_equal(lines) }
26
- it { instance.instance_variable_get('@height').must_equal(height) }
27
- it { instance.instance_variable_get('@width').must_equal(width) }
41
+ it { instance.instance_variable_get('@name').must_equal(_name) }
28
42
  it { instance.instance_variable_get('@ox').must_equal(ox) }
29
43
  it { instance.instance_variable_get('@oy').must_equal(oy) }
30
44
  end
31
45
 
32
- describe '#cropped' do
33
- subject { instance.cropped }
46
+ describe '#to_a' do
47
+ subject { instance.to_a }
34
48
 
35
49
  context 'when there are no lines' do
36
50
  let(:lines) { Vedeu::Editor::Lines.new }
@@ -50,30 +64,54 @@ module Vedeu
50
64
  }
51
65
 
52
66
  it { subject.must_equal(['elium', 'ithiu', 'eryll']) }
67
+ end
68
+ end
53
69
 
54
- context 'when oy is near the bottom' do
55
- let(:oy) { 6 }
70
+ # describe '#viewport' do
71
+ # subject { instance.viewport }
56
72
 
57
- it { subject.must_equal([]) }
58
- end
73
+ # context 'when there are no lines' do
74
+ # let(:lines) { Vedeu::Editor::Lines.new }
59
75
 
60
- context 'when ox is nearly past the content width' do
61
- let(:oy) { 5 }
62
- let(:ox) { 10 }
76
+ # it { subject.must_equal([]) }
77
+ # end
63
78
 
64
- it 'returns only that which is visible, discarding empty lines' do
65
- subject.must_equal([])
66
- end
67
- end
79
+ # context 'when there are lines' do
80
+ # let(:lines) {
81
+ # Vedeu::Editor::Lines.new([
82
+ # Vedeu::Editor::Line.new('Hydrogen'),
83
+ # Vedeu::Editor::Line.new('Helium'),
84
+ # Vedeu::Editor::Line.new('Lithium'),
85
+ # Vedeu::Editor::Line.new('Beryllium'),
86
+ # Vedeu::Editor::Line.new('Boron'),
87
+ # ])
88
+ # }
68
89
 
69
- context 'when both oy and ox are effectively out of range' do
70
- let(:oy) { 10 }
71
- let(:ox) { 20 }
90
+ # it { subject.must_equal(['elium', 'ithiu', 'eryll']) }
72
91
 
73
- it { subject.must_equal([]) }
74
- end
75
- end
76
- end
92
+ # context 'when oy is near the bottom' do
93
+ # let(:oy) { 6 }
94
+
95
+ # it { subject.must_equal([]) }
96
+ # end
97
+
98
+ # context 'when ox is nearly past the content width' do
99
+ # let(:oy) { 5 }
100
+ # let(:ox) { 10 }
101
+
102
+ # it 'returns only that which is visible, discarding empty lines' do
103
+ # subject.must_equal([])
104
+ # end
105
+ # end
106
+
107
+ # context 'when both oy and ox are effectively out of range' do
108
+ # let(:oy) { 10 }
109
+ # let(:ox) { 20 }
110
+
111
+ # it { subject.must_equal([]) }
112
+ # end
113
+ # end
114
+ # end
77
115
 
78
116
  end # Cropper
79
117
 
@@ -10,78 +10,47 @@ module Vedeu
10
10
  let(:instance) { described.new(attributes) }
11
11
  let(:attributes) {
12
12
  {
13
- y: y,
14
- x: x,
15
- bx: bx,
16
- by: by,
17
- byn: byn,
18
- bxn: bxn,
19
13
  name: _name,
14
+ ox: ox,
20
15
  oy: oy,
21
- ox: ox
16
+ x: x,
17
+ y: y,
22
18
  }
23
19
  }
24
- let(:y) { 0 }
25
- let(:x) { 0 }
26
- let(:by) { 1 }
27
- let(:bx) { 1 }
28
- let(:byn) { 6 }
29
- let(:bxn) { 6 }
30
- let(:_name) { 'editor_cursor' }
31
- let(:oy) { 0 }
32
- let(:ox) { 0 }
20
+ let(:_name) { 'editor_cursor' }
21
+ let(:ox) { 0 }
22
+ let(:oy) { 0 }
23
+ let(:x) { 0 }
24
+ let(:y) { 0 }
25
+
26
+ let(:border) {
27
+ Vedeu::Borders::Border.new(name: _name, enabled: false)
28
+ }
29
+ let(:geometry) {
30
+ Vedeu::Geometry::Geometry.new(name: _name,
31
+ x: 1,
32
+ y: 1,
33
+ xn: 6,
34
+ yn: 6)
35
+ }
33
36
 
34
37
  describe '#initialize' do
35
38
  it { instance.must_be_instance_of(described) }
36
39
  it { instance.instance_variable_get('@y').must_equal(y) }
37
40
  it { instance.instance_variable_get('@x').must_equal(x) }
38
- it { instance.instance_variable_get('@by').must_equal(by) }
39
- it { instance.instance_variable_get('@bx').must_equal(bx) }
40
- it { instance.instance_variable_get('@byn').must_equal(byn) }
41
- it { instance.instance_variable_get('@bxn').must_equal(bxn) }
42
41
  it { instance.instance_variable_get('@name').must_equal(_name) }
43
42
  it { instance.instance_variable_get('@oy').must_equal(0) }
44
43
  it { instance.instance_variable_get('@ox').must_equal(0) }
45
-
46
- context 'when x is nil' do
47
- it { instance.instance_variable_get('@x').must_equal(0) }
48
- end
49
-
50
- context 'when x is not nil' do
51
- let(:x) { 3 }
52
-
53
- it { instance.instance_variable_get('@x').must_equal(3) }
54
- end
55
-
56
- context 'when y is nil' do
57
- it { instance.instance_variable_get('@y').must_equal(0) }
58
- end
59
-
60
- context 'when y is not nil' do
61
- let(:y) { 6 }
62
-
63
- it { instance.instance_variable_get('@y').must_equal(6) }
64
- end
65
44
  end
66
45
 
67
46
  describe '#accessors' do
68
47
  it {
69
- instance.must_respond_to(:bx)
70
- instance.must_respond_to(:bx=)
71
- instance.must_respond_to(:by)
72
- instance.must_respond_to(:by=)
73
- instance.must_respond_to(:bxn)
74
- instance.must_respond_to(:bxn=)
75
- instance.must_respond_to(:byn)
76
- instance.must_respond_to(:byn=)
77
48
  instance.must_respond_to(:name)
78
49
  instance.must_respond_to(:ox)
79
50
  instance.must_respond_to(:ox=)
80
51
  instance.must_respond_to(:oy)
81
52
  instance.must_respond_to(:oy=)
82
- instance.must_respond_to(:x)
83
53
  instance.must_respond_to(:x=)
84
- instance.must_respond_to(:y)
85
54
  instance.must_respond_to(:y=)
86
55
  }
87
56
  end
@@ -120,13 +89,18 @@ module Vedeu
120
89
  it { subject.ox.must_equal(3) }
121
90
  end
122
91
 
123
- describe '#store' do
124
- before { Vedeu::Cursors::Cursor.stubs(:store) }
92
+ describe '#refresh' do
93
+ before {
94
+ Vedeu::Cursors::Cursor.stubs(:store)
95
+ Vedeu.stubs(:trigger)
96
+ }
125
97
 
126
- subject { instance.store }
98
+ subject { instance.refresh }
127
99
 
128
100
  it 'stores the virtual cursor in place of the real cursor' do
129
101
  Vedeu::Cursors::Cursor.expects(:store)
102
+ Vedeu.expects(:trigger).with(:_refresh_cursor_, _name)
103
+
130
104
  subject.must_be_instance_of(described)
131
105
  end
132
106
  end
@@ -157,14 +131,16 @@ module Vedeu
157
131
  end
158
132
 
159
133
  describe '#to_s' do
160
- let(:x) { 11 }
161
- let(:y) { 5 }
134
+ let(:x) { 11 }
135
+ let(:y) { 5 }
136
+ let(:ox) { 0 }
137
+ let(:oy) { 0 }
162
138
 
163
139
  subject { instance.to_s }
164
140
 
165
141
  it { subject.must_be_instance_of(String) }
166
142
 
167
- it { subject.must_equal("\e[6;6H\e[?25h") }
143
+ it { subject.must_equal("\e[6;12H\e[?25h") }
168
144
  end
169
145
 
170
146
  describe '#up' do
@@ -58,17 +58,6 @@ module Vedeu
58
58
  }
59
59
  end
60
60
 
61
- describe '#clear' do
62
- before { Vedeu.stubs(:trigger).with(:_clear_view_content_, _name) }
63
-
64
- subject { instance.clear }
65
-
66
- it {
67
- Vedeu.expects(:trigger).with(:_clear_view_content_, _name)
68
- subject
69
- }
70
- end
71
-
72
61
  describe '#delete_character' do
73
62
  let(:y) { 0 }
74
63
  let(:x) { 0 }
@@ -172,29 +161,6 @@ module Vedeu
172
161
  it { subject.must_equal(expected) }
173
162
  end
174
163
 
175
- describe '#render' do
176
- let(:data) {
177
- Vedeu::Editor::Lines.new([
178
- Vedeu::Editor::Line.new('A'),
179
- Vedeu::Editor::Line.new('B'),
180
- Vedeu::Editor::Line.new('C'),
181
- ])
182
- }
183
- let(:output) { "\e[1;1HA\e[2;1HB\e[3;1HC\e[1;1H\e[?25h" }
184
-
185
- before {
186
- Vedeu.stubs(:trigger).with(:_clear_view_content_, _name)
187
- Vedeu::Output::Output.stubs(:render)
188
- }
189
-
190
- subject { instance.render }
191
-
192
- it {
193
- Vedeu::Output::Output.expects(:render)
194
- subject
195
- }
196
- end
197
-
198
164
  describe '#reset!' do
199
165
  subject { instance.reset! }
200
166
 
@@ -202,12 +168,22 @@ module Vedeu
202
168
  end
203
169
 
204
170
  describe '#refresh' do
171
+ before do
172
+ Vedeu.stubs(:trigger)
173
+ Vedeu::Output::Output.stubs(:render)
174
+ end
175
+
205
176
  subject { instance.refresh }
206
177
 
207
178
  it { subject.must_be_instance_of(described) }
208
179
 
209
180
  it {
210
- instance.expects(:render)
181
+ Vedeu.expects(:trigger).with(:_clear_view_content_, _name)
182
+ subject
183
+ }
184
+
185
+ it {
186
+ Vedeu::Output::Output.expects(:render)
211
187
  subject
212
188
  }
213
189
  end
@@ -30,6 +30,10 @@ module Vedeu
30
30
  end
31
31
  end
32
32
 
33
+ describe 'accessors' do
34
+ it { instance.must_respond_to(:rows) }
35
+ end
36
+
33
37
  describe '.coerce' do
34
38
  let(:_value) {}
35
39
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vedeu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.23
4
+ version: 0.6.24
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gavin Laking