slate_serializer 0.1.0 → 0.2.0

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: e7c0aa192fb18f0531d3df4352d3dccf7ec8db7381255b616280fbad341f7ae8
4
- data.tar.gz: 1caa16f6f8bd5a6b278ebe5926388a748e6609a155022a0b7085d6e4f76750a8
3
+ metadata.gz: 516354941eb7b361c8a0caecde0f1c2fbb632e4a0eddbd9357b8c837ee0bfcf9
4
+ data.tar.gz: 201cf1578c19867963fdd6e01dd4ea035bb30ab382ec665e252ee30fc6ff2f83
5
5
  SHA512:
6
- metadata.gz: b9172bda2bef9997675359dd0f13544468ad30cd52528b985b63fca9cb8898e7aec2d34c03f3df5c1a0a8d1224adb28ba661dafaf9083c831918a67801a36fcd
7
- data.tar.gz: 7f696b95baaffec89ec730375e294acb4e37a1e4ed800a1eb705c23a3295946a5894997ab41738276ab7d8e61e2e32fdcc34e5c859a54f2ada9c23fd78e0c999
6
+ metadata.gz: 5bb3f0f0661a972f8611f3fd789bcb724301d5dad998dd90524fc1816d86f3dd26e6b28ebc78b03cd0f4d94bcd536b24ef5af1b84024baf818cec5189b8366ef
7
+ data.tar.gz: 91e690457e2c9f62f33c5bae950a04e2f5494ecbcd605544e7207c0a2a6fd3c2df01e7693ac5fd10a3ad36936262d082273086d9d0419163284d476e6c52161b
@@ -40,7 +40,7 @@ module SlateSerializer
40
40
  # @option options [Array] :inline_elemnts List of inline types
41
41
  # @option options [Array] :mark_elemnts List of mark types
42
42
  def deserializer(html, options = {})
43
- return {} if html.nil?
43
+ return empty_state if html.nil?
44
44
 
45
45
  self.elements = options[:elements] || ELEMENTS
46
46
  self.block_elements = options[:block_elements] || BLOCK_ELEMENTS
@@ -54,6 +54,7 @@ module SlateSerializer
54
54
 
55
55
  {
56
56
  document: {
57
+ object: 'document',
57
58
  nodes: nodes
58
59
  }
59
60
  }
@@ -66,7 +67,7 @@ module SlateSerializer
66
67
  def element_to_node(element)
67
68
  type = convert_name_to_type(element)
68
69
 
69
- nodes = element.children.map do |child|
70
+ nodes = element.children.flat_map do |child|
70
71
  next if child.text.strip == '' && child.type == 'img'
71
72
 
72
73
  if block?(child)
@@ -76,7 +77,7 @@ module SlateSerializer
76
77
  else
77
78
  next if child.text.strip == ''
78
79
 
79
- element_to_text(child)
80
+ element_to_texts(child)
80
81
  end
81
82
  end.compact
82
83
 
@@ -90,8 +91,8 @@ module SlateSerializer
90
91
 
91
92
  def element_to_inline(element)
92
93
  type = convert_name_to_type(element)
93
- nodes = element.children.map do |child|
94
- element_to_text(child)
94
+ nodes = element.children.flat_map do |child|
95
+ element_to_texts(child)
95
96
  end
96
97
 
97
98
  {
@@ -102,29 +103,26 @@ module SlateSerializer
102
103
  }
103
104
  end
104
105
 
105
- def element_to_text(element)
106
- leaves = []
106
+ def element_to_texts(element)
107
+ nodes = []
107
108
  mark = convert_name_to_mark(element.name)
108
109
 
109
110
  if element.class == Nokogiri::XML::Element
110
111
  element.children.each do |child|
111
- leaves << element_to_leave(child, mark)
112
+ nodes << element_to_text(child, mark)
112
113
  end
113
114
  else
114
- leaves << element_to_leave(element)
115
+ nodes << element_to_text(element)
115
116
  end
116
117
 
117
- {
118
- leaves: leaves,
119
- object: 'text'
120
- }
118
+ nodes
121
119
  end
122
120
 
123
- def element_to_leave(element, mark = nil)
121
+ def element_to_text(element, mark = nil)
124
122
  marks = [mark, convert_name_to_mark(element.name)].compact
125
123
  {
126
124
  marks: marks,
127
- object: 'leaf',
125
+ object: 'text',
128
126
  text: element.text
129
127
  }
130
128
  end
@@ -153,6 +151,28 @@ module SlateSerializer
153
151
  def inline?(element)
154
152
  inline_elements.include?(element.name)
155
153
  end
154
+
155
+ def empty_state
156
+ {
157
+ document: {
158
+ object: 'document',
159
+ nodes: [
160
+ {
161
+ data: {},
162
+ object: 'block',
163
+ type: 'paragraph',
164
+ nodes: [
165
+ {
166
+ marks: [],
167
+ object: 'text',
168
+ text: ''
169
+ }
170
+ ]
171
+ }
172
+ ]
173
+ }
174
+ }
175
+ end
156
176
  end
157
177
  end
158
178
  end
@@ -7,7 +7,7 @@ module SlateSerializer
7
7
  # @param text format [String] the text
8
8
  # return [Hash] Slate document
9
9
  def deserializer(text)
10
- return {} if text.nil?
10
+ text = '' if text.nil?
11
11
 
12
12
  lines = split_text_into_lines(text)
13
13
  {
@@ -47,7 +47,7 @@ module SlateSerializer
47
47
  lines.shift(index + 1)
48
48
  end
49
49
 
50
- blocks.reject { |block| block == '' }
50
+ blocks.length == 1 ? blocks : blocks.reject { |block| block == '' }
51
51
  end
52
52
 
53
53
  def convert_lines_into_nodes(lines)
@@ -58,14 +58,8 @@ module SlateSerializer
58
58
  data: {},
59
59
  nodes: [
60
60
  object: 'text',
61
- data: {},
62
- leaves: [
63
- {
64
- object: 'leaf',
65
- text: line,
66
- marks: []
67
- }
68
- ]
61
+ text: line,
62
+ marks: []
69
63
  ]
70
64
  }
71
65
  end
@@ -75,7 +69,7 @@ module SlateSerializer
75
69
  if node[:object] == 'document' || node[:object] == 'block'
76
70
  node[:nodes].map { |n| serialize_node(n, options) }.join(options[:delimiter])
77
71
  else
78
- node[:leaves].map { |l| l[:text] }.join(' ')
72
+ node[:text]
79
73
  end
80
74
  end
81
75
  end
@@ -1,3 +1,3 @@
1
1
  module SlateSerializer
2
- VERSION = '0.1.0'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
@@ -7,7 +7,7 @@ Gem::Specification.new do |spec|
7
7
  spec.version = SlateSerializer::VERSION
8
8
  spec.authors = ['Wesley Stam']
9
9
  spec.email = ['wesley@stam.me']
10
- spec.license = "MIT"
10
+ spec.license = 'MIT'
11
11
 
12
12
  spec.summary = 'Serializer for Slate documents written in Ruby'
13
13
  spec.homepage = 'https://github.com/wesleystam/slate_serializer'
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.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wesley Stam
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-05-09 00:00:00.000000000 Z
11
+ date: 2019-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri