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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cd6b813d519bd321d72ec19a4c80d3cc8ac0532baf90fdcd1185024c95d119bb
4
- data.tar.gz: 7e88e166f5626372712d92e8a77ec888f3b5b5c09bd7ef2290a7ff2029ef1d56
3
+ metadata.gz: 4e0d368c4f9ece2f7c15b7c102c0acc49b1fe67f4e9cc3d1922ab7d7b699f3ce
4
+ data.tar.gz: 3d07a16a0b6d42a4f28bd57345f8292768d1ac0724ffdd74f7b0f96d6471c47c
5
5
  SHA512:
6
- metadata.gz: 62d37fcfe447100f78f57b22d68ce1b7a934d706f93113a26ed08205f424f92a4390445e60af3a89365af07b02a800a9193ccba4f57d98f3ec71f83ce4f316e7
7
- data.tar.gz: cd516e95d3798be0add160af27bfe7dc263c25b5f03e00dff5235b7626a8e1f45707e0b0db802ab0545a931b0bf1e3fd2a60aa2c1ead4ef871d880f54c514177
6
+ metadata.gz: dd6041f7ff0b33d392cd91433cd30218c46c96d1de2c5567c87cc7b69ca6f268a3572d6212a0d31d5323be78293feaaf021eb645cdc552f8b865f58d0d2c6d14
7
+ data.tar.gz: 5404eae54b4fe2db6c2037c26c32cd9ac86d12056141df8eab73a0eb7b3a04a46565bdc9ca5693b3bd0db35d37f19dfd6bbca56de5c02dc4ba219a60e0a49910
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.6.2
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.2.0)
5
- nokogiri (~> 1.10)
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.3)
11
- mini_portile2 (2.4.0)
12
- nokogiri (1.10.3)
13
- mini_portile2 (~> 2.4.0)
14
- rake (10.5.0)
15
- rspec (3.8.0)
16
- rspec-core (~> 3.8.0)
17
- rspec-expectations (~> 3.8.0)
18
- rspec-mocks (~> 3.8.0)
19
- rspec-core (3.8.0)
20
- rspec-support (~> 3.8.0)
21
- rspec-expectations (3.8.3)
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.8.0)
24
- rspec-mocks (3.8.0)
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.8.0)
27
- rspec-support (3.8.0)
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 (~> 1.17)
34
- rake (~> 10.0)
35
+ bundler (~> 2.2)
36
+ rake (~> 13.0)
35
37
  rspec (~> 3.0)
36
38
  slate_serializer!
37
39
 
38
40
  BUNDLED WITH
39
- 1.17.2
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(text) => { document: {...}}
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 Slare document
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
@@ -1,3 +1,3 @@
1
1
  module SlateSerializer
2
- VERSION = '0.3.0'.freeze
2
+ VERSION = '1.0.0'.freeze
3
3
  end
@@ -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.10'
25
- spec.add_development_dependency 'bundler', '~> 1.17'
26
- spec.add_development_dependency 'rake', '~> 10.0'
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.3.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: 2019-07-03 00:00:00.000000000 Z
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.10'
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.10'
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: '1.17'
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: '1.17'
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: '10.0'
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: '10.0'
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.0.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: []