vedeu 0.5.5 → 0.5.6

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 (67) hide show
  1. checksums.yaml +4 -4
  2. data/examples/material_colours_app.rb +25 -0
  3. data/lib/vedeu/all.rb +0 -1
  4. data/lib/vedeu/colours/colour_translator.rb +6 -6
  5. data/lib/vedeu/cursor/cursor.rb +0 -12
  6. data/lib/vedeu/dsl.rb +23 -0
  7. data/lib/vedeu/dsl/border.rb +0 -10
  8. data/lib/vedeu/dsl/composition.rb +1 -19
  9. data/lib/vedeu/dsl/geometry.rb +0 -10
  10. data/lib/vedeu/dsl/group.rb +0 -10
  11. data/lib/vedeu/dsl/interface.rb +0 -20
  12. data/lib/vedeu/dsl/keymap.rb +0 -10
  13. data/lib/vedeu/dsl/line.rb +3 -21
  14. data/lib/vedeu/dsl/menu.rb +0 -10
  15. data/lib/vedeu/dsl/stream.rb +4 -10
  16. data/lib/vedeu/dsl/view.rb +0 -20
  17. data/lib/vedeu/geometry/geometry.rb +0 -13
  18. data/lib/vedeu/geometry/position.rb +11 -0
  19. data/lib/vedeu/models/escape.rb +0 -7
  20. data/lib/vedeu/models/interface.rb +4 -16
  21. data/lib/vedeu/models/views/all.rb +4 -5
  22. data/lib/vedeu/models/views/char.rb +21 -22
  23. data/lib/vedeu/models/views/{chars.rb → collections/chars.rb} +0 -0
  24. data/lib/vedeu/models/views/{lines.rb → collections/lines.rb} +0 -0
  25. data/lib/vedeu/models/views/{streams.rb → collections/streams.rb} +0 -0
  26. data/lib/vedeu/models/views/{view_collection.rb → collections/view_collection.rb} +0 -0
  27. data/lib/vedeu/models/views/composition.rb +17 -19
  28. data/lib/vedeu/models/views/line.rb +19 -31
  29. data/lib/vedeu/models/views/stream.rb +7 -20
  30. data/lib/vedeu/models/views/view.rb +22 -35
  31. data/lib/vedeu/output/html_char.rb +38 -28
  32. data/lib/vedeu/output/presentation/colour.rb +15 -44
  33. data/lib/vedeu/output/presentation/style.rb +7 -14
  34. data/lib/vedeu/output/viewport.rb +0 -3
  35. data/lib/vedeu/output/virtual_terminal.rb +2 -2
  36. data/lib/vedeu/repositories/repository.rb +0 -7
  37. data/lib/vedeu/version.rb +1 -1
  38. data/test/lib/vedeu/buffers/buffer_test.rb +4 -4
  39. data/test/lib/vedeu/colours/colour_translator_test.rb +14 -0
  40. data/test/lib/vedeu/cursor/cursor_test.rb +0 -9
  41. data/test/lib/vedeu/dsl/line_test.rb +15 -13
  42. data/test/lib/vedeu/geometry/geometry_test.rb +0 -13
  43. data/test/lib/vedeu/geometry/position_test.rb +18 -0
  44. data/test/lib/vedeu/models/escape_test.rb +0 -8
  45. data/test/lib/vedeu/models/interface_test.rb +0 -12
  46. data/test/lib/vedeu/models/views/char_test.rb +4 -23
  47. data/test/lib/vedeu/models/views/{chars_test.rb → collections/chars_test.rb} +0 -0
  48. data/test/lib/vedeu/models/views/{lines_test.rb → collections/lines_test.rb} +0 -0
  49. data/test/lib/vedeu/models/views/{streams_test.rb → collections/streams_test.rb} +0 -0
  50. data/test/lib/vedeu/models/views/collections/view_collection_test.rb +22 -0
  51. data/test/lib/vedeu/models/views/composition_test.rb +23 -17
  52. data/test/lib/vedeu/models/views/line_test.rb +13 -42
  53. data/test/lib/vedeu/models/views/stream_test.rb +4 -33
  54. data/test/lib/vedeu/output/html_char_test.rb +16 -39
  55. data/test/lib/vedeu/output/presentation/colour_test.rb +63 -60
  56. data/test/lib/vedeu/output/presentation/style_test.rb +30 -29
  57. data/test/lib/vedeu/output/presentation_test.rb +1 -1
  58. data/test/lib/vedeu/output/renderers/html_test.rb +4 -8
  59. data/test/lib/vedeu/output/renderers/json_test.rb +37 -3
  60. data/test/lib/vedeu/output/wordwrap_test.rb +4 -4
  61. data/test/lib/vedeu/repositories/repository_test.rb +0 -26
  62. data/test/lib/vedeu/templating/view_template_test.rb +8 -8
  63. metadata +13 -17
  64. data/lib/vedeu/geometry/position_index.rb +0 -68
  65. data/lib/vedeu/models/interface_collection.rb +0 -9
  66. data/test/lib/vedeu/geometry/position_index_test.rb +0 -82
  67. data/test/lib/vedeu/models/interface_collection_test.rb +0 -18
