vedeu 0.4.53 → 0.4.54

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 (45) hide show
  1. checksums.yaml +4 -4
  2. data/lib/vedeu/api.rb +68 -5
  3. data/lib/vedeu/bindings/system.rb +0 -15
  4. data/lib/vedeu/bindings/visibility.rb +57 -13
  5. data/lib/vedeu/buffers/buffer.rb +5 -56
  6. data/lib/vedeu/cursor/cursor.rb +24 -16
  7. data/lib/vedeu/exceptions.rb +1 -1
  8. data/lib/vedeu/models/group.rb +39 -4
  9. data/lib/vedeu/models/interface.rb +41 -5
  10. data/lib/vedeu/null/buffer.rb +5 -0
  11. data/lib/vedeu/null/interface.rb +15 -0
  12. data/lib/vedeu/output/all.rb +1 -1
  13. data/lib/vedeu/output/background.rb +1 -1
  14. data/lib/vedeu/output/clear/named_interface.rb +0 -2
  15. data/lib/vedeu/output/{translator.rb → colour_translator.rb} +5 -5
  16. data/lib/vedeu/output/foreground.rb +1 -1
  17. data/lib/vedeu/output/render_border.rb +0 -1
  18. data/lib/vedeu/repositories/model.rb +15 -6
  19. data/lib/vedeu/repositories/repositories/buffers.rb +6 -0
  20. data/lib/vedeu/repositories/repositories/cursors.rb +6 -0
  21. data/lib/vedeu/repositories/repositories/groups.rb +6 -0
  22. data/lib/vedeu/repositories/repositories/interfaces.rb +6 -0
  23. data/lib/vedeu/support/all.rb +1 -2
  24. data/lib/vedeu/support/template.rb +7 -0
  25. data/lib/vedeu/support/toggleable.rb +98 -0
  26. data/lib/vedeu/version.rb +1 -1
  27. data/test/lib/vedeu/api_test.rb +7 -1
  28. data/test/lib/vedeu/bindings/system_test.rb +5 -16
  29. data/test/lib/vedeu/bindings/visibility_test.rb +4 -0
  30. data/test/lib/vedeu/buffers/buffer_test.rb +9 -91
  31. data/test/lib/vedeu/cursor/cursor_test.rb +4 -6
  32. data/test/lib/vedeu/dsl/geometry_test.rb +24 -0
  33. data/test/lib/vedeu/models/group_test.rb +16 -14
  34. data/test/lib/vedeu/models/interface_test.rb +1 -1
  35. data/test/lib/vedeu/null/buffer_test.rb +6 -0
  36. data/test/lib/vedeu/null/interface_test.rb +18 -0
  37. data/test/lib/vedeu/output/clear/named_interface_test.rb +10 -19
  38. data/test/lib/vedeu/output/{translator_test.rb → colour_translator_test.rb} +5 -5
  39. data/test/lib/vedeu/support/toggleable_test.rb +69 -0
  40. data/vedeu.gemspec +1 -1
  41. metadata +10 -13
  42. data/lib/vedeu/support/options.rb +0 -70
  43. data/lib/vedeu/support/visibility.rb +0 -122
  44. data/test/lib/vedeu/support/options_test.rb +0 -70
  45. data/test/lib/vedeu/support/visibility_test.rb +0 -95
@@ -36,7 +36,7 @@ module Vedeu
36
36
  # Raised to remind me (or client application developers) that the subclass
37
37
  # implements the functionality sought.
38
38
  #
39
- # @see Vedeu::Translator
39
+ # @see Vedeu::ColourTranslator
40
40
  #
41
41
  # @api private
42
42
  class NotImplemented < StandardError
@@ -1,3 +1,5 @@
1
+ require 'vedeu/support/toggleable'
2
+
1
3
  module Vedeu
2
4
 
3
5
  # Interfaces can be associated with one another by being members of the same
@@ -7,6 +9,7 @@ module Vedeu
7
9
  class Group
8
10
 
9
11
  include Vedeu::Model
12
+ include Vedeu::Toggleable
10
13
 
11
14
  # @!attribute [rw] name
12
15
  # @return [String]
@@ -20,25 +23,41 @@ module Vedeu
20
23
  # @option attributes name [String] The name of the group.
21
24
  # @option attributes repository [Vedeu::Repository] The storage for all
22
25
  # Group models.
23
- # @return [Group]
26
+ # @return [Vedeu::Group]
24
27
  def initialize(attributes = {})
25
28
  @attributes = defaults.merge!(attributes)
26
29
 
27
30
  @members = Array(@attributes[:members])
28
31
  @name = @attributes[:name]
29
32
  @repository = @attributes[:repository]
33
+ @visible = @attributes[:visible]
30
34
  end
31
35
 
32
36
  # Add a member to the group by name.
33
37
  #
34
38
  # @param member [String]
35
- # @return [Group]
39
+ # @return [Vedeu::Group]
36
40
  def add(member)
37
41
  @members = members.add(member)
38
42
 
39
43
  Vedeu::Group.new(name: name, members: @members).store
40
44
  end
41
45
 
46
+ # Hide the named group of interfaces, or without a name, the group of the
47
+ # currently focussed interface.
48
+ #
49
+ # @example
50
+ # Vedeu.hide_group(name)
51
+ #
52
+ # @return [Vedeu::Group]
53
+ def hide
54
+ super
55
+
56
+ @members.each { |member| Vedeu::Interface.hide_interface(member) }
57
+
58
+ self
59
+ end
60
+
42
61
  # Return the members as a Set.
43
62
  #
44
63
  # @return [Set]
@@ -49,7 +68,7 @@ module Vedeu
49
68
  # Remove a member from the group by name.
50
69
  #
51
70
  # @param member [String]
52
- # @return [Group]
71
+ # @return [Vedeu::Group]
53
72
  def remove(member)
54
73
  @members = members.delete(member)
55
74
 
@@ -58,11 +77,26 @@ module Vedeu
58
77
 
59
78
  # Remove all members from the group.
60
79
  #
61
- # @return [Group]
80
+ # @return [Vedeu::Group]
62
81
  def reset
63
82
  Vedeu::Group.new(defaults.merge!(name: name)).store
64
83
  end
65
84
 
85
+ # Show the named group of interfaces, or without a name, the group of the
86
+ # currently focussed interface.
87
+ #
88
+ # @example
89
+ # Vedeu.show_group(name)
90
+ #
91
+ # @return [Vedeu::Group]
92
+ def show
93
+ super
94
+
95
+ @members.each { |member| Vedeu::Interface.show_interface(member) }
96
+
97
+ self
98
+ end
99
+
66
100
  private
67
101
 
68
102
  # Returns the default options/attributes for this class.
@@ -73,6 +107,7 @@ module Vedeu
73
107
  members: [],
74
108
  name: '',
75
109
  repository: Vedeu.groups,
110
+ visible: true,
76
111
  }
77
112
  end
78
113
 
@@ -2,6 +2,7 @@ require 'vedeu/models/char'
2
2
  require 'vedeu/models/stream'
3
3
  require 'vedeu/models/line'
4
4
  require 'vedeu/buffers/display_buffer'
5
+ require 'vedeu/support/toggleable'
5
6
 
6
7
  module Vedeu
7
8
 
@@ -15,6 +16,7 @@ module Vedeu
15
16
  include Vedeu::Model
16
17
  include Vedeu::Presentation
17
18
  include Vedeu::DisplayBuffer
19
+ include Vedeu::Toggleable
18
20
 
19
21
  collection Vedeu::Lines
20
22
  member Vedeu::Line
@@ -43,11 +45,6 @@ module Vedeu
43
45
  # @return [Fixnum]
44
46
  attr_accessor :zindex
45
47
 
46
- # @!attribute [rw] visible
47
- # @return [Boolean] Whether the interface is visible.
48
- attr_accessor :visible
49
- alias_method :visible?, :visible
50
-
51
48
  # @!attribute [r] attributes
52
49
  # @return [Hash]
53
50
  attr_reader :attributes
@@ -83,6 +80,19 @@ module Vedeu
83
80
  @lines = lines.add(child)
84
81
  end
85
82
 
83
+ # Hide a named interface buffer, or without a name, the buffer of the
84
+ # currently focussed interface.
85
+ #
86
+ # @example
87
+ # Vedeu.hide_interface(name)
88
+ #
89
+ # @return [void]
90
+ def hide
91
+ super
92
+
93
+ Vedeu.buffers.by_name(name).hide
94
+ end
95
+
86
96
  # Override Ruby's Object#inspect method to provide a more helpful output.
