vedeu 0.4.2 → 0.4.3

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 (95) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +3 -0
  3. data/Rakefile +16 -7
  4. data/examples/borders_app.rb +58 -55
  5. data/lib/vedeu/api.rb +1 -1
  6. data/lib/vedeu/application.rb +25 -25
  7. data/lib/vedeu/bindings.rb +5 -7
  8. data/lib/vedeu/configuration/api.rb +0 -2
  9. data/lib/vedeu/configuration/cli.rb +0 -2
  10. data/lib/vedeu/configuration/configuration.rb +0 -2
  11. data/lib/vedeu/cursor/cursor.rb +0 -2
  12. data/lib/vedeu/debug.rb +2 -2
  13. data/lib/vedeu/distributed/server.rb +0 -2
  14. data/lib/vedeu/dsl/components/border.rb +15 -19
  15. data/lib/vedeu/dsl/components/geometry.rb +14 -18
  16. data/lib/vedeu/dsl/components/keymap.rb +28 -32
  17. data/lib/vedeu/dsl/composition.rb +27 -9
  18. data/lib/vedeu/events/all.rb +1 -0
  19. data/lib/vedeu/events/event.rb +6 -8
  20. data/lib/vedeu/events/events.rb +10 -0
  21. data/lib/vedeu/events/trigger.rb +6 -12
  22. data/lib/vedeu/geometry/grid.rb +0 -2
  23. data/lib/vedeu/geometry/position.rb +0 -2
  24. data/lib/vedeu/geometry/position_validator.rb +0 -14
  25. data/lib/vedeu/input/input.rb +0 -2
  26. data/lib/vedeu/models/collection.rb +0 -2
  27. data/lib/vedeu/models/focus.rb +0 -1
  28. data/lib/vedeu/models/geometry.rb +7 -3
  29. data/lib/vedeu/models/group.rb +0 -2
  30. data/lib/vedeu/models/menu.rb +23 -29
  31. data/lib/vedeu/models/model.rb +0 -2
  32. data/lib/vedeu/models/view/char.rb +14 -10
  33. data/lib/vedeu/models/view/composition.rb +7 -9
  34. data/lib/vedeu/models/view/interface.rb +0 -1
  35. data/lib/vedeu/models/view/line.rb +2 -3
  36. data/lib/vedeu/models/view/stream.rb +0 -3
  37. data/lib/vedeu/output/all.rb +1 -0
  38. data/lib/vedeu/output/background.rb +0 -2
  39. data/lib/vedeu/output/colour.rb +0 -2
  40. data/lib/vedeu/output/compositor.rb +0 -2
  41. data/lib/vedeu/output/foreground.rb +0 -2
  42. data/lib/vedeu/output/html_renderer.rb +6 -0
  43. data/lib/vedeu/output/index_position.rb +35 -0
  44. data/lib/vedeu/output/output.rb +3 -1
  45. data/lib/vedeu/output/position_index.rb +2 -2
  46. data/lib/vedeu/output/presentation.rb +0 -2
  47. data/lib/vedeu/output/style.rb +0 -1
  48. data/lib/vedeu/output/translator.rb +18 -20
  49. data/lib/vedeu/output/viewport.rb +76 -51
  50. data/lib/vedeu/output/virtual_terminal.rb +2 -1
  51. data/lib/vedeu/repositories/all.rb +4 -4
  52. data/lib/vedeu/repositories/repository.rb +0 -2
  53. data/lib/vedeu/support/coercions.rb +0 -2
  54. data/lib/vedeu/support/common.rb +0 -2
  55. data/lib/vedeu/support/esc.rb +0 -2
  56. data/lib/vedeu/support/log.rb +86 -3
  57. data/lib/vedeu/support/refresh.rb +0 -2
  58. data/lib/vedeu/support/sentence.rb +5 -9
  59. data/lib/vedeu/support/terminal.rb +0 -2
  60. data/lib/vedeu/support/trace.rb +0 -2
  61. data/lib/vedeu/support/visible.rb +1 -1
  62. data/test/lib/vedeu/configuration/api_test.rb +14 -0
  63. data/test/lib/vedeu/configuration/configuration_test.rb +10 -0
  64. data/test/lib/vedeu/distributed/server_test.rb +5 -0
  65. data/test/lib/vedeu/dsl/components/border_test.rb +7 -0
  66. data/test/lib/vedeu/dsl/components/geometry_test.rb +8 -3
  67. data/test/lib/vedeu/dsl/interface_test.rb +5 -0
  68. data/test/lib/vedeu/dsl/line_test.rb +4 -0
  69. data/test/lib/vedeu/dsl/shared/colour_test.rb +7 -7
  70. data/test/lib/vedeu/dsl/shared/style_test.rb +5 -2
  71. data/test/lib/vedeu/dsl/stream_test.rb +4 -1
  72. data/test/lib/vedeu/events/event_test.rb +6 -0
  73. data/test/lib/vedeu/geometry/bounding_area_test.rb +30 -30
  74. data/test/lib/vedeu/geometry/position_test.rb +5 -0
  75. data/test/lib/vedeu/models/view/char_test.rb +1 -14
  76. data/test/lib/vedeu/output/index_position_test.rb +64 -0
  77. data/test/lib/vedeu/output/style_test.rb +4 -0
  78. data/test/lib/vedeu/output/translator_test.rb +4 -0
  79. data/test/lib/vedeu/output/virtual_terminal_test.rb +2 -0
  80. data/test/lib/vedeu/output/wordwrap_test.rb +5 -0
  81. data/test/lib/vedeu/repositories/all_test.rb +3 -3
  82. data/test/lib/vedeu/repositories/repository_test.rb +8 -0
  83. data/test/lib/vedeu/support/console_test.rb +14 -0
  84. data/test/lib/vedeu/support/esc_test.rb +6 -0
  85. data/test/lib/vedeu/support/terminal_test.rb +13 -0
  86. data/vedeu.gemspec +4 -4
  87. metadata +12 -24
  88. data/test/integration/distributed_test.rb +0 -16
  89. data/test/integration/dsl/compositions_test.rb +0 -19
  90. data/test/integration/dsl/interfaces_test.rb +0 -193
  91. data/test/integration/dsl/keymaps_test.rb +0 -30
  92. data/test/integration/dsl/lines_test.rb +0 -104
  93. data/test/integration/dsl/menus_test.rb +0 -59
  94. data/test/integration/dsl/streams_test.rb +0 -103
  95. data/test/integration/dsl/views_test.rb +0 -45