@@ -45,11 +45,19 @@ module Vedeu
45
45
  def tag_style
46
46
  return '' unless border || present?(value)
47
47
 
48
- " style='" \
49
- "background:#{bg};" \
50
- "color:#{fg};" \
51
- "border:1px #{bg} solid;" \
52
- "#{border_style}'"
48
+ out = " style='"
49
+
50
+ unless char.background.empty?
51
+ out << "border:1px #{char.background.to_html} solid;"
52
+ out << "background:#{char.background.to_html};"
53
+ end
54
+
55
+ unless char.foreground.empty?
56
+ out << "color:#{char.foreground.to_html};"
57
+ out << "#{border_style}"
58
+ end
59
+
60
+ out << "'"
53
61
  end
54
62
 
55
63
  # @return [String]
@@ -77,39 +85,41 @@ module Vedeu
77
85
 
78
86
  # @return [String]
79
87
  def css(direction = '')
80
- "border-#{direction}:1px #{fg} solid;"
88
+ "border-#{direction}:1px #{char.foreground.to_html} solid;"
81
89
  end
82
90
 
83
- # @return [String]
84
- def fg
85
- @fg ||= colour(char, 'foreground', '#222')
86
- end
91
+ # # @return [String]
92
+ # def fg
93
+ # @fg ||= colour(char, 'foreground', '#222')
94
+ # end
87
95
 
88
- # @return [String]
89
- def bg
90
- @bg ||= colour(char, 'background', '#000')
91
- end
96
+ # # @return [String]
97
+ # def bg
98
+ # @bg ||= colour(char, 'background', '#000')
99
+ # end
92
100
 
93
101
  # @param char [Vedeu::Views::Char]
94
- # @param type [String]
95
- # @param default [String]
102
+ # @param type [String] 'background' or 'foreground'
103
+ # @param default [String] A default colour (CSS style; e.g. '#b2adf2')
96
104
  # @return [String]
97
- def colour(char, type, default)
98
- parent_type = ('parent_' + type).to_sym
99
- type_to_html = char.send(type).send(:to_html)
100
- parent_type_to_html = char.send(parent_type).send(:to_html)
105
+ # def colour(char, type, default)
106
+ # parent_type = char.send(:parent).send(type).send(:to_html)
107
+ # #parent_type = ('parent_' + type).to_sym
108
+ # type_to_html = char.send(type).send(:to_html)
109
+ # #parent_type_to_html = char.send(parent_type).send(:to_html)
101
110
 
102
- if present?(type_to_html)
103
- type_to_html
111
+ # if present?(type_to_html)
112
+ # type_to_html
104
113
 
105
- elsif present?(parent_type_to_html)
106
- parent_type_to_html
114
+ # elsif char.parent
115
+ # parent_type
116
+ # #char.parent.send(type).send(:to_html)
107
117
 
108
- else
109
- default
118
+ # else
119
+ # default
110
120
 
111
- end
112
- end
121
+ # end
122
+ # end
113
123
 
