slate_serializer 0.3.0 → 1.0.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 +4 -4
- data/.ruby-version +1 -1
- data/Gemfile.lock +23 -21
- data/README.md +1 -1
- data/lib/slate_serializer/html.rb +39 -7
- data/lib/slate_serializer/version.rb +1 -1
- data/slate_serializer.gemspec +3 -3
- metadata +13 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e0d368c4f9ece2f7c15b7c102c0acc49b1fe67f4e9cc3d1922ab7d7b699f3ce
|
4
|
+
data.tar.gz: 3d07a16a0b6d42a4f28bd57345f8292768d1ac0724ffdd74f7b0f96d6471c47c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd6041f7ff0b33d392cd91433cd30218c46c96d1de2c5567c87cc7b69ca6f268a3572d6212a0d31d5323be78293feaaf021eb645cdc552f8b865f58d0d2c6d14
|
7
|
+
data.tar.gz: 5404eae54b4fe2db6c2037c26c32cd9ac86d12056141df8eab73a0eb7b3a04a46565bdc9ca5693b3bd0db35d37f19dfd6bbca56de5c02dc4ba219a60e0a49910
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
3.0.0
|
data/Gemfile.lock
CHANGED
@@ -1,39 +1,41 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
slate_serializer (0.
|
5
|
-
nokogiri (~> 1.
|
4
|
+
slate_serializer (0.5.1)
|
5
|
+
nokogiri (~> 1.11)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
diff-lcs (1.
|
11
|
-
mini_portile2 (2.
|
12
|
-
nokogiri (1.
|
13
|
-
mini_portile2 (~> 2.
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
rspec-
|
19
|
-
|
20
|
-
rspec-
|
21
|
-
rspec-
|
10
|
+
diff-lcs (1.4.4)
|
11
|
+
mini_portile2 (2.5.1)
|
12
|
+
nokogiri (1.11.5)
|
13
|
+
mini_portile2 (~> 2.5.0)
|
14
|
+
racc (~> 1.4)
|
15
|
+
racc (1.5.2)
|
16
|
+
rake (13.0.3)
|
17
|
+
rspec (3.10.0)
|
18
|
+
rspec-core (~> 3.10.0)
|
19
|
+
rspec-expectations (~> 3.10.0)
|
20
|
+
rspec-mocks (~> 3.10.0)
|
21
|
+
rspec-core (3.10.1)
|
22
|
+
rspec-support (~> 3.10.0)
|
23
|
+
rspec-expectations (3.10.1)
|
22
24
|
diff-lcs (>= 1.2.0, < 2.0)
|
23
|
-
rspec-support (~> 3.
|
24
|
-
rspec-mocks (3.
|
25
|
+
rspec-support (~> 3.10.0)
|
26
|
+
rspec-mocks (3.10.2)
|
25
27
|
diff-lcs (>= 1.2.0, < 2.0)
|
26
|
-
rspec-support (~> 3.
|
27
|
-
rspec-support (3.
|
28
|
+
rspec-support (~> 3.10.0)
|
29
|
+
rspec-support (3.10.2)
|
28
30
|
|
29
31
|
PLATFORMS
|
30
32
|
ruby
|
31
33
|
|
32
34
|
DEPENDENCIES
|
33
|
-
bundler (~>
|
34
|
-
rake (~>
|
35
|
+
bundler (~> 2.2)
|
36
|
+
rake (~> 13.0)
|
35
37
|
rspec (~> 3.0)
|
36
38
|
slate_serializer!
|
37
39
|
|
38
40
|
BUNDLED WITH
|
39
|
-
|
41
|
+
2.2.3
|
data/README.md
CHANGED
@@ -27,7 +27,7 @@ To convert between plain text and Slate document use:
|
|
27
27
|
|
28
28
|
To convert between html and Slate document use:
|
29
29
|
|
30
|
-
$ SlateSerializer::Html.deserializer(
|
30
|
+
$ SlateSerializer::Html.deserializer(html) => { document: {...}}
|
31
31
|
|
32
32
|
## Contributing
|
33
33
|
|
@@ -10,6 +10,7 @@ module SlateSerializer
|
|
10
10
|
'li': 'list-item',
|
11
11
|
'p': 'paragraph',
|
12
12
|
'div': 'paragraph',
|
13
|
+
'ol1': 'ordered-list',
|
13
14
|
'ola': 'alpha-ordered-list',
|
14
15
|
'ol': 'ordered-list',
|
15
16
|
'ul': 'unordered-list',
|
@@ -17,10 +18,13 @@ module SlateSerializer
|
|
17
18
|
'tbody': 'tbody',
|
18
19
|
'tr': 'tr',
|
19
20
|
'td': 'td',
|
20
|
-
'text': 'text'
|
21
|
+
'text': 'text',
|
22
|
+
'hr': 'hr',
|
23
|
+
'figure': 'figure',
|
24
|
+
'figcaption': 'figcaption'
|
21
25
|
}.freeze
|
22
26
|
# Default block types list
|
23
|
-
BLOCK_ELEMENTS = %w[img li p ol ul table tbody tr td].freeze
|
27
|
+
BLOCK_ELEMENTS = %w[figure figcaption hr img li p ol ul table tbody tr td].freeze
|
24
28
|
# Default inline types list
|
25
29
|
INLINE_ELEMENTS = %w[a].freeze
|
26
30
|
# Default mark types list
|
@@ -31,7 +35,7 @@ module SlateSerializer
|
|
31
35
|
}.freeze
|
32
36
|
|
33
37
|
class << self
|
34
|
-
# Convert html to a
|
38
|
+
# Convert html to a Slate document
|
35
39
|
#
|
36
40
|
# @param html format [String] the HTML
|
37
41
|
# @param options [Hash]
|
@@ -60,6 +64,16 @@ module SlateSerializer
|
|
60
64
|
}
|
61
65
|
end
|
62
66
|
|
67
|
+
# Convert html to a Slate document
|
68
|
+
#
|
69
|
+
# @param value format [Hash] the Slate document
|
70
|
+
# @return [String] plain text version of the Slate documnent
|
71
|
+
def serializer(value)
|
72
|
+
return '' unless value.key?(:document)
|
73
|
+
|
74
|
+
serialize_node(value[:document])
|
75
|
+
end
|
76
|
+
|
63
77
|
private
|
64
78
|
|
65
79
|
attr_accessor :elements, :block_elements, :inline_elements, :mark_elements
|
@@ -68,8 +82,6 @@ module SlateSerializer
|
|
68
82
|
type = convert_name_to_type(element)
|
69
83
|
|
70
84
|
nodes = element.children.flat_map do |child|
|
71
|
-
next if child.text.strip == '' && child.type == 'img'
|
72
|
-
|
73
85
|
if block?(child)
|
74
86
|
element_to_node(child)
|
75
87
|
elsif inline?(child)
|
@@ -81,7 +93,7 @@ module SlateSerializer
|
|
81
93
|
end
|
82
94
|
end.compact
|
83
95
|
|
84
|
-
nodes << { marks: [], object: 'text', text: '' } if nodes.empty?
|
96
|
+
nodes << { marks: [], object: 'text', text: '' } if nodes.empty? && type != 'image'
|
85
97
|
|
86
98
|
{
|
87
99
|
data: element.attributes.each_with_object({}) { |a, h| h[a[1].name] = a[1].value },
|
@@ -131,7 +143,7 @@ module SlateSerializer
|
|
131
143
|
|
132
144
|
def convert_name_to_type(element)
|
133
145
|
type = [element.name, element.attributes['type']&.value].compact.join
|
134
|
-
elements[type.to_sym]
|
146
|
+
elements[type.to_sym] || elements[:p]
|
135
147
|
end
|
136
148
|
|
137
149
|
def convert_name_to_mark(name)
|
@@ -175,6 +187,26 @@ module SlateSerializer
|
|
175
187
|
}
|
176
188
|
}
|
177
189
|
end
|
190
|
+
|
191
|
+
def serialize_node(node)
|
192
|
+
if node[:object] == 'document'
|
193
|
+
node[:nodes].map { |n| serialize_node(n) }.join
|
194
|
+
elsif node[:object] == 'block'
|
195
|
+
children = node[:nodes].map { |n| serialize_node(n) }.join
|
196
|
+
|
197
|
+
element = ELEMENTS.find { |_, v| v == node[:type] }[0]
|
198
|
+
data = node[:data].map { |k, v| "#{k}=\"#{v}\"" }
|
199
|
+
|
200
|
+
if %i[ol1 ola].include?(element)
|
201
|
+
data << ["type=\"#{element.to_s[-1]}\""]
|
202
|
+
element = :ol
|
203
|
+
end
|
204
|
+
|
205
|
+
"<#{element}#{!data.empty? ? " #{data.join(' ')}" : ''}>#{children}</#{element}>"
|
206
|
+
else
|
207
|
+
node[:text]
|
208
|
+
end
|
209
|
+
end
|
178
210
|
end
|
179
211
|
end
|
180
212
|
end
|
data/slate_serializer.gemspec
CHANGED
@@ -21,8 +21,8 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
22
|
spec.require_paths = ['lib']
|
23
23
|
|
24
|
-
spec.add_dependency 'nokogiri', '~> 1.
|
25
|
-
spec.add_development_dependency 'bundler', '~>
|
26
|
-
spec.add_development_dependency 'rake', '~>
|
24
|
+
spec.add_dependency 'nokogiri', '~> 1.11'
|
25
|
+
spec.add_development_dependency 'bundler', '~> 2.2'
|
26
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
27
27
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
28
28
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slate_serializer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wesley Stam
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-05-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -16,42 +16,42 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.11'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
26
|
+
version: '1.11'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '2.2'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '2.2'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '13.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '13.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '3.0'
|
69
|
-
description:
|
69
|
+
description:
|
70
70
|
email:
|
71
71
|
- wesley@stam.me
|
72
72
|
executables: []
|
@@ -92,7 +92,7 @@ homepage: https://github.com/wesleystam/slate_serializer
|
|
92
92
|
licenses:
|
93
93
|
- MIT
|
94
94
|
metadata: {}
|
95
|
-
post_install_message:
|
95
|
+
post_install_message:
|
96
96
|
rdoc_options: []
|
97
97
|
require_paths:
|
98
98
|
- lib
|
@@ -107,8 +107,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
107
107
|
- !ruby/object:Gem::Version
|
108
108
|
version: '0'
|
109
109
|
requirements: []
|
110
|
-
rubygems_version: 3.
|
111
|
-
signing_key:
|
110
|
+
rubygems_version: 3.2.3
|
111
|
+
signing_key:
|
112
112
|
specification_version: 4
|
113
113
|
summary: Serializer for Slate documents written in Ruby
|
114
114
|
test_files: []
|