vedeu 0.6.10 → 0.6.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (136) hide show
  1. checksums.yaml +4 -4
  2. data/lib/vedeu/all.rb +17 -103
  3. data/lib/vedeu/api/all.rb +15 -0
  4. data/lib/vedeu/api/internal.rb +4 -0
  5. data/lib/vedeu/application/all.rb +6 -0
  6. data/lib/vedeu/bindings/all.rb +32 -0
  7. data/lib/vedeu/bindings/bindings.rb +0 -14
  8. data/lib/vedeu/bindings/refresh.rb +8 -2
  9. data/lib/vedeu/bindings/system.rb +1 -0
  10. data/lib/vedeu/borders/border.rb +1 -1
  11. data/lib/vedeu/borders/repository.rb +1 -1
  12. data/lib/vedeu/buffers/buffer.rb +2 -4
  13. data/lib/vedeu/buffers/repository.rb +1 -1
  14. data/lib/vedeu/colours/background.rb +1 -1
  15. data/lib/vedeu/colours/backgrounds.rb +1 -1
  16. data/lib/vedeu/colours/foreground.rb +1 -1
  17. data/lib/vedeu/colours/foregrounds.rb +1 -1
  18. data/lib/vedeu/colours/translator.rb +4 -3
  19. data/lib/vedeu/configuration/api.rb +2 -1
  20. data/lib/vedeu/configuration/cli.rb +1 -1
  21. data/lib/vedeu/cursors/cursor.rb +26 -26
  22. data/lib/vedeu/cursors/repository.rb +1 -1
  23. data/lib/vedeu/distributed/all.rb +16 -0
  24. data/lib/vedeu/distributed/test_application.rb +3 -3
  25. data/lib/vedeu/dsl/all.rb +22 -0
  26. data/lib/vedeu/dsl/composition.rb +43 -40
  27. data/lib/vedeu/dsl/dsl.rb +6 -3
  28. data/lib/vedeu/dsl/group.rb +23 -16
  29. data/lib/vedeu/dsl/interface.rb +48 -38
  30. data/lib/vedeu/dsl/keymap.rb +6 -7
  31. data/lib/vedeu/dsl/line.rb +6 -3
  32. data/lib/vedeu/dsl/stream.rb +2 -1
  33. data/lib/vedeu/editor/cursor.rb +1 -3
  34. data/lib/vedeu/editor/document.rb +4 -5
  35. data/lib/vedeu/editor/documents.rb +1 -1
  36. data/lib/vedeu/editor/line.rb +2 -3
  37. data/lib/vedeu/editor/lines.rb +2 -3
  38. data/lib/vedeu/esc/all.rb +14 -0
  39. data/lib/vedeu/esc/colours.rb +8 -4
  40. data/lib/vedeu/esc/esc.rb +89 -84
  41. data/lib/vedeu/events/aliases.rb +1 -2
  42. data/lib/vedeu/events/collection.rb +1 -1
  43. data/lib/vedeu/events/event.rb +1 -1
  44. data/lib/vedeu/events/repository.rb +1 -1
  45. data/lib/vedeu/events/trigger.rb +11 -9
  46. data/lib/vedeu/geometry/dimension.rb +1 -3
  47. data/lib/vedeu/geometry/generic_coordinate.rb +1 -3
  48. data/lib/vedeu/geometry/geometry.rb +1 -1
  49. data/lib/vedeu/geometry/repository.rb +3 -3
  50. data/lib/vedeu/input/all.rb +3 -0
  51. data/lib/vedeu/input/keymap.rb +10 -11
  52. data/lib/vedeu/input/keymaps.rb +1 -1
  53. data/lib/vedeu/input/keys.rb +1 -1
  54. data/lib/vedeu/input/mapper.rb +14 -12
  55. data/lib/vedeu/logging/all.rb +3 -0
  56. data/lib/vedeu/logging/log.rb +4 -2
  57. data/lib/vedeu/menus/menu.rb +2 -4
  58. data/lib/vedeu/menus/repository.rb +1 -1
  59. data/lib/vedeu/models/all.rb +15 -0
  60. data/lib/vedeu/models/cell.rb +1 -1
  61. data/lib/vedeu/models/escape.rb +1 -1
  62. data/lib/vedeu/models/group.rb +4 -3
  63. data/lib/vedeu/models/groups.rb +1 -1
  64. data/lib/vedeu/models/interface.rb +1 -1
  65. data/lib/vedeu/models/interfaces.rb +1 -1
  66. data/lib/vedeu/models/views/char.rb +1 -1
  67. data/lib/vedeu/models/views/collections/chars.rb +1 -1
  68. data/lib/vedeu/models/views/collections/lines.rb +1 -1
  69. data/lib/vedeu/models/views/collections/streams.rb +1 -1
  70. data/lib/vedeu/models/views/collections/view_collection.rb +1 -1
  71. data/lib/vedeu/models/views/composition.rb +1 -1
  72. data/lib/vedeu/models/views/line.rb +8 -6
  73. data/lib/vedeu/models/views/stream.rb +1 -1
  74. data/lib/vedeu/models/views/view.rb +1 -1
  75. data/lib/vedeu/null/all.rb +12 -0
  76. data/lib/vedeu/output/clear/named_group.rb +2 -1
  77. data/lib/vedeu/output/clear/named_interface.rb +5 -4
  78. data/lib/vedeu/output/compressor.rb +1 -0
  79. data/lib/vedeu/output/output.rb +3 -0
  80. data/lib/vedeu/output/presentation/colour.rb +10 -10
  81. data/lib/vedeu/output/presentation/presentation.rb +9 -9
  82. data/lib/vedeu/output/presentation/style.rb +2 -2
  83. data/lib/vedeu/output/refresh/refresh.rb +35 -0
  84. data/lib/vedeu/output/refresh/refresh_group.rb +66 -0
  85. data/lib/vedeu/output/renderers/all.rb +17 -0
  86. data/lib/vedeu/output/renderers/escape_sequence.rb +4 -2
  87. data/lib/vedeu/output/renderers/file.rb +7 -6
  88. data/lib/vedeu/output/renderers/html.rb +9 -7
  89. data/lib/vedeu/output/renderers/null.rb +1 -1
  90. data/lib/vedeu/output/renderers/renderer_options.rb +24 -20
  91. data/lib/vedeu/output/renderers/terminal.rb +1 -1
  92. data/lib/vedeu/output/renderers/text.rb +1 -1
  93. data/lib/vedeu/output/wordwrap.rb +7 -4
  94. data/lib/vedeu/plugins/all.rb +2 -0
  95. data/lib/vedeu/repositories/all.rb +16 -0
  96. data/lib/vedeu/repositories/collection.rb +93 -89
  97. data/lib/vedeu/repositories/model.rb +113 -102
  98. data/lib/vedeu/repositories/registerable.rb +60 -56
  99. data/lib/vedeu/repositories/repository.rb +161 -156
  100. data/lib/vedeu/repositories/store.rb +70 -66
  101. data/lib/vedeu/runtime/all.rb +15 -0
  102. data/lib/vedeu/runtime/launcher.rb +19 -16
  103. data/lib/vedeu/templating/all.rb +6 -0
  104. data/lib/vedeu/terminal/all.rb +14 -0
  105. data/lib/vedeu/terminal/buffer.rb +8 -7
  106. data/lib/vedeu/terminal/mode.rb +11 -10
  107. data/lib/vedeu/terminal/terminal.rb +50 -45
  108. data/lib/vedeu/version.rb +1 -1
  109. data/test/lib/vedeu/cursors/cursor_test.rb +4 -2
  110. data/test/lib/vedeu/editor/cursor_test.rb +0 -3
  111. data/test/lib/vedeu/esc/esc_test.rb +58 -54
  112. data/test/lib/vedeu/events/collection_test.rb +1 -1
  113. data/test/lib/vedeu/input/keys_test.rb +1 -1
  114. data/test/lib/vedeu/input/mapper_test.rb +1 -1
  115. data/test/lib/vedeu/models/views/collections/chars_test.rb +1 -1
  116. data/test/lib/vedeu/models/views/collections/lines_test.rb +1 -1
  117. data/test/lib/vedeu/models/views/collections/streams_test.rb +1 -1
  118. data/test/lib/vedeu/models/views/collections/view_collection_test.rb +1 -1
  119. data/test/lib/vedeu/output/refresh/refresh_group_test.rb +43 -0
  120. data/test/lib/vedeu/output/refresh/refresh_test.rb +50 -0
  121. data/test/lib/vedeu/output/renderers/renderer_options_test.rb +8 -4
  122. data/test/lib/vedeu/output/renderers_test.rb +2 -1
  123. data/test/lib/vedeu/repositories/collection_test.rb +105 -101
  124. data/test/lib/vedeu/repositories/model_test.rb +56 -52
  125. data/test/lib/vedeu/repositories/registerable_test.rb +36 -32
  126. data/test/lib/vedeu/repositories/repository_test.rb +178 -174
  127. data/test/lib/vedeu/repositories/store_test.rb +109 -105
  128. data/test/support/examples/material_colours_app.rb +0 -1
  129. data/test/support/helpers/model_test_class.rb +50 -46
  130. data/test/test_helper.rb +2 -2
  131. metadata +21 -9
  132. data/lib/vedeu/refresh/refresh.rb +0 -31
  133. data/lib/vedeu/refresh/refresh_group.rb +0 -59
  134. data/out_ +0 -50
  135. data/test/lib/vedeu/refresh/refresh_group_test.rb +0 -39
  136. data/test/lib/vedeu/refresh/refresh_test.rb +0 -46
