vedeu 0.1.0 → 0.1.1
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.
- checksums.yaml +4 -4
- data/Guardfile +1 -1
- data/README.md +13 -0
- data/deps.md +13 -4
- data/lib/vedeu.rb +1 -1
- data/lib/vedeu/models/interface.rb +5 -1
- data/lib/vedeu/output/render_interface.rb +1 -3
- data/lib/vedeu/parsing/erb_parser.rb +43 -0
- data/lib/vedeu/parsing/json_parser.rb +13 -3
- data/lib/vedeu/parsing/menu_parser.rb +7 -12
- data/lib/vedeu/parsing/raw_parser.rb +34 -0
- data/lib/vedeu/parsing/text_adaptor.rb +0 -6
- data/lib/vedeu/parsing/view.rb +46 -0
- data/lib/vedeu/support/events.rb +0 -19
- data/lib/vedeu/support/geometry.rb +66 -46
- data/lib/vedeu/support/helpers.rb +43 -0
- data/lib/vedeu/support/input.rb +2 -0
- data/lib/vedeu/support/queue.rb +0 -12
- data/test/lib/vedeu/parsing/erb_parser_test.rb +154 -0
- data/test/lib/vedeu/parsing/menu_parser_test.rb +9 -0
- data/test/lib/vedeu/parsing/{hash_parser_test.rb → raw_parser_test.rb} +5 -5
- data/test/lib/vedeu/parsing/view_test.rb +38 -0
- data/test/lib/vedeu/support/geometry_test.rb +8 -8
- data/test/lib/vedeu/support/helpers_test.rb +68 -0
- data/test/lib/vedeu/support/queue_test.rb +3 -35
- data/test/lib/vedeu_test.rb +39 -0
- data/test/support/erb/colour.erb +3 -0
- data/test/support/erb/colour_style.erb +1 -0
- data/test/support/erb/style.erb +3 -0
- data/test/support/template.erb +6 -1
- data/vedeu.gemspec +2 -2
- metadata +24 -13
- data/lib/vedeu/output/template.rb +0 -23
- data/lib/vedeu/parsing/hash_parser.rb +0 -68
- data/lib/vedeu/parsing/parser.rb +0 -52
- data/test/lib/vedeu/output/template.rb +0 -21
- data/test/lib/vedeu/parsing/parser_test.rb +0 -31
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'vedeu/support/esc'
|
2
|
+
require 'vedeu/models/colour'
|
3
|
+
|
4
|
+
module Vedeu
|
5
|
+
module Helpers
|
6
|
+
def foreground(value, &block)
|
7
|
+
@output = ''
|
8
|
+
@output << Esc.foreground_colour(value)
|
9
|
+
@output << block.call if block_given?
|
10
|
+
@output
|
11
|
+
end
|
12
|
+
alias_method :fg, :foreground
|
13
|
+
|
14
|
+
def background(value, &block)
|
15
|
+
@output = ''
|
16
|
+
@output << Esc.background_colour(value)
|
17
|
+
@output << block.call if block_given?
|
18
|
+
@output
|
19
|
+
end
|
20
|
+
alias_method :bg, :background
|
21
|
+
|
22
|
+
def colour(attributes = {}, &block)
|
23
|
+
@output = ''
|
24
|
+
@output << Colour.new(attributes).to_s
|
25
|
+
@output << block.call if block_given?
|
26
|
+
@output
|
27
|
+
end
|
28
|
+
|
29
|
+
def style(*value_or_values, &block)
|
30
|
+
@output = ''
|
31
|
+
if value_or_values.one?
|
32
|
+
@output << Esc.string(value_or_values.first)
|
33
|
+
@output << block.call if block_given?
|
34
|
+
else
|
35
|
+
@output << value_or_values.map do |s|
|
36
|
+
Esc.string(s)
|
37
|
+
end.join
|
38
|
+
@output << block.call if block_given?
|
39
|
+
end
|
40
|
+
@output
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/vedeu/support/input.rb
CHANGED
data/lib/vedeu/support/queue.rb
CHANGED
@@ -0,0 +1,154 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'vedeu/parsing/erb_parser'
|
3
|
+
require 'vedeu/support/helpers'
|
4
|
+
|
5
|
+
class UserView
|
6
|
+
def initialize
|
7
|
+
@output = ''
|
8
|
+
end
|
9
|
+
|
10
|
+
def value
|
11
|
+
'Testing Vedeu.'
|
12
|
+
end
|
13
|
+
|
14
|
+
def interface
|
15
|
+
'test'
|
16
|
+
end
|
17
|
+
|
18
|
+
def path
|
19
|
+
'test/support/template.erb'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
module Vedeu
|
24
|
+
describe ERBParser do
|
25
|
+
describe '.parse' do
|
26
|
+
it 'parses the template when the template file was found' do
|
27
|
+
skip
|
28
|
+
parser = ERBParser.parse(UserView.new)
|
29
|
+
parser.must_equal("This is the test template.\n\n\e[38;5;55mTesting Vedeu.\n\e[48;5;226mTesting Vedeu.\n\e[38;5;208m\e[48;5;226mTesting Vedeu.\n\e[4mTesting Vedeu.\n\nSome more content...\n")
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'parses the template when the template file was found' do
|
33
|
+
parser = ERBParser.parse(UserView.new)
|
34
|
+
parser.must_equal(
|
35
|
+
{
|
36
|
+
interfaces: [
|
37
|
+
{
|
38
|
+
name: 'test',
|
39
|
+
lines: [
|
40
|
+
{
|
41
|
+
streams: { text: 'This is the test template.' }
|
42
|
+
}, {
|
43
|
+
streams: { text: '' }
|
44
|
+
}, {
|
45
|
+
streams: { text: "\e[38;5;55mTesting Vedeu." }
|
46
|
+
}, {
|
47
|
+
streams: { text: "\e[48;5;226mTesting Vedeu." }
|
48
|
+
}, {
|
49
|
+
streams: { text: "\e[38;5;208m\e[48;5;226mTesting Vedeu." }
|
50
|
+
}, {
|
51
|
+
streams: { text: "\e[4mTesting Vedeu." }
|
52
|
+
}, {
|
53
|
+
streams: { text: '' }
|
54
|
+
}, {
|
55
|
+
streams: { text: 'Some more content...' }
|
56
|
+
}
|
57
|
+
]
|
58
|
+
}
|
59
|
+
]
|
60
|
+
}
|
61
|
+
)
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'raises an exception when the template file cannot be found' do
|
65
|
+
user_view = UserView.new
|
66
|
+
user_view.stub(:path, '/some/wrong/path/template.erb') do
|
67
|
+
proc { ERBParser.parse(user_view) }.must_raise(Errno::ENOENT)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe 'colour parsing' do
|
72
|
+
it 'parses the template and colour directives within' do
|
73
|
+
user_view = UserView.new
|
74
|
+
user_view.stub(:path, 'test/support/erb/colour.erb') do
|
75
|
+
ERBParser.parse(user_view).must_equal(
|
76
|
+
{
|
77
|
+
interfaces: [
|
78
|
+
{
|
79
|
+
name: 'test',
|
80
|
+
lines: [
|
81
|
+
{
|
82
|
+
streams: {
|
83
|
+
text: "\e[38;5;52mDark red text on default background."
|
84
|
+
}
|
85
|
+
}, {
|
86
|
+
streams: {
|
87
|
+
text: "\e[48;5;201mDefault text on magenta background."
|
88
|
+
}
|
89
|
+
}, {
|
90
|
+
streams: {
|
91
|
+
text: "\e[38;5;196m\e[48;5;17mRed text on dark blue background."
|
92
|
+
}
|
93
|
+
}
|
94
|
+
]
|
95
|
+
}
|
96
|
+
]
|
97
|
+
}
|
98
|
+
)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe 'style parsing' do
|
104
|
+
it 'parses the template and style directives within' do
|
105
|
+
user_view = UserView.new
|
106
|
+
user_view.stub(:path, 'test/support/erb/style.erb') do
|
107
|
+
ERBParser.parse(user_view).must_equal(
|
108
|
+
{
|
109
|
+
interfaces: [
|
110
|
+
{
|
111
|
+
name: 'test',
|
112
|
+
lines: [
|
113
|
+
{
|
114
|
+
streams: { text: 'Empty style leads to nothing.' }
|
115
|
+
}, {
|
116
|
+
streams: { text: "\e[4mUnderlined text." }
|
117
|
+
}, {
|
118
|
+
streams: { text: 'Unknown style leads to nothing.' }
|
119
|
+
}
|
120
|
+
]
|
121
|
+
}
|
122
|
+
]
|
123
|
+
}
|
124
|
+
)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
describe 'colour and style parsing' do
|
130
|
+
it 'parses the template and both colour and style directives within' do
|
131
|
+
user_view = UserView.new
|
132
|
+
user_view.stub(:path, 'test/support/erb/colour_style.erb') do
|
133
|
+
ERBParser.parse(user_view).must_equal(
|
134
|
+
{
|
135
|
+
interfaces: [
|
136
|
+
{
|
137
|
+
name: 'test',
|
138
|
+
lines: [
|
139
|
+
{
|
140
|
+
streams: {
|
141
|
+
text: "\e[38;5;21m\e[4m\e[48;5;17mBlue underline text on dark blue background."
|
142
|
+
}
|
143
|
+
}
|
144
|
+
]
|
145
|
+
}
|
146
|
+
]
|
147
|
+
}
|
148
|
+
)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
require 'test_helper'
|
2
|
-
require 'vedeu/parsing/
|
2
|
+
require 'vedeu/parsing/raw_parser'
|
3
3
|
|
4
4
|
module Vedeu
|
5
|
-
describe
|
5
|
+
describe RawParser do
|
6
6
|
describe '.parse' do
|
7
7
|
it 'returns a Hash when the output is content for multiple interfaces' do
|
8
|
-
|
8
|
+
RawParser.parse({
|
9
9
|
test: 'Some content...',
|
10
10
|
dummy: 'More content...'
|
11
11
|
}).must_equal({
|
@@ -30,7 +30,7 @@ module Vedeu
|
|
30
30
|
end
|
31
31
|
|
32
32
|
it 'returns a Hash when the output is content for a single interface' do
|
33
|
-
|
33
|
+
RawParser.parse({
|
34
34
|
dummy: 'Some content...'
|
35
35
|
}).must_equal({
|
36
36
|
interfaces: [
|
@@ -47,7 +47,7 @@ module Vedeu
|
|
47
47
|
end
|
48
48
|
|
49
49
|
it 'returns a Hash when the output is empty' do
|
50
|
-
|
50
|
+
RawParser.parse({}).must_equal({ interfaces: [] })
|
51
51
|
end
|
52
52
|
end
|
53
53
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'vedeu/parsing/view'
|
3
|
+
|
4
|
+
module Vedeu
|
5
|
+
describe View do
|
6
|
+
describe '.render' do
|
7
|
+
# it 'returns when the type is :erb' do
|
8
|
+
# output = ''
|
9
|
+
# View.render(:erb, output).must_equal('')
|
10
|
+
# end
|
11
|
+
|
12
|
+
# it 'returns when the type is :json' do
|
13
|
+
# output = ''
|
14
|
+
# View.render(:json, output).must_equal('')
|
15
|
+
# end
|
16
|
+
|
17
|
+
# it 'returns when the type is :hash' do
|
18
|
+
# output = ''
|
19
|
+
# View.render(:hash, output).must_equal('')
|
20
|
+
# end
|
21
|
+
|
22
|
+
# it 'returns when the type is :menu' do
|
23
|
+
# output = ''
|
24
|
+
# View.render(:menu, output).must_equal('')
|
25
|
+
# end
|
26
|
+
|
27
|
+
# it 'returns when the type is not set' do
|
28
|
+
# output = ''
|
29
|
+
# View.render(nil, output).must_equal('')
|
30
|
+
# end
|
31
|
+
|
32
|
+
# it 'returns when the type is not recognised' do
|
33
|
+
# output = ''
|
34
|
+
# View.render(:unknown, output).must_equal('')
|
35
|
+
# end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -3,14 +3,6 @@ require 'vedeu/support/geometry'
|
|
3
3
|
|
4
4
|
module Vedeu
|
5
5
|
describe Geometry do
|
6
|
-
it 'raises an exception when the height attribute is not set' do
|
7
|
-
proc { Geometry.new({ width: 18 }) }.must_raise(KeyError)
|
8
|
-
end
|
9
|
-
|
10
|
-
it 'raises an exception when the width attribute is not set' do
|
11
|
-
proc { Geometry.new({ height: 6 }) }.must_raise(KeyError)
|
12
|
-
end
|
13
|
-
|
14
6
|
describe '#origin' do
|
15
7
|
it 'returns the origin for the interface' do
|
16
8
|
geometry = Geometry.new({ width: 5, height: 5, centred: false })
|
@@ -75,6 +67,10 @@ module Vedeu
|
|
75
67
|
end
|
76
68
|
|
77
69
|
describe '#height' do
|
70
|
+
it 'raises an exception when the height attribute is not set' do
|
71
|
+
proc { Geometry.new({ width: 18 }).height }.must_raise(InvalidHeight)
|
72
|
+
end
|
73
|
+
|
78
74
|
it 'raises an exception when the value is less than 1' do
|
79
75
|
geometry = Geometry.new({ height: -6, width: 18 })
|
80
76
|
proc { geometry.height }.must_raise(OutOfBoundsError)
|
@@ -151,6 +147,10 @@ module Vedeu
|
|
151
147
|
end
|
152
148
|
|
153
149
|
describe '#width' do
|
150
|
+
it 'raises an exception when the width attribute is not set' do
|
151
|
+
proc { Geometry.new({ height: 6 }).width }.must_raise(InvalidWidth)
|
152
|
+
end
|
153
|
+
|
154
154
|
it 'raises an exception when the value is less than 1' do
|
155
155
|
geometry = Geometry.new({ height: 6, width: -18 })
|
156
156
|
proc { geometry.width }.must_raise(OutOfBoundsError)
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'vedeu/support/helpers'
|
3
|
+
|
4
|
+
module Vedeu
|
5
|
+
class TestHelpers
|
6
|
+
include Helpers
|
7
|
+
end
|
8
|
+
|
9
|
+
describe Helpers do
|
10
|
+
describe '.foreground' do
|
11
|
+
it 'returns an escape sequence for the specified CSS foreground' do
|
12
|
+
TestHelpers.new.foreground('#a5f500').must_equal("\e[38;5;148m")
|
13
|
+
|
14
|
+
TestHelpers.new.fg('#851500').must_equal("\e[38;5;88m")
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'returns an escape sequence plus interpolation when a block is given' do
|
18
|
+
TestHelpers.new.foreground('#a5f500') { 'Some text' }
|
19
|
+
.must_equal("\e[38;5;148mSome text")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '.background' do
|
24
|
+
it 'returns an escape sequence for the specified CSS background' do
|
25
|
+
TestHelpers.new.background('#2f2f2f').must_equal("\e[48;5;16m")
|
26
|
+
|
27
|
+
TestHelpers.new.bg('#ffffff').must_equal("\e[48;5;231m")
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'returns an escape sequence plus interpolation when a block is given' do
|
31
|
+
TestHelpers.new.background('#2f2f2f') { 'Some text' }
|
32
|
+
.must_equal("\e[48;5;16mSome text")
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '.colour' do
|
37
|
+
it 'returns an escape sequence for the specified CSS colours' do
|
38
|
+
TestHelpers.new.colour({ background: '#2f2f2f', foreground: '#a5ff00' })
|
39
|
+
.must_equal("\e[38;5;154m\e[48;5;16m")
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'returns an escape sequence plus interpolation when a block is given' do
|
43
|
+
TestHelpers.new.colour({ background: '#2f2f2f', foreground: '#a5ff00' }) { 'Some text' }.must_equal("\e[38;5;154m\e[48;5;16mSome text")
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe '.style' do
|
48
|
+
it 'returns an escape sequence for multiple styles' do
|
49
|
+
TestHelpers.new.style('bold', 'underline')
|
50
|
+
.must_equal("\e[1m\e[4m")
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'returns an escape sequence for a style' do
|
54
|
+
TestHelpers.new.style('colour_reset')
|
55
|
+
.must_equal("\e[38;2;39m\e[48;2;49m")
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'returns an empty string for no styles' do
|
59
|
+
TestHelpers.new.style.must_equal('')
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'returns an escape sequence plus interpolation when a block is given' do
|
63
|
+
TestHelpers.new.style('bold', 'underline') { 'Some text' }
|
64
|
+
.must_equal("\e[1m\e[4mSome text")
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -17,8 +17,9 @@ module Vedeu
|
|
17
17
|
end
|
18
18
|
|
19
19
|
describe '.enqueue' do
|
20
|
-
it '
|
21
|
-
Queue.enqueue(:result)
|
20
|
+
it 'stores an item on the queue' do
|
21
|
+
Queue.enqueue(:result)
|
22
|
+
Queue.enqueued?.must_equal(true)
|
22
23
|
end
|
23
24
|
end
|
24
25
|
|
@@ -33,44 +34,11 @@ module Vedeu
|
|
33
34
|
end
|
34
35
|
end
|
35
36
|
|
36
|
-
describe '.entries' do
|
37
|
-
it 'returns an empty collection when the queue is empty' do
|
38
|
-
Queue.entries.must_equal([])
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'returns all the enqueue items when the queue is not empty' do
|
42
|
-
Queue.enqueue(:queued_entry)
|
43
|
-
Queue.entries.must_equal([:queued_entry])
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
describe '.size' do
|
48
|
-
it 'returns the size of the queue when the queue is empty' do
|
49
|
-
Queue.size.must_equal(0)
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'returns the size of the queue when the queue is not empty' do
|
53
|
-
Queue.enqueue(:result).enqueue(:result)
|
54
|
-
Queue.size.must_equal(2)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
37
|
describe '.clear' do
|
59
38
|
it 'returns an empty array' do
|
60
39
|
Queue.enqueue(:result)
|
61
40
|
Queue.reset.must_be_empty
|
62
41
|
end
|
63
42
|
end
|
64
|
-
|
65
|
-
describe '.view' do
|
66
|
-
it 'returns the queue as a String when the queue is empty' do
|
67
|
-
Queue.view.must_equal('[]')
|
68
|
-
end
|
69
|
-
|
70
|
-
it 'returns the queue as a String when the queue is not empty' do
|
71
|
-
Queue.enqueue(:result)
|
72
|
-
Queue.view.must_equal('[:result]')
|
73
|
-
end
|
74
|
-
end
|
75
43
|
end
|
76
44
|
end
|