vedeu 0.4.3 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/lib/vedeu/api.rb +3 -1
  3. data/lib/vedeu/application.rb +1 -1
  4. data/lib/vedeu/bindings.rb +68 -101
  5. data/lib/vedeu/cursor/cursor.rb +1 -1
  6. data/lib/vedeu/cursor/move_cursor.rb +77 -1
  7. data/lib/vedeu/cursor/toggle_cursor.rb +2 -0
  8. data/lib/vedeu/distributed/all.rb +7 -0
  9. data/lib/vedeu/distributed/client.rb +23 -11
  10. data/lib/vedeu/distributed/server.rb +8 -0
  11. data/lib/vedeu/distributed/subprocess.rb +0 -24
  12. data/lib/vedeu/distributed/uri.rb +1 -8
  13. data/lib/vedeu/dsl/all.rb +3 -0
  14. data/lib/vedeu/dsl/components/all.rb +4 -4
  15. data/lib/vedeu/dsl/components/geometry.rb +2 -0
  16. data/lib/vedeu/dsl/components/keymap.rb +14 -3
  17. data/lib/vedeu/dsl/group.rb +69 -0
  18. data/lib/vedeu/dsl/interface.rb +9 -8
  19. data/lib/vedeu/dsl/shared/text.rb +3 -1
  20. data/lib/vedeu/events/event.rb +2 -2
  21. data/lib/vedeu/input/keymap.rb +1 -1
  22. data/lib/vedeu/models/geometry.rb +1 -1
  23. data/lib/vedeu/models/group.rb +24 -10
  24. data/lib/vedeu/models/view/lines.rb +1 -0
  25. data/lib/vedeu/output/all.rb +6 -1
  26. data/lib/vedeu/output/border.rb +1 -1
  27. data/lib/vedeu/{support → output}/esc.rb +0 -0
  28. data/lib/vedeu/output/foreground.rb +1 -1
  29. data/lib/vedeu/output/html_char.rb +2 -0
  30. data/lib/vedeu/output/html_renderer.rb +6 -0
  31. data/lib/vedeu/output/output.rb +21 -0
  32. data/lib/vedeu/{support → output}/refresh.rb +1 -1
  33. data/lib/vedeu/output/renderer.rb +3 -0
  34. data/lib/vedeu/{support → output}/text.rb +0 -0
  35. data/lib/vedeu/output/virtual_terminal.rb +2 -0
  36. data/lib/vedeu/support/all.rb +0 -7
  37. data/lib/vedeu/support/coercions.rb +7 -4
  38. data/lib/vedeu/support/terminal.rb +1 -1
  39. data/lib/vedeu/support/trace.rb +1 -1
  40. data/lib/vedeu/support/visible.rb +1 -1
  41. data/test/lib/vedeu/cursor/move_cursor_test.rb +60 -1
  42. data/test/lib/vedeu/distributed/client_test.rb +21 -2
  43. data/test/lib/vedeu/dsl/group_test.rb +52 -0
  44. data/test/lib/vedeu/models/group_test.rb +11 -4
  45. data/test/lib/vedeu/{support → output}/esc_test.rb +0 -0
  46. data/test/lib/vedeu/{support → output}/refresh_test.rb +0 -0
  47. data/test/lib/vedeu/{support → output}/text_test.rb +0 -0
  48. data/test/test_helper.rb +2 -0
  49. data/vedeu.gemspec +2 -1
  50. metadata +28 -24
  51. data/lib/vedeu/output/writer.rb +0 -44
  52. data/lib/vedeu/support/console.rb +0 -90
  53. data/lib/vedeu/support/node.rb +0 -51
  54. data/lib/vedeu/support/read.rb +0 -66
  55. data/lib/vedeu/support/write.rb +0 -86
  56. data/test/lib/vedeu/output/writer_test.rb +0 -32
  57. data/test/lib/vedeu/support/console_test.rb +0 -138
  58. data/test/lib/vedeu/support/read_test.rb +0 -86
  59. data/test/lib/vedeu/support/write_test.rb +0 -158
