vedeu 0.5.3 → 0.5.4

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 (66) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -5
  3. data/docs/events.md +4 -0
  4. data/examples/borders_app.rb +43 -39
  5. data/examples/focus_app.rb +4 -0
  6. data/examples/hello_world.rb +10 -3
  7. data/lib/vedeu/all.rb +1 -2
  8. data/lib/vedeu/api.rb +4 -1
  9. data/lib/vedeu/application/application_controller.rb +24 -0
  10. data/lib/vedeu/application/application_view.rb +9 -9
  11. data/lib/vedeu/bindings.rb +2 -0
  12. data/lib/vedeu/bindings/movement.rb +9 -9
  13. data/lib/vedeu/bindings/system.rb +3 -3
  14. data/lib/vedeu/buffers/buffer.rb +4 -9
  15. data/lib/vedeu/buffers/display_buffer.rb +2 -48
  16. data/lib/vedeu/cli/generator/application.rb +6 -0
  17. data/lib/vedeu/cli/generator/templates/application/.ruby-version +1 -0
  18. data/lib/vedeu/cli/generator/templates/application/app/controllers/name.erb +2 -11
  19. data/lib/vedeu/configuration/api.rb +6 -0
  20. data/lib/vedeu/configuration/configuration.rb +6 -0
  21. data/lib/vedeu/cursor/cursor.rb +49 -15
  22. data/lib/vedeu/cursor/move.rb +2 -2
  23. data/lib/vedeu/cursor/refresh_cursor.rb +2 -7
  24. data/lib/vedeu/distributed/server.rb +7 -21
  25. data/lib/vedeu/dsl/view.rb +31 -6
  26. data/lib/vedeu/internal_api.rb +7 -0
  27. data/lib/vedeu/log/log.rb +5 -2
  28. data/lib/vedeu/models/escape.rb +24 -6
  29. data/lib/vedeu/models/interface.rb +2 -14
  30. data/lib/vedeu/null/buffer.rb +7 -21
  31. data/lib/vedeu/null/generic.rb +5 -16
  32. data/lib/vedeu/null/interface.rb +6 -18
  33. data/lib/vedeu/runtime/bootstrap.rb +1 -1
  34. data/lib/vedeu/runtime/flags.rb +57 -0
  35. data/lib/vedeu/runtime/router.rb +2 -2
  36. data/lib/vedeu/version.rb +2 -1
  37. data/test/lib/vedeu/api_test.rb +1 -0
  38. data/test/lib/vedeu/application/application_controller_test.rb +26 -2
  39. data/test/lib/vedeu/application/application_view_test.rb +9 -4
  40. data/test/lib/vedeu/bindings_test.rb +9 -0
  41. data/test/lib/vedeu/borders/border_test.rb +25 -42
  42. data/test/lib/vedeu/buffers/display_buffer_test.rb +0 -10
  43. data/test/lib/vedeu/configuration/api_test.rb +7 -1
  44. data/test/lib/vedeu/configuration/cli_test.rb +0 -1
  45. data/test/lib/vedeu/configuration/configuration_test.rb +16 -0
  46. data/test/lib/vedeu/cursor/cursor_test.rb +122 -4
  47. data/test/lib/vedeu/dsl/view_test.rb +2 -2
  48. data/test/lib/vedeu/internal_api_test.rb +2 -0
  49. data/test/lib/vedeu/models/escape_test.rb +16 -6
  50. data/test/lib/vedeu/models/focus_test.rb +2 -1
  51. data/test/lib/vedeu/models/interface_test.rb +9 -5
  52. data/test/lib/vedeu/null/buffer_test.rb +7 -25
  53. data/test/lib/vedeu/null/generic_test.rb +6 -20
  54. data/test/lib/vedeu/null/interface_test.rb +8 -14
  55. data/test/lib/vedeu/output/compressor_test.rb +4 -4
  56. data/test/lib/vedeu/output/renderers_test.rb +1 -1
  57. data/test/lib/vedeu/runtime/flags_test.rb +47 -0
  58. data/test/lib/vedeu/runtime/router_test.rb +4 -4
  59. data/test/test_helper.rb +2 -0
  60. metadata +6 -10
  61. data/examples/geometry_app.rb +0 -147
  62. data/examples/panel_app.rb +0 -71
  63. data/lib/vedeu/geometry/index_position.rb +0 -85
  64. data/lib/vedeu/geometry/position_validator.rb +0 -69
  65. data/test/lib/vedeu/geometry/index_position_test.rb +0 -130
  66. data/test/lib/vedeu/geometry/position_validator_test.rb +0 -149
