vedeu 0.4.2 → 0.4.3

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