@@ -7,8 +7,6 @@ module Vedeu
7
7
  # The Configuration::API class parses client application configuration into
8
8
  # options used by Vedeu to affect certain behaviours.
9
9
  #
10
- # @api private
11
- #
12
10
  class API
13
11
 
14
12
  include Vedeu::Common
@@ -7,8 +7,6 @@ module Vedeu
7
7
  # The Configuration::CLI class parses command-line arguments using
8
8
  # OptionParser into options used by Vedeu to affect certain behaviours.
9
9
  #
10
- # @api private
11
- #
12
10
  class CLI
13
11
 
14
12
  # Configure Vedeu via command-line arguments. Options set here via
@@ -33,8 +33,6 @@ module Vedeu
33
33
  # application settings (via the configuration API), or any command-line
34
34
  # arguments provided.
35
35
  #
36
- # @api private
37
- #
38
36
  class Configuration
39
37
 
40
38
  include Singleton
@@ -8,8 +8,6 @@ module Vedeu
8
8
  # Each interface has its own Cursor which maintains the position and
9
9
  # visibility of the cursor within that interface.
10
10
  #
11
- # @api private
12
- #
13
11
  class Cursor
14
12
 
15
13
  extend Forwardable
data/lib/vedeu/debug.rb CHANGED
@@ -1,5 +1,3 @@
1
- require 'ruby-prof'
2
-
3
1
  module Vedeu
4
2
 
5
3
  # Helps to debug a running application by providing a stack trace of its
@@ -8,6 +6,8 @@ module Vedeu
8
6
  # @param filename [String]
9
7
  # @param block [Proc]
10
8
  def self.debug(filename = 'profile.html', &block)
9
+ require 'ruby-prof'
10
+
11
11
  RubyProf.start
12
12
 
13
13
  yield
@@ -7,8 +7,6 @@ module Vedeu
7
7
 
8
8
  # A class for the server side of the DRb server/client relationship.
9
9
  #
10
- # @api private
11
- #
12
10
  class Server
13
11
 
14
12
  $SAFE = 1 # disable `eval` and related calls on strings passed
@@ -28,25 +28,21 @@ module Vedeu
28
28
  include Vedeu::DSL::Colour
29
29
  include Vedeu::DSL::Style
30
30
 
