xembly 0.3 → 0.4
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/features/cli.feature +3 -2
- data/features/step_definitions/steps.rb +2 -2
- data/lib/xembly/directives.rb +5 -9
- data/lib/xembly/set.rb +2 -1
- data/lib/xembly/version.rb +1 -1
- data/lib/xembly.rb +1 -1
- data/test/test_directives.rb +2 -2
- data/test/test_xembler.rb +3 -2
- data/test/test_xembly.rb +1 -1
- 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: 7d13f44b89daed33ea1f5225bb756ee791e25776
|
4
|
+
data.tar.gz: fa87b4c56484867037eb1d5fdf47f60cf2af938b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6ff45d3322febcd673bb205f8689ad8136a04676e64734ff9736ff848f50f0b89980495d57241c0e224f721918b948bd57de1b87a48f5a534eea34c2735c0829
|
7
|
+
data.tar.gz: b0c88f349598911c36247d229363c1adba7095417988b38e81d9f46bbf60e91823bd5188b4c926eb28b76e51171a7d4f252abf77434452975f04fd6d9855e1b6
|
data/features/cli.feature
CHANGED
@@ -25,7 +25,7 @@ Feature: Command Line Processing
|
|
25
25
|
XPATH "/books";
|
26
26
|
ADD "book";
|
27
27
|
ATTR "isbn", "1519166915";
|
28
|
-
SET "Elegant Objects";
|
28
|
+
SET ""Elegant Objects; The Book"";
|
29
29
|
UP;
|
30
30
|
ADD "author";
|
31
31
|
ADDIF "name";
|
@@ -39,7 +39,8 @@ Feature: Command Line Processing
|
|
39
39
|
Then Exit code is zero
|
40
40
|
And Stdout contains "reading text.xml"
|
41
41
|
And XML file "out.xml" matches "/books[count(book) = 3]"
|
42
|
-
And XML file "out.xml" matches "/books/book[@isbn='1519166915'
|
42
|
+
And XML file "out.xml" matches "/books/book[@isbn='1519166915']"
|
43
|
+
And XML file "out.xml" matches "/books/book[.='\"Elegant Objects; The Book\"']"
|
43
44
|
And XML file "out.xml" matches "/books[author='yegor']"
|
44
45
|
And XML file "out.xml" matches "/books[not(garbage)]"
|
45
46
|
|
@@ -66,11 +66,11 @@ Then(/^Stdout is empty$/) do
|
|
66
66
|
fail "STDOUT is not empty:\n#{@stdout}" unless @stdout == ''
|
67
67
|
end
|
68
68
|
|
69
|
-
Then(/^XML file "([^"]+)" matches "([^"]+)"$/) do |file, xpath|
|
69
|
+
Then(/^XML file "([^"]+)" matches "((?:[^"]|\\")+)"$/) do |file, xpath|
|
70
70
|
fail "File #{file} doesn't exit" unless File.exist?(file)
|
71
71
|
xml = Nokogiri::XML.parse(File.read(file))
|
72
72
|
xml.remove_namespaces!
|
73
|
-
if xml.xpath(xpath).empty?
|
73
|
+
if xml.xpath(xpath.gsub(/\\"/, '"')).empty?
|
74
74
|
fail "XML file #{file} doesn't match \"#{xpath}\":\n#{xml}"
|
75
75
|
end
|
76
76
|
end
|
data/lib/xembly/directives.rb
CHANGED
@@ -37,8 +37,8 @@ module Xembly
|
|
37
37
|
def initialize(text)
|
38
38
|
@array = text
|
39
39
|
.strip
|
40
|
-
.
|
41
|
-
.reject(&:
|
40
|
+
.scan(/([A-Za-z]+)(?:\s+"([^"]+)")?(?:\s*,\s*"([^"]+)")*\s*;/)
|
41
|
+
.map { |t| t.reject(&:nil?) }
|
42
42
|
.map { |t| Directives.map(t) }
|
43
43
|
end
|
44
44
|
|
@@ -50,13 +50,9 @@ module Xembly
|
|
50
50
|
@array.length
|
51
51
|
end
|
52
52
|
|
53
|
-
def self.map(
|
54
|
-
|
55
|
-
|
56
|
-
.scan(/"([^"]+)"/)
|
57
|
-
.flatten
|
58
|
-
.map { |a| a.tr('"', '') }
|
59
|
-
case cmd.upcase
|
53
|
+
def self.map(cmd)
|
54
|
+
args = cmd.drop(1)
|
55
|
+
case cmd[0].upcase
|
60
56
|
when 'ADD'
|
61
57
|
Add.new(args[0])
|
62
58
|
when 'ADDIF'
|
data/lib/xembly/set.rb
CHANGED
@@ -20,6 +20,7 @@
|
|
20
20
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
21
|
# SOFTWARE.
|
22
22
|
|
23
|
+
require 'nokogiri'
|
23
24
|
require 'xembly'
|
24
25
|
|
25
26
|
module Xembly
|
@@ -33,7 +34,7 @@ module Xembly
|
|
33
34
|
|
34
35
|
def exec(_, cursor)
|
35
36
|
cursor.each do |node|
|
36
|
-
node.content = @value
|
37
|
+
node.content = Nokogiri::HTML.parse(@value).text
|
37
38
|
Xembly.log.info "node \"#{node.name}\" text content set"
|
38
39
|
end
|
39
40
|
cursor
|
data/lib/xembly/version.rb
CHANGED
data/lib/xembly.rb
CHANGED
@@ -73,7 +73,7 @@ module Xembly
|
|
73
73
|
dirs = File.read(@opts[:dirs])
|
74
74
|
else
|
75
75
|
Xembly.log.info "#{@opts.arguments.length} directives in command line"
|
76
|
-
dirs = @opts.arguments.join('
|
76
|
+
dirs = @opts.arguments.join('')
|
77
77
|
end
|
78
78
|
Xembler.new(Directives.new(dirs)).apply(xml).to_xml
|
79
79
|
end
|
data/test/test_directives.rb
CHANGED
@@ -31,8 +31,8 @@ require 'xembly/directives'
|
|
31
31
|
class TestDirectives < Minitest::Test
|
32
32
|
def test_parses_directives
|
33
33
|
dirs = Xembly::Directives.new(
|
34
|
-
" ADD \"book\"
|
34
|
+
" ADD \"book;"me\";UP;ATTR \"a1\", \"works, for\nme!\"; "
|
35
35
|
)
|
36
|
-
assert dirs.length ==
|
36
|
+
assert dirs.length == 3, 'three directives must be there'
|
37
37
|
end
|
38
38
|
end
|
data/test/test_xembler.rb
CHANGED
@@ -34,7 +34,7 @@ class TestXembler < XeTest
|
|
34
34
|
def test_modifies_xml
|
35
35
|
xembler = Xembly::Xembler.new(
|
36
36
|
Xembly::Directives.new(
|
37
|
-
'XPATH "/books"; ADD "book"; ADD "test"; UP; ADD "title"; SET "hi";'
|
37
|
+
'XPATH "/books"; ADD "book"; ADD "test"; UP; ADD "title"; SET "hi;you";'
|
38
38
|
)
|
39
39
|
)
|
40
40
|
matches(
|
@@ -42,7 +42,8 @@ class TestXembler < XeTest
|
|
42
42
|
[
|
43
43
|
'/*',
|
44
44
|
'/books[count(book)=1]',
|
45
|
-
'/books/book[test and title]'
|
45
|
+
'/books/book[test and title]',
|
46
|
+
'/books/book/title[.="hi;you"]'
|
46
47
|
]
|
47
48
|
)
|
48
49
|
end
|
data/test/test_xembly.rb
CHANGED
@@ -33,7 +33,7 @@ require 'test__helper'
|
|
33
33
|
# License:: MIT
|
34
34
|
class TestXembly < XeTest
|
35
35
|
def test_basic
|
36
|
-
opts = opts(['-x', '/dev/null', 'ADD "books"', 'ADD "book"'])
|
36
|
+
opts = opts(['-x', '/dev/null', 'ADD "books";', 'ADD "book";'])
|
37
37
|
matches(
|
38
38
|
Xembly::Base.new(opts).xml,
|
39
39
|
[
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xembly
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.4'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yegor Bugayenko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|