xrt 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/xrt/command/extract.rb +1 -1
- data/lib/xrt/parser.rb +20 -3
- data/lib/xrt/statement.rb +11 -0
- data/lib/xrt/syntax.rb +4 -0
- data/lib/xrt/version.rb +1 -1
- data/test/test-command-dump.rb +1 -1
- data/test/test-command-extract.rb +35 -0
- data/test/test-parser.rb +26 -1
- data/test/test-statement.rb +1 -0
- data/test/test-syntax.rb +7 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bd3b9dd012073b47b0a1bf0109540273f16d8f5d
|
4
|
+
data.tar.gz: caf93a2e9702add56ff30b94f8165acf399c0741
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b6276557387abf00c81765fdf85ccb81b7dfa983af136306190a9a603f6141845702e2f21ae3851b3628919466c692fe0be5dcf44fe751c9e4c483a3ced9862
|
7
|
+
data.tar.gz: 18a297a71be188b03114e32e8e4f74e1ed3ad846e198758657b45cbf7b18e45c108a5661be83d2d922b7484262cdc06e02cc4d8d9eee26214ea38ba9497dc1ba
|
data/lib/xrt/command/extract.rb
CHANGED
data/lib/xrt/parser.rb
CHANGED
@@ -27,6 +27,8 @@ module XRT
|
|
27
27
|
break
|
28
28
|
when XRT::Statement::Text
|
29
29
|
node << statement
|
30
|
+
when XRT::Statement::Whitespace
|
31
|
+
node << statement
|
30
32
|
when XRT::Statement::Directive
|
31
33
|
node << statement
|
32
34
|
end
|
@@ -40,16 +42,31 @@ module XRT
|
|
40
42
|
result = []
|
41
43
|
|
42
44
|
while reading.length > 0
|
43
|
-
got = read_directive(reading)
|
44
|
-
|
45
|
+
if got = read_directive(reading)
|
46
|
+
result << got
|
47
|
+
elsif got = read_text(reading)
|
48
|
+
result.concat(split_whitespace(got))
|
49
|
+
else
|
45
50
|
raise "failed to parse #{@source}"
|
46
51
|
end
|
47
|
-
result << got
|
48
52
|
end
|
49
53
|
|
50
54
|
result
|
51
55
|
end
|
52
56
|
|
57
|
+
def split_whitespace(text)
|
58
|
+
prefix, suffix=nil
|
59
|
+
text.sub!(/\A(\s+)/) {|matched|
|
60
|
+
prefix = matched
|
61
|
+
''
|
62
|
+
}
|
63
|
+
text.sub!(/(\s+)\Z/) {|matched|
|
64
|
+
suffix = matched
|
65
|
+
''
|
66
|
+
}
|
67
|
+
[prefix, text, suffix].compact.delete_if{|s| s.empty?}
|
68
|
+
end
|
69
|
+
|
53
70
|
def read_directive source
|
54
71
|
return nil unless source[0...2] == '[%'
|
55
72
|
|
data/lib/xrt/statement.rb
CHANGED
@@ -55,6 +55,12 @@ module XRT
|
|
55
55
|
}.concat(children.map{|child| child.find_blocks }.flatten)
|
56
56
|
end
|
57
57
|
|
58
|
+
def find_block_texts
|
59
|
+
children.select{|child|
|
60
|
+
child.kind_of?(XRT::Statement::Block) || child.kind_of?(XRT::Statement::Text)
|
61
|
+
}.concat(children.map{|child| child.find_block_texts }.flatten)
|
62
|
+
end
|
63
|
+
|
58
64
|
def auto_indent
|
59
65
|
lines = content.split(/\n/)[1..-1]
|
60
66
|
whitespaces = lines.map{|line| line.scan(/^\s+/).first }.compact
|
@@ -76,6 +82,8 @@ module XRT
|
|
76
82
|
XRT::Statement::End.new content
|
77
83
|
elsif syntax.block? content
|
78
84
|
XRT::Statement::Directive.new content
|
85
|
+
elsif syntax.whitespace? content
|
86
|
+
XRT::Statement::Whitespace.new content
|
79
87
|
else
|
80
88
|
XRT::Statement::Text.new content
|
81
89
|
end
|
@@ -112,6 +120,9 @@ module XRT
|
|
112
120
|
class Text < Statement
|
113
121
|
end
|
114
122
|
|
123
|
+
class Whitespace < Statement
|
124
|
+
end
|
125
|
+
|
115
126
|
class Directive < Statement
|
116
127
|
end
|
117
128
|
|
data/lib/xrt/syntax.rb
CHANGED
data/lib/xrt/version.rb
CHANGED
data/test/test-command-dump.rb
CHANGED
@@ -2,7 +2,7 @@ require 'test/unit'
|
|
2
2
|
require 'tmpdir'
|
3
3
|
require 'xrt/command/dump'
|
4
4
|
|
5
|
-
class
|
5
|
+
class TestCommandDump < Test::Unit::TestCase
|
6
6
|
def test_annotate
|
7
7
|
Dir.mktmpdir{|dir|
|
8
8
|
Pathname(dir).join('if1.pm').open('w'){ |f| f.write %q{[% IF 1 %]nested[% END %]} }
|
@@ -31,4 +31,39 @@ class TestCommandExtract < Test::Unit::TestCase
|
|
31
31
|
}, transaction.files)
|
32
32
|
}
|
33
33
|
end
|
34
|
+
|
35
|
+
def test_extract_text
|
36
|
+
Dir.mktmpdir{|dir|
|
37
|
+
templates_dir = Pathname(dir).join('templates')
|
38
|
+
templates_dir.mkdir
|
39
|
+
templates_dir.join('a.html').open('w'){ |f| f.write <<'HTML' }
|
40
|
+
<html>
|
41
|
+
[% a %]
|
42
|
+
<h1>
|
43
|
+
hi
|
44
|
+
</h1>
|
45
|
+
[% b %]
|
46
|
+
</html>
|
47
|
+
HTML
|
48
|
+
|
49
|
+
command = XRT::Command::Extract.new
|
50
|
+
transaction = command.as_transaction(templates_dir.join('a.html').to_s, %q{<h1>}, templates_dir.to_s, '_h1.tt')
|
51
|
+
assert_equal({
|
52
|
+
templates_dir.join('a.html').to_s => <<'HTML',
|
53
|
+
<html>
|
54
|
+
[% a %]
|
55
|
+
[% INCLUDE "_h1.tt" %]
|
56
|
+
[% b %]
|
57
|
+
</html>
|
58
|
+
HTML
|
59
|
+
|
60
|
+
templates_dir.join('_h1.tt').to_s => <<'HTML',
|
61
|
+
<h1>
|
62
|
+
hi
|
63
|
+
</h1>
|
64
|
+
HTML
|
65
|
+
|
66
|
+
}, transaction.files)
|
67
|
+
}
|
68
|
+
end
|
34
69
|
end
|
data/test/test-parser.rb
CHANGED
@@ -24,6 +24,19 @@ class TestParser < Test::Unit::TestCase
|
|
24
24
|
], doc.children
|
25
25
|
end
|
26
26
|
|
27
|
+
def test_document_text_and_whitespace_directive
|
28
|
+
parser = XRT::Parser.new("1 [% 2 %]\n3")
|
29
|
+
doc = parser.document
|
30
|
+
assert doc.kind_of? XRT::Statement::Document
|
31
|
+
assert_equal [
|
32
|
+
XRT::Statement::Text.new('1'),
|
33
|
+
XRT::Statement::Whitespace.new(' '),
|
34
|
+
XRT::Statement::Directive.new('[% 2 %]'),
|
35
|
+
XRT::Statement::Whitespace.new("\n"),
|
36
|
+
XRT::Statement::Text.new('3'),
|
37
|
+
], doc.children
|
38
|
+
end
|
39
|
+
|
27
40
|
def test_document_block
|
28
41
|
parser = XRT::Parser.new('[% IF a %]1[% END %]')
|
29
42
|
doc = parser.document
|
@@ -58,16 +71,28 @@ class TestParser < Test::Unit::TestCase
|
|
58
71
|
end
|
59
72
|
|
60
73
|
def test_read_text
|
74
|
+
assert_equal '', @parser.read_text('')
|
61
75
|
assert_equal 'hi', @parser.read_text('hi')
|
62
76
|
assert_equal 'hi[', @parser.read_text('hi[')
|
63
77
|
assert_equal 'hi', @parser.read_text('hi[%')
|
64
78
|
assert_nil @parser.read_text('[% %]')
|
65
79
|
end
|
66
80
|
|
81
|
+
def test_split_whitespace
|
82
|
+
assert_equal([], @parser.split_whitespace(""))
|
83
|
+
assert_equal([" "], @parser.split_whitespace(" "))
|
84
|
+
assert_equal(["\n"], @parser.split_whitespace("\n"))
|
85
|
+
assert_equal(["hi"], @parser.split_whitespace("hi"))
|
86
|
+
assert_equal(["hi there"], @parser.split_whitespace("hi there"))
|
87
|
+
assert_equal([" ", "hi", " "], @parser.split_whitespace(" hi "))
|
88
|
+
assert_equal([" \n", "hi", "\n "], @parser.split_whitespace(" \nhi\n "))
|
89
|
+
assert_equal(["\n", "xxx", "\n"], @parser.split_whitespace("\nxxx\n"))
|
90
|
+
end
|
91
|
+
|
67
92
|
def test_tokens
|
68
93
|
test_cases = [
|
69
94
|
['<html>', ['<html>']],
|
70
|
-
['a [% b %] c', ['a ', '[% b %]', ' c']],
|
95
|
+
['a [% b %] c', ['a', ' ', '[% b %]', ' ', 'c']],
|
71
96
|
['[% a %] [% b %] [% c %]', ['[% a %]', ' ', '[% b %]', ' ', '[% c %]']],
|
72
97
|
['[% FOR k IN [1, 2, 3] %]', ['[% FOR k IN [1, 2, 3] %]']],
|
73
98
|
[
|
data/test/test-statement.rb
CHANGED
@@ -4,6 +4,7 @@ require 'xrt/statement'
|
|
4
4
|
class TestStatementFactory < Test::Unit::TestCase
|
5
5
|
def test_new_from_string
|
6
6
|
assert XRT::Statement::Factory.new_from_content('hi').kind_of? XRT::Statement::Text
|
7
|
+
assert XRT::Statement::Factory.new_from_content(' ').kind_of? XRT::Statement::Whitespace
|
7
8
|
assert XRT::Statement::Factory.new_from_content('[% foo %]').kind_of? XRT::Statement::Directive
|
8
9
|
assert XRT::Statement::Factory.new_from_content('[% IF 1 %]').kind_of? XRT::Statement::Block
|
9
10
|
assert XRT::Statement::Factory.new_from_content('[% foo IF 1 %]').kind_of? XRT::Statement::Directive
|
data/test/test-syntax.rb
CHANGED
@@ -10,6 +10,13 @@ class TestSyntax < Test::Unit::TestCase
|
|
10
10
|
assert_equal 'foo', @syntax.remove_comment('foo # bar')
|
11
11
|
end
|
12
12
|
|
13
|
+
def test_whitespace?
|
14
|
+
assert @syntax.whitespace? ''
|
15
|
+
assert @syntax.whitespace? ' '
|
16
|
+
assert @syntax.whitespace? " \n"
|
17
|
+
assert_nil @syntax.whitespace? 'a'
|
18
|
+
end
|
19
|
+
|
13
20
|
def test_beginning_block?
|
14
21
|
assert @syntax.beginning_block? '[% IF 1 %]'
|
15
22
|
assert @syntax.beginning_block? '[% if 1 %]'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xrt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- hitode909
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|