vedeu 0.4.43 → 0.4.44

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 (51) hide show
  1. checksums.yaml +4 -4
  2. data/Dockerfile +1 -1
  3. data/bin/vedeu +19 -0
  4. data/lib/vedeu.rb +0 -34
  5. data/lib/vedeu/all.rb +4 -1
  6. data/lib/vedeu/application/application_view.rb +9 -9
  7. data/lib/vedeu/application/controller.rb +6 -5
  8. data/lib/vedeu/application/helper.rb +3 -16
  9. data/lib/vedeu/application/view.rb +3 -16
  10. data/lib/vedeu/bindings/all.rb +5 -0
  11. data/lib/vedeu/bindings/bindings.rb +115 -0
  12. data/lib/vedeu/bindings/drb.rb +45 -0
  13. data/lib/vedeu/bindings/menus.rb +53 -0
  14. data/lib/vedeu/bindings/movement.rb +76 -0
  15. data/lib/vedeu/bindings/visibility.rb +53 -0
  16. data/lib/vedeu/buffers/buffer.rb +2 -0
  17. data/lib/vedeu/cli/generator/templates/application/app/controllers/name.erb +2 -2
  18. data/lib/vedeu/cli/generator/templates/application/app/helpers/name.erb +2 -0
  19. data/lib/vedeu/cli/generator/templates/application/config/configuration.erb +3 -0
  20. data/lib/vedeu/cli/generator/view.rb +0 -5
  21. data/lib/vedeu/cli/main.rb +12 -0
  22. data/lib/vedeu/cursor/reposition.rb +4 -4
  23. data/lib/vedeu/dsl/interface.rb +0 -27
  24. data/lib/vedeu/exceptions.rb +65 -0
  25. data/lib/vedeu/geometry/geometry.rb +2 -2
  26. data/lib/vedeu/geometry/grid.rb +2 -2
  27. data/lib/vedeu/input/input.rb +34 -28
  28. data/lib/vedeu/null/geometry.rb +2 -2
  29. data/lib/vedeu/output/colour.rb +0 -2
  30. data/lib/vedeu/output/esc.rb +7 -1
  31. data/lib/vedeu/output/render_border.rb +5 -0
  32. data/lib/vedeu/output/renderers/json.rb +7 -2
  33. data/lib/vedeu/support/terminal.rb +1 -1
  34. data/lib/vedeu/version.rb +1 -1
  35. data/test/lib/vedeu/application/controller_test.rb +0 -4
  36. data/test/lib/vedeu/application/helper_test.rb +0 -8
  37. data/test/lib/vedeu/application/view_test.rb +0 -8
  38. data/test/lib/vedeu/bindings/bindings_test.rb +43 -0
  39. data/test/lib/vedeu/bindings/drb_test.rb +23 -0
  40. data/test/lib/vedeu/bindings/menus_test.rb +26 -0
  41. data/test/lib/vedeu/bindings/movement_test.rb +28 -0
  42. data/test/lib/vedeu/bindings/visibility_test.rb +27 -0
  43. data/test/lib/vedeu/buffers/buffer_test.rb +73 -38
  44. data/test/lib/vedeu/cli/main_test.rb +47 -0
  45. data/test/lib/vedeu/dsl/interface_test.rb +4 -7
  46. data/test/lib/vedeu/exceptions_test.rb +5 -0
  47. data/test/lib/vedeu/input/input_test.rb +9 -0
  48. data/test/lib/vedeu/output/esc_test.rb +4 -1
  49. metadata +21 -5
  50. data/lib/vedeu/bindings.rb +0 -275
  51. data/test/lib/vedeu/bindings_test.rb +0 -88
