vedeu 0.6.9 → 0.6.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/lib/vedeu/all.rb +3 -3
  4. data/lib/vedeu/api/external.rb +194 -0
  5. data/lib/vedeu/api/internal.rb +173 -0
  6. data/lib/vedeu/application/controller.rb +3 -2
  7. data/lib/vedeu/bindings/application.rb +1 -1
  8. data/lib/vedeu/bindings/drb.rb +2 -3
  9. data/lib/vedeu/bindings/movement.rb +1 -1
  10. data/lib/vedeu/buffers/all.rb +0 -2
  11. data/lib/vedeu/colours/translator.rb +2 -1
  12. data/lib/vedeu/common.rb +4 -2
  13. data/lib/vedeu/configuration/api.rb +1 -1
  14. data/lib/vedeu/configuration/cli.rb +1 -1
  15. data/lib/vedeu/cursors/repository.rb +1 -1
  16. data/lib/vedeu/editor/insert.rb +12 -13
  17. data/lib/vedeu/geometry/position.rb +1 -1
  18. data/lib/vedeu/models/cell.rb +35 -21
  19. data/lib/vedeu/models/escape.rb +18 -1
  20. data/lib/vedeu/models/page.rb +20 -10
  21. data/lib/vedeu/models/row.rb +18 -8
  22. data/lib/vedeu/models/views/char.rb +9 -7
  23. data/lib/vedeu/models/views/view.rb +1 -1
  24. data/lib/vedeu/output/compressor.rb +22 -14
  25. data/lib/vedeu/output/output.rb +1 -10
  26. data/lib/vedeu/output/renderers/escape_sequence.rb +8 -4
  27. data/lib/vedeu/output/renderers/file.rb +7 -23
  28. data/lib/vedeu/output/renderers/html.rb +47 -26
  29. data/lib/vedeu/output/renderers/json.rb +11 -16
  30. data/lib/vedeu/output/renderers/null.rb +1 -1
  31. data/lib/vedeu/output/renderers/renderer_options.rb +2 -1
  32. data/lib/vedeu/output/renderers/terminal.rb +7 -15
  33. data/lib/vedeu/output/renderers/text.rb +1 -1
  34. data/lib/vedeu/output/viewport.rb +154 -143
  35. data/lib/vedeu/repositories/collection.rb +2 -2
  36. data/lib/vedeu/repositories/model.rb +25 -26
  37. data/lib/vedeu/repositories/registerable.rb +9 -8
  38. data/lib/vedeu/repositories/repository.rb +21 -16
  39. data/lib/vedeu/repositories/store.rb +6 -4
  40. data/lib/vedeu/runtime/bootstrap.rb +7 -5
  41. data/lib/vedeu/runtime/main_loop.rb +2 -0
  42. data/lib/vedeu/runtime/router.rb +155 -149
  43. data/lib/vedeu/templating/decoder.rb +8 -5
  44. data/lib/vedeu/templating/encoder.rb +6 -4
  45. data/lib/vedeu/templating/template.rb +2 -2
  46. data/lib/vedeu/templating/view_template.rb +8 -7
  47. data/lib/vedeu/terminal/buffer.rb +132 -0
  48. data/lib/vedeu/terminal/terminal.rb +0 -5
  49. data/lib/vedeu/version.rb +1 -1
  50. data/lib/vedeu.rb +2 -2
  51. data/out_ +50 -0
  52. data/test/lib/vedeu/api/external_test.rb +62 -0
  53. data/test/lib/vedeu/{internal_api_test.rb → api/internal_test.rb} +6 -2
  54. data/test/lib/vedeu/application/controller_test.rb +3 -3
  55. data/test/lib/vedeu/bindings/application_test.rb +2 -2
  56. data/test/lib/vedeu/models/cell_test.rb +48 -17
  57. data/test/lib/vedeu/models/escape_test.rb +29 -7
  58. data/test/lib/vedeu/models/page_test.rb +70 -50
  59. data/test/lib/vedeu/models/row_test.rb +40 -20
  60. data/test/lib/vedeu/output/compressor_test.rb +12 -12
  61. data/test/lib/vedeu/output/output_test.rb +17 -23
  62. data/test/lib/vedeu/output/renderers/escape_sequence_test.rb +15 -11
  63. data/test/lib/vedeu/output/renderers/html_test.rb +66 -68
  64. data/test/lib/vedeu/output/renderers/json_test.rb +36 -83
  65. data/test/lib/vedeu/output/renderers/terminal_test.rb +22 -2
  66. data/test/lib/vedeu/output/viewport_test.rb +201 -197
  67. data/test/lib/vedeu/runtime/router_test.rb +144 -140
  68. data/test/lib/vedeu/terminal/buffer_test.rb +307 -0
  69. data/test/support/examples/material_colours_app.rb +2 -2
  70. data/test/support/templates/html_renderer.vedeu +24 -0
  71. metadata +14 -17
  72. data/lib/vedeu/api.rb +0 -190
  73. data/lib/vedeu/buffers/virtual_buffer.rb +0 -136
  74. data/lib/vedeu/buffers/virtual_buffers.rb +0 -77
  75. data/lib/vedeu/internal_api.rb +0 -173
  76. data/lib/vedeu/terminal/content.rb +0 -88
  77. data/test/lib/vedeu/api_test.rb +0 -58
  78. data/test/lib/vedeu/buffers/virtual_buffer_test.rb +0 -148
  79. data/test/lib/vedeu/buffers/virtual_buffers_test.rb +0 -73
  80. data/test/lib/vedeu/terminal/content_test.rb +0 -108
