Skip to content

Commit 45d1f3f

Browse files
committed
Render function implementation done
1 parent 6f160ce commit 45d1f3f

5 files changed

Lines changed: 96 additions & 27 deletions

File tree

Gemfile.lock

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,44 +17,48 @@ GEM
1717
addressable (2.7.0)
1818
public_suffix (>= 2.0.2, < 5.0)
1919
concurrent-ruby (1.1.7)
20-
crack (0.4.4)
20+
crack (0.4.5)
21+
rexml
2122
diff-lcs (1.4.4)
22-
docile (1.3.2)
23+
docile (1.3.4)
2324
hashdiff (1.0.1)
24-
i18n (1.8.5)
25+
i18n (1.8.7)
2526
concurrent-ruby (~> 1.0)
26-
mini_portile2 (2.4.0)
27+
mini_portile2 (2.5.0)
2728
minitest (5.14.2)
28-
nokogiri (1.10.10)
29-
mini_portile2 (~> 2.4.0)
29+
nokogiri (1.11.0)
30+
mini_portile2 (~> 2.5.0)
31+
racc (~> 1.4)
3032
public_suffix (4.0.6)
31-
rake (13.0.1)
33+
racc (1.5.2)
34+
rake (13.0.3)
35+
rexml (3.2.4)
3236
rspec (3.10.0)
3337
rspec-core (~> 3.10.0)
3438
rspec-expectations (~> 3.10.0)
3539
rspec-mocks (~> 3.10.0)
36-
rspec-core (3.10.0)
40+
rspec-core (3.10.1)
3741
rspec-support (~> 3.10.0)
38-
rspec-expectations (3.10.0)
42+
rspec-expectations (3.10.1)
3943
diff-lcs (>= 1.2.0, < 2.0)
4044
rspec-support (~> 3.10.0)
41-
rspec-mocks (3.10.0)
45+
rspec-mocks (3.10.1)
4246
diff-lcs (>= 1.2.0, < 2.0)
4347
rspec-support (~> 3.10.0)
44-
rspec-support (3.10.0)
45-
simplecov (0.20.0)
48+
rspec-support (3.10.1)
49+
simplecov (0.21.1)
4650
docile (~> 1.1)
4751
simplecov-html (~> 0.11)
4852
simplecov_json_formatter (~> 0.1)
4953
simplecov-html (0.12.3)
5054
simplecov_json_formatter (0.1.2)
5155
tzinfo (2.0.4)
5256
concurrent-ruby (~> 1.0)
53-
webmock (3.10.0)
57+
webmock (3.11.0)
5458
addressable (>= 2.3.6)
5559
crack (>= 0.3.2)
5660
hashdiff (>= 0.4.0, < 2.0.0)
57-
yard (0.9.25)
61+
yard (0.9.26)
5862
zeitwerk (2.4.2)
5963

6064
PLATFORMS
@@ -69,4 +73,4 @@ DEPENDENCIES
6973
yard
7074

7175
BUNDLED WITH
72-
2.1.4
76+
1.17.2

lib/contentstack_utils.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
1+
$LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
2+
13
require 'contentstack_utils/version'
24
require 'contentstack_utils/utils'