31
- class << self
32
-
33
- # Specify the border of an interface or view with a simple DSL.
34
- #
35
- # @example
36
- # Vedeu.border 'some_interface' do
37
- # # ...
38
- #
39
- # @param name [String] The name of the interface or view to which this
40
- # border belongs.
41
- # @param block [Proc]
42
- # @raise [InvalidSyntax] The required block was not given.
43
- # @return [Vedeu::Border]
44
- def border(name, &block)
45
- fail InvalidSyntax, 'block not given' unless block_given?
46
-
47
- Vedeu::Border.build({ enabled: true, name: name }, &block).store
48
- end
49
-
31
+ # Specify the border of an interface or view with a simple DSL.
32
+ #
33
+ # @example
34
+ # Vedeu.border 'some_interface' do
35
+ # # ...
36
+ #
37
+ # @param name [String] The name of the interface or view to which this
38
+ # border belongs.
39
+ # @param block [Proc]
40
+ # @raise [InvalidSyntax] The required block was not given.
41
+ # @return [Vedeu::Border]
42
+ def self.border(name, &block)
43
+ fail InvalidSyntax, 'block not given' unless block_given?
44
+
45
+ Vedeu::Border.build({ enabled: true, name: name }, &block).store
50
46
  end
51
47
 
52
48
  # Returns an instance of DSL::Border.
@@ -12,25 +12,21 @@ module Vedeu
12
12
  include Vedeu::DSL
13
13
  include Vedeu::DSL::Use
14
14
 
15
- class << self
16
-
17
- # Specify the geometry of an interface or view with a simple DSL.
18
- #
19
- # @example
20
- # Vedeu.geometry 'some_interface' do
21
- # # ...
22
- #
23
- # @param name [String] The name of the interface or view to which this
24
- # geometry belongs.
25
- # @param block [Proc]
26
- # @raise [InvalidSyntax] The required block was not given.
27
- # @return [Vedeu::Geometry]
28
- def geometry(name, &block)
29
- fail InvalidSyntax, 'block not given' unless block_given?
30
-
31
- Vedeu::Geometry.build({ name: name }, &block).store
32
- end
15
+ # Specify the geometry of an interface or view with a simple DSL.
16
+ #
17
+ # @example
18
+ # Vedeu.geometry 'some_interface' do
19
+ # # ...
20
+ #
21
+ # @param name [String] The name of the interface or view to which this
22
+ # geometry belongs.
23
+ # @param block [Proc]
24
+ # @raise [InvalidSyntax] The required block was not given.
25
+ # @return [Vedeu::Geometry]
26
+ def self.geometry(name, &block)
27
+ fail InvalidSyntax, 'block not given' unless block_given?
33
28
 
29
+ Vedeu::Geometry.build({ name: name }, &block).store
34
30
  end
35
31
 
36
32
  # Returns an instance of DSL::Geometry.
@@ -15,38 +15,34 @@ module Vedeu
15
15
  include Vedeu::Common
16
16
  include Vedeu::DSL
17
17
 
18
- class << self
19
-
20
- # Define actions for keypresses for when specific interfaces are in focus.
21
- # Unless an interface is specified, the key will be assumed to be global,
22
- # meaning its action will happen regardless of the interface in focus.
23
- #
24
- # @note
25
- # When defining an interface, there is no need to provide a name since
26
- # this can be discerned from the interface itself, e.g:
27
- #
28
- # Vedeu.interface 'my_interface' do
29
- # keymap do
30
- # ...
31
- #
32
- # @param name [String] The name of the interface which this keymap relates
33
- # to.
34
- # @param block [Proc]
35
- #
36
- # @example
37
- # keymap 'my_interface' do
38
- # ...
39
- #
40
- # @raise [InvalidSyntax] The required block was not given.
41
- # @return [Keymap]
42
- # @todo Try to remember why we need to pre-create the keymap in the
43
- # repository.
44
- def keymap(name, &block)
45
- Vedeu::Keymap.new({ name: name }).store
46
-
47
- Vedeu::Keymap.build({ name: name }, &block).store
48
- end
49
-
18
+ # Define actions for keypresses for when specific interfaces are in focus.
19
+ # Unless an interface is specified, the key will be assumed to be global,
20
+ # meaning its action will happen regardless of the interface in focus.
21
+ #
22
+ # @note
23
+ # When defining an interface, there is no need to provide a name since
24
+ # this can be discerned from the interface itself, e.g:
25
+ #
26
+ # Vedeu.interface 'my_interface' do
27
+ # keymap do
28
+ # ...
29
+ #
30
+ # @param name [String] The name of the interface which this keymap relates
31
+ # to.
32
+ # @param block [Proc]
33
+ #
34
+ # @example
35
+ # keymap 'my_interface' do
36
+ # ...
37
+ #
38
+ # @raise [InvalidSyntax] The required block was not given.
39
+ # @return [Keymap]
40
+ # @todo Try to remember why we need to pre-create the keymap in the
41
+ # repository.
42
+ def self.keymap(name, &block)
43
+ Vedeu::Keymap.new({ name: name }).store
44
+
45
+ Vedeu::Keymap.build({ name: name }, &block).store
50
46
  end