@@ -4,36 +4,38 @@ module Vedeu
4
4
 
5
5
  # DSL for creating collections of interfaces.
6
6
  #
7
- # Views with Vedeu are made up of simple building blocks. These blocks can
8
- # be arranged in a multitude of ways which I hope is more than sufficient
9
- # for your design needs.
7
+ # Views with Vedeu are made up of simple building blocks. These
8
+ # blocks can be arranged in a multitude of ways which I hope is
9
+ # more than sufficient for your design needs.
10
10
 
11
11
  # - A view (`Composition`) is made up of one or more interfaces.
12
- # - An interface is an area on the screen where you can take input or direct
13
- # output. You will define it's colour and style, its dimensions, including
14
- # position and give it a name. You can then direct the output of a
15
- # command, or event, to this interface and Vedeu will ensure the content
16
- # is placed there.
17
- # - Interfaces (`Interface`) are made up of lines (`Line`), their length
18
- # being the width of the interface and their number being the height of
19
- # the interface.
20
- # - An interface with `width: 12, height: 5` will have five lines, each made
21
- # of 12 characters- providing 60 cells. Colours and styles are handled by
22
- # terminal escape sequences and therefore do not consume a cell.
23
- # - Lines are made up of zero, one or multiple streams (`Stream`) which are
12
+ # - An interface is an area on the screen where you can take input
13
+ # or direct output. You will define it's colour and style, its
14
+ # dimensions, including position and give it a name. You can
15
+ # then direct the output of a command, or event, to this
16
+ # interface and Vedeu will ensure the content is placed there.
17
+ # - Interfaces (`Interface`) are made up of lines (`Line`), their
18
+ # length being the width of the interface and their number being
19
+ # the height of the interface.
20
+ # - An interface with `width: 12, height: 5` will have five lines,
21
+ # each made of 12 characters- providing 60 cells. Colours and
22
+ # styles are handled by terminal escape sequences and therefore
23
+ # do not consume a cell.
24
+ # - Lines are made up of zero, one or multiple streams which are
24
25
  # basically subsets of the line.
