contentful_converter 0.0.1.21 → 0.0.1.22
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/contentful_converter/nodes/base.rb +12 -4
- data/lib/contentful_converter/nodes/hyperlink.rb +4 -4
- data/lib/contentful_converter/nokogiri_builder.rb +1 -1
- data/lib/contentful_converter/stack.rb +21 -0
- data/lib/contentful_converter/tree_cloner.rb +44 -32
- data/lib/contentful_converter/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff50772e7cf3d60d6587047360fd5f2aa1f87eb3e7110c731b1fdf6862b70cbe
|
4
|
+
data.tar.gz: 82c222abe96c9d3ac4ccf0e1e0f95f9dcc9d1e11dfda819bbd24737007b3512b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f9bc85b65ff13a53db3bc3c21050287799c273be82778d2a9378f18bc83d8b80af3d5b3b7f43db921743c66e3bd5125b26ce14252586c13b40938222f072d165
|
7
|
+
data.tar.gz: 37a4f52a6b29bad99ddfc7618b5706e6ae80512633993daf179b4f79810db54925b5c324bd6911015e5ce5b60abf5717e362ef6139091d51084984cda395d1d2
|
@@ -13,7 +13,7 @@ module ContentfulConverter
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def add_content(node)
|
16
|
-
@content << node
|
16
|
+
@content << (node.needs_p_wrapping? ? wrap_in_p(node) : node)
|
17
17
|
end
|
18
18
|
|
19
19
|
def to_h(params = options)
|
@@ -25,9 +25,9 @@ module ContentfulConverter
|
|
25
25
|
|
26
26
|
def needs_p_wrapping?
|
27
27
|
if parent.nil? ||
|
28
|
-
|
29
|
-
|
30
|
-
|
28
|
+
parent&.class == Nodes::Header ||
|
29
|
+
parent&.class == Nodes::Paragraph ||
|
30
|
+
parent&.class == Nodes::Hyperlink
|
31
31
|
|
32
32
|
return false
|
33
33
|
end
|
@@ -37,6 +37,14 @@ module ContentfulConverter
|
|
37
37
|
|
38
38
|
private
|
39
39
|
|
40
|
+
attr_writer :content
|
41
|
+
|
42
|
+
def wrap_in_p(node)
|
43
|
+
p_node = Nodes::Paragraph.new(nil, node.parent)
|
44
|
+
p_node.content << node
|
45
|
+
p_node
|
46
|
+
end
|
47
|
+
|
40
48
|
def value
|
41
49
|
nokogiri_node.content
|
42
50
|
end
|
@@ -9,15 +9,15 @@ module ContentfulConverter
|
|
9
9
|
private
|
10
10
|
|
11
11
|
def type
|
12
|
-
return 'asset-hyperlink' if !
|
12
|
+
return 'asset-hyperlink' if !uri_scheme? && uri_extension?
|
13
13
|
return 'entry-hyperlink' unless uri_scheme?
|
14
14
|
|
15
15
|
'hyperlink'
|
16
16
|
end
|
17
17
|
|
18
18
|
def options
|
19
|
-
return hyperlink_entry_option(
|
20
|
-
return hyperlink_entry_option(
|
19
|
+
return hyperlink_entry_option('Asset') if !uri_scheme? && uri_extension?
|
20
|
+
return hyperlink_entry_option('Entry') unless uri_scheme?
|
21
21
|
|
22
22
|
hyperlink_option
|
23
23
|
end
|
@@ -32,7 +32,7 @@ module ContentfulConverter
|
|
32
32
|
target: {
|
33
33
|
sys: {
|
34
34
|
id: parsed_link.to_s.split('.').first,
|
35
|
-
type:
|
35
|
+
type: 'Link',
|
36
36
|
linkType: type
|
37
37
|
}
|
38
38
|
}
|
@@ -18,7 +18,7 @@ module ContentfulConverter
|
|
18
18
|
# nokogiri creates a tree that is accepted by contentful.
|
19
19
|
def transform(html)
|
20
20
|
doc = create_nokogiri_fragment(html)
|
21
|
-
find_nodes(doc, [
|
21
|
+
find_nodes(doc, %w[section div]).each { |elem| elem.name = 'p' }
|
22
22
|
find_nodes(doc, 'img').each { |elem| elem.name = 'embed' }
|
23
23
|
doc.to_html
|
24
24
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ContentfulConverter
|
4
|
+
class Stack
|
5
|
+
def initialize
|
6
|
+
@stack = []
|
7
|
+
end
|
8
|
+
|
9
|
+
def add(value)
|
10
|
+
@stack << value
|
11
|
+
end
|
12
|
+
|
13
|
+
def pop
|
14
|
+
@stack.pop
|
15
|
+
end
|
16
|
+
|
17
|
+
def any?
|
18
|
+
@stack.any?
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -1,53 +1,65 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'contentful_converter/node_builder'
|
4
|
+
require 'contentful_converter/stack'
|
4
5
|
|
5
6
|
module ContentfulConverter
|
6
7
|
class TreeCloner
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
return NodeBuilder.build(nokogiri_fragment).to_h
|
11
|
-
end
|
12
|
-
|
13
|
-
traverse_and_clone(nokogiri_fragment).to_h
|
8
|
+
def self.nokogiri_to_rich_text(nokogiri_fragment)
|
9
|
+
if nokogiri_fragment.children.empty?
|
10
|
+
return NodeBuilder.build(nokogiri_fragment).to_h
|
14
11
|
end
|
15
12
|
|
16
|
-
|
13
|
+
new(nokogiri_fragment, Stack.new, Stack.new).traverse_and_clone
|
14
|
+
end
|
17
15
|
|
18
|
-
|
19
|
-
|
16
|
+
def initialize(nokogiri_fragment, noko_stack, rich_stack)
|
17
|
+
@nokogiri_fragment = nokogiri_fragment
|
18
|
+
@noko_stack = noko_stack
|
19
|
+
@rich_stack = rich_stack
|
20
|
+
end
|
20
21
|
|
21
|
-
|
22
|
-
|
22
|
+
def traverse_and_clone
|
23
|
+
initialize_stacks
|
23
24
|
|
24
|
-
|
25
|
-
|
26
|
-
|
25
|
+
while noko_stack.any?
|
26
|
+
noko_node = noko_stack.pop
|
27
|
+
rich_node = rich_stack.pop
|
27
28
|
|
28
|
-
|
29
|
+
next unless noko_node.children.any?
|
29
30
|
|
30
|
-
|
31
|
-
|
31
|
+
children_traversal(noko_node, rich_node)
|
32
|
+
end
|
32
33
|
|
33
|
-
|
34
|
-
|
35
|
-
rich_node.add_content(wrap_in_paragraph(rich_child_node))
|
36
|
-
end
|
37
|
-
end
|
34
|
+
rich_root_node.to_h
|
35
|
+
end
|
38
36
|
|
39
|
-
|
40
|
-
end
|
37
|
+
private
|
41
38
|
|
42
|
-
|
43
|
-
node.needs_p_wrapping? ? p_wrapper(node) : node
|
44
|
-
end
|
39
|
+
attr_reader :noko_stack, :rich_stack, :nokogiri_fragment
|
45
40
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
41
|
+
def initialize_stacks
|
42
|
+
noko_stack.add(nokogiri_fragment)
|
43
|
+
rich_stack.add(rich_root_node)
|
44
|
+
end
|
45
|
+
|
46
|
+
def rich_root_node
|
47
|
+
@rich_root_node ||= NodeBuilder.build(nokogiri_fragment)
|
48
|
+
end
|
49
|
+
|
50
|
+
def children_traversal(noko_node, rich_node)
|
51
|
+
noko_node.children.each do |child_node|
|
52
|
+
rich_child_node = NodeBuilder.build(child_node, rich_node)
|
53
|
+
|
54
|
+
add_to_stacks(child_node, rich_child_node)
|
55
|
+
|
56
|
+
rich_node.add_content(rich_child_node)
|
50
57
|
end
|
51
58
|
end
|
59
|
+
|
60
|
+
def add_to_stacks(noko_node, rich_node)
|
61
|
+
noko_stack.add(noko_node)
|
62
|
+
rich_stack.add(rich_node)
|
63
|
+
end
|
52
64
|
end
|
53
65
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: contentful_converter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.1.
|
4
|
+
version: 0.0.1.22
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Avlonitis
|
@@ -65,6 +65,7 @@ files:
|
|
65
65
|
- lib/contentful_converter/nodes/underline.rb
|
66
66
|
- lib/contentful_converter/nodes/unordered_list.rb
|
67
67
|
- lib/contentful_converter/nokogiri_builder.rb
|
68
|
+
- lib/contentful_converter/stack.rb
|
68
69
|
- lib/contentful_converter/tree_cloner.rb
|
69
70
|
- lib/contentful_converter/version.rb
|
70
71
|
homepage: https://github.com/AlexAvlonitis/contentful_converter
|