dato 0.7.18 → 0.8.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/TODO.md +28 -0
- data/lib/dato/json_api_serializer.rb +9 -7
- data/lib/dato/local/field_type/structured_text.rb +69 -0
- data/lib/dato/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9777e0d266657c2dffa3e6651de719c8e24728e311bcb6ed745bc6a7a70d927a
|
4
|
+
data.tar.gz: 4d54c4e69249b7d3a30f9c289afe93f8f242c6026f8a62d7e6ae0e18ca8b8eb2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 99432305cdb85e390e2435913840f7d2c6a7bf93e7f9b1bfe9eb2b7c87a99da18ecad696f8f73704fc3776f2799206161fc8b9174b5c2aedb0e74efae34fbe48
|
7
|
+
data.tar.gz: 8539feabd9684b8c3f8824da200ab28527072468914dd8cbfe25117807bd835250043f22348c0259ed3257781bf3ca9149512b963a78637b4f9e36b9b093485c
|
data/TODO.md
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
```ruby
|
2
|
+
StructuredTextRenderer.new(
|
3
|
+
foo.content,
|
4
|
+
adapter: Adapter.new(
|
5
|
+
render_text: lambda do |text|
|
6
|
+
text.gsub(/this/, "that")
|
7
|
+
end,
|
8
|
+
render_fragment: lambda do |children|
|
9
|
+
children.join("")
|
10
|
+
end,
|
11
|
+
render_node: lambda do |tagname, attrs, children|
|
12
|
+
# we could ActionView::Helpers::TagHelper
|
13
|
+
content_tag(tagname, children, attrs)
|
14
|
+
end,
|
15
|
+
)
|
16
|
+
custom_rules: {
|
17
|
+
heading: lambda do |node, children, adapter|
|
18
|
+
adapter.render_node("h#{node[:level] + 1}", {}, children)
|
19
|
+
end
|
20
|
+
},
|
21
|
+
render_link_to_record: lambda do |record, children, adapter|
|
22
|
+
end,
|
23
|
+
render_inline_record: lambda do |record, adapter|
|
24
|
+
end,
|
25
|
+
render_block: lambda do |record, adapter|
|
26
|
+
end
|
27
|
+
)
|
28
|
+
```
|
@@ -89,13 +89,15 @@ module Dato
|
|
89
89
|
|
90
90
|
def attributes(resource)
|
91
91
|
if type == 'item'
|
92
|
-
return resource.keys.
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
92
|
+
return resource.keys.reject do |key|
|
93
|
+
%i[
|
94
|
+
item_type
|
95
|
+
id
|
96
|
+
created_at
|
97
|
+
updated_at
|
98
|
+
creator
|
99
|
+
].include?(key.to_sym)
|
100
|
+
end
|
99
101
|
end
|
100
102
|
|
101
103
|
link_attributes['properties'].keys.map(&:to_sym)
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Dato
|
4
|
+
module Local
|
5
|
+
module FieldType
|
6
|
+
class StructuredText
|
7
|
+
def self.parse(value, repo)
|
8
|
+
new(value, repo)
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize(value, repo)
|
12
|
+
@value = value
|
13
|
+
@repo = repo
|
14
|
+
end
|
15
|
+
|
16
|
+
def value
|
17
|
+
@value
|
18
|
+
end
|
19
|
+
|
20
|
+
def blocks
|
21
|
+
find_all_nodes("block").map do |node|
|
22
|
+
@repo.find(node["item"])
|
23
|
+
end.uniq
|
24
|
+
end
|
25
|
+
|
26
|
+
def links
|
27
|
+
find_all_nodes(["inlineItem", "itemLink"]).map do |node|
|
28
|
+
@repo.find(node["item"])
|
29
|
+
end.uniq
|
30
|
+
end
|
31
|
+
|
32
|
+
def find_all_nodes(types)
|
33
|
+
if value.nil?
|
34
|
+
return []
|
35
|
+
end
|
36
|
+
|
37
|
+
types = Array(types)
|
38
|
+
result = []
|
39
|
+
|
40
|
+
visit(value["document"]) do |node|
|
41
|
+
if node.is_a?(Hash) && types.include?(node["type"])
|
42
|
+
result << node
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
result
|
47
|
+
end
|
48
|
+
|
49
|
+
def visit(node, &block)
|
50
|
+
if node.is_a?(Hash) && node["children"].is_a?(Array)
|
51
|
+
node["children"].each do |child|
|
52
|
+
visit(child, &block)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
block.call(node)
|
57
|
+
end
|
58
|
+
|
59
|
+
def to_hash(max_depth = 3, current_depth = 0)
|
60
|
+
{
|
61
|
+
value: value,
|
62
|
+
links: links.map { |item| item.to_hash(max_depth, current_depth) },
|
63
|
+
blocks: blocks.map { |item| item.to_hash(max_depth, current_depth) },
|
64
|
+
}
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
data/lib/dato/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dato
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stefano Verna
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -380,6 +380,7 @@ files:
|
|
380
380
|
- LICENSE.txt
|
381
381
|
- README.md
|
382
382
|
- Rakefile
|
383
|
+
- TODO.md
|
383
384
|
- bin/console
|
384
385
|
- bin/rspec
|
385
386
|
- bin/setup
|
@@ -427,6 +428,7 @@ files:
|
|
427
428
|
- lib/dato/local/field_type/seo.rb
|
428
429
|
- lib/dato/local/field_type/slug.rb
|
429
430
|
- lib/dato/local/field_type/string.rb
|
431
|
+
- lib/dato/local/field_type/structured_text.rb
|
430
432
|
- lib/dato/local/field_type/text.rb
|
431
433
|
- lib/dato/local/field_type/theme.rb
|
432
434
|
- lib/dato/local/field_type/upload_id.rb
|