@@ -23,6 +23,8 @@ module Vedeu
23
23
  Vedeu::Bindings::Menus.setup!
24
24
  Vedeu::Bindings::DRB.setup!
25
25
  Vedeu::Bindings::System.setup!
26
+
27
+ true
26
28
  end
27
29
 
28
30
  end # Bindings
@@ -35,11 +35,11 @@ module Vedeu
35
35
  # @see Vedeu::Move
36
36
  def down!
37
37
  Vedeu.bind(:_cursor_down_) do |name|
38
- Vedeu::Move.by_name(Vedeu::Cursor, :down, name)
38
+ Vedeu::Move.down(Vedeu::Cursor, name)
39
39
  end
40
40
 
41
41
  Vedeu.bind(:_view_down_) do |name|
42
- Vedeu::Move.by_name(Vedeu::Geometry, :down, name)
42
+ Vedeu::Move.down(Vedeu::Geometry, name)
43
43
  end
44
44
 
45
45
  Vedeu.bind_alias(:_geometry_down_, :_view_down_)
@@ -56,11 +56,11 @@ module Vedeu
56
56
  # @see Vedeu::Move
57
57
  def left!
58
58
  Vedeu.bind(:_cursor_left_) do |name|
59
- Vedeu::Move.by_name(Vedeu::Cursor, :left, name)
59
+ Vedeu::Move.left(Vedeu::Cursor, name)
60
60
  end
61
61
 
62
62
  Vedeu.bind(:_view_left_) do |name|
63
- Vedeu::Move.by_name(Vedeu::Geometry, :left, name)
63
+ Vedeu::Move.left(Vedeu::Geometry, name)
64
64
  end
65
65
 
66
66
  Vedeu.bind_alias(:_geometry_left_, :_view_left_)
@@ -77,7 +77,7 @@ module Vedeu
77
77
  # @see Vedeu::Move
78
78
  def cursor_origin!
79
79
  Vedeu.bind(:_cursor_origin_) do |name|
80
- Vedeu::Move.by_name(Vedeu::Cursor, :origin, name)
80
+ Vedeu::Move.origin(Vedeu::Cursor, name)
81
81
  end
82
82
 
83
83
  Vedeu.bind_alias(:_cursor_reset_, :_cursor_origin_)
@@ -122,11 +122,11 @@ module Vedeu
122
122
  # @see Vedeu::Move
123
123
  def right!
124
124
  Vedeu.bind(:_cursor_right_) do |name|
125
- Vedeu::Move.by_name(Vedeu::Cursor, :right, name)
125
+ Vedeu::Move.right(Vedeu::Cursor, name)
126
126
  end
127
127
 
128
128
  Vedeu.bind(:_view_right_) do |name|
129
- Vedeu::Move.by_name(Vedeu::Geometry, :right, name)
129
+ Vedeu::Move.right(Vedeu::Geometry, name)
130
130
  end
131
131
 
132
132
  Vedeu.bind_alias(:_geometry_right_, :_view_right_)
@@ -143,11 +143,11 @@ module Vedeu
143
143
  # @see Vedeu::Move
144
144
  def up!
145
145
  Vedeu.bind(:_cursor_up_) do |name|
146
- Vedeu::Move.by_name(Vedeu::Cursor, :up, name)
146
+ Vedeu::Move.up(Vedeu::Cursor, name)
147
147
  end
148
148
 
149
149
  Vedeu.bind(:_view_up_) do |name|
150
- Vedeu::Move.by_name(Vedeu::Geometry, :up, name)
150
+ Vedeu::Move.up(Vedeu::Geometry, name)
151
151
  end
152
152
 
153
153
  Vedeu.bind_alias(:_geometry_up_, :_view_up_)
@@ -135,12 +135,12 @@ module Vedeu
135
135
  # Vedeu triggers this event when it is ready to enter the main loop.