@@ -1,184 +1,190 @@
1
1
  module Vedeu
2
2
 
3
- # Stores all client application controllers with their respective actions.
4
- #
5
- module Router
3
+ module Runtime
6
4
 
7
- include Vedeu::Common
8
-
9
- extend self
10
-
11
- # Registers a controller with the given controller name for the client
12
- # application.
5
+ # Stores all client application controllers with their respective
6
+ # actions.
13
7
  #
14
- # @param controller [Symbol]
15
- # @param klass [String]
16
- # @raise [Vedeu::Error::MissingRequired] When the controller name is not
17
- # given.
18
- # @return [void]
19
- def add_controller(controller, klass)
20
- unless present?(controller)
21
- fail Vedeu::Error::MissingRequired,
22
- 'Cannot store controller without a name attribute.'
23
- end
8
+ module Router
9
+
10
+ include Vedeu::Common
11
+
12
+ extend self
13
+
14
+ # Registers a controller with the given controller name for the
15
+ # client application.
16
+ #
17
+ # @param controller [Symbol]
18
+ # @param klass [String]
19
+ # @raise [Vedeu::Error::MissingRequired] When the controller
20
+ # name is not given.
21
+ # @return [void]
22
+ def add_controller(controller, klass)
23
+ unless present?(controller)
24
+ fail Vedeu::Error::MissingRequired,
25
+ 'Cannot store controller without a name attribute.'
26
+ end
24
27
 
25
- Vedeu.log(type: :create,
26
- message: "Controller: ':#{controller}'")
28
+ Vedeu.log(type: :create,
29
+ message: "Controller: ':#{controller}'")
27
30
 
28
- if registered?(controller)
29
- storage[controller].merge!(klass: klass)
31
+ if registered?(controller)
32
+ storage[controller].merge!(klass: klass)
30
33
 
31
- else
32
- storage.store(controller, klass: klass, actions: [])
34
+ else
35
+ storage.store(controller, klass: klass, actions: [])
36
+
37
+ end
33
38
 
39
+ storage
34
40
  end
35
41
 
