xml-dsl 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 +7 -0
- data/lib/xml-dsl.rb +2 -0
- data/lib/xml-dsl/compile.rb +53 -0
- data/lib/xml-dsl/function.rb +9 -0
- metadata +74 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7eb81cbd2b1c1d590139187c66fd22b36646e068
|
4
|
+
data.tar.gz: 66c0e0bbb748c13e3bb226154b64f6667e163e68
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: bda07dd3e58a4f6bdca492983557ece9a02f972e5a1721ef9734189b63e19bb2982b88701e71bc2ab853bbab469a6a2b9bac8ab450c2b543ff7a5d051126d4fc
|
7
|
+
data.tar.gz: 9fb3e0924ff5bd0398f4596147c50e5e042c7948a7fd3c641b34d072fd532aac3ad9e1f38462df6817cc83cdf9a2d6a92df8fedfa9a016b92929666c7c704a7c
|
data/lib/xml-dsl.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
module XML
|
6
|
+
def self.from_array array
|
7
|
+
Nokogiri::XML(compile_elems(array), &:noblanks)
|
8
|
+
.to_xml(indent: 4, &:no_declaration)
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.compile_elems elems
|
12
|
+
elems.map do |elem|
|
13
|
+
tagged(*analyze_elem(elem))
|
14
|
+
end.join
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.tagged tag, attrs, body
|
18
|
+
tag = tag.to_s
|
19
|
+
brackets(tag + ' ' + compile_attrs(attrs)) \
|
20
|
+
+ (body.is_a?(String) ? body : compile_elems(body)) \
|
21
|
+
+ brackets('/' + tag)
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.compile_attrs attrs
|
25
|
+
attrs.map do |name, value|
|
26
|
+
"#{name}=#{value.encode(xml: :attr)}"
|
27
|
+
end.join ' '
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.brackets tag
|
31
|
+
'<' + tag + '>'
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.analyze_elem elem
|
35
|
+
[elem[0], get_elem_part(elem, Hash), get_elem_part(elem, [Array, String])]
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.get_elem_part elem, classes
|
39
|
+
raise "Error: An array longer than 3 representing an element is detected.: \
|
40
|
+
#{elem}" if elem.length > 3
|
41
|
+
|
42
|
+
classes = [classes] if classes.is_a? Class
|
43
|
+
in_classes = lambda { |x| classes.map{ |klass| x.is_a? klass }.any? }
|
44
|
+
|
45
|
+
if in_classes.call elem[1]
|
46
|
+
elem[1]
|
47
|
+
elsif in_classes.call elem[2]
|
48
|
+
elem[2]
|
49
|
+
else
|
50
|
+
classes[0].new
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
metadata
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: xml-dsl
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Yota Toyama
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-10-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: block-is-array
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
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'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1'
|
41
|
+
description: XML DSL and generator
|
42
|
+
email: raviqqe@gmail.com
|
43
|
+
executables: []
|
44
|
+
extensions: []
|
45
|
+
extra_rdoc_files: []
|
46
|
+
files:
|
47
|
+
- lib/xml-dsl.rb
|
48
|
+
- lib/xml-dsl/compile.rb
|
49
|
+
- lib/xml-dsl/function.rb
|
50
|
+
homepage: https://github.com/raviqqe/xml-dsl.rb
|
51
|
+
licenses:
|
52
|
+
- Unlicense
|
53
|
+
metadata: {}
|
54
|
+
post_install_message:
|
55
|
+
rdoc_options: []
|
56
|
+
require_paths:
|
57
|
+
- lib
|
58
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
requirements: []
|
69
|
+
rubyforge_project:
|
70
|
+
rubygems_version: 2.5.1
|
71
|
+
signing_key:
|
72
|
+
specification_version: 4
|
73
|
+
summary: XML DSL
|
74
|
+
test_files: []
|