51
47
 
52
48
  # Returns an instance of DSL::Keymap.
@@ -13,6 +13,8 @@ module Vedeu
13
13
  # Returns an instance of DSL::Composition.
14
14
  #
15
15
  # @param model [Composition]
16
+ # @param client [Object]
17
+ # @return [Vedeu::DSL::Composition]
16
18
  def initialize(model, client = nil)
17
19
  @model = model
18
20
  @client = client
@@ -22,6 +24,10 @@ module Vedeu
22
24
  #
23
25
  # A view is just an Interface object.
24
26
  #
27
+ # When a view already exists, we take its attributes and use them as the
28
+ # basis for the newly defined view. This way we don't need to specify
29
+ # everything again.
30
+ #
25
31
  # @todo More documentation required.
26
32
  # @param name [String] The name of the interface you are targetting for
27
33
  # this view.
@@ -36,22 +42,34 @@ module Vedeu
36
42
  def view(name = '', &block)
37
43
  fail InvalidSyntax, 'block not given' unless block_given?
38
44
 
39
- new_member = if Vedeu.interfaces.registered?(name)
40
- existing_member = Vedeu.interfaces.find(name)
41
- model.member.build(attributes.merge!(existing_member.attributes), &block)
42
-
43
- else
44
- model.member.build(attributes.merge!({ name: name }), &block)
45
-
46
- end
45
+ new_model = model.member.build(new_attributes(name), &block)
47
46
 
48
- model.add(new_member)
47
+ model.add(new_model)
49
48
  end
50
49
 
51
50
  private
52
51
 
53
52
  attr_reader :client, :model
54
53
 
54
+ # @param name [String] The name of the interface.
55
+ # @return [Hash]
56
+ def new_attributes(name)
57
+ attributes.merge!(existing_interface_attributes(name))
58
+ end
59
+
60
+ # @param name [String] The name of the interface.
61
+ # @return [Hash]
62
+ def existing_interface_attributes(name)
63
+ if model.repository.registered?(name)
64
+ stored = model.repository.find(name)
65
+ stored.attributes
66
+
67
+ else
68
+ { name: name }
69
+
70
+ end
71
+ end
72
+
55
73
  # @return [Hash]
56
74
  def attributes