@@ -3,6 +3,7 @@ require 'vedeu/models/collection'
3
3
  module Vedeu
4
4
 
5
5
  # A collection of {Vedeu::Line} instances.
6
+ #
6
7
  class Lines < Vedeu::Model::Collection
7
8
  end # Lines
8
9
 
@@ -1,3 +1,5 @@
1
+ require 'vedeu/output/esc'
2
+
1
3
  require 'vedeu/output/translator'
2
4
  require 'vedeu/output/background'
3
5
  require 'vedeu/output/foreground'
@@ -8,17 +10,20 @@ require 'vedeu/output/compositor'
8
10
 
9
11
  require 'vedeu/output/presentation'
10
12
  require 'vedeu/output/style'
13
+ require 'vedeu/output/text'
11
14
  require 'vedeu/output/position_index'
12
15
  require 'vedeu/output/index_position'
13
16
  require 'vedeu/output/virtual_buffer'
14
17
  require 'vedeu/output/html_char'
15
18
  require 'vedeu/output/html_renderer'
19
+ require 'vedeu/output/refresh'
20
+
16
21
  require 'vedeu/output/renderer'
17
22
  require 'vedeu/output/output'
23
+
18
24
  require 'vedeu/output/viewport'
19
25
  require 'vedeu/output/virtual_terminal'
20
26
  require 'vedeu/output/wordwrap'
21
- require 'vedeu/output/writer'
22
27
 
23
28
  module Vedeu
24
29
  end # Vedeu
@@ -1,4 +1,4 @@
1
- require 'vedeu/dsl/components/border'
1
+ require 'vedeu/dsl/components/all'
2
2
 
3
3
  module Vedeu
4
4
 
File without changes
@@ -1,6 +1,6 @@
1
1
  require 'vedeu/configuration/configuration'
2
2
  require 'vedeu/output/translator'
3
- require 'vedeu/support/esc'
3
+ require 'vedeu/output/esc'
4
4
 
5
5
  module Vedeu
6
6
 
@@ -2,6 +2,8 @@ require 'vedeu/support/common'
2
2
 
3
3
  module Vedeu
4
4
 
5
+ # Represents a {Vedeu::Char} as a HTML table cell.
6
+ #
5
7
  class HTMLChar
6
8
 
7
9
  include Vedeu::Common
@@ -1,5 +1,7 @@
1
1
  module Vedeu
2
2
 
3
+ # Renders a {Vedeu::VirtualBuffer} or {Vedeu::Output} as a HTML table.
4
+ #
3
5
  class HTMLRenderer
4
6
 
5
7
  # @param output [Array<Array<Vedeu::Char>>]
@@ -25,6 +27,9 @@ module Vedeu
25
27
  Template.parse(self, template)
26
28
  end
27
29
 
30
+ # Writes the parsed template to a file (at the given path) and returns the
31
+ # contents.
32
+ #
28
33
  # @param path [String]
29
34
  # @return [String]
30
35
  def to_file(path = file_path)
@@ -53,6 +58,7 @@ module Vedeu
53
58
 
54
59
  attr_reader :output
55
60
 
61
+ # @return [String]
56
62
  def template
57
63
  File.dirname(__FILE__) + '/templates/html_renderer.vedeu'
58
64
  end
@@ -4,6 +4,14 @@ module Vedeu
4
4
  #
5
5
  class Output
6
6
 
7
+ # Clears the area defined by the interface.
8
+ #
9
+ # @return [Array|String]
10
+ # @see #initialize
11
+ def self.clear(interface)
12
+ new(interface).clear
13
+ end
14
+
7
15
  # Writes content (the provided interface object with associated lines,
8
16
  # streams, colours and styles) to the area defined by the interface.