@@ -0,0 +1,76 @@
1
+ module Vedeu
2
+
3
+ module Bindings
4
+
5
+ # System events relating to movement of cursors or interfaces.
6
+ #
7
+ # @api public
8
+ module Movement
9
+
10
+ # @see {Vedeu::Move}
11
+ Vedeu.bind(:_cursor_down_) do |name|
12
+ Vedeu::Move.by_name(Vedeu::Cursor, :down, name)
13
+ end
14
+
15
+ # @see {Vedeu::Move}
16
+ Vedeu.bind(:_cursor_left_) do |name|
17
+ Vedeu::Move.by_name(Vedeu::Cursor, :left, name)
18
+ end
19
+
20
+ # @see {Vedeu::Move}
21
+ Vedeu.bind(:_cursor_origin_) do |name|
22
+ Vedeu::Move.by_name(Vedeu::Cursor, :origin, name)
23
+ end
24
+
25
+ # Move the cursor to a relative position inside the interface.
26
+ #
27
+ # @todo
28
+ # - The content of the interface needs to be a consideration.
29
+ # - If the screen size changes, what should happen to the cursor.
30
+ # - How do we represent cursors which are deliberately positioned
31
+ # outside of the viewable area?
32
+ #
33
+ Vedeu.bind(:_cursor_reposition_) do |name, y, x|
34
+ Vedeu::Reposition.to(Vedeu::Cursor, name, y, x)
35
+ end
36
+
37
+ # @see {Vedeu::Move}
38
+ Vedeu.bind(:_cursor_reset_) do |name|
39
+ Vedeu.trigger(:_cursor_origin_, name)
40
+ end
41
+
42
+ # @see {Vedeu::Move}
43
+ Vedeu.bind(:_cursor_right_) do |name|
44
+ Vedeu::Move.by_name(Vedeu::Cursor, :right, name)
45
+ end
46
+
47
+ # @see {Vedeu::Move}
48
+ Vedeu.bind(:_cursor_up_) do |name|
49
+ Vedeu::Move.by_name(Vedeu::Cursor, :up, name)
50
+ end
51
+
52
+ # @see {Vedeu::Move}
53
+ Vedeu.bind(:_geometry_down_) do |name|
54
+ Vedeu::Move.by_name(Vedeu::Geometry, :down, name)
55
+ end
56
+
57
+ # @see {Vedeu::Move}
58
+ Vedeu.bind(:_geometry_left_) do |name|
59
+ Vedeu::Move.by_name(Vedeu::Geometry, :left, name)
60
+ end
61
+
62
+ # @see {Vedeu::Move}
63
+ Vedeu.bind(:_geometry_right_) do |name|
64
+ Vedeu::Move.by_name(Vedeu::Geometry, :right, name)
65
+ end
66
+
67
+ # @see {Vedeu::Move}
68
+ Vedeu.bind(:_geometry_up_) do |name|
69
+ Vedeu::Move.by_name(Vedeu::Geometry, :up, name)
70
+ end
71
+
72
+ end # Movement
73
+
74
+ end # Bindings
75
+
76
+ end # Vedeu
@@ -0,0 +1,53 @@
1
+ module Vedeu
2
+
3
+ module Bindings
4
+
5
+ # System events relating to the visibility of cursors or interfaces.
6
+ #
7
+ # @api public
8
+ module Visibility
9
+
10
+ # Hide the cursor of the named interface or interface currently in focus.
11
+ Vedeu.bind(:_hide_cursor_) do |name|
12
+ Vedeu::Visibility.for_cursor(name).hide
13
+ end
14
+ Vedeu.bind(:_cursor_hide_) { |name| Vedeu.trigger(:_hide_cursor_, name) }
15
+
16
+ # Will hide all of the interfaces belonging to the named group. Useful for
17
+ # hiding part of that which is currently displaying in the terminal.
18
+ #
19
+ # @note
20
+ # This may be rarely used, since the action of showing a group using
21
+ # `Vedeu.trigger(:_show_group_, group_name)` will effectively clear the
22
+ # terminal and show the new group.}
23
+ Vedeu.bind(:_hide_group_) { |name| Vedeu.trigger(:_clear_group_, name) }
24
+
25
+ # @see Vedeu::Buffer#hide
26
+ Vedeu.bind(:_hide_interface_) { |name| Vedeu.buffers.by_name(name).hide }
27
+
28
+ # Show the cursor of the named interface or interface currently in focus.
29
+ Vedeu.bind(:_show_cursor_) do |name|
30
+ Vedeu::Visibility.for_cursor(name).show
31
+ end
32
+ Vedeu.bind(:_cursor_show_) { |name| Vedeu.trigger(:_show_cursor_, name) }
33
+
34
+ # Will clear the terminal and then show all of the interfaces belonging to
35
+ # the named group.
36
+ Vedeu.bind(:_show_group_) do |name|
37
+ Vedeu.trigger(:_clear_)
38
+ Vedeu.trigger(:_refresh_group_, name)
39
+ end
40
+
41
+ # @see Vedeu::Buffer#show
42
+ Vedeu.bind(:_show_interface_) { |name| Vedeu.buffers.by_name(name).show }
43
+
44
+ # @see Vedeu::Buffer#toggle
45
+ Vedeu.bind(:_toggle_interface_) do |name|
46
+ Vedeu.buffers.by_name(name).toggle
47
+ end
48
+
49
+ end # Visibility
50
+
51
+ end # Bindings
52
+
53
+ end # Vedeu
@@ -120,6 +120,7 @@ module Vedeu
120
120
  return nil unless visible?