25
- # - An interface, line or stream can have a colour (`colour`) attribute.
26
- # - An interface, line or stream can have a style (`style`) attribute.
27
- # - Interfaces have a position (`y`, `x`) on the screen, and a size.
28
- # (`width`, `height`)
26
+ # - An interface, line or stream can have a colour attribute.
27
+ # - An interface, line or stream can have a style attribute.
28
+ # - Interfaces have a position (`y`, `x`) on the screen, and a
29
+ # size. (`width`, `height`)
29
30
  # - Interfaces can be placed relative to each other based on their
30
31
  # attributes.
31
- # - An interface has a `top`, `right`, `bottom`, `left`.
32
- # - An interface also has a `north` and `west` (`top` and `left` minus 1
33
- # respectively).
34
- # - An interface also has a `south` and `east` (`bottom` and `right`
35
- # plus 1 respectively).
36
- # - Colours are defined in CSS-style values, i.e. `#ff0000` would be red.
32
+ # - An interface has a `top`, `right`, `bottom`, `left`.
33
+ # - An interface also has a `north` and `west` (`top` and `left`
34
+ # minus 1 respectively).
35
+ # - An interface also has a `south` and `east` (`bottom` and
36
+ # `right` plus 1 respectively).
37
+ # - Colours are defined in CSS-style values, i.e. `#ff0000` would
38
+ # be red.
37
39
  # - Styles are named. See the table below for supported styles.
38
40
  #
39
41
  class Composition
@@ -54,14 +56,15 @@ module Vedeu
54
56
  #
55
57
  # A view is just an Interface object.
56
58
  #
57
- # When a view already exists, we take its attributes and use them as the
58
- # basis for the newly defined view. This way we don't need to specify
59
- # everything again.
59
+ # When a view already exists, we take its attributes and use
60
+ # them as the basis for the newly defined view. This way we
61
+ # don't need to specify everything again.
60
62
  #
61
63
  # @todo More documentation required.
62
- # @param name [String] The name of the interface you are targetting for
63
- # this view.
64
- # @param block [Proc] The directives you wish to send to this interface.
64
+ # @param name [String] The name of the interface you are
65
+ # targetting for this view.
66
+ # @param block [Proc] The directives you wish to send to this
67
+ # interface.
65
68
  #
66
69
  # @example
67
70
  # view 'my_interface' do
@@ -90,13 +93,13 @@ module Vedeu
90
93
  #
91
94
  # @todo More documentation required.
92
95
  #
93
- # @param name [String] The name of interface for which this template's
94
- # content belongs to.
95
- # @param filename [String] The filename (including path) to the template
96
- # to be used. Yoy can use `File.dirname(__FILE__)` to use relative
97
- # paths.
98
- # @param object [Object] The object for which the values of template's
99
- # variables can be obtained.
96
+ # @param name [String] The name of interface for which this
97
+ # template's content belongs to.
98
+ # @param filename [String] The filename (including path) to the
99
+ # template to be used. Yoy can use `File.dirname(__FILE__)` to
100
+ # use relative paths.
101
+ # @param object [Object] The object for which the values of
102
+ # template's variables can be obtained.
100
103
  # @param options [Hash] See {Vedeu::Output::Wordwrap}
101
104
  # @raise [Vedeu::Error::MissingRequired]
102
105
  # @return [Vedeu::Views::Views<Vedeu::Views::View>]
@@ -128,8 +131,8 @@ module Vedeu
128
131
  new_attributes(name).merge!(value: lines)
129
132
  end
130
133
 
131
- # Return the current attributes combined with the existing interface
132
- # attributes defined by the interface.
134
+ # Return the current attributes combined with the existing
135
+ # interface attributes defined by the interface.
133
136
  #
134
137
  # @param name [String] The name of the interface.
135
138
  # @return [Hash]
data/lib/vedeu/dsl/dsl.rb CHANGED
@@ -7,11 +7,13 @@ module Vedeu
7
7
  protected
8
8
 
9
9
  # @!attribute [r] client
10
- # @return [Object] The object instance where the DSL is being used.
10
+ # @return [Object] The object instance where the DSL is being
11
+ # used.
11
12
  attr_reader :client
12
13
 
13
14
  # @!attribute [r] model
14
- # @return [void] The new model object which the DSL is constructing.
15
+ # @return [void] The new model object which the DSL is
16
+ # constructing.
15
17
  attr_reader :model
16
18
 
17
19
  private
@@ -33,7 +35,8 @@ module Vedeu
33
35
  # Attempts to find the missing method on the client object.
34
36
  #
35
37
  # @param method [Symbol] The name of the method sought.
36
- # @param args [Array] The arguments which the method was to be invoked with.
38
+ # @param args [Array] The arguments which the method was to be
39
+ # invoked with.
37
40
  # @param block [Proc] The optional block provided to the method.
38
41
  # @return [void]
39
42
  def method_missing(method, *args, &block)
@@ -2,25 +2,27 @@ module Vedeu
2
2
 
3
3
  module DSL
4
4
 
5
- # Interfaces can be configured to be part of a named group. Once an
6
- # interface is a member of group, the group can be affected by other
7
- # controls. For example, assuming the client application is a simple Git
8
- # client, it may have a group called 'commit'. The 'commit' group will
9
- # contain the interfaces 'diff' (to show the changes), 'staged' (to show
10
- # which files are staged) and 'unstaged'. A refresh of the 'commit' group
11
- # would cause all interfaces belonging to the group to refresh. Similarly,
12
- # showing or hiding the group would of course, show or hide the interfaces
13
- # of that group.
5
+ # Interfaces can be configured to be part of a named group. Once
6
+ # an interface is a member of group, the group can be affected by
7
+ # other controls. For example, assuming the client application is
8
+ # a simple Git client, it may have a group called 'commit'. The
9
+ # 'commit' group will contain the interfaces 'diff' (to show the
10
+ # changes), 'staged' (to show which files are staged) and
11
+ # 'unstaged'. A refresh of the 'commit' group would cause all
12
+ # interfaces belonging to the group to refresh. Similarly,
13
+ # showing or hiding the group would of course, show or hide the
14
+ # interfaces of that group.
14
15
  #