9
17
  #
@@ -21,6 +29,19 @@ module Vedeu
21
29
  @interface = interface
22
30
  end
23
31
 
32
+ # Clear the view and send to the terminal.
33
+ #
34
+ # @return [Array]
35
+ def clear
36
+ if Vedeu::Configuration.drb?
37
+ Vedeu.trigger(:_drb_store_output_, virtual_clear)
38
+
39
+ HTMLRenderer.to_file(VirtualBuffer.retrieve)
40
+ end
41
+
42
+ Terminal.output(Renderer.render(virtual_clear))
43
+ end
44
+
24
45
  # Send the view to the terminal.
25
46
  #
26
47
  # @return [Array]
@@ -15,7 +15,7 @@ module Vedeu
15
15
 
16
16
  # Refresh the interface which is currently focussed.
17
17
  #
18
- # @return [|NilClass]
18
+ # @return [Array|ModelNotFound|NilClass]
19
19
  def by_focus
20
20
  by_name(Vedeu.focus) if Vedeu.focus
21
21
  end
@@ -1,5 +1,8 @@
1
1
  module Vedeu
2
2
 
3
+ # Converts a grid of {Vedeu::Char} objects into a stream of escape sequences
4
+ # and content suitable for a terminal.
5
+ #
3
6
  class Renderer
4
7
 
5
8
  # @param output [Array<Array<Vedeu::Char>>]
File without changes
@@ -1,5 +1,7 @@
1
1
  module Vedeu
2
2
 
3
+ # Represents a {Vedeu::Terminal} view.
4
+ #
3
5
  class VirtualTerminal
4
6
 
5
7
  attr_accessor :renderer
@@ -1,17 +1,10 @@
1
1
  require 'vedeu/support/coercions'
2
2
  require 'vedeu/support/common'
3
- require 'vedeu/support/console'
4
- require 'vedeu/support/esc'
5
- require 'vedeu/support/log'
6
- require 'vedeu/support/read'
7
- require 'vedeu/support/refresh'
8
3
  require 'vedeu/support/sentence'
9
4
  require 'vedeu/support/template'
10
5
  require 'vedeu/support/terminal'
11
- require 'vedeu/support/text'
12
6
  require 'vedeu/support/trace'
13
7
  require 'vedeu/support/visible'
14
- require 'vedeu/support/write'
15
8
 
16
9
  module Vedeu
17
10
  end # Vedeu
@@ -10,13 +10,16 @@ module Vedeu
10
10
 
11
11
  # Produces new objects of the correct class from the value, ignores objects
12
12
  # that have already been coerced.
13
+ #
14
+ # @param value [Object|NilClass]
15
+ # @return [Object]
13
16
  def coerce(value)
14
- if value.is_a?(self)
15
- value
16
-
17
- elsif value.nil?
17
+ if value.nil?
18
18
  new
19
19
 
20
+ elsif value.is_a?(self)
21
+ value
22
+
20
23
  else
21
24
  new(value)
22
25
 
@@ -1,5 +1,5 @@
1
1
  require 'vedeu/configuration/configuration'
2
- require 'vedeu/support/esc'
2
+ require 'vedeu/output/esc'
3
3
  require 'vedeu/support/log'
4
4
 
5
5
  module Vedeu
@@ -1,5 +1,5 @@
1
1
  require 'vedeu/configuration/configuration'
2
- require 'vedeu/support/esc'
2
+ require 'vedeu/output/esc'
3
3
  require 'vedeu/support/log'
4
4
 
5
5
  module Vedeu
@@ -1,4 +1,4 @@
1
- require 'vedeu/support/esc'
1
+ require 'vedeu/output/esc'
2
2
 
3
3
  module Vedeu
4
4
 
@@ -6,7 +6,14 @@ module Vedeu
6
6
 
7
7
  let(:described) { Vedeu::MoveCursor }
