scaffold_parser 0.3.0 → 0.4.0
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bf1b6341574db5a6cee39b7973ab1b10455ecd01
|
4
|
+
data.tar.gz: 5c2a38270f517ff5c13e1cd84b803100c1b9b3f3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a065da14a70f8d6ffb6ddc7074f35c9ccc5147af1bc7fa6591c9ba04e14f0623665490a76fb7a65417a3b95c329d646c34d916b5d8e783b4a36a033b9b0d3a1b
|
7
|
+
data.tar.gz: 522b3e5444ef11fb978309fd802c866bfe499f39f603e702c349f7425e7e6b418a3896da82b47c31d5631dbf90bd21db384b2f799e86318a93d1ebbb6ba6bc8c
|
@@ -60,16 +60,30 @@ module ScaffoldParser
|
|
60
60
|
@raw = raw
|
61
61
|
end
|
62
62
|
|
63
|
+
def attributes
|
64
|
+
raw.attributes
|
65
|
+
end
|
66
|
+
|
63
67
|
private
|
64
68
|
|
65
69
|
def at(locator)
|
66
70
|
return nil if raw.nil?
|
67
71
|
|
68
|
-
raw
|
72
|
+
element = raw.locate(locator.to_s).first
|
73
|
+
|
74
|
+
if element
|
75
|
+
text = WithAttributes.new(element.text)
|
76
|
+
text.attributes = element.attributes
|
77
|
+
text
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def has?(locator)
|
82
|
+
raw.locate(locator).any?
|
69
83
|
end
|
70
84
|
|
71
85
|
def submodel_at(klass, locator)
|
72
|
-
element_xml =
|
86
|
+
element_xml = raw.locate(locator).first
|
73
87
|
|
74
88
|
klass.new(element_xml) if element_xml
|
75
89
|
end
|
@@ -77,27 +91,10 @@ module ScaffoldParser
|
|
77
91
|
def array_of_at(klass, locator)
|
78
92
|
return EMPTY_ARRAY if raw.nil?
|
79
93
|
|
80
|
-
elements = raw.
|
81
|
-
if elements.is_a?(Hash) || elements.is_a?(String)
|
82
|
-
elements = [elements]
|
83
|
-
end
|
84
|
-
|
85
|
-
elements.map do |raw|
|
86
|
-
klass.new(raw)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
def all(locator)
|
91
|
-
return EMPTY_ARRAY if raw.nil?
|
92
|
-
|
93
|
-
result = raw[locator]
|
94
|
+
elements = raw.locate([*locator].join('/'))
|
94
95
|
|
95
|
-
|
96
|
-
|
97
|
-
elsif result.is_a? Array
|
98
|
-
result
|
99
|
-
else
|
100
|
-
EMPTY_ARRAY
|
96
|
+
elements.map do |element|
|
97
|
+
klass.new(element)
|
101
98
|
end
|
102
99
|
end
|
103
100
|
end
|
@@ -109,11 +106,11 @@ module ScaffoldParser
|
|
109
106
|
<<~TEMPLATE
|
110
107
|
module Builders
|
111
108
|
module BaseBuilder
|
112
|
-
attr_accessor :
|
109
|
+
attr_accessor :name, :data
|
113
110
|
|
114
|
-
def initialize(
|
115
|
-
@
|
116
|
-
@
|
111
|
+
def initialize(name, data = {})
|
112
|
+
@name = name
|
113
|
+
@data = data || {}
|
117
114
|
end
|
118
115
|
|
119
116
|
def to_xml
|
@@ -122,6 +119,20 @@ module ScaffoldParser
|
|
122
119
|
|
123
120
|
Ox.dump(doc, with_xml: true)
|
124
121
|
end
|
122
|
+
|
123
|
+
def build_element(name, content)
|
124
|
+
element = Ox::Element.new(name)
|
125
|
+
if content.respond_to? :attributes
|
126
|
+
content.attributes.each { |k, v| element[k] = v }
|
127
|
+
end
|
128
|
+
|
129
|
+
if content.respond_to? :value
|
130
|
+
element << content.value if content.value
|
131
|
+
else
|
132
|
+
element << content if content
|
133
|
+
end
|
134
|
+
element
|
135
|
+
end
|
125
136
|
end
|
126
137
|
end
|
127
138
|
TEMPLATE
|
@@ -33,36 +33,35 @@ module ScaffoldParser
|
|
33
33
|
f.puts
|
34
34
|
|
35
35
|
f.putsi " def builder"
|
36
|
-
f.putsi " root = Ox::Element.new(
|
36
|
+
f.putsi " root = Ox::Element.new(name)"
|
37
|
+
f.putsi " if data.respond_to? :attributes"
|
38
|
+
f.putsi " data.attributes.each { |k, v| root[k] = v }"
|
39
|
+
f.putsi " end"
|
37
40
|
|
41
|
+
f.puts if node.value_nodes.any?
|
38
42
|
node.value_nodes.each do |node|
|
39
|
-
f.
|
40
|
-
f.putsi " if attributes.key? :#{node.to_name.underscore}"
|
41
|
-
f.putsi " element = Ox::Element.new('#{node.to_name}')"
|
42
|
-
f.putsi " element << attributes[:#{node.to_name.underscore}] if attributes[:#{node.to_name.underscore}]"
|
43
|
-
f.putsi " root << element"
|
44
|
-
f.putsi " end"
|
43
|
+
f.putsi " root << build_element('#{node.to_name}', data[:#{node.to_name.underscore}]) if data.key? :#{node.to_name.underscore}"
|
45
44
|
end
|
46
45
|
|
47
46
|
node.submodel_nodes.each do |node|
|
48
47
|
f.puts
|
49
|
-
f.putsi " if
|
50
|
-
f.putsi " root << #{node.to_class_name}.new(
|
48
|
+
f.putsi " if data.key? :#{node.to_name.underscore}"
|
49
|
+
f.putsi " root << #{node.to_class_name}.new('#{node.to_name}', data[:#{node.to_name.underscore}]).builder"
|
51
50
|
f.putsi " end"
|
52
51
|
end
|
53
52
|
|
54
53
|
node.array_nodes.reject { |l| l.list_element.xs_type? }.each do |node|
|
55
54
|
if node.named_list?
|
56
55
|
f.puts
|
57
|
-
f.putsi " if
|
56
|
+
f.putsi " if data.key? :#{node.to_name.underscore}"
|
58
57
|
f.putsi " element = Ox::Element.new('#{node.to_name}')"
|
59
|
-
f.putsi "
|
58
|
+
f.putsi " data[:#{node.to_name.underscore}].each { |i| element << #{node.list_element.to_class_name}.new('#{node.list_element.to_name}', i).builder }"
|
60
59
|
f.putsi " root << element"
|
61
60
|
f.putsi " end"
|
62
61
|
else # simple_list
|
63
62
|
f.puts
|
64
|
-
f.putsi " if
|
65
|
-
f.putsi "
|
63
|
+
f.putsi " if data.key? :#{node.to_name.underscore}"
|
64
|
+
f.putsi " data[:#{node.to_name.underscore}].each { |i| root << #{node.list_element.to_class_name}.new('#{node.list_element.to_name}', i).builder }"
|
66
65
|
f.putsi " end"
|
67
66
|
end
|
68
67
|
end
|
@@ -71,14 +70,14 @@ module ScaffoldParser
|
|
71
70
|
f.puts
|
72
71
|
|
73
72
|
if node.named_list?
|
74
|
-
f.putsi " if
|
73
|
+
f.putsi " if data.key? :#{node.to_name.underscore}"
|
75
74
|
f.putsi " element = Ox::Element.new('#{node.to_name}')"
|
76
|
-
f.putsi "
|
75
|
+
f.putsi " data[:#{node.to_name.underscore}].map { |i| Ox::Element.new('#{node.list_element.to_name}') << i }.each { |i| element << i }"
|
77
76
|
f.putsi " root << element"
|
78
77
|
f.putsi " end"
|
79
78
|
else #simple_list
|
80
|
-
f.putsi " if
|
81
|
-
f.putsi "
|
79
|
+
f.putsi " if data.key? :#{node.to_name.underscore}"
|
80
|
+
f.putsi " data[:#{node.to_name.underscore}].map { |i| Ox::Element.new('#{node.to_name}') << i }.each { |i| root << i }"
|
82
81
|
f.putsi " end"
|
83
82
|
end
|
84
83
|
end
|
@@ -36,7 +36,7 @@ module ScaffoldParser
|
|
36
36
|
at = method.to_name
|
37
37
|
|
38
38
|
f.putsi " def #{method_name}"
|
39
|
-
f.putsi " at
|
39
|
+
f.putsi " at '#{at}'"
|
40
40
|
f.putsi " end"
|
41
41
|
end
|
42
42
|
|
@@ -48,7 +48,7 @@ module ScaffoldParser
|
|
48
48
|
at = method.to_name
|
49
49
|
|
50
50
|
f.putsi " def #{method_name}"
|
51
|
-
f.putsi " submodel_at(#{klass},
|
51
|
+
f.putsi " submodel_at(#{klass}, '#{at}')"
|
52
52
|
f.putsi " end"
|
53
53
|
end
|
54
54
|
|
@@ -57,7 +57,7 @@ module ScaffoldParser
|
|
57
57
|
|
58
58
|
list_element_klass = method.list_element_klass
|
59
59
|
method_name = method.to_name.underscore
|
60
|
-
list_element_at = method.list_element_at.map { |e| "
|
60
|
+
list_element_at = method.list_element_at.map { |e| "'#{e}'" }.join(', ')
|
61
61
|
|
62
62
|
f.putsi " def #{method_name}"
|
63
63
|
f.putsi " array_of_at(#{list_element_klass}, [#{list_element_at}])"
|
@@ -69,7 +69,7 @@ module ScaffoldParser
|
|
69
69
|
|
70
70
|
list_element_klass = method.list_element_klass
|
71
71
|
method_name = method.to_name.underscore
|
72
|
-
list_element_at = method.list_element_at.map { |e| "
|
72
|
+
list_element_at = method.list_element_at.map { |e| "'#{e}'" }.join(', ')
|
73
73
|
|
74
74
|
f.putsi " def #{method_name}"
|
75
75
|
f.putsi " array_of_at(String, [#{list_element_at}])"
|
@@ -79,25 +79,24 @@ module ScaffoldParser
|
|
79
79
|
### to_h method
|
80
80
|
lines = []
|
81
81
|
node.value_nodes.each do |node|
|
82
|
-
lines << "hash[:#{node.to_name.underscore}] = #{node.to_name.underscore} if
|
82
|
+
lines << "hash[:#{node.to_name.underscore}] = #{node.to_name.underscore} if has? '#{node.to_name}'"
|
83
83
|
end
|
84
84
|
|
85
85
|
node.submodel_nodes.each do |node|
|
86
|
-
lines << "hash[:#{node.to_name.underscore}] = #{node.to_name.underscore}.to_h if
|
86
|
+
lines << "hash[:#{node.to_name.underscore}] = #{node.to_name.underscore}.to_h if has? '#{node.to_name}'"
|
87
87
|
end
|
88
88
|
node.array_nodes.reject { |l| l.list_element.xs_type? }.each do |node|
|
89
|
-
lines << "hash[:#{node.to_name.underscore}] = #{node.to_name.underscore}.map(&:to_h) if
|
89
|
+
lines << "hash[:#{node.to_name.underscore}] = #{node.to_name.underscore}.map(&:to_h) if has? '#{node.to_name}'"
|
90
90
|
end
|
91
91
|
node.array_nodes.select { |l| l.list_element.xs_type? }.each do |node|
|
92
|
-
lines << "hash[:#{node.to_name.underscore}] = #{node.to_name.underscore} if
|
92
|
+
lines << "hash[:#{node.to_name.underscore}] = #{node.to_name.underscore} if has? '#{node.to_name}'"
|
93
93
|
end
|
94
94
|
if lines.any?
|
95
95
|
f.puts
|
96
|
-
# lines.last.chop!
|
97
|
-
# first_line = lines.shift
|
98
96
|
|
99
97
|
f.putsi " def to_h"
|
100
|
-
f.putsi " hash = {}"
|
98
|
+
f.putsi " hash = WithAttributes.new({})"
|
99
|
+
f.putsi " hash.attributes = attributes"
|
101
100
|
f.puts
|
102
101
|
|
103
102
|
lines.each do |line|
|
data/scaffold_parser.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scaffold_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Premysl Donat
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-03-
|
11
|
+
date: 2018-03-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|