36
- storage
37
- end
42
+ # Registers an action to the given controller name for the
43
+ # client application.
44
+ #
45
+ # @param controller [Symbol]
46
+ # @param action [Symbol]
47
+ # @raise [Vedeu::Error::MissingRequired] When the controller
48
+ # name or action name is not given.
49
+ # @return [void]
50
+ def add_action(controller, action)
51
+ if present?(controller) && present?(action)
52
+ Vedeu.log(type: :create,
53
+ message: "Action: ':#{action}' (for ':#{controller}')")
38
54
 
39
- # Registers an action to the given controller name for the client
40
- # application.
41
- #
42
- # @param controller [Symbol]
43
- # @param action [Symbol]
44
- # @raise [Vedeu::Error::MissingRequired] When the controller name or action
45
- # name is not given.
46
- # @return [void]
47
- def add_action(controller, action)
48
- if present?(controller) && present?(action)
49
- Vedeu.log(type: :create,
50
- message: "Action: ':#{action}' (for ':#{controller}')")
55
+ if registered?(controller)
56
+ storage[controller][:actions] << action
51
57
 
52
- if registered?(controller)
53
- storage[controller][:actions] << action
58
+ else
59
+ add_controller(controller, '')
60
+ add_action(controller, action)
54
61
 
55
- else
56
- add_controller(controller, '')
57
- add_action(controller, action)
62
+ end
58
63
 
59
- end
64
+ storage
60
65
 
61
- storage
66
+ else
67
+ fail Vedeu::Error::MissingRequired,
68
+ 'Cannot store action without a controller or name attribute.'
62
69
 
63
- else
64
- fail Vedeu::Error::MissingRequired,
65
- 'Cannot store action without a controller or name attribute.'
70
+ end
71
+ end
66
72
 
73
+ # Instruct Vedeu to load the client application controller
74
+ # action with parameters.
75
+ #
76
+ # @example
77
+ # Vedeu.goto(controller, action, args)
78
+ #
79
+ # @param controller [Symbol]
80
+ # @param action [Symbol]
81
+ # @param args [void]
82
+ # @raise [Vedeu::Error::ModelNotFound] When the controller is
83
+ # not registered.
84
+ # @return [void]
85
+ def goto(controller, action, **args)
86
+ Vedeu.log(type: :debug,
87
+ message: "Routing: #{controller} #{action}")
88
+
89
+ route(controller, action, args) if action_defined?(action, controller)
90
+ end
91
+ alias_method :action, :goto
92
+
93
+ # Returns a boolean indicating whether the given controller name
94
+ # is already registered.
95
+ #
96
+ # @param controller [Symbol]
97
+ # @return [Boolean]
98
+ def registered?(controller)
99
+ storage.key?(controller)
67
100
  end
68
- end
69
101
 
70
- # Instruct Vedeu to load the client application controller action with
71
- # parameters.
72
- #
73
- # @example
74
- # Vedeu.goto(controller, action, args)
75
- #
76
- # @param controller [Symbol]
77
- # @param action [Symbol]
78
- # @param args [void]
79
- # @raise [Vedeu::Error::ModelNotFound] When the controller is not
80
- # registered.
81
- # @return [void]
82
- def goto(controller, action, **args)
83
- Vedeu.log(type: :debug,
84
- message: "Routing: #{controller} #{action}")
85
-
86
- route(controller, action, args) if action_defined?(action, controller)
87
- end
88
- alias_method :action, :goto
89
-
90
- # Returns a boolean indicating whether the given controller name is already
91
- # registered.
92
- #
93
- # @param controller [Symbol]
94
- # @return [Boolean]
95
- def registered?(controller)
96
- storage.key?(controller)
97
- end
102
+ # Removes all stored controllers with their respective actions.
103
+ #
104
+ # @return [Hash<void>]
105
+ def reset!
106
+ @storage = in_memory
107
+ end
108
+ alias_method :reset, :reset!
98
109
 
99
- # Removes all stored controllers with their respective actions.
100
- #
101
- # @return [Hash<void>]
102
- def reset!
103
- @storage = in_memory
104
- end
105
- alias_method :reset, :reset!
110
+ private
106
111
 
