notion_to_md 2.0.0 → 2.1.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: 7b301a14c22e1790633fc88c179d3882521f9c9632655b6fd9fc883cf128e9dc
4
- data.tar.gz: 528414ba605c3e03bb3599ea70b7e998768cba3ba56429aaa23523f203b8de19
3
+ metadata.gz: a6cff35e8c8b88f99117499abcc24c89fc98ec723aa4d3380b7b36699e8886e3
4
+ data.tar.gz: 280543cfe9aae2d20d74336f992c26ab5e83dabe738a6f1b6f5bf9742fb41e36
5
5
  SHA512:
6
- metadata.gz: df30fc42ab07586e39a73f6ca8ddd6742e8672c5701c78c67eb4059515403090f71466fe550c3f54617edd110b395843a366f647492da687a43cc3aedf61b27c
7
- data.tar.gz: c102997be2946fab86cd2ba837119ec34cb51da23e9104662f8cb4006930ad9aa916067fa02a26c9de066c7ceb34dc33878c01e64f800c0160aeffb172efe5f2
6
+ metadata.gz: 8808bdd505c6df869f5c06f71d1d763e6f008bc68379528af997b546ff0c6ba1312107b328c3b60b4708949e49a8e03ae8a764acc1e3789fdaf7a5e68b7da2d4
7
+ data.tar.gz: 5bb5daa841ada70a0ded345fdbf3bbda55aac0e078413f6723ced019029f6ea9a990625f0ee22533766f54b7453e77c40a2b6e59e622dc12f9a3180366fa71bc
data/README.md CHANGED
@@ -56,8 +56,11 @@ Everything in a notion page body is a [block object](https://developers.notion.c
56
56
  * `callout`
57
57
  * `quote`
58
58
  * `divider`
59
+ * `tables`
59
60
 
60
- **Note: children nested blocks are not supported.**
61
+ ### Nested blocks
62
+
63
+ Starting with v2, nested blocks are supported. For now, only lists are supported, but more elements will be added.
61
64
 
62
65
  ## Front matter
63
66
 
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NotionToMd
4
+ module Blocks
5
+ class Factory
6
+ def self.build(block:, children: [])
7
+ case block.type.to_sym
8
+ when :table
9
+ TableBlock.new(block: block, children: children)
10
+ else
11
+ Blocks::Block.new(block: block, children: children)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NotionToMd
4
+ module Blocks
5
+ class TableBlock < Block
6
+ def to_md
7
+ table = markdownify_children(0)
8
+
9
+ table_header = table[0]
10
+ table_aligment = markdownify_aligment
11
+ table_body = table[1..table.size]
12
+
13
+ [table_header, table_aligment, table_body.join("\n")].compact.join("\n")
14
+ end
15
+
16
+ private
17
+
18
+ def row_size
19
+ @row_size ||= children.first.block.table_row.cells.size
20
+ end
21
+
22
+ def markdownify_aligment
23
+ "|#{row_size.times.map { '---' }.join('|')}|" if block.table.has_column_header
24
+ end
25
+ end
26
+ end
27
+ end
@@ -84,8 +84,20 @@ module NotionToMd
84
84
  '<br />'
85
85
  end
86
86
 
87
+ def table_row(block)
88
+ "|#{block[:cells].map(&method(:convert_table_row)).join('|')}|"
89
+ end
90
+
87
91
  private
88
92
 
93
+ def convert_table_row(cells)
94
+ cells.map(&method(:convert_table_cell))
95
+ end
96
+
97
+ def convert_table_cell(text)
98
+ convert_text({ rich_text: [text] })
99
+ end
100
+
89
101
  def convert_text(block)
90
102
  block[:rich_text].map do |text|
91
103
  content = Text.send(text[:type], text)
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative './blocks/block'
4
+ require_relative './blocks/factory'
5
+ require_relative './blocks/table_block'
4
6
  require_relative './blocks/types'
5
7
 
6
8
  module NotionToMd
@@ -9,7 +11,8 @@ module NotionToMd
9
11
  # Array containing the block types allowed to have nested blocks (children).
10
12
  PERMITTED_CHILDREN = [
11
13
  Types.method(:bulleted_list_item).name,
12
- Types.method(:numbered_list_item).name
14
+ Types.method(:numbered_list_item).name,
15
+ :table
13
16
  ].freeze
14
17
 
15
18
  # === Parameters
@@ -39,7 +42,7 @@ module NotionToMd
39
42
  else
40
43
  []
41
44
  end
42
- Blocks::Block.new(block: block, children: children)
45
+ Factory.build(block: block, children: children)
43
46
  end
44
47
  end
45
48
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module NotionToMd
4
- VERSION = '2.0.0'
4
+ VERSION = '2.1.0'
5
5
  end
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.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Enrique Arias
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-09 00:00:00.000000000 Z
11
+ date: 2022-09-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -104,6 +104,8 @@ files:
104
104
  - lib/notion_to_md.rb
105
105
  - lib/notion_to_md/blocks.rb
106
106
  - lib/notion_to_md/blocks/block.rb
107
+ - lib/notion_to_md/blocks/factory.rb
108
+ - lib/notion_to_md/blocks/table_block.rb
107
109
  - lib/notion_to_md/blocks/types.rb
108
110
  - lib/notion_to_md/converter.rb
109
111
  - lib/notion_to_md/logger.rb