15
16
  class Group
16
17
 
17
18
  include Vedeu::DSL
18
19
 
19
- # Specify a new group of interfaces with a simple DSL. Creating a group
20
- # with the same name as an existing group overwrites the existing group.
20
+ # Specify a new group of interfaces with a simple DSL. Creating
21
+ # a group with the same name as an existing group overwrites the
22
+ # existing group.
21
23
  #
22
- # The example below resembles 'vim' (the popular terminal-based text
23
- # editor):
24
+ # The example below resembles 'vim' (the popular terminal-based
25
+ # text editor):
24
26
  #
25
27
  # Vedeu.group 'title_screen' do
26
28
  # add 'welcome_interface'
@@ -37,7 +39,9 @@ module Vedeu
37
39
  # or more succinctly:
38
40
  #
39
41
  # Vedeu.group 'main_screen' do
40
- # members 'editor_interface', 'status_interface', 'command_interface'
42
+ # members 'editor_interface',
43
+ # 'status_interface',
44
+ # 'command_interface'
41
45
  # # ... some code
42
46
  # end
43
47
  #
@@ -50,7 +54,8 @@ module Vedeu
50
54
  #
51
55
  # @param name [String] The name of this group.
52
56
  # @param block [Proc]
53
- # @raise [Vedeu::Error::InvalidSyntax] The required block was not given.
57
+ # @raise [Vedeu::Error::InvalidSyntax] The required block was
58
+ # not given.
54
59
  # @return [Vedeu::Models::Group]
55
60
  def self.group(name, &block)
56
61
  fail Vedeu::Error::InvalidSyntax, 'block not given' unless block_given?
@@ -83,7 +88,9 @@ module Vedeu
83
88
  # Add the named interfaces to this group in bulk.
84
89
  #
85
90
  # Vedeu.group 'main_screen' do
86
- # members ['editor_interface', 'some_interface', 'other_interface']
91
+ # members ['editor_interface',
92
+ # 'some_interface',
93
+ # 'other_interface']
87
94
  # end
88
95
  #
89
96
  # @param interface_names [Array<String>]
@@ -17,19 +17,22 @@ module Vedeu
17
17
 
18
18
  include Vedeu::Common
19
19
 
20
- # Register an interface by name which will display output from a event
21
- # or command. This provides the means for you to define your the views
22
- # of your application without their content.
20
+ # Register an interface by name which will display output from
21
+ # an event or a command. This provides the means for you to
22
+ # define your the views of your application without their
23
+ # content.
23
24
  #
24
25
  # Vedeu.interface 'my_interface' do
25
26
  # # ... some code
26
27
  # end
27
28
  #
28
- # @param name [String] The name of the interface. Used to reference the
29
- # interface throughout your application's execution lifetime.
30
- # @param block [Proc] A set of attributes which define the features of
31
- # the interface.
32
- # @raise [Vedeu::Error::InvalidSyntax] The required block was not given.
29
+ # @param name [String] The name of the interface. Used to
30
+ # reference the interface throughout your application's
31
+ # execution lifetime.
32
+ # @param block [Proc] A set of attributes which define the
33
+ # features of the interface.
34
+ # @raise [Vedeu::Error::InvalidSyntax] The required block was
35
+ # not given.
33
36
  # @return [Vedeu::Models::Interface]
34
37
  # @todo More documentation required.
35
38
  def interface(name, &block)
@@ -50,8 +53,8 @@ module Vedeu
50
53
  private
51
54
 
52
55
  # Registers a set of buffers for the interface unless already
53
- # registered, and also adds interface's name to list of focussable
54
- # interfaces.
56
+ # registered, and also adds interface's name to list of
57
+ # focussable interfaces.
55
58
  #
56
59
  # @see Vedeu::Buffers::Buffer
57
60
  # @return [Vedeu::Buffers::Buffer]
@@ -59,14 +62,16 @@ module Vedeu
59
62
  Vedeu::Buffers::Buffer.new(name: name).store
60
63
  end
61
64
 
62
- # Registers a new cursor for the interface unless already registered.
65
+ # Registers a new cursor for the interface unless already
66
+ # registered.
63
67
  #
64
68
  # @return [Vedeu::Cursors::Cursor]
65
69
  def add_cursor!(name)
66
70
  Vedeu::Cursors::Cursor.new(name: name).store
67
71
  end
68
72
 
69
- # Registers interface name in focus list unless already registered.
73
+ # Registers interface name in focus list unless already
74
+ # registered.
70
75
  #
