vedeu 0.0.32 → 0.0.33

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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/lib/vedeu/application.rb +2 -0
  3. data/lib/vedeu/launcher.rb +1 -1
  4. data/lib/vedeu/models/colour.rb +7 -7
  5. data/lib/vedeu/models/command.rb +2 -0
  6. data/lib/vedeu/models/composition.rb +2 -2
  7. data/lib/vedeu/models/interface.rb +15 -6
  8. data/lib/vedeu/models/line.rb +5 -3
  9. data/lib/vedeu/models/presentation.rb +3 -3
  10. data/lib/vedeu/models/stream.rb +6 -3
  11. data/lib/vedeu/models/style.rb +31 -0
  12. data/lib/vedeu/output/interface_renderer.rb +1 -3
  13. data/lib/vedeu/support/coordinate.rb +21 -7
  14. data/lib/vedeu/support/parsing/json_parser.rb +3 -3
  15. data/test/lib/vedeu/application_test.rb +0 -11
  16. data/test/lib/vedeu/launcher_test.rb +0 -8
  17. data/test/lib/vedeu/models/collection_test.rb +3 -3
  18. data/test/lib/vedeu/models/colour_test.rb +7 -2
  19. data/test/lib/vedeu/models/command_test.rb +0 -6
  20. data/test/lib/vedeu/models/composition_test.rb +127 -37
  21. data/test/lib/vedeu/models/interface_collection_test.rb +8 -9
  22. data/test/lib/vedeu/models/interface_test.rb +64 -18
  23. data/test/lib/vedeu/models/line_test.rb +3 -7
  24. data/test/lib/vedeu/models/presentation_test.rb +7 -5
  25. data/test/lib/vedeu/models/stream_test.rb +21 -11
  26. data/test/lib/vedeu/models/style_test.rb +86 -0
  27. data/test/lib/vedeu/output/interface_renderer_test.rb +32 -5
  28. data/test/lib/vedeu/output/output_test.rb +8 -1
  29. data/test/lib/vedeu/repository/command_repository_test.rb +14 -10
  30. data/test/lib/vedeu/repository/interface_repository_test.rb +9 -9
  31. data/test/lib/vedeu/support/coordinate_test.rb +72 -19
  32. data/test/lib/vedeu/support/menu_test.rb +16 -16
  33. data/test/lib/vedeu/support/parsing/hash_parser_test.rb +7 -7
  34. data/test/lib/vedeu/support/parsing/json_parser_test.rb +1 -1
  35. data/test/lib/vedeu/support/terminal_test.rb +0 -7
  36. data/test/lib/vedeu_test.rb +0 -5
  37. data/test/test_helper.rb +1 -0
  38. data/vedeu.gemspec +2 -3
  39. metadata +7 -25
  40. data/lib/vedeu/models/style_collection.rb +0 -19
  41. data/lib/vedeu/support/geometry.rb +0 -62
  42. data/test/lib/vedeu/models/style_collection_test.rb +0 -13
  43. data/test/lib/vedeu/support/geometry_test.rb +0 -107
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a0f9669e1076e596ff5730f44aa1e4563fc24fb6
4
- data.tar.gz: 7316c60bdbf2067b1ee27726bd94524f8554af47
3
+ metadata.gz: 73c1296c50c2e542fe744337b953c07e2a14ee03
4
+ data.tar.gz: 55e5fa60d09ce7c65382a2ff664b79e717cb0228
5
5
  SHA512:
6
- metadata.gz: 7233c00d83179e6d1374fca99bea3d477f83e5991e09a8a85211d83c590d47de83ab67adca91c39628f0050240e01921cc932c2cda64826f619fea618b8e0abc
7
- data.tar.gz: 758b39394201c72a704d0fce2188272474f4c62ee73ec5589c3938f87fea664c8576b0fb69b67dc0c808a6298e7a7bb3676838694447326d31202182fbf7d33c
6
+ metadata.gz: 8816692395970fdb8a2b9003a625348cef3255c23c9340b56bfdb0297efbedbdc63d53f903caba320f7d94eb0f9f7f1834f4a4a721785a7b0e7142b377124952
7
+ data.tar.gz: 7f321725fa3838de38dfcfd1091dbbd66ee5bc6439d47322fc3075ebd249c6ca52218f21c83fa7edb091ad5562783083998df9b1d05d6e6ec45c8b64deec0183
@@ -5,6 +5,7 @@ require_relative 'support/terminal'
5
5
 
6
6
  module Vedeu
7
7
  class Application
8
+ # :nocov:
8
9
  def self.start(options = {})
9
10
  new(options).start
10
11
  end