136
136
  # Client applications can listen for this event and perform some
137
137
  # action(s), like render the first screen, interface or make a sound.
138
- # When Vedeu triggers this event, the :_refresh_ event is also triggered
139
- # automatically.
140
138
  #
141
139
  # @return [TrueClass]
142
140
  def initialize!
143
- Vedeu.bind(:_initialize_) { Vedeu.trigger(:_refresh_) }
141
+ Vedeu.bind(:_initialize_) do
142
+ Vedeu.ready!
143
+ end
144
144
  end
145
145
 
146
146
  # Will cause the triggering of the `:key` event; which you should define
@@ -110,7 +110,7 @@ module Vedeu
110
110
  #
111
111
  # @return [void]
112
112
  def hide
113
- Vedeu::Output.render(clear_buffer)
113
+ Vedeu::Output.render(clear_buffer) if Vedeu.ready?
114
114
  end
115
115
 
116
116
  # Return the content for this buffer.
@@ -126,7 +126,7 @@ module Vedeu
126
126
  #
127
127
  # @return [Array<Array<Array<Vedeu::Char>>>]
128
128
  def render
129
- Vedeu::Output.render(buffer)
129
+ Vedeu::Output.render(buffer) if Vedeu.ready?
130
130
  end
131
131
 
132
132
  # Show this buffer.
@@ -143,7 +143,7 @@ module Vedeu
143
143
  #
144
144
  # @return [void]
145
145
  def show
146
- Vedeu::Output.render(buffer)
146
+ Vedeu::Output.render(buffer) if Vedeu.ready?
147
147
  end
148
148
 
149
149
  private
@@ -160,7 +160,7 @@ module Vedeu
160
160
  elsif previous?
161
161
  [previous.render]
162
162
 
163
- elsif visible?
163
+ elsif interface.visible?
164
164
  [interface.render]
165
165
 
166
166
  else
@@ -211,11 +211,6 @@ module Vedeu
211
211
  Vedeu.interfaces.by_name(name)
212
212
  end
213
213
 
214
- # @see Vedeu::Interface#visible
215
- def visible?
216
- interface.visible?
217
- end
218
-
219
214
  end # Buffer
220
215
 
221
216
  end # Vedeu
@@ -7,7 +7,7 @@ module Vedeu
7
7
 
8
8
  include Vedeu::Common
9
9
 
10
- # Store the view and immediate refresh it; causing to be pushed to the
10
+ # Store the view and immediately refresh it; causing to be pushed to the
11
11
  # Terminal.
12
12
  #
13
13
  # @return [Vedeu::Interface]
@@ -29,53 +29,7 @@ module Vedeu
29
29
  fail Vedeu::InvalidSyntax, 'Cannot store an interface without a name.'
30
30
  end
31
31
 
32
- store_new_buffer
33
-
34
- self
35
- end
36
-
37
- private
38
-
39
- # Registers a set of buffers for the interface unless already registered,
40
- # and also adds interface's name to list of focussable interfaces.
41
- #
42
- # @see Vedeu::Buffer
43
- # @return [Vedeu::Interface]
44
- def store_new_buffer
45
- if Vedeu.buffers.registered?(name)
46
- Vedeu.buffers.find(name).add(self)
47
-
48
- else
49
- Vedeu::Buffer.new(name: name, back: self).store
50
-
51
- end
52
-
53
- self
54
- end
55
-
56
- # Registers interface name in focus list unless already registered.
57
- #
58
- # @return [Vedeu::Interface]
59
- def store_focusable
60
- Vedeu.focusable.add(name) unless Vedeu.focusable.registered?(name)
61
-
62
- self
63
- end
64
-
65
- # Registers a new cursor for the interface unless already registered.
66
- #
67
- # @return [Vedeu::Interface]
68
- def store_cursor
69
- Vedeu.cursors.by_name(name)
70
-
71
- self
72
- end
73
-
74
- # Registers a new group for the interface unless already registered.
75
- #
76
- # @return [Vedeu::Interface]
77
- def store_group
78
- Vedeu.groups.by_name(group).add(name) if group?
32
+ Vedeu.buffers.by_name(name).add(self)
79
33
 
80
34
  self
81
35
  end
@@ -36,6 +36,7 @@ module Vedeu
36
36
  copy_gitignore
37
37
  copy_license
38
38
  copy_readme
39
+ copy_ruby_version
39
40
  copy_application_bootstrapper
40
41
  copy_application_controller
41
42
  copy_application_helper
@@ -107,6 +108,11 @@ module Vedeu
107
108
  copy_file(source + '/README.md', "#{name}/README.md")
108
109
  end
109
110
 
111
+ # @return [void]
112
+ def copy_ruby_version
113
+ copy_file(source + '/.ruby-version', "#{name}/.ruby-version")
114
+ end
115
+
110
116
  # @return [void]
111
117
  def make_application_executable
112
118
  FileUtils.chmod(0755, "#{name}/bin/#{name}")
@@ -10,20 +10,11 @@ module <%= object.app_name %>
10
10
  action :show
11
11
  # add more actions and implement or remove existing actions
12
12
 
13
- def initialize
14
- end
15
-
16
13
  def list
17
14
  end
18
15
 
19
- def show(*args)
20
- <%= object.app_name %>::<%= object.name_as_class %>View.render(*args)
21
- end
22
-
23
- private
24
-
25
- def object
26
- nil
16
+ def show
17
+ <%= object.app_name %>::<%= object.name_as_class %>View.render(params)
27
18
  end
28
19
 
29
20
  end
@@ -270,6 +270,12 @@ module Vedeu
270
270
  options[:log] = filename
271
271
  end
272
272
 
273
+ # @param types [Array<Symbol>] The message types which should be logged.
274
+ # @return [Array<Symbol>]
275
+ def log_only(*types)
276
+ options[:log_only] = types
277
+ end
278
+
273
279
  # Sets the renderers for Vedeu. Each renderer added must have the class
274
280
  # method '.render' defined as this will be called when rendering content.
275
281
  #
@@ -158,6 +158,11 @@ module Vedeu
158
158
  log != nil
159
159
  end
160
160
 
161
+ # @return [Array<Symbol>]
162
+ def log_only
163
+ instance.options[:log_only] || []
164
+ end
165
+
161
166
  # Returns whether the application will run through its main loop once or
162
167
  # not. Default is false; meaning the application will loop forever or
163
168
  # until terminated by the user.
@@ -281,6 +286,7 @@ module Vedeu
281
286
  drb_width: 80,
282
287
  interactive: true,
283
288
  log: nil,
289
+ log_only: [],
284
290
  once: false,
285
291
  renderers: [Vedeu::Renderers::Terminal.new],
286
292
  root: nil,
@@ -7,6 +7,13 @@ module Vedeu
7
7
 
8
8
  include Vedeu::Model
9
9
  include Vedeu::Toggleable
10
+ extend Forwardable
11
+
12
+ def_delegators :border,
13
+ :bx,
14
+ :bxn,
15
+ :by,
16
+ :byn
10
17
 
11
18
  # @!attribute [r] attributes
12
19
  # @return [Hash]
@@ -28,13 +35,13 @@ module Vedeu
28
35
  # @return [Boolean|Symbol]
29
36
  attr_reader :state
30
37
 
31
- # @!attribute [rw] x
38
+ # @!attribute [w] x
32
39
  # @return [Fixnum]
33
- attr_accessor :x
40
+ attr_writer :x
34
41
 
35
- # @!attribute [rw] y
42
+ # @!attribute [sw] y
36
43
  # @return [Fixnum]
37
- attr_accessor :y
44
+ attr_writer :y
38
45
 
39
46
  # Returns a new instance of Vedeu::Cursor.
40
47
  #
@@ -50,15 +57,13 @@ module Vedeu
50
57
  #
51
58
  # @return [Vedeu::Cursor]
52
59
  def initialize(attributes = {})
53
- # Hack because Repository#by_name creates Cursor objects with just a
54
- # name.
60
+ # @todo Hack because Repository#by_name creates Cursor objects with just a
61
+ # name. Intend to remove this.
55
62
  attributes = { name: attributes } if attributes.is_a?(String)
56
63
 
57
64
  @attributes = defaults.merge!(attributes)
58
65
 
59
66
  @attributes.each { |key, value| instance_variable_set("@#{key}", value) }