107
- private
112
+ # Returns a boolean indicating whether the given action name is
113
+ # defined for the given controller.
114
+ #
115
+ # @param action [Symbol]
116
+ # @param controller [Symbol]
117
+ # @return [Boolean]
118
+ def action_defined?(action, controller)
119
+ if registered?(controller)
120
+ return true if storage[controller][:actions].include?(action)
108
121
 
109
- # Returns a boolean indicating whether the given action name is defined for
110
- # the given controller.
111
- #
112
- # @param action [Symbol]
113
- # @param controller [Symbol]
114
- # @return [Boolean]
115
- def action_defined?(action, controller)
116
- if registered?(controller)
117
- return true if storage[controller][:actions].include?(action)
122
+ fail Vedeu::Error::ActionNotFound,
123
+ "#{action} is not registered for #{controller}."
118
124
 
119
- fail Vedeu::Error::ActionNotFound,
120
- "#{action} is not registered for #{controller}."
125
+ else
126
+ fail Vedeu::Error::ControllerNotFound,
127
+ "#{controller} is not registered."
121
128
 
122
- else
123
- fail Vedeu::Error::ControllerNotFound,
124
- "#{controller} is not registered."
129
+ end
130
+ end
125
131
 
132
+ # Instantiate the given controller by name, the call the action
133
+ # (method) with any given arguments.
134
+ #
135
+ # @param controller [Symbol]
136
+ # @param action [Symbol]
137
+ # @param args [Symbol]
138
+ # @return [void]
139
+ def route(controller, action, **args)
140
+ klass = Object.const_get(klass_for(controller)).new(**args)
141
+ klass.send(action)
126
142
  end
127
- end
128
143
 
129
- # Instantiate the given controller by name, the call the action (method)
130
- # with any given arguments.
131
- #
132
- # @param controller [Symbol]
133
- # @param action [Symbol]
134
- # @param args [Symbol]
135
- # @return [void]
136
- def route(controller, action, **args)
137
- klass = Object.const_get(klass_for(controller)).new(**args)
138
- klass.send(action)
139
- end
140
-
141
- # Fetch the class for the controller by name.
142
- #
143
- # @param controller [Symbol]
144
- # @raise [Vedeu::Error::MissingRequired] When the given controller name does
145
- # not have a class defined.
146
- # @return [String]
147
- def klass_for(controller)
148
- if registered?(controller) && klass_defined?(controller)
149
- storage[controller][:klass]
150
-
151
- else
152
- fail Vedeu::Error::MissingRequired,
153
- "Cannot route to #{controller} as no class defined."
144
+ # Fetch the class for the controller by name.
145
+ #
146
+ # @param controller [Symbol]
147
+ # @raise [Vedeu::Error::MissingRequired] When the given
148
+ # controller name does not have a class defined.
149
+ # @return [String]
150
+ def klass_for(controller)
151
+ if registered?(controller) && klass_defined?(controller)
152
+ storage[controller][:klass]
154
153
 
154
+ else
155
+ fail Vedeu::Error::MissingRequired,
156
+ "Cannot route to #{controller} as no class defined."
157
+
158
+ end
155
159
  end
156
- end
157
160
 
158
- # Returns a boolean indicating whether the given controller name has a class
159
- # defined.
160
- #
161
- # @param controller [Symbol]
162
- # @return [Boolean]
163
- def klass_defined?(controller)
164
- present?(storage[controller][:klass])
165
- end
161
+ # Returns a boolean indicating whether the given controller name
162
+ # has a class defined.
163
+ #
164
+ # @param controller [Symbol]
165
+ # @return [Boolean]
166
+ def klass_defined?(controller)
167
+ present?(storage[controller][:klass])
168
+ end
166
169
 
167
- # Returns all the stored controllers and their respective actions.
168
- #
169
- # @return [Hash<Symbol => Hash<Symbol => String|Array<Symbol>>>]
170
- def storage
171
- @storage ||= in_memory
172
- end
170
+ # Returns all the stored controllers and their respective
171
+ # actions.
172
+ #
173
+ # @return [Hash<Symbol => Hash<Symbol => String|Array<Symbol>>>]
174
+ def storage
175
+ @storage ||= in_memory
176
+ end
173
177
 