@@ -65,5 +66,6 @@ module Vedeu
65
66
  interactive: true
66
67
  }
67
68
  end
69
+ # :nocov:
68
70
  end
69
71
  end
@@ -3,6 +3,7 @@ require_relative 'configuration'
3
3
 
4
4
  module Vedeu
5
5
  class Launcher
6
+ # :nocov:
6
7
  def initialize(argv, stdin = STDIN,
7
8
  stdout = STDOUT,
8
9
  stderr = STDERR,
@@ -15,7 +16,6 @@ module Vedeu
15
16
  @exit_code = 1
16
17
  end
17
18
 
18
- # :nocov:
19
19
  def execute!
20
20
  $stdin, $stdout, $stderr = @stdin, @stdout, @stderr
21
21
 
@@ -1,4 +1,4 @@
1
- require 'oj'
1
+ require 'json'
2
2
  require 'virtus'
3
3
 
4
4
  require_relative '../support/esc'
@@ -7,8 +7,8 @@ module Vedeu
7
7
  class Colour
8
8
  include Virtus.model
9
9
 
10
- attribute :foreground, String
11
- attribute :background, String
10
+ attribute :foreground, String, default: ''
11
+ attribute :background, String, default: ''
12
12
 
13
13
  def foreground
14
14
  @fg ||= Esc.foreground_colour(css_foreground)
@@ -19,15 +19,15 @@ module Vedeu
19
19
  end
20
20
 
21
21
  def css_foreground
22
- @foreground || ''
22
+ @foreground
23
23
  end
24
24
 
25
25
  def css_background
26
- @background || ''
26
+ @background
27
27
  end
28
28
 
29
- def to_json
30
- Oj.dump(as_hash, mode: :compat)
29
+ def to_json(*args)
30
+ as_hash.to_json
31
31
  end
32
32
 
33
33
  def to_s
@@ -14,8 +14,10 @@ module Vedeu
14
14
  executable.call(*args)
15
15
  end
16
16
 
17
+ # :nocov:
17
18
  def executable
18
19
  proc { |*args| entity.dispatch(*args) }
19
20
  end
21
+ # :nocov:
20
22
  end
21
23
  end
@@ -1,4 +1,4 @@
1
- require 'oj'
1
+ require 'json'
2
2
  require 'virtus'
3
3
 
4
4
  require_relative 'interface_collection'
@@ -23,7 +23,7 @@ module Vedeu
23
23
  end
24
24
 
25
25
  def to_json
26
- Oj.dump(json_attributes, mode: :compat)
26
+ json_attributes.to_json
27
27
  end
28
28
 
29
29
  def to_s
@@ -1,8 +1,11 @@
1
+ require 'json'
1
2
  require 'virtus'
2
3
 
3
4
  require_relative 'presentation'
4
5
  require_relative 'line_collection'
6
+ require_relative 'style'
5
7
  require_relative '../output/interface_renderer'
8
+ require_relative '../support/coordinate'
6
9
  require_relative '../support/esc'
7
10
  require_relative '../support/queue'
8
11
  require_relative '../support/terminal'
@@ -11,6 +14,7 @@ module Vedeu
11
14
  class Interface
12
15
  include Virtus.model
13
16
  include Presentation
17
+ include Style
14
18
  include Vedeu::Queue
15
19
 
16
20
  attribute :name, String
@@ -22,9 +26,10 @@ module Vedeu
22
26
  attribute :height, Integer, default: Terminal.height
23
27
  attribute :current, String, default: ''
24
28
  attribute :cursor, Boolean, default: true
29
+ attribute :centred, Boolean, default: false
25
30
 
26
- def geometry
27
- @geometry ||= Geometry.new(self)
31
+ def origin(index = 0)
32
+ geometry.origin(index)
28
33
  end
29
34
 
30
35
  def refresh
@@ -40,8 +45,8 @@ module Vedeu
40
45
  end
41
46
  end
42
47
 
43
- def to_json
44
- Oj.dump(json_attributes, mode: :compat)
48
+ def to_json(*args)
49
+ json_attributes.to_json
45
50
  end
46
51
 
47
52
  def to_s
@@ -64,8 +69,8 @@ module Vedeu
64
69
 
65
70
  def json_attributes
66
71
  {
67
- colour: colour, # TODO: translate back?
68
- style: style,
72
+ colour: colour,
73
+ style: style_original,
69
74
  name: name,
70
75
  lines: lines,
71
76
  y: y,
@@ -76,5 +81,9 @@ module Vedeu
76
81
  cursor: cursor
77
82
  }
78
83
  end
84
+
85
+ def geometry
86
+ @_geometry ||= Coordinate.new(attributes)
87
+ end
79
88
  end
80
89
  end
@@ -1,19 +1,21 @@
1
- require 'oj'
1
+ require 'json'
2
2
  require 'virtus'
3
3
 
4
4
  require_relative 'presentation'
5
5
  require_relative 'stream_collection'
6
+ require_relative 'style'
6
7
 
7
8
  module Vedeu
8
9
  class Line
9
10
  include Virtus.model
10
11
  include Presentation
12
+ include Style
11
13
 
12
14
  attribute :model, Hash
13
15
  attribute :streams, StreamCollection
14
16
 
15
17
  def to_json
16
- Oj.dump(json_attributes, mode: :compat)
18
+ json_attributes.to_json
17
19
  end
18
20
 
19
21
  def to_s
@@ -25,7 +27,7 @@ module Vedeu
25
27
  def json_attributes
26
28
  {
27
29
  colour: colour,
28
- style: style,
30
+ style: style_original,
29
31
  streams: streams
30
32
  }
31
33
  end
@@ -1,13 +1,13 @@
1
1
  require 'virtus'
2
2
 
3
3
  require_relative 'colour'
4
- require_relative 'style_collection'
4
+ require_relative '../support/esc'
5
5
 
6
6
  module Vedeu
7
7
  module Presentation
8
8
  include Virtus.module
9
9
 
10
- attribute :colour, Colour
11
- attribute :style, StyleCollection
10
+ attribute :colour, Colour, default: Colour.new
11
+ attribute :style, Array[String]
12
12
  end
13
13
  end
@@ -1,17 +1,20 @@
1
+ require 'json'
1
2
  require 'virtus'
2
3
 
3
4
  require_relative 'presentation'
4
5
  require_relative '../support/terminal'
6
+ require_relative 'style'
5
7
 
6
8
  module Vedeu
7
9
  class Stream
8
10
  include Virtus.model
9
11
  include Presentation
12
+ include Style
10
13
 
11
14
  attribute :text, String, default: ''
12
15
 
13
16
  def to_json
14
- Oj.dump(json_attributes, mode: :compat)
17
+ json_attributes.to_json
15
18
  end
16
19
 
17
20
  def to_s(options = {})
@@ -22,8 +25,8 @@ module Vedeu
22
25
 
23
26
  def json_attributes
24
27
  {
25
- colour: colour.as_hash,
26
- style: style,
28
+ colour: colour,
29
+ style: style_original,
27
30
  text: text
28
31
  }
29
32
  end
@@ -0,0 +1,31 @@
1
+ require_relative '../support/esc'
2
+
3
+ module Vedeu
4
+ module Style
5
+ def style
6
+ @_style ||= if no_style?
7
+ ''
8
+
9
+ else
10
+ @style.map { |s| Esc.string(s) }.join
11
+
12
+ end
13
+ end
14
+
15
+ def style_original
16
+ @_original ||= if no_style?
17
+ ''
18
+
19
+ else
20
+ @style
21
+
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def no_style?
28
+ @style.nil? || @style.empty?
29
+ end
30
+ end
31
+ end
@@ -1,5 +1,3 @@
1
- require_relative '../support/geometry'
2
-
3
1
  module Vedeu
4
2
  class InterfaceRenderer
5
3
  def self.clear(interface)
@@ -48,7 +46,7 @@ module Vedeu
48
46
  end
49
47
 
50
48
  def origin(index)
51
- interface.geometry.origin(index)
49
+ interface.origin(index)
52
50
  end
53
51
 
54
52
  def height
@@ -1,3 +1,4 @@
1
+ require_relative 'esc'
1
2
  require_relative 'terminal'
2
3
 
3
4
  module Vedeu
@@ -15,6 +16,10 @@ module Vedeu
15
16
  @centred = attrs.fetch(:centred, true)
16
17
  end
17
18
 
19
+ def origin(index = 0)
20
+ Esc.set_position(virtual_y(index), virtual_x)
21
+ end
22
+
18
23
  def terminal_height
19
24
  fail OutOfBoundsError,
20
25
  'Value must be greater than or equal to 1.' if @terminal_height < 1
@@ -45,10 +50,10 @@ module Vedeu
45
50
  fail OutOfBoundsError,
46
51
  'Value must be greater than or equal to 1.' if @y < 1
47
52
 
48
- if @y > height
53
+ if @y > terminal_height
49
54
  fail OutOfBoundsError, 'Cannot set y position to be greater' \
50
- ' that the specified height or' \
51
- ' actual terminal height.'
55
+ ' that the specified terminal height' \
56
+ ' or actual terminal height.'
52
57
  else
53
58
  @y
54
59
  end
@@ -57,7 +62,6 @@ module Vedeu
57
62
  def terminal_width
58
63
  fail OutOfBoundsError,
59
64
  'Value must be greater than or equal to 1.' if @terminal_width < 1
60
-
61
65
  if @terminal_width > Terminal.width
62
66
  fail OutOfBoundsError, 'Cannot set terminal_width to be ' \
63
67
  'greater than the actual terminal ' \
@@ -84,10 +88,10 @@ module Vedeu
84
88
  fail OutOfBoundsError,
85
89
  'Value must be greater than or equal to 1.' if @x < 1
86
90
 
87
- if @x > width
91
+ if @x > terminal_width
88
92
  fail OutOfBoundsError, 'Cannot set x position to be greater' \
89
- ' that the specified width or' \
90
- ' actual terminal width.'
93
+ ' that the specified terminal width' \
94
+ ' or actual terminal width.'
91
95
  else
92
96
  @x
93
97
  end
@@ -145,5 +149,15 @@ module Vedeu
145
149
  }