60
-
61
- @position = Vedeu::Position[@y, @x]
62
67
  end
63
68
 
64
69
  # Override Ruby's Object#inspect method to provide a more helpful output.
@@ -80,10 +85,10 @@ module Vedeu
80
85
  # @return [String]
81
86
  def to_s
82
87
  if block_given?
83
- "#{position}#{yield}#{position}#{visibility}"
88
+ "#{position}#{yield}#{visibility}"
84
89
 
85
90
  else
86
- "#{position}#{visibility}"
91
+ "#{visibility}"
87
92
 
88
93
  end
89
94
  end
@@ -99,14 +104,14 @@ module Vedeu
99
104
  def hide
100
105
  super
101
106
 
102
- Vedeu::Output.render(visibility)
107
+ Vedeu::Output.render(visibility) if Vedeu.ready?
103
108
  end
104
109
 
105
110
  # Return the position of this cursor.
106
111
  #
107
112
  # @return [Vedeu::Position]
108
113
  def position
109
- @position ||= Vedeu::Position[y, x]
114
+ @position = Vedeu::Position[y, x]
110
115
  end
111
116
 
112
117
  # Show a named cursor, or without a name, the cursor of the currently
@@ -119,11 +124,36 @@ module Vedeu
119
124
  def show
120
125
  super
121
126
 
122
- Vedeu::Output.render(visibility)
127
+ Vedeu::Output.render(visibility) if Vedeu.ready?
128
+ end
129
+
130
+ # @return [Fixnum] The column/character coordinate.
131
+ def x
132
+ @x = bx if @x < bx
133
+ @x = bxn if @x > bxn
134
+
135
+ @attributes[:x] = @x
136
+
137
+ @x
138
+ end
139
+
140
+ # @return [Fixnum] The row/line coordinate.
141
+ def y
142
+ @y = by if @y < by
143
+ @y = byn if @y > byn
144
+
145
+ @attributes[:y] = @y
146
+
147
+ @y
123
148
  end
124
149
 
125
150
  private
126
151
 
152
+ # @see Vedeu::Borders#by_name
153
+ def border
154
+ @border ||= Vedeu.borders.by_name(name)
155
+ end
156
+
127
157
  # The default values for a new instance of this class.
128
158
  #
129
159
  # @return [Hash]
@@ -143,9 +173,13 @@ module Vedeu
143
173
  #
144
174
  # @return [String]
145
175
  def visibility
146
- return Vedeu::Escape.new(Vedeu::Esc.show_cursor) if visible?
176
+ if visible?
177
+ Vedeu::Escape.new(position: position, value: Vedeu::Esc.show_cursor)
147
178
 
148
- Vedeu::Escape.new(Vedeu::Esc.hide_cursor)
179
+ else
180
+ Vedeu::Escape.new(position: position, value: Vedeu::Esc.hide_cursor)
181
+
182
+ end
149
183
  end
150
184
 
151
185
  end # Cursor
@@ -114,9 +114,9 @@ module Vedeu
114
114
  # @param dy [Fixnum] Move up (-1), or down (1), or no action (0).
115
115
  # @param dx [Fixnum] Move left (-1), or right (1), or no action (0).
116
116
  # @return [Vedeu::Move]
117
- def initialize(entity, name, dy = 0, dx = 0)
117
+ def initialize(entity, name = nil, dy = 0, dx = 0)
118
118
  @entity = entity
119
- @name = name
119
+ @name = name ? name : Vedeu.focus
120
120
  @dy = dy
121
121
  @dx = dx
122
122
  end
@@ -62,16 +62,11 @@ module Vedeu
62
62
  # @return [Hash<Symbol => Fixnum>]
63
63
  def position
64
64
  {
65
- x: validated_position.x,
66
- y: validated_position.y,
65
+ x: cursor.x,
66
+ y: cursor.y,
67
67
  }
68
68
  end
69
69
 
70
- # @return [Vedeu::PositionValidator]
71
- def validated_position
72
- @position ||= Vedeu::PositionValidator.validate(name, cursor.x, cursor.y)
73
- end
74
-
75
70
  # @return [Vedeu::Cursor]
76
71
  def cursor
77
72
  @cursor ||= Vedeu.cursors.by_name(name)