174
- # Returns an empty collection ready for the storing of client application
175
- # controllers and actions.
176
- #
177
- # @return [Hash<void>]
178
- def in_memory
179
- {}
180
- end
178
+ # Returns an empty collection ready for the storing of client
179
+ # application controllers and actions.
180
+ #
181
+ # @return [Hash<void>]
182
+ def in_memory
183
+ {}
184
+ end
185
+
186
+ end # Router
181
187
 
182
- end # Router
188
+ end # Runtime
183
189
 
184
190
  end # Vedeu
@@ -2,7 +2,8 @@ module Vedeu
2
2
 
3
3
  module Templating
4
4
 
5
- # Converts an encoded string back into an object or collection of objects.
5
+ # Converts an encoded string back into an object or collection of
6
+ # objects.
6
7
  #
7
8
  class Decoder
8
9
 
@@ -20,7 +21,8 @@ module Vedeu
20
21
  @data = data
21
22
  end
22
23
 
23
- # Converts an encoded string back into an object or collection of objects.
24
+ # Converts an encoded string back into an object or collection
25
+ # of objects.
24
26
  #
25
27
  # @return [Object]
26
28
  def process
@@ -35,7 +37,8 @@ module Vedeu
35
37
 
36
38
  private
37
39
 
38
- # Convert the marshalled object or objects back into an object(s).
40
+ # Convert the marshalled object or objects back into an
41
+ # object(s).
39
42
  #
40
43
  # @return [Object]
41
44
  def demarshal
@@ -49,8 +52,8 @@ module Vedeu
49
52
  Zlib::Inflate.inflate(decode64)
50
53
  end
51
54
 
52
- # Decode the Base64 string into a compressed, marshalled object or
53
- # objects.
55
+ # Decode the Base64 string into a compressed, marshalled object
56
+ # or objects.
54
57
  #
55
58
  # @return [String]
56
59
  def decode64
@@ -2,7 +2,8 @@ module Vedeu
2
2
 
3
3
  module Templating
4
4
 
5
- # Converts an object or collection of objects into an encoded String.
5
+ # Converts an object or collection of objects into an encoded
6
+ # String.
6
7
  #
7
8
  class Encoder
8
9
 
@@ -20,7 +21,8 @@ module Vedeu
20
21
  @data = data
21
22
  end
22
23
 
23
- # Converts an object or collection of objects into an encoded String.
24
+ # Converts an object or collection of objects into an encoded
25
+ # String.
24
26
  #
25
27
  # @return [String]
26
28
  def process
@@ -42,8 +44,8 @@ module Vedeu
42
44
  "{{#{encode64}}}"
43
45
  end
44
46
 
45
- # Encode the compressed, marshalled object or objects into a Base64
46
- # string.
47
+ # Encode the compressed, marshalled object or objects into a
48
+ # Base64 string.
47
49
  #
48
50
  # @return [String]
49
51
  def encode64
@@ -47,8 +47,8 @@ module Vedeu
47
47
  File.read(path)
48
48
  end
49
49
 
50
- # @raise [Vedeu::Error::MissingRequired] When the path is empty or does
51
- # not exist.
50
+ # @raise [Vedeu::Error::MissingRequired] When the path is empty
51
+ # or does not exist.
52
52
  # @return [String]
53
53
  def path
54
54
  fail Vedeu::Error::MissingRequired,
@@ -2,7 +2,8 @@ module Vedeu
2
2
 
3
3
  module Templating
4
4
 
5
- # Extend Template to provide client application view specific parsing.
5
+ # Extend Template to provide client application view specific
6
+ # parsing.
6
7
  #
7
8
  class ViewTemplate < Template
8
9
 
@@ -48,8 +49,8 @@ module Vedeu
48
49
 
49
50
  private
