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 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,2 @@
1
+ require_relative 'xml-dsl/compile'
2
+ require_relative 'xml-dsl/function'
@@ -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
@@ -0,0 +1,9 @@
1
+ require 'block-is-array'
2
+
3
+ require_relative 'compile'
4
+
5
+
6
+
7
+ def xml &block
8
+ XML::from_array block_is_array(&block)
9
+ 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: []