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