71
76
  # @return [void]
72
77
  def add_focusable!(name)
@@ -95,14 +100,16 @@ module Vedeu
95
100
 
96
101
  # Set the cursor visibility on an interface.
97
102
  #
98
- # @param value [Boolean] Any value other than nil or false will evaluate
103
+ # @param value [Boolean] Any value other than nil or false will
104
+ # evaluate
99
105
  # to true.
100
106
  #
101
107
  # @example
102
108
  # Vedeu.interface 'my_interface' do
103
109
  # cursor true # => show the cursor for this interface
104
110
  # # or...
105
- # cursor :show # => both of these are equivalent to line above
111
+ # cursor :show # => both of these are equivalent to line
112
+ # # above
106
113
  # # or...
107
114
  # cursor! #
108
115
  # # ...
@@ -116,8 +123,9 @@ module Vedeu
116
123
  # end
117
124
  #
118
125
  # Vedeu.view 'my_interface' do
119
- # cursor true # => Specify the visibility of the cursor when the view
120
- # # ... # is rendered.
126
+ # cursor true # => Specify the visibility of the cursor when
127
+ # # the view is rendered.
128
+ # # ...
121
129
  # end
122
130
  #
123
131
  # @return [Vedeu::Cursors::Cursor]
@@ -134,15 +142,16 @@ module Vedeu
134
142
  cursor(true)
135
143
  end
136
144
 
137
- # To maintain performance interfaces can be delayed from refreshing too
138
- # often, the reduces artefacts particularly when resizing the terminal
139
- # screen.
145
+ # To maintain performance interfaces can be delayed from
146
+ # refreshing too often, the reduces artefacts particularly when
147
+ # resizing the terminal screen.
140
148
  #
141
149
  # @param value [Fixnum|Float] Time in seconds. (0.5 = 500ms).
142
150
  #
143
151
  # @example
144
152
  # Vedeu.interface 'my_interface' do
145
- # delay 0.5 # interface will not update more often than every 500ms.
153
+ # delay 0.5 # interface will not update more often than
154
+ # # every 500ms.
146
155
  # # ...
147
156
  # end
148
157
  #
@@ -151,11 +160,12 @@ module Vedeu
151
160
  model.delay = value
152
161
  end
153
162
 
154
- # Specify this interface as being in focus when the application starts.
163
+ # Specify this interface as being in focus when the application
164
+ # starts.
155
165
  #
156
- # @note If multiple interfaces are defined, and this is included in each,
157
- # then the last defined will be the interface in focus. However, this
158
- # behaviour can be overridden:
166
+ # @note If multiple interfaces are defined, and this is included
167
+ # in each, then the last defined will be the interface in
168
+ # focus. However, this behaviour can be overridden:
159
169
  #
160
170
  # ```ruby
161
171
  # Vedeu.focus_by_name 'some_interface'
@@ -169,9 +179,9 @@ module Vedeu
169
179
  Vedeu::Models::Focus.add(model.name, true) if present?(model.name)
170
180
  end
171
181
 
172
- # Specify a group for an interface. Interfaces of the same group can be
173
- # targetted together; for example you may want to refresh multiple
174
- # interfaces at once.
182
+ # Specify a group for an interface. Interfaces of the same group
183
+ # can be targetted together; for example you may want to refresh
184
+ # multiple interfaces at once.
175
185
  #
176
186
  # @example
177
187
  # Vedeu.interface 'my_interface' do
@@ -179,8 +189,8 @@ module Vedeu
179
189
  # # ...
180
190
  # end
181
191
  #
182
- # @param name [String] The name of the group to which this interface
183
- # should belong.
192
+ # @param name [String] The name of the group to which this
193
+ # interface should belong.
184
194
  # @return [Vedeu::Models::Group]
185
195
  def group(name)
186
196
  return false unless present?(name)
@@ -196,8 +206,8 @@ module Vedeu
196
206
  end
197
207
  alias_method :keys, :keymap
198
208
 
199
- # The name of the interface. Used to reference the interface throughout
200
- # your application's execution lifetime.
209
+ # The name of the interface. Used to reference the interface
210
+ # throughout your application's execution lifetime.
201
211
  #
202
212
  # @param value [String]
203
213
  #
@@ -247,8 +257,8 @@ module Vedeu
247
257
 
248
258
  # Use a value from another model.
249
259
  #
250
- # @param name [String] The name of the interface model you wish to use a
251
- # value from.
260
+ # @param name [String] The name of the interface model you wish
261
+ # to use a value from.
252
262
  # @return [Vedeu::Models::Interface]