lib/contentstack_utils/model/options.rb

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,30 @@
44
module ContentstackUtils
55
module Model
66
class Options < Interface::Rendarable
7-
def render_option(embeddedObject, metadata)
7+
8+
def initialize(entry)
9+
@entry = entry
10+
end
11+
12+
def entry
13+
@entry
14+
end
15+
16+
def render_option(embeddedObject, metadata)
17+
renderString = ''
818
case metadata.style_type
919
when 'block'
10-
"<div><p>#{embeddedObject['title'] || embeddedObject['uid']}</p><p>Content type: <span>#{embeddedObject['_content_type_uid']}</span></p></div>"
20+
renderString = "<div><p>#{embeddedObject['title'] || embeddedObject['uid']}</p><p>Content type: <span>#{embeddedObject['_content_type_uid']}</span></p></div>"
1121
when 'inline'
12-
"<span>#{embeddedObject["title"] || embeddedObject["uid"]}</span>";
22+
renderString = "<span>#{embeddedObject["title"] || embeddedObject["uid"]}</span>";
1323
when 'link'
14-
"<a href='#{(metadata.attributes["href"] ? metadata.attributes["href"].value : nil) || embeddedObject["url"] || embeddedObject["title"] || embeddedObject["uid"]}'>#{(metadata.text && metadata.text != '' ? metadata.text : (embeddedObject["title"] || embeddedObject["uid"]))}</a>";
24+
renderString = "<a href='#{(metadata.attributes["href"] ? metadata.attributes["href"].value : nil) || embeddedObject["url"] || embeddedObject["title"] || embeddedObject["uid"]}'>#{(metadata.text && metadata.text != '' ? metadata.text : (embeddedObject["title"] || embeddedObject["uid"]))}</a>";
1525
when 'display'
16-
"<img src='#{(metadata.attributes["href"] ? metadata.attributes["href"].value : nil)|| embeddedObject["url"]}' alt='#{(metadata.attributes["alt"] ? metadata.attributes["alt"].value : (embeddedObject["title"] || embeddedObject["filename"] || embeddedObject["uid"]))}' />";
26+
renderString = "<img src='#{(metadata.attributes["href"] ? metadata.attributes["href"].value : nil)|| embeddedObject["url"]}' alt='#{(metadata.attributes["alt"] ? metadata.attributes["alt"].value : (embeddedObject["title"] || embeddedObject["filename"] || embeddedObject["uid"]))}' />";
1727
when 'download'
18-
"<a href='#{(metadata.attributes["href"] ? metadata.attributes["href"].value : nil) || embeddedObject["url"]}'>#{(metadata.text && metadata.text != '' ? metadata.text : (embeddedObject["filename"] || embeddedObject["title"] || embeddedObject["uid"]))}</a>";
19-
else
20-
''
28+
renderString = "<a href='#{(metadata.attributes["href"] ? metadata.attributes["href"].value : nil) || embeddedObject["url"]}'>#{(metadata.text && metadata.text != '' ? metadata.text : (embeddedObject["filename"] || embeddedObject["title"] || embeddedObject["uid"]))}</a>";
2129
end
30+
renderString
2231
end
2332
end
2433
end
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
def appendFrame(string)
2+
"<documentfragmentcontainer>#{string}</documentfragmentcontainer>"
3+
end

lib/contentstack_utils/utils.rb

Lines changed: 55 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,63 @@
11
require_relative './model/options.rb'
2+
require_relative './model/metadata.rb'
3+
require_relative './support/helper.rb'
24

35
module ContentstackUtils
4-
def self.renderContent(content, options)
6+
def self.render_content(content, options)
57
if (content.instance_of? Array)
6-
puts 'array'
8+
result = []
9+
content.each do |n|
10+
result.push(render_string(n, options))
11+
end
12+
result
713
elsif content.instance_of? String
8-
puts 'string'
14+
render_string(content, options)
915
end
10-
content
16+
end
17+
18+
private_class_method def self.render_string(string, options)
19+
xml_doc = Nokogiri::HTML(appendFrame(string))
20+
result = xml_doc.xpath('//documentfragmentcontainer').inner_html
21+
findEmbeddedObject(xml_doc).each do |metadata|
22+
object = findObject(metadata, options.entry)
23+
replaceString = ''
24+
if object!= nil && object.length() > 0
25+
replaceString = options.render_option(object[0], metadata)
26+
end
27+
result = result.sub(metadata.element.to_html, replaceString)
28+
end
29+
result
30+
end
31+
32+
private_class_method def self.findEmbeddedObject(doc)
33+
metadataArray = []
34+
doc.xpath('//*[contains(@class, "embedded-asset") or contains(@class, "embedded-entry")]').each do |n|
35+
metadataArray.push(Model::Metadata.new(n))
36+
end
37+
metadataArray
38+
end
39+
40+
private_class_method def self.findObject(metadata, entry)
41+
if entry.has_key? '_embedded_items'
42+
embedItems = entry['_embedded_items']
43+
keys = embedItems.keys
44+
keys.each do |key|
45+
object = embedItems[key].select { |embedObject| embedObject['uid'] == metadata.item_uid }
46+
if object != nil && object.length() > 0
47+
return object
48+
end
49+
end
50+
# elsif entry.has_key? 'embeddedItems'
51+
# if entry['embeddedItems'].has_key? 'edges'
52+
# if entry['embeddedItems']['edges'].has_key? 'node'
53+
# node = entry['embeddedItems']['edges']['node']
54+
# object = node.select { |embedObject| embedObject['uid'] == metadata.item_uid }
55+
# if object != nil && object.length() > 0
56+
# return object
57+
# end
58+
# end
59+
# end
60+
end
61+
return nil
1162
end
1263
end

0 commit comments

Comments
 (0)