146
150
  end
147
151
 
152
+ private
153
+
154
+ def virtual_x
155
+ left
156
+ end
157
+
158
+ def virtual_y(index = 0)
159
+ ((top..bottom).to_a)[index]
160
+ end
161
+
148
162
  end
149
163
  end
@@ -1,12 +1,12 @@
1
- require 'oj'
1
+ require 'json'
2
2
 
3
3
  module Vedeu
4
4
  module JSONParser
5
5
  extend self
6
6
 
7
7
  def parse(output)
8
- Oj.load(output, symbol_keys: true)
9
- rescue Oj::ParseError
8
+ JSON.load(output, nil, symbolize_names: true)
9
+ rescue JSON::ParserError
10
10
  {}
11
11
  end
12
12
  end
@@ -3,16 +3,5 @@ require_relative '../../../lib/vedeu/application'
3
3
 
4
4
  module Vedeu
5
5
  describe Application do
6
- describe '.start' do
7
- it 'returns a NilClass when the application should run interactively' do
8
- skip
9
- # Application.start({ interactive: true }).must_be_instance_of(NilClass)
10
- end
11
-
12
- it 'returns a NilClass when the application should run once' do
13
- skip
14
- # Application.start({ interactive: false }).must_be_instance_of(NilClass)
15
- end
16
- end
17
6
  end
18
7
  end
@@ -3,13 +3,5 @@ require_relative '../../../lib/vedeu/launcher'
3
3
 
4
4
  module Vedeu
5
5
  describe Launcher do
6
- describe '#execute!' do
7
- it 'needs a spec, please write one.' do
8
- skip
9
- Application.stub :start, nil do
10
- Launcher.new([]).execute!
11
- end
12
- end
13
- end
14
6
  end
15
7
  end
@@ -15,15 +15,15 @@ module Vedeu
15
15
  end
16
16
 
17
17
  it 'returns an empty collection when nil or empty' do
18
- Collection.coercer('', TestClass, :key).must_equal([])
18
+ Collection.coercer('', TestClass, :key).must_equal([])
19
19
  end
20
20
 
21
21
  it 'returns an empty collection when nil or empty' do
22
- Collection.coercer([], TestClass, :key).must_equal([])
22
+ Collection.coercer([], TestClass, :key).must_equal([])
23
23
  end
24
24
 
25
25
  it 'returns an empty collection when nil or empty' do
26
- Collection.coercer({}, TestClass, :key).must_equal([])
26
+ Collection.coercer({}, TestClass, :key).must_equal([])
27
27
  end
28
28
 
29
29
  it 'returns a single model in a collection when a String' do
@@ -56,7 +56,9 @@ module Vedeu
56
56
  Colour.new({
57
57
  foreground: '#ff0000',
58
58
  background: '#000000'
59
- }).to_json.must_equal("{\"foreground\":\"#ff0000\",\"background\":\"#000000\"}")
59
+ }).to_json.must_equal(
60
+ "{\"foreground\":\"#ff0000\",\"background\":\"#000000\"}"
61
+ )
60
62
  end
61
63
  end
62
64
 
@@ -90,7 +92,10 @@ module Vedeu
90
92
  Colour.new({
91
93
  foreground: '#ff0000',
92
94
  background: '#000000'
93
- }).as_hash.must_equal({ foreground: '#ff0000', background: '#000000' })
95
+ }).as_hash.must_equal({
96
+ foreground: '#ff0000',
97
+ background: '#000000'
98
+ })
94
99
  end
95
100
  end
96
101
  end