50
51
 
51
- # Return the interface colours if a name option is set, otherwise use the
52
- # default colours.
52
+ # Return the interface colours if a name option is set,
53
+ # otherwise use the default colours.
53
54
  #
54
55
  # @return [Vedeu::Colours::Colour|Hash<Symbol => Symbol>]
55
56
  def default_colour
@@ -65,8 +66,8 @@ module Vedeu
65
66
  end
66
67
  end
67
68
 
68
- # Return the interface style(s) if a name option is set, otherwise use the
69
- # default style.
69
+ # Return the interface style(s) if a name option is set,
70
+ # otherwise use the default style.
70
71
  #
71
72
  # @return [Symbol]
72
73
  def default_style
@@ -95,8 +96,8 @@ module Vedeu
95
96
  line.split(/({{\s*[^}]+\s*}})/)
96
97
  end
97
98
 
98
- # Convert the content into an array of strings without the line ending
99
- # character.
99
+ # Convert the content into an array of strings without the line
100
+ # ending character.
100
101
  #
101
102
  # @return [Array<String>]
102
103
  def lines
@@ -0,0 +1,132 @@
1
+ module Vedeu
2
+
3
+ module Terminal
4
+
5
+ # All output will be written to this singleton, and #render will be called
6
+ # at the end of each run of {Vedeu::MainLoop}; effectively rendering this
7
+ # buffer to each registered renderer. This buffer is not cleared after this
8
+ # action though, as subsequent actions will modify the contents. This means
9
+ # that individual parts of Vedeu can write content here at various points
10
+ # and only at the end of each run of {Vedeu::MainLoop} will it be actually
11
+ # output 'somewhere'.
12
+ #
13
+ module Buffer
14
+
15
+ extend self
16
+
17
+ # Return a grid of {Vedeu::Models::Cell} objects defined by the
18
+ # height and width of this virtual terminal.
19
+ #
20
+ # @return [Array<Array<Vedeu::Models::Cell>>]
21
+ def buffer
22
+ @output ||= empty_buffer.dup
23
+ end
24
+ alias_method :cells, :buffer
25
+
26
+ # @return [Array<Array<Vedeu::Models::Cell>>]
27
+ def empty_buffer
28
+ Array.new(Vedeu.height) do |y|
29
+ Array.new(Vedeu.width) do |x|
30
+ Vedeu::Models::Cell.new(position: [y + 1, x + 1])
31
+ end
32
+ end
33
+ end
34
+
35
+ # @return [Vedeu::Models::Page]
36
+ def output
37
+ Vedeu::Models::Page.coerce(buffer)
38
+ end
39
+
40
+ # Read a single cell from the virtual terminal.
41
+ #
42
+ # @note
43
+ # Given two actual coordinates (y, x) e.g. (1, 1)
44
+ # Convert to coordinate indices (cy, cx) e.g. (0, 0)
45
+ # Fetch the row at cy and return the cell from cx
46
+ #
47
+ # @param y [Fixnum] The row/line coordinate.
48
+ # @param x [Fixnum] The column/character coordinate.
49
+ # @return [Vedeu::Views::Char]
50
+ def read(y, x)
51
+ cy, cx = Vedeu::Geometry::Position[y, x].as_indices
52
+
53
+ row = fetch(cells, cy)
54
+ cell = fetch(row, cx)
55
+
56
+ cell
57
+ end
58
+
59
+ # Send the cells to the renderer and return the rendered result.
60
+ #
61
+ # @return [String|void] Most likely to be a String.
62
+ def render
63
+ Vedeu.renderers.render(output) if Vedeu.ready?
64
+ end
65
+
66
+ # Removes all content from the virtual terminal; effectively
67
+ # clearing it.
68
+ #
69
+ # @return [Array<Array<Vedeu::Models::Cell>>]
70
+ def reset
71
+ @output = empty_buffer
72
+ end
73
+ alias_method :clear, :reset
74
+
75
+ # Write a collection of cells to the virtual terminal.
76
+ #
77
+ # @param value [Array<Array<Vedeu::Views::Char>>]
78
+ # @return [Array<Array<Vedeu::Views::Char>>]
79
+ def write(value)
80
+ values = Array(value).flatten
81
+
82
+ values.each do |v|
83
+ buffer[v.position.y][v.position.x] = v if valid_position?(v)
84
+ end
85
+
86
+ self
87
+ end
88
+
89
+ private
90
+
91
+ # @param from [Array] An Array of rows, or an Array of cells.
92
+ # @param which [Fixnum] A Fixnum representing the index; the row
93
+ # number or the cell number for a row.
94
+ # @return [Array<Vedeu::Views::Char>|Array]
95
+ def fetch(from, which)
96
+ from[which] || []
97
+ end
98
+
99
+ # Returns a boolean indicating the value has a position
100
+ # attribute.
101
+ #
102
+ # @param value [void]
103
+ # @return [Boolean]
104
+ def position?(value)
105
+ value.respond_to?(:position) &&
106
+ value.position.is_a?(Vedeu::Geometry::Position)
107
+ end
108
+
109
+ # Returns a boolean indicating the value has a position
110
+ # attribute and is within the terminal boundary.
111
+ #
112
+ # @param value [void]
113
+ # @return [Boolean]
114
+ def valid_position?(value)
115
+ position?(value) && within_terminal_boundary?(value)
116
+ end
117
+
118
+ # Returns a boolean indicating the position of the value object
119
+ # is valid for this terminal.
120
+ #
121
+ # @param value [void]
122
+ # @return [Boolean]
123
+ def within_terminal_boundary?(value)
124
+ value.position.y > 0 && value.position.y <= Vedeu.height &&
125
+ value.position.x > 0 && value.position.x <= Vedeu.width
126
+ end
127
+
128
+ end # Buffer
129
+
130
+ end # Terminal
131
+
132
+ end # Vedeu
@@ -207,11 +207,6 @@ module Vedeu
207
207
  IO.console
