notion_to_md 2.5.0 → 2.5.1
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/README.md +1 -0
- data/lib/notion_to_md/blocks/block.rb +3 -0
- data/lib/notion_to_md/blocks/builder.rb +3 -0
- data/lib/notion_to_md/blocks/factory.rb +5 -0
- data/lib/notion_to_md/blocks/normalizer.rb +17 -4
- data/lib/notion_to_md/blocks/types.rb +4 -0
- data/lib/notion_to_md/blocks.rb +3 -0
- data/lib/notion_to_md/helpers/yaml_sanitizer.rb +2 -0
- data/lib/notion_to_md/helpers.rb +2 -0
- data/lib/notion_to_md/page.rb +30 -9
- data/lib/notion_to_md/page_property.rb +1 -1
- data/lib/notion_to_md/text.rb +3 -1
- data/lib/notion_to_md/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb8852f9013936bcb404e0779e4930e84831e2db4235b2f0bca8268a9e4edaf0
|
4
|
+
data.tar.gz: d3b9fe50d279cfc14abf20d7f8468d1534b043b73e00ee8123248556c03b43bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e49f3a1d040fb7381e8369c774cff8a31a510909c3e7813c4ba8016085075d613d01808a23a8075d9d9246335eadd1e08347225d287c702c07753df44f3f3af7
|
7
|
+
data.tar.gz: 52806a867c8d24e96e993c4a07741ff13322d14151e0285351c341237a772579f7084913764112f703435e963d598754e326e0c047c29f2d74f4ce6b58f68951
|
data/README.md
CHANGED
@@ -2,7 +2,11 @@
|
|
2
2
|
|
3
3
|
class NotionToMd
|
4
4
|
module Blocks
|
5
|
+
# === NotionToMd::Blocks::Factory
|
6
|
+
#
|
7
|
+
# Factory class to create block instances based on the block type
|
5
8
|
class Factory
|
9
|
+
# rubocop:disable Metrics/MethodLength
|
6
10
|
def self.build(block:, children: [])
|
7
11
|
case block.type.to_sym
|
8
12
|
when :table
|
@@ -19,6 +23,7 @@ class NotionToMd
|
|
19
23
|
Blocks::Block.new(block: block, children: children)
|
20
24
|
end
|
21
25
|
end
|
26
|
+
# rubocop:enable Metrics/MethodLength
|
22
27
|
end
|
23
28
|
end
|
24
29
|
end
|
@@ -2,6 +2,9 @@
|
|
2
2
|
|
3
3
|
class NotionToMd
|
4
4
|
module Blocks
|
5
|
+
# === NotionToMd::Blocks::Normalizer
|
6
|
+
#
|
7
|
+
# This class is responsible for normalizing blocks of the same type
|
5
8
|
class Normalizer
|
6
9
|
# === Parameters
|
7
10
|
# blocks::
|
@@ -27,27 +30,37 @@ class NotionToMd
|
|
27
30
|
new_blocks = []
|
28
31
|
|
29
32
|
normalized_blocks.each do |block|
|
30
|
-
if block
|
33
|
+
if block_of_type?(block, type)
|
31
34
|
blocks_to_normalize << block
|
32
35
|
else
|
33
36
|
# When we encounter a block that is not of the provided type,
|
34
37
|
# we need to normalize the blocks we've collected so far.
|
35
38
|
# Then we add the current block to the new blocks array.
|
36
|
-
# This is
|
37
|
-
new_blocks
|
39
|
+
# This is to keep the order of the blocks as they are in the original array.
|
40
|
+
flush_blocks_to_normalize_into(new_blocks, type)
|
38
41
|
new_blocks << block
|
39
42
|
end
|
40
43
|
end
|
41
44
|
|
42
45
|
# If the last block is the provided type, it won't be added to the new blocks array.
|
43
46
|
# So, we need to normalize the blocks we've collected so far.
|
44
|
-
new_blocks
|
47
|
+
flush_blocks_to_normalize_into(new_blocks, type)
|
45
48
|
|
46
49
|
normalized_blocks.replace(new_blocks)
|
47
50
|
end
|
48
51
|
|
49
52
|
private
|
50
53
|
|
54
|
+
def block_of_type?(block, type)
|
55
|
+
block.type.to_sym == type
|
56
|
+
end
|
57
|
+
|
58
|
+
def flush_blocks_to_normalize_into(new_blocks, type)
|
59
|
+
return if blocks_to_normalize.empty?
|
60
|
+
|
61
|
+
new_blocks << new_block_and_reset_blocks_to_normalize(type)
|
62
|
+
end
|
63
|
+
|
51
64
|
def new_block_and_reset_blocks_to_normalize(type)
|
52
65
|
new_block = new_block_for(type, blocks_to_normalize)
|
53
66
|
@blocks_to_normalize = []
|
data/lib/notion_to_md/blocks.rb
CHANGED
@@ -15,6 +15,9 @@ require_relative './blocks/to_do_list_block'
|
|
15
15
|
require_relative './blocks/to_do_list_item_block'
|
16
16
|
|
17
17
|
class NotionToMd
|
18
|
+
# === NotionToMd::Blocks
|
19
|
+
#
|
20
|
+
# This module is responsible for building Notion blocks.
|
18
21
|
module Blocks
|
19
22
|
# === Parameters
|
20
23
|
# block_id::
|
data/lib/notion_to_md/helpers.rb
CHANGED
data/lib/notion_to_md/page.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class NotionToMd
|
4
|
+
# === NotionToMd::Page
|
5
|
+
#
|
6
|
+
# This class is responsible for representing a Notion page.
|
4
7
|
class Page
|
5
8
|
include Helpers::YamlSanitizer
|
6
9
|
|
@@ -81,17 +84,10 @@ class NotionToMd
|
|
81
84
|
end
|
82
85
|
|
83
86
|
def custom_props
|
84
|
-
@custom_props ||=
|
85
|
-
name = prop.first
|
86
|
-
value = prop.last # Notion::Messages::Message
|
87
|
-
type = value.type
|
88
|
-
|
89
|
-
next memo unless CustomProperty.respond_to?(type.to_sym)
|
90
|
-
|
91
|
-
memo[name.parameterize.underscore] = CustomProperty.send(type, value)
|
92
|
-
end.reject { |_k, v| v.presence.nil? }
|
87
|
+
@custom_props ||= filtered_custom_properties
|
93
88
|
end
|
94
89
|
|
90
|
+
# rubocop:disable Metrics/MethodLength
|
95
91
|
def default_props
|
96
92
|
@default_props ||= {
|
97
93
|
'id' => id,
|
@@ -107,10 +103,35 @@ class NotionToMd
|
|
107
103
|
'last_edited_by_id' => last_edited_by_id
|
108
104
|
}
|
109
105
|
end
|
106
|
+
# rubocop:enable Metrics/MethodLength
|
110
107
|
|
111
108
|
# This class is kept for retro compatibility reasons.
|
112
109
|
# Use instead the PageProperty class.
|
113
110
|
class CustomProperty < PageProperty
|
114
111
|
end
|
112
|
+
|
113
|
+
private
|
114
|
+
|
115
|
+
def filtered_custom_properties
|
116
|
+
build_custom_properties.reject { |_k, v| v.presence.nil? }
|
117
|
+
end
|
118
|
+
|
119
|
+
def build_custom_properties
|
120
|
+
page.properties.each_with_object({}) do |(name, value), memo|
|
121
|
+
type = value.type
|
122
|
+
next unless valid_custom_property_type?(type)
|
123
|
+
|
124
|
+
key = name.parameterize.underscore
|
125
|
+
memo[key] = build_custom_property(type, value)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def valid_custom_property_type?(type)
|
130
|
+
CustomProperty.respond_to?(type.to_sym)
|
131
|
+
end
|
132
|
+
|
133
|
+
def build_custom_property(type, value)
|
134
|
+
CustomProperty.send(type, value)
|
135
|
+
end
|
115
136
|
end
|
116
137
|
end
|
data/lib/notion_to_md/text.rb
CHANGED
data/lib/notion_to_md/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: notion_to_md
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.5.
|
4
|
+
version: 2.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Enrique Arias
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-04-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|