87
97
  #
88
98
  # @return [String]
@@ -133,6 +143,19 @@ module Vedeu
133
143
  output
134
144
  end
135
145
 
146
+ # Show the named interface buffer, or without a name, the buffer of the
147
+ # currently focussed interface.
148
+ #
149
+ # @example
150
+ # Vedeu.show_interface(name)
151
+ #
152
+ # @return [void]
153
+ def show
154
+ super
155
+
156
+ Vedeu.buffers.by_name(name).show
157
+ end
158
+
136
159
  # @return [Interface]
137
160
  def store
138
161
  super
@@ -143,6 +166,19 @@ module Vedeu
143
166
  store_group
144
167
  end
145
168
 
169
+ # Toggle the named interface buffer, or without a name, the buffer of the
170
+ # currently focussed interface.
171
+ #
172
+ # @example
173
+ # Vedeu.toggle_interface(name)
174
+ #
175
+ # @return [void]
176
+ def toggle
177
+ super
178
+
179
+ Vedeu.buffers.by_name(name).toggle
180
+ end
181
+
146
182
  private
147
183
 
148
184
  # The default values for a new instance of this class.
@@ -45,6 +45,11 @@ module Vedeu
45
45
  nil
46
46
  end
47
47
 
48
+ # @return [NilClass]
49
+ def toggle
50
+ nil
51
+ end
52
+
48
53
  end # Buffer
49
54
 
50
55
  end # Null
@@ -30,6 +30,11 @@ module Vedeu
30
30
  }
31
31
  end
32
32
 
33
+ # @return [NilClass]
34
+ def hide
35
+ nil
36
+ end
37
+
33
38
  # @return [Boolean]
34
39
  def null?
35
40
  true
@@ -42,6 +47,11 @@ module Vedeu
42
47
  nil
43
48
  end
44
49
 
50
+ # @return [NilClass]
51
+ def show
52
+ nil
53
+ end
54
+
45
55
  # Pretend to store this model in the repository.
46
56
  #
47
57
  # @return [Vedeu::Null::Interface]
@@ -49,6 +59,11 @@ module Vedeu
49
59
  self
50
60
  end
51
61
 
62
+ # @return [NilClass]
63
+ def toggle
64
+ nil
65
+ end
66
+
52
67
  # The null interface should not be visible.
53
68
  #
54
69
  # @return [FalseClass]
@@ -1,5 +1,5 @@
1
1
  require_relative 'esc'
2
- require_relative 'translator'
2
+ require_relative 'colour_translator'
3
3
  require_relative 'background'
4
4
  require_relative 'foreground'
5
5
  require_relative 'presentation'
@@ -4,7 +4,7 @@ module Vedeu
4
4
  # {Vedeu::Foreground}) of a terminal colour escape sequence.
5
5
  #
6
6
  # @api private
7
- class Background < Vedeu::Translator
7
+ class Background < Vedeu::ColourTranslator
8
8
 
9
9
  private
10
10
 
@@ -29,8 +29,6 @@ module Vedeu
29
29
 
30
30
  # @return [void]
31
31
  def render
32
- return [] unless interface.visible?
33
-
34
32
  output
35
33
  end
36
34
 
@@ -21,7 +21,7 @@ module Vedeu
21
21
  # @todo More documentation required (create a fancy chart!)
22
22
  #
23
23
  # @api private
24
- class Translator
24
+ class ColourTranslator
25
25
 
26
26
  # @!attribute [r] colour
27
27
  # @return [String]
@@ -43,10 +43,10 @@ module Vedeu
43
43
  end
44
44
  end
45
45
 
46
- # Return a new instance of Vedeu::Translator.
46
+ # Return a new instance of Vedeu::ColourTranslator.
47
47
  #
48
48
  # @param colour [Fixnum|String|Symbol]
49
- # @return [Translator]
49
+ # @return [Vedeu::ColourTranslator]
50
50
  def initialize(colour = '')
51
51
  @colour = colour || ''
52
52
  end
@@ -61,7 +61,7 @@ module Vedeu
61
61
  alias_method :==, :eql?
62
62
 
63
63
  # @return [String]
64
- # @see Vedeu::Translator
64
+ # @see Vedeu::ColourTranslator
65
65
  def escape_sequence
66
66
  if no_colour?