208
208
  end
209
209
 
210
- # @return [Vedeu::Buffers::VirtualBuffer]
211
- def virtual
212
- @virtual ||= Vedeu::Buffers::VirtualBuffer.new(height, width)
213
- end
214
-
215
210
  end # Terminal
216
211
 
217
212
  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.6.9'
4
+ VERSION = '0.6.10'
5
5
 
6
6
  end
data/lib/vedeu.rb CHANGED
@@ -53,8 +53,8 @@ module Vedeu
53
53
  # @param receiver [void]
54
54
  # @return [void]
55
55
  def included(receiver)
56
- receiver.send(:include, API)
57
- receiver.extend(API)
56
+ receiver.send(:include, Vedeu::API::External)
57
+ receiver.extend(Vedeu::API::External)
58
58
  end
59
59
  # :nocov:
60
60
 
data/out_ ADDED
@@ -0,0 +1,50 @@
1
+ <html>
2
+ <head>
3
+ <style type='text/css'>
4
+ body {
5
+ background:#000;
6
+ }
7
+ td {
8
+ border:1px #171717 solid;
9
+ font-size:12px;
10
+ font-family:monospace;
11
+ height:18px;
12
+ margin:1px;
13
+ text-align:center;
14
+ vertical-align:center;
15
+ width:18px;
16
+ }
17
+ </style>
18
+ </head>
19
+ <body>
20
+ <table>
21
+ <tr>
22
+
23
+ </tr>
24
+ <tr>
25
+
26
+ </tr>
27
+ <tr>
28
+
29
+ </tr>
30
+ <tr>
31
+
32
+ </tr>
33
+ <tr>
34
+
35
+ </tr>
36
+ <tr>
37
+
38
+ </tr>
39
+ <tr>
40
+
41
+ </tr>
42
+ <tr>
43
+
44
+ </tr>
45
+ <tr>
46
+
47
+ </tr>
48
+ </table>
49
+ </body>
50
+ </html>