8
8
  let(:instance) { described.new(cursor, interface, dy, dx) }
9
- let(:cursor) { Cursor.new({ name: 'MoveCursor', ox: ox, oy: oy, state: :show, x: x, y: y }) }
9
+ let(:cursor) {
10
+ Cursor.new({ name: 'MoveCursor',
11
+ ox: ox,
12
+ oy: oy,
13
+ state: :show,
14
+ x: x,
15
+ y: y })
16
+ }
10
17
  let(:ox) { 0 }
11
18
  let(:oy) { 0 }
12
19
  let(:x) { 1 }
@@ -56,6 +63,58 @@ module Vedeu
56
63
  it { instance.instance_variable_get('@dx').must_equal(dx) }
57
64
  end
58
65
 
66
+ describe '.by_name' do
67
+ let(:direction) { :down }
68
+ let(:_name) { 'manganese' }
69
+
70
+ before do
71
+ Vedeu.interfaces.reset
72
+ Vedeu.cursors.reset
73
+
74
+ interface_with_border
75
+ Vedeu::Cursor.new({ name: 'manganese', oy: 2, ox: 3, x: 8, y: 7 }).store
76
+ end
77
+
78
+ subject { MoveCursor.by_name(direction, _name) }
79
+
80
+ it { subject.must_be_instance_of(Vedeu::Cursor) }
81
+
82
+ context 'when the name is not specified' do
83
+ let(:_name) {}
84
+
85
+ end
86
+
87
+ context 'when the name is specified' do
88
+ let(:_name) { 'manganese' }
89
+
90
+ context 'and the direction is down' do
91
+ let(:direction) { :down }
92
+
93
+ it { subject.oy.must_equal(3) }
94
+ end
95
+ context 'and the direction is left' do
96
+ let(:direction) { :left }
97
+
98
+ it { subject.ox.must_equal(2) }
99
+ end
100
+ context 'and the direction is right' do
101
+ let(:direction) { :right }
102
+
103
+ it { subject.ox.must_equal(4) }
104
+ end
105
+ context 'and the direction is up' do
106
+ let(:direction) { :up }
107
+
108
+ it { subject.oy.must_equal(1) }
109
+ end
110
+
111
+ context 'but the interface does not exist' do
112
+ before { Vedeu.interfaces.stubs(:find).with(_name).returns(nil) }
113
+
114
+ end
115
+ end
116
+ end
117
+
59
118
  describe '.down' do
60
119
  subject { MoveCursor.down(cursor, interface) }
61
120
 
@@ -10,6 +10,13 @@ module Vedeu
10
10
  let(:instance) { described.new(uri) }
11
11
  let(:uri) { 'druby://localhost:21420' }
12
12
 
13
+ before { $stdout.stubs(:puts) }
14
+
15
+ describe 'alias methods' do
16
+ it { instance.must_respond_to(:read) }
17
+ it { instance.must_respond_to(:write) }
18
+ end
19
+
13
20
  describe '#initialize' do
14
21
  it { instance.must_be_instance_of(described) }
15
22
  it { instance.instance_variable_get('@uri').must_equal('druby://localhost:21420') }
@@ -17,6 +24,10 @@ module Vedeu
17
24
 
18
25
  describe '.connect' do
19
26
  subject { described.connect(uri) }
27
+
28
+ context 'when the DRb server is not available or not enabled' do
29
+ it { subject.must_equal(:drb_connection_error) }
30
+ end
20
31
  end
21
32
 
22
33
  describe '#input' do
@@ -24,17 +35,25 @@ module Vedeu
24
35
 
25
36
  subject { instance.input(data) }
26
37
 
27
- it { instance.must_respond_to(:read) }
38
+ context 'when the DRb server is not available or not enabled' do
39
+ it { subject.must_equal(:drb_connection_error) }
40
+ end
28
41
  end
29
42
 
30
43
  describe '#output' do