67
67
  ''
@@ -260,6 +260,6 @@ module Vedeu
260
260
  alias_method :repository, :not_implemented
261
261
  alias_method :rgb_prefix, :not_implemented
262
262
 
263
- end # Translator
263
+ end # ColourTranslator
264
264
 
265
265
  end # Vedeu
@@ -4,7 +4,7 @@ module Vedeu
4
4
  # {Vedeu::Background}) of a terminal colour escape sequence.
5
5
  #
6
6
  # @api private
7
- class Foreground < Vedeu::Translator
7
+ class Foreground < Vedeu::ColourTranslator
8
8
 
9
9
  private
10
10
 
@@ -53,7 +53,6 @@ module Vedeu
53
53
 
54
54
  # @return [Array<Array<Vedeu::Char>>]
55
55
  def render
56
- return [] unless interface.visible?
57
56
  return [] unless enabled?
58
57
 
59
58
  Vedeu.timer("Bordering: '#{name}'") do
@@ -19,6 +19,10 @@ module Vedeu
19
19
  #
20
20
  module ClassMethods
21
21
 
22
+ # @!attribute [r]
23
+ # @return [Vedeu::Repository]
24
+ attr_reader :repository
25
+
22
26
  # Build models using a simple DSL when a block is given, otherwise returns
23
27
  # a new instance of the class including this module.
24
28
  #
@@ -34,6 +38,14 @@ module Vedeu
34
38
  model
35
39
  end
36
40
 
41
+ # Fetch an instance of a repository's model by name.
42
+ #
43
+ # @param name [String]
44
+ # @return [void]
45
+ def by_name(name)
46
+ @repository.by_name(name)
47
+ end
48
+
37
49
  # Provide a convenient way to define the child or children of a model.
38
50
  #
39
51
  # @param klass [Class] The member (singular) or collection (multiple)
@@ -45,15 +57,12 @@ module Vedeu
45
57
  alias_method :member, :child
46
58
  alias_method :collection, :child
47
59
 
48
- # @note
49
- # Not current used.
60
+ # Allow models to specify their repository using a class method.
50
61
  #
51
62
  # @param klass [void]
52
- # @param as [void]
53
63
  # @return [void]
54
- def repository(klass, as:)
55
- self.repository = as
56
- klass.register(as, self)
64
+ def repo(klass)
65
+ @repository = klass
57
66
  end
58
67
 
59
68
  private
@@ -19,4 +19,10 @@ module Vedeu
19
19
 
20
20
  end # Buffers
21
21
 
22
+ class Buffer
23
+
24
+ repo Vedeu::Buffers.repository
25
+
26
+ end
27
+
22
28
  end # Vedeu
@@ -41,4 +41,10 @@ module Vedeu
41
41
 
42
42
  end # Cursors
43
43
 
44
+ class Cursor
45
+
46
+ repo Vedeu::Cursors.repository
47
+
48
+ end
49
+
44
50
  end # Vedeu
@@ -32,4 +32,10 @@ module Vedeu
32
32
 
33
33
  end # Groups
34
34
 
35
+ class Group
36
+
37
+ repo Vedeu::Groups.repository
38
+
39
+ end
40
+
35
41
  end # Vedeu
@@ -30,4 +30,10 @@ module Vedeu
30
30
 
31
31
  end # Interfaces
32
32
 
33
+ class Interface
34
+
35
+ repo Vedeu::Interfaces.repository
36
+
37
+ end
38
+
33
39
  end # Vedeu
@@ -1,6 +1,5 @@
1
1
  require_relative 'common'
2
- require_relative 'options'
3
2
  require_relative 'template'
4
3
  require_relative 'terminal'
5
4
  require_relative 'timer'
6
- require_relative 'visibility'
5
+ require_relative 'toggleable'
@@ -1,3 +1,5 @@
1
+ require 'vedeu/templating/preprocessor'
2
+
1
3
  module Vedeu
2
4
 
3
5
  # Generic class to loading a template and parsing it via ERb.
@@ -43,6 +45,11 @@ module Vedeu
43
45
 
44
46
  private
45
47
 
48
+ # @return [String]
49
+ def preprocess
50
+ Vedeu::Templating::Preprocessor.process(load)
51
+ end
52
+
46
53
  # @return [String]
47
54
  def load
48
55
  File.read(path)