57
75
  {
@@ -1,3 +1,4 @@
1
+ require 'vedeu/events/events'
1
2
  require 'vedeu/events/event'
2
3
  require 'vedeu/events/trigger'
3
4
 
@@ -32,8 +32,6 @@ module Vedeu
32
32
  # :do_stuff
33
33
  # end
34
34
  #
35
- # @api private
36
- #
37
35
  class Event
38
36
 
39
37
  include Vedeu::Model
@@ -91,11 +89,6 @@ module Vedeu
91
89
  alias_method :event, :bind
92
90
  alias_method :register, :bind
93
91
 
94
- # @see Vedeu::Trigger.trigger
95
- def trigger(name, *args)
96
- Vedeu::Trigger.trigger(name, *args)
97
- end
98
-
99
92
  # Unbind events from a named handler.
100
93
  #
101
94
  # @param name [String]
@@ -112,6 +105,11 @@ module Vedeu
112
105
 
113
106
  end
114
107
 
108
+ # @see Vedeu::Trigger.trigger
109
+ def self.trigger(name, *args)
110
+ Vedeu::Trigger.trigger(name, *args)
111
+ end
112
+
115
113
  # Returns a new instance of Event.
116
114
  #
117
115
  # @param name [Symbol]
@@ -135,7 +133,7 @@ module Vedeu
135
133
  new_collection = collection.add(self)
136
134
 
137
135
  else
138
- new_collection = Vedeu::Model::Collection.new([self], nil, name)
136
+ new_collection = Vedeu::Events.new([self], nil, name)
139
137
 
140
138
  end
141
139
 
@@ -0,0 +1,10 @@
1
+ require 'vedeu/models/collection'
2
+
3
+ module Vedeu
4
+
5
+ # A collection of {Vedeu::Event} instances.
6
+ #
7
+ class Events < Vedeu::Model::Collection
8
+ end # Events
9
+
10
+ end # Vedeu
@@ -8,20 +8,14 @@ module Vedeu
8
8
  # @example
9
9
  # Vedeu.trigger(:my_event, :oxidize, 'nitrogen')
10
10
  #
11
- # @api private
12
- #
13
11
  class Trigger
14
12
 
15
- class << self
16
-
17
- # @param name [Symbol] The name of the event you wish to trigger. The event
18
- # does not have to exist.
19
- # @param args [Array] Any arguments the event needs to execute correctly.
20
- # @return [Array]
21
- def trigger(name, *args)
22
- new(name, *args).trigger
23
- end
24
-
13
+ # @param name [Symbol] The name of the event you wish to trigger. The event
14
+ # does not have to exist.
15
+ # @param args [Array] Any arguments the event needs to execute correctly.
16
+ # @return [Array]
17
+ def self.trigger(name, *args)
18
+ new(name, *args).trigger
25
19
  end
26
20
 
27
21
  # @see Vedeu::Trigger.trigger
@@ -24,8 +24,6 @@ module Vedeu
24
24
  # Divides horizontal terminal space into 12 equal columns, discarding
25
25
  # the remainder.
26
26
  #
27
- # @api private
28
- #
29
27
  class Grid
30
28
 
31
29
  # @param value [Fixnum]
@@ -2,8 +2,6 @@ module Vedeu
2
2
 
3
3
  # Change coordinates into an escape sequence to set the cursor position.
4
4
  #
5
- # @api private
6
- #
7
5
  class Position
8
6
 
9
7
  attr_reader :y,
@@ -104,20 +104,6 @@ module Vedeu
104
104
  self
105
105
  end
106
106
 
107
- # def x
108
- # @x = [[[[@x, tx].max, txn].min, left].max, right].min
109
- # @x = border? && left? ? [@x, (left + 1)].max : @x
110
- # @x = border? && right? ? [@x, (right - 2)].min : @x
111
- # @x
112
- # end
113
-
114
- # def y
115
- # @y = [[[[@y, ty].max, tyn].min, top].max, bottom].min
116
- # @y = border? && top? ? [@y, (top + 1)].max : @y
117
- # @y = border? && bottom? ? [@y, (bottom - 2)].min : @y
118
- # @y
119
- # end
120
-
121
107
  end # PositionValidator
122
108
 
123
109
  end # Vedeu
@@ -3,8 +3,6 @@ module Vedeu
3
3
  # Captures input from the user via {Vedeu::Terminal#input} and translates
4
4
  # special characters into symbols.
5
5
  #
6
- # @api private
7
- #
8
6
  class Input
9
7
 
10
8
  # Instantiate Input and capture keypress(es).
@@ -5,8 +5,6 @@ module Vedeu
5
5
  # Convert an Array into an object which has some meaning in the context it
6
6
  # is being used.
7
7
  #
8
- # @private
9
- #
10
8
  class Collection
11
9
 
12
10
  include Enumerable
@@ -4,7 +4,6 @@ module Vedeu
4
4
  # serving to store and manipulate the which interface is currently being
5
5
  # focussed.
6
6
  #
7
- # @api private
8
7
  module Focus
9
8
 
10
9
  extend self
@@ -10,7 +10,7 @@ module Vedeu
10
10
  # @todo Consider storing the Terminal size at the time of first creation,
11
11
  # this allows us to return the interface to its original dimensions if
12
12
  # the terminal resizes back to normal size.
13
-
13
+ #
14
14
  # Calculates and provides interface geometry determined by both the client's
15
15
  # requirements and the terminal's current viewing area.
16
16
  #
@@ -27,8 +27,6 @@ module Vedeu
27
27
  # yn +--------------+ # south: yn + 1
28
28
  # south
29
29
  #
30
- # @api private
31
- #
32
30
  class Geometry
33
31
 
34
32
  include Vedeu::Model
@@ -137,6 +135,9 @@ module Vedeu
137
135
  # Returns the top coordinate of the interface, a fixed or dynamic value
138
136
  # depending on whether the interface is centred or not.
139
137
  #
138
+ # @note
139
+ # Division which results in a non-integer will be rounded down.
140
+ #
140
141
  # @return [Fixnum]
141
142
  def top
142
143
  if centred
@@ -166,6 +167,9 @@ module Vedeu
166
167
  # Returns the left coordinate of the interface, a fixed or dynamic value
167
168
  # depending on whether the interface is centred or not.
168
169
  #
170
+ # @note
171
+ # Division which results in a non-integer will be rounded down.
172
+ #
169
173
  # @return [Fixnum]
170
174
  def left
171
175
  if centred