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 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