253
263
  def use(name)
254
264
  model.repository.by_name(name)
@@ -256,8 +266,8 @@ module Vedeu
256
266
 
257
267
  # Set the visibility of the interface.
258
268
  #
259
- # @param value [Boolean] Any value other than nil or false will evaluate
260
- # to true.
269
+ # @param value [Boolean] Any value other than nil or false will
270
+ # evaluate to true.
261
271
  #
262
272
  # @example
263
273
  # Vedeu.interface 'my_interface' do
@@ -286,9 +296,9 @@ module Vedeu
286
296
  model.visible = boolean
287
297
  end
288
298
 
289
- # Set the zindex of the interface. This controls the render order of
290
- # interfaces. Interfaces with a lower zindex will render before those
291
- # with a higher zindex.
299
+ # Set the zindex of the interface. This controls the render
300
+ # order of interfaces. Interfaces with a lower zindex will
301
+ # render before those with a higher zindex.
292
302
  #
293
303
  # @example
294
304
  # --4-- # rendered last
@@ -69,25 +69,24 @@ module Vedeu
69
69
 
70
70
  # Define keypress(es) to perform an action.
71
71
  #
72
- # @param value_or_values [Array<String>|Array<Symbol>|String|Symbol]
72
+ # @param values [Array<String>|Array<Symbol>|String|Symbol]
73
73
  # The key(s) pressed. Special keys can be found in
74
74
  # {Vedeu::Input::Input#specials}. When more than one key is
75
75
  # defined, then the extras are treated as aliases.
76
76
  # @param block [Proc] The action to perform when this key is pressed. Can
77
77
  # be a method call or event triggered.
78
78
  # @raise [Vedeu::Error::InvalidSyntax]
79
- # When the required block is not given, the value_or_values parameter is
79
+ # When the required block is not given, the values parameter is
80
80
  # undefined, or when processing the collection, a member is undefined.
81
81
  # @return [Array] A collection containing the keypress(es).
82
- def key(*value_or_values, &block)
82
+ def key(*values, &block)
83
83
  fail Vedeu::Error::InvalidSyntax,
84
84
  'No action defined for `key`.' unless block_given?
85
85
 
86
- unless present?(value_or_values)
87
- fail Vedeu::Error::InvalidSyntax, 'No keypress(es) defined for `key`.'
88
- end
86
+ fail Vedeu::Error::InvalidSyntax,
87
+ 'No keypress(es) defined for `key`.' unless present?(values)
89
88
 
90
- value_or_values.each do |value|
89
+ values.each do |value|
91
90
  unless present?(value)
92
91
  fail Vedeu::Error::InvalidSyntax,
93
92
  'An invalid value for `key` was encountered.'
@@ -59,7 +59,8 @@ module Vedeu
59
59
  # end
60
60
  # end
61
61
  #
62
- # @raise [Vedeu::Error::InvalidSyntax] When no block or value is provided.
62
+ # @raise [Vedeu::Error::InvalidSyntax] When no block or value is
63
+ # provided.
63
64
  # @return [Vedeu::Views::Lines]
64
65
  def line(value = '', &block)
65
66
  if block_given?
@@ -81,7 +82,8 @@ module Vedeu
81
82
  alias_method :line=, :line
82
83
 
83
84
  # Define multiple streams (a stream is a subset of a line).
84
- # Uses {Vedeu::DSL::Stream} for all directives within the required block.
85
+ # Uses {Vedeu::DSL::Stream} for all directives within the
86
+ # required block.
85
87
  #
86
88
  # Vedeu.renders do
87
89
  # view 'my_interface' do
@@ -98,7 +100,8 @@ module Vedeu
98
100
  # end
99
101
  #
100
102
  # @param block [Proc]
101
- # @raise [Vedeu::Error::InvalidSyntax] The required block was not given.
103
+ # @raise [Vedeu::Error::InvalidSyntax] The required block was
104
+ # not given.
102
105
  # @return [Vedeu::Views::Streams<Vedeu::Views::Stream>]
103
106
  # @see Vedeu::DSL::Stream for subdirectives.
104
107
  def streams(&block)
@@ -21,7 +21,8 @@ module Vedeu
21
21
  end
22
22
 
23
23
  # @param block [Proc]
24
- # @raise [Vedeu::Error::InvalidSyntax] The required block was not given.
24
+ # @raise [Vedeu::Error::InvalidSyntax] The required block was
25
+ # not given.
25
26
  # @return [void]
