lwe_slate_serializer 1.0.1 → 1.0.2
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 +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
|