121
121
 
122
122
  Vedeu::Visibility.hide(interface)
123
+
123
124
  clear
124
125
  end
125
126
 
@@ -156,6 +157,7 @@ module Vedeu
156
157
  return nil if visible?
157
158
 
158
159
  Vedeu::Visibility.show(interface)
160
+
159
161
  render
160
162
  end
161
163
 
@@ -5,10 +5,10 @@ module <%= object.app_name %>
5
5
 
6
6
  class <%= object.name_as_class %>Controller < <%= object.app_name -%>::ApplicationController
7
7
 
8
- controller_name <%= object.app_name -%>
8
+ controller_name :<%= object.name %>
9
9
 
10
10
  def initialize
11
- <%= object.app_name %>::<%= object.name_as_class %>View.render(object)
11
+ <%= object.app_name %>::<%= object.name_as_class %>View.render(*args)
12
12
  end
13
13
 
14
14
  private
@@ -1,3 +1,5 @@
1
+ require_relative 'application_helper'
2
+
1
3
  module <%= object.app_name %>
2
4
 
3
5
  module <%= object.name_as_class %>Helper
@@ -1,5 +1,8 @@
1
1
  Vedeu.configure do
2
2
  log "/tmp/<%= object.name %>.log"
3
+
4
+ colour_mode 16_777_216
5
+
3
6
  # debug!
4
7
  # drb!
5
8
  # drb_host 'localhost'
@@ -32,15 +32,10 @@ module Vedeu
32
32
  # @return [void]
33
33
  def generate
34
34
  make_controller_file
35
-
36
35
  make_helper_file
37
-
38
36
  make_keymap_file
39
-
40
37
  make_interface_file
41
-
42
38
  make_template_file
43
-
44
39
  make_view_class_file
45
40
  end
46
41
 
@@ -1,23 +1,35 @@
1
1
  module Vedeu
2
2
 
3
+ # Provide a command line interface to Vedeu.
4
+ #
5
+ # @api public
3
6
  module CLI
4
7
 
8
+ # The main command line interface commands.
9
+ #
10
+ # @api public
5
11
  class Main < Thor
6
12
 
7
13
  desc 'new <name>', 'Create a skeleton Vedeu client application.'
14
+ # @param name [String]
15
+ # @return [String]
8
16
  def new(name)
9
17
  say Vedeu::Generator::Application.generate(name)
10
18
  end
11
19
 
12
20
  # 'Specify the interface name lowercase snakecase; e.g. main_interface'
21
+
13
22
  desc 'view <name>',
14
23
  'Create a new interface within the client application.'
24
+ # @param name [String]
25
+ # @return [String]
15
26
  def view(name)
16
27
  Vedeu::Generator::View.generate(name)
17
28
  end
18
29
 
19
30
  desc 'version',
20
31
  'Print the version.'
32
+ # @return [String]
21
33
  def version
22
34
  say "vedeu #{Vedeu::VERSION}"
23
35
  end
@@ -28,10 +28,10 @@ module Vedeu
28
28
  # @return [Vedeu::Cursor]
29
29
  def to
30
30
  result = entity.new(name: name,
31
- y: y_position,
32
- x: x_position,
33
- oy: y,
34
- ox: x).store
31
+ y: y_position,
32
+ x: x_position,
33
+ oy: y,
34
+ ox: x).store
35
35
 
36
36
  Vedeu.trigger(:_clear_, name)
37
37
  Vedeu.trigger(:_refresh_, name)
@@ -308,33 +308,6 @@ module Vedeu
308
308
  alias_method :z_index, :zindex
309
309
  alias_method :z, :zindex
310
310
 
311
- # @param label [String]
312
- # @param name [String|Symbol]
313
- # @param value [Boolean|void]
314
- # @return [void]
315
- def button(label, name, value = true)
316
- button_name = "button_#{model.name}_#{name}"
317
- button_label = " #{label} "
318
- button_height = 3
319
- button_width = button_label.size + 2
320
-
321
- Vedeu.interface button_name do
322
- border {}
323
- cursor
324
- geometry do
325
- height(button_height)
326
- width(button_width)
327
- end
328
- end
329
- Vedeu.renders do
330
- view button_name do
331
- lines do
332
- line button_label
333
- end
334
- end
335
- end
336
- end
337
-
338
311
  protected
339
312
 
340
313
  # @!attribute [r] client
@@ -0,0 +1,65 @@
1
+ module Vedeu
2
+
3
+ # Raised with Vedeu attempts to access a named model that does not exist.
4
+ #
5
+ # @api private
6
+ class ModelNotFound < StandardError
7
+
8
+ end # ModeSwitch
9
+
10
+ # Raised when Vedeu attempts to parse a {Vedeu.view} or {Vedeu.interface} and
11
+ # encounters a problem.
12
+ #
13
+ # @api private
14
+ class InvalidSyntax < StandardError
15
+
16
+ end # InvalidSyntax
17
+
18
+ # Raised when a name is not provided for a model when attempting to store it
19
+ # in a repository.
20
+ #
21
+ # @api private
22
+ class MissingRequired < StandardError
23
+
24
+ end # MissingRequired
25
+
26
+ # Raised intentionally when the client application wishes to switch between
27
+ # cooked and raw (or vice versa) terminal modes.
28
+ #
29
+ # @see Vedeu::Application
30
+ #
31
+ # @api private
32
+ class ModeSwitch < StandardError
33
+
34
+ end # ModeSwitch
35
+
36
+ # Raised to remind me (or client application developers) that the subclass
37
+ # implements the functionality sought.
38
+ #
39
+ # @see Vedeu::Translator
40
+ #
41
+ # @api private
42
+ class NotImplemented < StandardError
43
+
44
+ end # NotImplemented
45
+
46
+ # Raised when trying to access an interface column less than 1 or greater
47
+ # than 12. Vedeu is hard-wired to a 12-column layout for the time being.
48
+ #
49
+ # @see Vedeu::Grid
50
+ #
51
+ # @api private
52
+ class OutOfRange < StandardError
53
+
54
+ end # OutOfRange
55
+
56
+ # Raised when Vedeu wishes to exit.
57
+ #
58
+ # @see Vedeu::MainLoop
59
+ #
60
+ # @api private
61
+ class VedeuInterrupt < StandardError
62
+
63
+ end # VedeuInterrupt
64
+
65
+ end # Vedeu
@@ -153,11 +153,11 @@ module Vedeu
153
153
  y: _y,
154
154
  yn: _yn,
155
155
  y_yn: @height,
156
- y_default: Vedeu::Terminal.height,
156
+ y_default: Vedeu.height,
157
157
  x: _x,
158
158
  xn: _xn,
159
159
  x_xn: @width,
160
- x_default: Vedeu::Terminal.width,
160
+ x_default: Vedeu.width,
161
161
  options: dimension_options,
162
162
  )