31
44
  subject { instance.output }
32
45
 
33
- it { instance.must_respond_to(:write) }
46
+ context 'when the DRb server is not available or not enabled' do
47
+ it { subject.must_equal(:drb_connection_error) }
48
+ end
34
49
  end
35
50
 
36
51
  describe '#shutdown' do
37
52
  subject { instance.shutdown }
53
+
54
+ context 'when the DRb server is not available or not enabled' do
55
+ it { subject.must_equal(:drb_connection_error) }
56
+ end
38
57
  end
39
58
 
40
59
  end # Client
@@ -0,0 +1,52 @@
1
+ require 'test_helper'
2
+
3
+ module Vedeu
4
+
5
+ module DSL
6
+
7
+ describe Group do
8
+
9
+ let(:described) { Vedeu::DSL::Group }
10
+ let(:instance) { described.new(model, client) }
11
+ let(:model) { Vedeu::Group.new }
12
+ let(:client) {}
13
+ let(:group_name) { 'main_screen' }
14
+
15
+ describe '#initialize' do
16
+ it { instance.must_be_instance_of(Vedeu::DSL::Group) }
17
+ it { instance.instance_variable_get('@model').must_equal(model) }
18
+ it { instance.instance_variable_get('@client').must_equal(client) }
19
+ end
20
+
21
+ describe '.group' do
22
+ context 'when the block is given' do
23
+ subject {
24
+ described.group(group_name) do
25
+ # ...
26
+ end
27
+ }
28
+
29
+ end
30
+
31
+ context 'when the block is not given' do
32
+ subject { described.group(group_name) }
33
+
34
+ it { proc { subject }.must_raise(InvalidSyntax) }
35
+ end
36
+ end
37
+
38
+ describe '#add' do
39
+ subject {
40
+ described.group(group_name) do
41
+ add('editor_interface')
42
+ end
43
+ }
44
+
45
+ it { subject.must_be_instance_of(Vedeu::Group) }
46
+ end
47
+
48
+ end # Group
49
+
50
+ end # DSL
51
+
52
+ end # Vedeu
@@ -4,13 +4,20 @@ module Vedeu
4
4
 
5
5
  describe Group do
6
6
 
7
- let(:described) { Vedeu::Group }
8
- let(:instance) { described.new(_name, members) }
9
- let(:_name) { 'organics' }
10
- let(:members) { ['carbon', 'nitrogen', 'oxygen'] }
7
+ let(:described) { Vedeu::Group }
8
+ let(:instance) { described.new(attributes) }
9
+ let(:attributes) {
10
+ {
11
+ name: _name,
12
+ members: members,
13
+ }
14
+ }
15
+ let(:_name) { 'organics' }
16
+ let(:members) { ['carbon', 'nitrogen', 'oxygen'] }
11
17
 
12
18
  describe '#initialize' do
13
19
  it { instance.must_be_instance_of(Group) }
20
+ it { instance.instance_variable_get('@attributes').must_be_instance_of(Hash) }
14
21
  it { instance.instance_variable_get('@members').must_equal(members) }
15
22
  it { instance.instance_variable_get('@name').must_equal(_name) }
16
23
  it { instance.instance_variable_get('@repository').must_equal(Vedeu.groups) }
File without changes
File without changes
File without changes
data/test/test_helper.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'simplecov'
2
+ require 'simplecov-console'
2
3
  require 'pry'
3
4
  require 'minitest/autorun'
4
5
  require 'minitest/pride' unless ENV['NO_COLOR']
@@ -7,6 +8,7 @@ require 'minitest/hell'
7
8
  # GC.disable # uncomment to remove ~20ms from test run speed
8
9
 
9
10
  SimpleCov.start do
11
+ formatter SimpleCov::Formatter::Console
10
12
  command_name 'MiniTest::Spec'
11
13
  add_filter '/test/'
12
14
  add_group 'api', 'vedeu/api'