114
124
  # @return [Symbol|NilClass]
115
125
  def border
@@ -14,8 +14,11 @@ module Vedeu
14
14
  @background ||= if colour
15
15
  colour.background
16
16
 
17
+ elsif parent
18
+ parent.background
19
+
17
20
  else
18
- parent_background
21
+ Vedeu::Background.new
19
22
 
20
23
  end
21
24
  end
@@ -25,7 +28,7 @@ module Vedeu
25
28
  #
26
29
  # @return [Vedeu::Background]
27
30
  def background=(value)
28
- self.colour = Vedeu::Colour.coerce(
31
+ @colour = Vedeu::Colour.coerce(
29
32
  background: Vedeu::Background.coerce(value),
30
33
  foreground: colour.foreground)
31
34
  end
@@ -35,8 +38,8 @@ module Vedeu
35
38
  @colour ||= if attributes[:colour]
36
39
  Vedeu::Colour.coerce(attributes[:colour])
37
40
 
38
- elsif parent_colour
39
- Vedeu::Colour.coerce(parent_colour)
41
+ elsif parent
42
+ Vedeu::Colour.coerce(parent.colour)
40
43
 
41
44
  else
42
45
  Vedeu::Colour.new
@@ -49,7 +52,7 @@ module Vedeu
49
52
  #
50
53
  # @return [Vedeu::Colour]
51
54
  def colour=(value)
52
- @colour = attributes[:colour] = Vedeu::Colour.coerce(value)
55
+ @colour = Vedeu::Colour.coerce(value)
53
56
  end
54
57
 
55
58
  # When the foreground colour for the model exists, return it, otherwise
@@ -60,8 +63,11 @@ module Vedeu
60
63
  @foreground ||= if colour
61
64
  colour.foreground
62
65
 
66
+ elsif parent
67
+ parent.foreground
68
+
63
69
  else
64
- parent_foreground
70
+ Vedeu::Foreground.new
65
71
 
66
72
  end
67
73
  end
@@ -71,44 +77,9 @@ module Vedeu
71
77
  #
72
78
  # @return [Vedeu::Foreground]
73
79
  def foreground=(value)
74
- self.colour = Vedeu::Colour.coerce(
75
- foreground: Vedeu::Foreground.coerce(value),
76
- background: colour.background)
77
- end
78
-
79
- # When a parent colour is available, returns the parent background colour,
80
- # otherwise an empty Vedeu::Background.
81
- #
82
- # @return [Vedeu::Background]
83
- def parent_background
84
- if parent_colour
85
- parent_colour.background
86
-
87
- else
88
- Vedeu::Background.new
89
-
90
- end
91
- end
92
-
93
- # Returns the parent colour when available or NilClass.
94
- #
95
- # @return [String|NilClass]
96
- def parent_colour
97
- parent.colour if parent
98
- end
99
-
100
- # When a parent colour is available, returns the parent foreground colour,
101
- # otherwise an empty Vedeu::Foreground.
102
- #
103
- # @return [Vedeu::Foreground]
104
- def parent_foreground
105
- if parent_colour
106
- parent_colour.foreground
107
-
108
- else
109
- Vedeu::Foreground.new
110
-
111
- end
80
+ @colour = Vedeu::Colour.coerce(
81
+ background: colour.background,
82
+ foreground: Vedeu::Foreground.coerce(value))
112
83
  end
113
84
 
114
85
  end # Colour
@@ -6,26 +6,16 @@ module Vedeu
6
6
  #
7
7
  module Style
8
8
 
9
- # Returns the parent style when available or NilClass.
9
+ # When the style for the model exists, return it, otherwise returns the
10
+ # parent style, or an empty Vedeu::Style.
10
11
  #
11
- # @return [String|NilClass]
12
- def parent_style
13
- if parent
14
- parent.style
15
-
16
- else
17
- Vedeu::Style.new
18
-
19
- end
20
- end
21
-
22
12
  # @return [Vedeu::Style]
23
13
  def style
24
14
  @style ||= if attributes[:style]
25
15
  Vedeu::Style.coerce(attributes[:style])
26
16
 
27
- elsif parent_style
28
- Vedeu::Style.coerce(parent_style)
17
+ elsif parent
18
+ Vedeu::Style.coerce(parent.style)
29
19
 
30
20
  else
31
21
  Vedeu::Style.new
@@ -33,6 +23,9 @@ module Vedeu
33
23
  end
34
24
  end
35
25
 
26
+ # Allows the setting of the style by coercing the given value into a
27
+ # Vedeu::Style.
28
+ #
36
29
  # @return [Vedeu::Style]
37
30
  def style=(value)
38
31
  @style = Vedeu::Style.coerce(value)
@@ -12,7 +12,6 @@ module Vedeu
12
12
 
13
13
  def_delegators :view,
14
14
  :lines,
15
- :lines?,
16
15
  :name,
17
16
  :visible?
18
17
 
@@ -83,8 +82,6 @@ module Vedeu
83
82
  #
84
83
  # @return [Array]
85
84
  def show
86
- return [] unless lines?
87
-
88
85
  (lines[rows] || []).map { |line| (line.chars[columns] || []) }
89
86
  end
90
87
 
@@ -48,7 +48,7 @@ module Vedeu
48
48
  # @param x [Fixnum] The column/character coordinate.
49
49
  # @return [Vedeu::Views::Char]
50
50
  def read(y, x)
51
- cy, cx = Vedeu::PositionIndex[y, x]
51
+ cy, cx = Vedeu::Position[y, x].as_indices
52
52
 
53
53
  row = fetch(cells, cy)
54
54
  cell = fetch(row, cx)
@@ -96,7 +96,7 @@ module Vedeu
96
96
  def write(y, x, data)
97
97
  return false unless read(y, x).is_a?(Vedeu::Cell)
98
98
 
99
- cy, cx = Vedeu::PositionIndex[y, x]
99
+ cy, cx = Vedeu::Position[y, x].as_indices
100
100
  cells[cy][cx] = data
101
101
 
102
102
  true
@@ -113,13 +113,6 @@ module Vedeu
113
113
  end
114
114
  end
115
115
 
116
- # Override Ruby's Object#inspect method to provide a more helpful output.
117
- #
118
- # @return [String]
119
- def inspect
120
- "<#{self.class.name}: #{registered.inspect}>"
121
- end
122
-
123
116
  # Returns a boolean indicating whether the named model is registered.
124
117
  #
125
118
  # @param name [String]
data/lib/vedeu/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Vedeu
2
2
 
3
3
  # The current version of Vedeu.
4
- VERSION = '0.5.5'
4
+ VERSION = '0.5.6'
5
5
 
6
6
  end
@@ -42,7 +42,7 @@ module Vedeu
42
42
  end
43
43
 
44
44
  describe '#add' do
45
- let(:content) { Vedeu::Views::View.new(lines: [Vedeu::Views::Line.new]) }
45
+ let(:content) { Vedeu::Views::View.new(value: [Vedeu::Views::Line.new]) }
46
46
 
47
47
  subject { instance.add(content) }
48
48
 
@@ -54,7 +54,7 @@ module Vedeu
54
54
 
55
55
  context 'with content' do
56
56
  let(:back) {
57
- Vedeu::Views::View.new(lines: [Vedeu::Views::Line.new])
57
+ Vedeu::Views::View.new(value: [Vedeu::Views::Line.new])
58
58
  }
59
59
 
60
60
  it { subject.must_equal(true) }
@@ -70,7 +70,7 @@ module Vedeu
70
70
 
71
71
  context 'with content' do
72
72
  let(:front) {
73
- Vedeu::Views::View.new(lines: [Vedeu::Views::Line.new])
73
+ Vedeu::Views::View.new(value: [Vedeu::Views::Line.new])
74
74
  }
75
75
 
76
76
  it { subject.must_equal(true) }
@@ -86,7 +86,7 @@ module Vedeu
86
86
 
87
87
  context 'with content' do
88
88
  let(:previous) {
89
- Vedeu::Views::View.new(lines: [Vedeu::Views::Line.new])
89
+ Vedeu::Views::View.new(value: [Vedeu::Views::Line.new])
90
90
  }
91
91
 
92
92
  it { subject.must_equal(true) }
@@ -56,6 +56,20 @@ module Vedeu
56
56
  end
57
57
  end
58
58
 
59
+ describe '#empty?' do
60
+ subject { instance.empty? }
61
+
62
+ context 'when there is no colour' do
63
+ let(:colour) {}
64
+
65
+ it { subject.must_equal(true) }
66
+ end
67
+
68
+ context 'when there is a colour' do
69
+ it { subject.must_equal(false) }
70
+ end
71
+ end
72
+
59
73
  describe '#eql?' do
60
74
  let(:other) { instance }
61
75
 
@@ -80,15 +80,6 @@ module Vedeu
80
80
  it { subject.must_be_instance_of(Vedeu::Escape) }
81
81
  end
82
82
 
83
- describe '#inspect' do
84
- subject { instance.inspect }
85
-
86
- it { subject.must_be_instance_of(String) }
87
- it { subject.must_equal(
88
- '<Vedeu::Cursor (silver, true, x:19, y:8, ox:3, oy:2)>'
89
- ) }
90
- end
91
-
92
83
  describe '#position' do
93
84
  subject { instance.position }
94
85
 
@@ -6,22 +6,24 @@ module Vedeu
6
6
 
7
7
  describe Line do
8
8
 
9
- let(:described) { Vedeu::DSL::Line }
10
- let(:instance) { described.new(model) }
11
- let(:model) { Vedeu::Views::Line.new(attributes) }
12
- let(:attributes){
9
+ let(:described) { Vedeu::DSL::Line }
10
+ let(:instance) { described.new(model) }
11
+ let(:model) { Vedeu::Views::Line.new(attributes) }
12
+ let(:client) {}
13
+ let(:colour) { Vedeu::Colour.new }
14
+ let(:parent) { Vedeu::Views::View.new }
15
+ let(:style) { Vedeu::Style.new }
16
+ let(:_value) { [] }
17
+ let(:attributes) {
13
18
  {
14
- streams: streams,
15
- parent: parent,
16
- colour: colour,
17
- style: style,
19
+ client: client,
20
+ value: _value,
21
+ parent: parent,
22
+ colour: colour,
23
+ style: style,
18
24
  }
19
25
  }
20
- let(:client) {}
21
- let(:streams) { [] }
22
- let(:parent) { Vedeu::Views::View.new }
23
- let(:colour) { Vedeu::Colour.new }
24
- let(:style) { Vedeu::Style.new }
26
+
25
27
 
26
28
  describe '#initialize' do
27
29
  it { instance.must_be_instance_of(described) }
@@ -67,19 +67,6 @@ module Vedeu
67
67
  it { instance.must_respond_to(:yn=) }
68
68
  end
69
69
 
70
- describe '#inspect' do
71
- before { Terminal.stubs(:size).returns([12, 40]) }
72
-
73
- subject { instance.inspect }
74
-
75
- it { subject.must_be_instance_of(String) }
76
-
77
- it { subject.must_equal(
78
- '<Vedeu::Geometry x:1 xn:40 y:1 yn:12 centred:false maximise:false>'
79
- )
80
- }
81
- end
82
-
83
70
  describe '#maximise' do
84
71
  let(:attributes) {
85
72
  {
@@ -139,6 +139,24 @@ module Vedeu
139
139
  end
140
140
  end
141
141
 
142
+ describe '#as_indices' do
143
+ subject { instance.as_indices }
144
+
145
+ it { subject.must_equal([11, 18]) }
146
+
147
+ context 'when y is less than 1' do
148
+ let(:y) { -3 }
149
+
150
+ it { subject.must_equal([0, 18]) }
151
+ end
152
+
153
+ context 'when x is less than 1' do
154
+ let(:x) { -9 }
155
+
156
+ it { subject.must_equal([11, 0]) }
157
+ end
158
+ end
159
+
142
160
  end # Position
143
161
 
144
162
  end # Vedeu