xml-dsl 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: []