mixml 0.0.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 +15 -0
- data/bin/mixml +78 -0
- data/lib/mixml.rb +2 -0
- data/lib/mixml/document.rb +13 -0
- data/lib/mixml/selection.rb +37 -0
- data/lib/mixml/template/template.rb +19 -0
- data/lib/mixml/template/text.rb +15 -0
- data/lib/mixml/tool.rb +124 -0
- data/lib/mixml/version.rb +3 -0
- metadata +152 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZTM2NTgxNmFjNmU2MDFjMmZjMDU2YjZjOGMwYWQyMjFkZDc0ODIzOA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
ZTBiMzIyZjljMzlhMzk5NzlkMjcxNmRlMjkwOTlmZGZlNzEwNTY3Yw==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ZjJiMzU4YWI2M2YzMmFhYmRjY2JkNmZlMTk5YTk1NzNiZjI0ZWFjOGU5ZmI4
|
10
|
+
ZWQxNDlmMDQ2YjFhNDIwMTgxODI0YWE5YThlODIzOTgyYWVmN2IzYmEzMjhh
|
11
|
+
MjFlOGQyZjBjN2MxMjExMDEyZjhkODRjODVlNjRmNmYwMzFlMDg=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NTQxNjM5NzQyNmExOGI2ZTlhOTgwMDg2MTdmYTE2ZjM4ZGM2N2ZmNzEyMGY4
|
14
|
+
NmQ0OGUyN2NiODM4MGUxNDY5Mzg4ZTg2MWVlODhjYjQxZTQ4ZWY5MTdlYWQx
|
15
|
+
MTMyZTIxYmU0MmEzNTIzYzFiYzc2YjVkYjRkZGRiN2Y3NDQ5MGE=
|
data/bin/mixml
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'rubygems'
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'commander/import'
|
5
|
+
require 'mixml'
|
6
|
+
|
7
|
+
program :name, 'mixml'
|
8
|
+
program :version, Mixml::VERSION
|
9
|
+
program :description, 'XML helper tool'
|
10
|
+
|
11
|
+
$tool = Mixml::Tool.new
|
12
|
+
|
13
|
+
global_option('-p', '--pretty', 'Pretty print output') do |value|
|
14
|
+
$tool.pretty = value
|
15
|
+
end
|
16
|
+
|
17
|
+
global_option('-i', '--inplace', 'Replace the processed files with the new files') do |value|
|
18
|
+
$tool.save = value
|
19
|
+
end
|
20
|
+
|
21
|
+
command :pretty do |c|
|
22
|
+
c.description = 'Pretty print XML files'
|
23
|
+
c.action do |args, options|
|
24
|
+
$tool.pretty = true
|
25
|
+
$tool.work(args)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
command :remove do |c|
|
30
|
+
c.description = 'Remove nodes from the XML documents'
|
31
|
+
c.option '-x', '--xpath STRING', String, 'XPath for nodes to delete'
|
32
|
+
c.action do |args, options|
|
33
|
+
$tool.work(args) do
|
34
|
+
xpath options.xpath do
|
35
|
+
remove
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
command :replace do |c|
|
42
|
+
c.description = 'Replace nodes from the XML documents'
|
43
|
+
c.option '-x', '--xpath STRING', String, 'XPath for nodes to replace'
|
44
|
+
c.option '-t', '--template STRING', String, 'Template to generate the replacement value'
|
45
|
+
c.action do |args, options|
|
46
|
+
$tool.work(args) do
|
47
|
+
xpath options.xpath do
|
48
|
+
replace template options.template
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
command :value do |c|
|
55
|
+
c.description = 'Set node values'
|
56
|
+
c.option '-x', '--xpath STRING', String, 'XPath for nodes to change'
|
57
|
+
c.option '-t', '--template STRING', String, 'Template to generate the replacement value'
|
58
|
+
c.action do |args, options|
|
59
|
+
$tool.work(args) do
|
60
|
+
xpath options.xpath do
|
61
|
+
value template options.template
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
command :execute do |c|
|
68
|
+
c.description = 'Execute script on the XML documents'
|
69
|
+
c.option '-s', '--script STRING', String, 'Script file to execute'
|
70
|
+
c.option '-e', '--expression STRING', String, 'Command to execute'
|
71
|
+
c.action do |args, options|
|
72
|
+
script = options.expression || File.read(options.script)
|
73
|
+
|
74
|
+
$tool.work(args) do
|
75
|
+
execute(script)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
data/lib/mixml.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'mixml/template/text'
|
2
|
+
|
3
|
+
module Mixml
|
4
|
+
class Selection
|
5
|
+
attr_reader :nodes
|
6
|
+
|
7
|
+
def initialize(nodes)
|
8
|
+
@nodes = nodes
|
9
|
+
end
|
10
|
+
|
11
|
+
def remove
|
12
|
+
@nodes.remove
|
13
|
+
end
|
14
|
+
|
15
|
+
def replace(template)
|
16
|
+
if template.is_a?(String) then
|
17
|
+
template = Template::Text.new(template)
|
18
|
+
end
|
19
|
+
|
20
|
+
@nodes.each do |node|
|
21
|
+
value = template.evaluate(node)
|
22
|
+
node.replace(value)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def value(template)
|
27
|
+
if template.is_a?(String) then
|
28
|
+
template = Template::Text.new(template)
|
29
|
+
end
|
30
|
+
|
31
|
+
@nodes.each do |node|
|
32
|
+
value = template.evaluate(node)
|
33
|
+
node.value = value
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'erubis'
|
2
|
+
|
3
|
+
module Mixml
|
4
|
+
module Template
|
5
|
+
class Template
|
6
|
+
attr_reader :text
|
7
|
+
|
8
|
+
def initialize(text)
|
9
|
+
@text = text
|
10
|
+
end
|
11
|
+
|
12
|
+
def evaluate(node)
|
13
|
+
template = Erubis::Eruby.new(@text, :pattern => '{ }')
|
14
|
+
context = {:node => node}
|
15
|
+
template.result(context)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/mixml/tool.rb
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
require 'mixml/selection'
|
2
|
+
require 'mixml/document'
|
3
|
+
require 'mixml/template/template'
|
4
|
+
require 'docile'
|
5
|
+
require 'nokogiri'
|
6
|
+
|
7
|
+
module Mixml
|
8
|
+
class Tool
|
9
|
+
attr_reader :documents
|
10
|
+
attr_accessor :pretty
|
11
|
+
attr_accessor :save
|
12
|
+
attr_accessor :indent
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
@indent = 4
|
16
|
+
@pretty = false
|
17
|
+
@save = false
|
18
|
+
@documents = []
|
19
|
+
end
|
20
|
+
|
21
|
+
def load(*file_names)
|
22
|
+
file_names.flatten.each do |file_name|
|
23
|
+
xml = File.open(file_name, 'r') do |file|
|
24
|
+
Nokogiri::XML(file) do |config|
|
25
|
+
if @pretty then
|
26
|
+
config.default_xml.noblanks
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
@documents << Document.new(file_name, xml)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def save_all
|
35
|
+
options = {}
|
36
|
+
|
37
|
+
if @pretty then
|
38
|
+
options[:indent] = @indent
|
39
|
+
end
|
40
|
+
|
41
|
+
@documents.each do |document|
|
42
|
+
File.open(document.name, 'w') do |file|
|
43
|
+
document.xml.write_xml_to(file, options)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def print_all
|
49
|
+
options = {}
|
50
|
+
|
51
|
+
if @pretty then
|
52
|
+
options[:indent] = @indent
|
53
|
+
end
|
54
|
+
|
55
|
+
@documents.each do |document|
|
56
|
+
if @documents.size > 1 then
|
57
|
+
puts '-' * document.name.length
|
58
|
+
puts document.name
|
59
|
+
puts '-' * document.name.length
|
60
|
+
end
|
61
|
+
puts document.xml.to_xml(options)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def remove_all
|
66
|
+
@documents = []
|
67
|
+
end
|
68
|
+
|
69
|
+
def flush
|
70
|
+
if @save then
|
71
|
+
save_all
|
72
|
+
else
|
73
|
+
print_all
|
74
|
+
end
|
75
|
+
|
76
|
+
remove_all
|
77
|
+
end
|
78
|
+
|
79
|
+
def work(*file_names, &block)
|
80
|
+
remove_all
|
81
|
+
|
82
|
+
file_names.each do |file_name|
|
83
|
+
load(file_name)
|
84
|
+
end
|
85
|
+
|
86
|
+
if not block.nil? then
|
87
|
+
execute(&block)
|
88
|
+
end
|
89
|
+
|
90
|
+
flush
|
91
|
+
end
|
92
|
+
|
93
|
+
def process
|
94
|
+
@documents.each do |document|
|
95
|
+
yield document.xml
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def xpath(query, &block)
|
100
|
+
process do |xml|
|
101
|
+
nodes = xml.xpath(query)
|
102
|
+
selection = Selection.new(nodes)
|
103
|
+
|
104
|
+
if block_given? then
|
105
|
+
Docile.dsl_eval(selection, &block)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def template(text)
|
111
|
+
Template::Template.new(text)
|
112
|
+
end
|
113
|
+
|
114
|
+
def execute(program = nil, &block)
|
115
|
+
if not program.nil? then
|
116
|
+
instance_eval(program)
|
117
|
+
end
|
118
|
+
|
119
|
+
if not block.nil? then
|
120
|
+
Docile.dsl_eval(self, &block)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
metadata
ADDED
@@ -0,0 +1,152 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mixml
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jochen Seeber
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-08-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: commander
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: nokogiri
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.6'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.6'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: erubis
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '2.7'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.7'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: docile
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.1'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.1'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: bundler
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.6'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.6'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ! '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ! '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: qed
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ~>
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '2.9'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ~>
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '2.9'
|
111
|
+
description: XML tool to easily manipulate multiple XML files at once
|
112
|
+
email:
|
113
|
+
- jochen@seeber.me
|
114
|
+
executables:
|
115
|
+
- mixml
|
116
|
+
extensions: []
|
117
|
+
extra_rdoc_files: []
|
118
|
+
files:
|
119
|
+
- bin/mixml
|
120
|
+
- lib/mixml.rb
|
121
|
+
- lib/mixml/document.rb
|
122
|
+
- lib/mixml/selection.rb
|
123
|
+
- lib/mixml/template/template.rb
|
124
|
+
- lib/mixml/template/text.rb
|
125
|
+
- lib/mixml/tool.rb
|
126
|
+
- lib/mixml/version.rb
|
127
|
+
homepage: http://www.noussommesdesoles.net
|
128
|
+
licenses:
|
129
|
+
- AGPL-3.0
|
130
|
+
metadata: {}
|
131
|
+
post_install_message:
|
132
|
+
rdoc_options: []
|
133
|
+
require_paths:
|
134
|
+
- lib
|
135
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - ! '>='
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0'
|
140
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - ! '>='
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0'
|
145
|
+
requirements: []
|
146
|
+
rubyforge_project:
|
147
|
+
rubygems_version: 2.2.2
|
148
|
+
signing_key:
|
149
|
+
specification_version: 4
|
150
|
+
summary: XML tool to easily manipulate multiple XML files at once
|
151
|
+
test_files: []
|
152
|
+
has_rdoc:
|