vedeu 0.4.43 → 0.4.44

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