163
163
  end
@@ -93,12 +93,12 @@ module Vedeu
93
93
 
94
94
  # @return [Fixnum]
95
95
  def actual_height
96
- Vedeu::Terminal.height
96
+ Vedeu.height
97
97
  end
98
98
 
99
99
  # @return [Fixnum]
100
100
  def actual_width
101
- Vedeu::Terminal.width
101
+ Vedeu.width
102
102
  end
103
103
 
104
104
  # @return [Boolean]
@@ -82,34 +82,6 @@ module Vedeu
82
82
  "\e[3~" => :delete,
83
83
  "\e[F" => :end,
84
84
  "\e[Z" => :shift_tab,
85
- "\eOP" => :f1,
86
- "\eOQ" => :f2,
87
- "\eOR" => :f3,
88
- "\eOS" => :f4,
89
- "\e[15~" => :f5,
90
- "\e[15;2~" => :shift_f5,
91
- "\e[15;5~" => :ctrl_f5,
92
- "\e[17~" => :f6,
93
- "\e[17;2~" => :shift_f6,
94
- "\e[17;5~" => :ctrl_f6,
95
- "\e[18~" => :f7,
96
- "\e[18;2~" => :shift_f7,
97
- "\e[18;5~" => :ctrl_f6,
98
- "\e[19~" => :f8,
99
- "\e[19;2~" => :shift_f8,
100
- "\e[19;5~" => :ctrl_f6,
101
- "\e[20~" => :f9,
102
- "\e[20;2~" => :shift_f9,
103
- "\e[20;5~" => :ctrl_f6,
104
- "\e[21~" => :f10,
105
- "\e[21;2~" => :shift_f10,
106
- "\e[21;5~" => :ctrl_f6,
107
- "\e[23~" => :f11,
108
- "\e[23;2~" => :shift_f11,
109
- "\e[23;5~" => :ctrl_f6,
110
- "\e[24~" => :f12,
111
- "\e[24;2~" => :shift_f12,
112
- "\e[24;5~" => :ctrl_f6,
113
85
  "\e[1;2P" => :print_screen,
114
86
  "\e[1;2Q" => :scroll_lock,
115
87
  "\e[1;2R" => :pause_break,
@@ -140,6 +112,40 @@ module Vedeu
140
112
  "\u0024" => :ctrl_x,
141
113
  "\u0025" => :ctrl_y,
142
114
  "\u0026" => :ctrl_z,
115
+ }.merge(f_keys)
116
+ end
117
+
118
+ # @return [Hash<String => Symbol]
119
+ def f_keys
120
+ {
121
+ "\eOP" => :f1,
122
+ "\eOQ" => :f2,
123
+ "\eOR" => :f3,
124
+ "\eOS" => :f4,
125
+ "\e[15~" => :f5,
126
+ "\e[15;2~" => :shift_f5,
127
+ "\e[15;5~" => :ctrl_f5,
128
+ "\e[17~" => :f6,
129
+ "\e[17;2~" => :shift_f6,
130
+ "\e[17;5~" => :ctrl_f6,
131
+ "\e[18~" => :f7,
132
+ "\e[18;2~" => :shift_f7,
133
+ "\e[18;5~" => :ctrl_f7,
134
+ "\e[19~" => :f8,
135
+ "\e[19;2~" => :shift_f8,
136
+ "\e[19;5~" => :ctrl_f8,
137
+ "\e[20~" => :f9,
138
+ "\e[20;2~" => :shift_f9,
139
+ "\e[20;5~" => :ctrl_f9,
140
+ "\e[21~" => :f10,
141
+ "\e[21;2~" => :shift_f10,
142
+ "\e[21;5~" => :ctrl_f10,
143
+ "\e[23~" => :f11,
144
+ "\e[23;2~" => :shift_f11,
145
+ "\e[23;5~" => :ctrl_f11,
146
+ "\e[24~" => :f12,
147
+ "\e[24;2~" => :shift_f12,
148
+ "\e[24;5~" => :ctrl_f12,
143
149
  }
144
150
  end
145
151