lwe_slate_serializer 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +2 -4
- data/lib/slate_serializer/html.rb +23 -27
- data/lib/slate_serializer/plain.rb +3 -3
- data/lib/slate_serializer/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2232f5ea035bdc85504bffb221a0c38e84cabfd0949ac8a8ac55081f2cc5cf88
|
4
|
+
data.tar.gz: 7ecd1b0fcd9dda1504b994c48a68a5d4e8645fef602211dc740eeddd4fb3b265
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7b7f0477c6fc57ef813eba6cfe450dfe76a102b14899d4d0c04084ec88263f3239634c8608e07e2d1ab20a8a5748c519cc86cd07af764aecdd6a5cb8d553da5d
|
7
|
+
data.tar.gz: e703ac2a14f633e3462fe8fd65f57c7e6fd2651667f5fc06f60ffb61ea8eb5f1423b9faea5be41f3944776207c4f1ef0f428a2569ffba0b51ab95654b67bbe7b
|
data/Gemfile.lock
CHANGED
@@ -1,16 +1,14 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
lwe_slate_serializer (1.0.
|
4
|
+
lwe_slate_serializer (1.0.1)
|
5
5
|
nokogiri (~> 1.11)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
10
|
diff-lcs (1.4.4)
|
11
|
-
|
12
|
-
nokogiri (1.13.3)
|
13
|
-
mini_portile2 (~> 2.8.0)
|
11
|
+
nokogiri (1.13.3-x86_64-darwin)
|
14
12
|
racc (~> 1.4)
|
15
13
|
racc (1.6.0)
|
16
14
|
rake (13.0.3)
|
@@ -58,6 +58,10 @@ module SlateSerializer
|
|
58
58
|
"<#{tag}/>"
|
59
59
|
end
|
60
60
|
),
|
61
|
+
SerializerHandler.new(elements: ['text']),
|
62
|
+
SerializerHandler.new(elements: ['i', 'em'], mark: 'italic'),
|
63
|
+
SerializerHandler.new(elements: ['u'], mark: 'underline'),
|
64
|
+
SerializerHandler.new(elements: ['strong', 'b'], mark: 'bold'),
|
61
65
|
SerializerHandler.new(elements: ['a'], node: 'link'),
|
62
66
|
SerializerHandler.new(elements: ['ol'], node: 'ordered-list'),
|
63
67
|
SerializerHandler.new(elements: ['ul'], node: 'unordered-list'),
|
@@ -76,23 +80,28 @@ module SlateSerializer
|
|
76
80
|
|
77
81
|
def register_handler(handler)
|
78
82
|
handler.elements.each do |element|
|
79
|
-
@element_register[element] = handler
|
83
|
+
@element_register[element] = handler
|
80
84
|
end
|
81
85
|
@node_register[handler.node] = handler.serialize
|
82
86
|
@tag_register[handler.node] = handler.elements.first
|
83
87
|
end
|
84
88
|
|
85
89
|
class SerializerHandler
|
86
|
-
attr_reader :elements, :node, :serialize, :deserialize
|
90
|
+
attr_reader :elements, :node, :serialize, :deserialize, :mark
|
87
91
|
|
88
|
-
def initialize(elements: [], node: nil, serialize: nil, deserialize: nil)
|
92
|
+
def initialize(elements: [], node: nil, mark: nil, serialize: nil, deserialize: nil)
|
89
93
|
@elements = elements
|
90
94
|
@node = node
|
95
|
+
@mark = mark
|
91
96
|
@serialize = serialize || ->(node, children, tag) do
|
92
97
|
"<#{tag}>#{children}</#{tag}>"
|
93
98
|
end
|
94
|
-
@deserialize = deserialize || ->(
|
95
|
-
|
99
|
+
@deserialize = deserialize || ->(children, element) do
|
100
|
+
if @node
|
101
|
+
{ type: @node, children: children }
|
102
|
+
else
|
103
|
+
children
|
104
|
+
end
|
96
105
|
end
|
97
106
|
end
|
98
107
|
end
|
@@ -119,7 +128,7 @@ module SlateSerializer
|
|
119
128
|
return empty_state if html.nil? || html == ''
|
120
129
|
|
121
130
|
html = html.gsub('<br>', "\n")
|
122
|
-
Nokogiri::HTML.fragment(html).elements.
|
131
|
+
Nokogiri::HTML.fragment(html).elements.flat_map do |element|
|
123
132
|
element_to_node(element)
|
124
133
|
end
|
125
134
|
end
|
@@ -130,12 +139,12 @@ module SlateSerializer
|
|
130
139
|
|
131
140
|
def element_to_node(element, marks = [])
|
132
141
|
handler = @element_register[element.name]
|
133
|
-
|
134
|
-
mark = convert_name_to_mark(element.name)
|
135
|
-
marks = [*marks, mark].compact
|
142
|
+
marks = [*marks, handler.mark].compact
|
136
143
|
|
137
144
|
children = element.children.flat_map do |child|
|
138
|
-
if
|
145
|
+
if handler.mark
|
146
|
+
element_to_text(child, marks)
|
147
|
+
elsif child.text?
|
139
148
|
next if child.text.strip == ''
|
140
149
|
element_to_text(child, marks)
|
141
150
|
else
|
@@ -146,30 +155,17 @@ module SlateSerializer
|
|
146
155
|
children << { text: '' } if children.empty?
|
147
156
|
|
148
157
|
return children unless handler
|
149
|
-
handler.call(
|
158
|
+
handler.deserialize.call(children, element)
|
150
159
|
end
|
151
160
|
|
152
|
-
# def element_to_texts(element)
|
153
|
-
# nodes = []
|
154
|
-
# mark = convert_name_to_mark(element.name)
|
155
|
-
|
156
|
-
# if element.class == Nokogiri::XML::Element
|
157
|
-
# element.children.each do |child|
|
158
|
-
# nodes << element_to_text(child, mark)
|
159
|
-
# end
|
160
|
-
# else
|
161
|
-
# nodes << element_to_text(element)
|
162
|
-
# end
|
163
|
-
|
164
|
-
# nodes
|
165
|
-
# end
|
166
|
-
|
167
161
|
def element_to_text(element, marks = [])
|
162
|
+
handler = @element_register[element.name]
|
163
|
+
marks = [*marks, handler.mark].compact
|
168
164
|
{
|
169
165
|
text: element.text
|
170
166
|
}.tap do |text|
|
171
167
|
marks.compact.each do |m|
|
172
|
-
text[m
|
168
|
+
text[m.to_sym] = true
|
173
169
|
end
|
174
170
|
end
|
175
171
|
end
|
@@ -58,10 +58,10 @@ module SlateSerializer
|
|
58
58
|
end
|
59
59
|
|
60
60
|
def serialize_node(node, options)
|
61
|
-
if node[
|
62
|
-
node[
|
61
|
+
if node["text"]
|
62
|
+
node["text"]
|
63
63
|
else
|
64
|
-
node[
|
64
|
+
node["children"].map { |n| serialize_node(n, options) }.join(options[:delimiter])
|
65
65
|
end
|
66
66
|
end
|
67
67
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lwe_slate_serializer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wesley Stam
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2022-
|
12
|
+
date: 2022-04-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|