vedeu 0.4.53 → 0.4.54

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