26
27
  def stream(&block)
27
28
  fail Vedeu::Error::InvalidSyntax, 'block not given' unless block_given?
@@ -53,9 +53,7 @@ module Vedeu
53
53
  # @option attributes ox [Fixnum]
54
54
  # @return [Vedeu::Editor::Cursor]
55
55
  def initialize(attributes = {})
56
- @attributes = defaults.merge!(attributes)
57
-
58
- @attributes.each do |key, value|
56
+ defaults.merge!(attributes).each do |key, value|
59
57
  instance_variable_set("@#{key}", value)
60
58
  end
61
59
  end
@@ -6,7 +6,7 @@ module Vedeu
6
6
  #
7
7
  class Document
8
8
 
9
- include Vedeu::Model
9
+ include Vedeu::Repositories::Model
10
10
  extend Forwardable
11
11
 
12
12
  def_delegators :border,
@@ -41,12 +41,11 @@ module Vedeu
41
41
  # @param attributes [Hash]
42
42
  # @option attributes data [String]
43
43
  # @option attributes name [String]
44
- # @option attributes repository [Vedeu::Repository]
44
+ # @option attributes repository
45
+ # [Vedeu::Repositories::Repository]
45
46
  # @return [Vedeu::Editor::Document]
46
47
  def initialize(attributes = {})
47
- @attributes = defaults.merge!(attributes)
48
-
49
- @attributes.each do |key, value|
48
+ defaults.merge!(attributes).each do |key, value|
50
49
  instance_variable_set("@#{key}", value || defaults.fetch(key))
51
50
  end
52
51
  end
@@ -4,7 +4,7 @@ module Vedeu
4
4
 
5
5
  # Allows the storing of documents.
6
6
  #
7
- class Documents < Vedeu::Repository
7
+ class Documents < Vedeu::Repositories::Repository
8
8
 
9
9
  singleton_class.send(:alias_method, :documents, :repository)
10
10
 
@@ -110,9 +110,8 @@ module Vedeu
110
110
  def insert_character(character, index = nil)
111
111
  return self unless character
112
112
 
113
- insert = Vedeu::Editor::Insert.into(line, character, index, size)
114
-
115
- Vedeu::Editor::Line.coerce(insert)
113
+ Vedeu::Editor::Line.coerce(Vedeu::Editor::Insert
114
+ .into(line, character, index, size))
116
115
  end
117
116
 
118
117
  # Return the size of the line in characters.
@@ -137,9 +137,8 @@ module Vedeu
137
137
  def insert_line(line, index = nil)
138
138
  return self unless line
139
139
 
140
- insert = Vedeu::Editor::Insert.into(lines, line, index, size)
141
-
142
- Vedeu::Editor::Lines.coerce(insert)
140
+ Vedeu::Editor::Lines.coerce(Vedeu::Editor::Insert
141
+ .into(lines, line, index, size))
143
142
  end
144
143
 
145
144
  # Returns the line at the given index.
@@ -0,0 +1,14 @@
1
+ module Vedeu
2
+
3
+ # Provides escape sequence strings.
4
+ #
5
+ module EscapeSequences
6
+
7
+ end # EscapeSequences
8
+
9
+ end # Vedeu
10
+
11
+ require 'vedeu/esc/actions'
12
+ require 'vedeu/esc/borders'
13
+ require 'vedeu/esc/colours'
14
+ require 'vedeu/esc/esc'
@@ -28,13 +28,17 @@ module Vedeu
28
28
  # to produce the desired colours:
29
29
  #
30
30
  # @example
31
- # Esc.red # => "\e[31m"
31
+ # # "\e[31m"
32
+ # Vedeu::EscapeSequences::Esc.red
32
33
  #
33
- # Esc.red { 'some text' } # => "\e[31msome text\e[39m"
34
+ # # "\e[31msome text\e[39m"
35
+ # Vedeu::EscapeSequences::Esc.red { 'some text' }
34
36
  #
35
- # Esc.on_blue # => "\e[44m"
37
+ # # "\e[44m"
38
+ # Vedeu::EscapeSequences::Esc.on_blue
36
39
  #
37
- # Esc.on_blue { 'some text' } # => "\e[44msome text\e[49m"
40
+ # # "\e[44msome text\e[49m"
41
+ # Vedeu::EscapeSequences::Esc.on_blue { 'some text' }
38
42
  #
39
43
  # # Valid names:
40
44
  # :black, :red, :green, :yellow, :blue, :magenta, :cyan,