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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2baa0cc32467d4363e5fc73033befb4a9cd79ec838afe6e6753993d2b2c84e86
4
- data.tar.gz: ca07a3ecdce7fadbf02cc5959ab9ca236839900483d68b51f4a5e224915bdc4d
3
+ metadata.gz: 2232f5ea035bdc85504bffb221a0c38e84cabfd0949ac8a8ac55081f2cc5cf88
4
+ data.tar.gz: 7ecd1b0fcd9dda1504b994c48a68a5d4e8645fef602211dc740eeddd4fb3b265
5
5
  SHA512:
6
- metadata.gz: 4526ab16ef29cd444bbfc7db268987fe98f0740e35bd6d5f1a6c4f3dab76582bad196f82b4a0d762e5c031692e6b86c701814cdf3f9e9933188ab84723b308bc
7
- data.tar.gz: 97f0425e77ef5b752aec8b02b5bf071f3e5d424cfd93bc5e45ac37d2267571120c4bb764ad2040207e054a9ecec8d40368f6ece85f3e5a4df6fdd0ff134ae469
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.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
- mini_portile2 (2.8.0)
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.deserialize
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 || ->(node, element) do
95
- node.merge(type: @node)
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.map do |element|
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 child.text?
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({ children: children }, element)
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[:type].to_sym] = true
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[:text]
62
- node[:text]
61
+ if node["text"]
62
+ node["text"]
63
63
  else
64
- node[:children].map { |n| serialize_node(n, options) }.join(options[:delimiter])
64
+ node["children"].map { |n| serialize_node(n, options) }.join(options[:delimiter])
65
65
  end
66
66
  end
67
67
  end
@@ -1,3 +1,3 @@
1
1
  module SlateSerializer
2
- VERSION = '1.0.1'.freeze
2
+ VERSION = '1.0.2'.freeze
3
3
  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.1
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-03-03 00:00:00.000000000 Z
12
+ date: 2022-04-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri