bridgetown_notion 0.1.0 → 0.2.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.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +11 -1
  4. data/Gemfile +3 -0
  5. data/README.md +31 -14
  6. data/bridgetown_notion.gemspec +1 -0
  7. data/lib/bridgetown_notion/builder.rb +10 -67
  8. data/lib/bridgetown_notion/markdown_generators/bulleted_list_item_markdown_generator.rb +11 -0
  9. data/lib/bridgetown_notion/markdown_generators/heading_1_markdown_generator.rb +11 -0
  10. data/lib/bridgetown_notion/markdown_generators/heading_2_markdown_generator.rb +11 -0
  11. data/lib/bridgetown_notion/markdown_generators/heading_3_markdown_generator.rb +11 -0
  12. data/lib/bridgetown_notion/markdown_generators/heading_4_markdown_generator.rb +11 -0
  13. data/lib/bridgetown_notion/markdown_generators/heading_5_markdown_generator.rb +11 -0
  14. data/lib/bridgetown_notion/markdown_generators/heading_6_markdown_generator.rb +11 -0
  15. data/lib/bridgetown_notion/markdown_generators/paragraph_markdown_generator.rb +11 -0
  16. data/lib/bridgetown_notion/notion_posts_factory.rb +43 -0
  17. data/lib/bridgetown_notion/parsers/block_parser.rb +25 -0
  18. data/lib/bridgetown_notion/parsers/categories_parser.rb +12 -0
  19. data/lib/bridgetown_notion/parsers/content_parser.rb +27 -0
  20. data/lib/bridgetown_notion/parsers/is_published_parser.rb +11 -0
  21. data/lib/bridgetown_notion/parsers/post_parser.rb +28 -0
  22. data/lib/bridgetown_notion/parsers/published_at_parser.rb +11 -0
  23. data/lib/bridgetown_notion/parsers/slug_parser.rb +13 -0
  24. data/lib/bridgetown_notion/parsers/tags_parser.rb +12 -0
  25. data/lib/bridgetown_notion/parsers/title_parser.rb +11 -0
  26. data/lib/bridgetown_notion/version.rb +1 -1
  27. data/lib/bridgetown_notion.rb +12 -0
  28. metadata +34 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2e86e10243ccaea80727bc54084c1c071d407c49d4a7fac41a4c9aa5983321b7
4
- data.tar.gz: 61973da5ac8daf87996a88d826d03be727255431c2e4ed8a5304047186ed5f92
3
+ metadata.gz: 54259116b5b744f64ed97d979eb96a7b5fc32908e101ebceb966e5ff850f2614
4
+ data.tar.gz: 6766dd525ac714f6cdc49410148204f124a34bd21a600bd591cb2aff54e37d64
5
5
  SHA512:
6
- metadata.gz: 6bb6f9beecc295140d9bc4edda7019891aeb50b77c151d7be34075adec1a36fd3b92924ae70f94bb1640eb81c4141397217d29e19e0768468ceb3c35686a3abe
7
- data.tar.gz: e2416855fad78e9f31d437fa539ca9ac1e447cf89906147a773d5d5ba231b7ed56cbef71285a2f4404e6934a7021d6ca8b87a55dcda392366a537d62ed799a83
6
+ metadata.gz: d5d2d274bc28e7965666163509781ebf62f92f10911f4d2ad0b909240531fc7a16e814c6dc687fdb7733c22a28c42134b57129317bee2414f8344401616da0e1
7
+ data.tar.gz: '04903b167f5f58f59ef1f2558c4a296212d15138236dc4ef5b3e5c965979c5ca652ce1f0151d9cea6c60dcda25abd4c7103b1a42f13eeefec3d561116be04f7b'
data/.gitignore CHANGED
@@ -18,6 +18,7 @@ Gemfile.lock
18
18
  .bundle
19
19
  .ruby-version
20
20
  .tool-versions
21
+ .solargraph.yml
21
22
 
22
23
  # Node
23
24
  node_modules
data/CHANGELOG.md CHANGED
@@ -7,7 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
- -
10
+ ## [0.2.0] - 2023-03-13
11
+
12
+ ### Added
13
+
14
+ - Add new initializer config, backwards compatible with previous env implementation.
15
+ - Add activesupport dependecy for help with changing letter cases.
16
+
17
+ ### Fixed
18
+
19
+ - Fix invalid URI bug. By returning a slug property from the posts factory we can ensure
20
+ that we don't attempt to create posts with spaces in the file name.
11
21
 
12
22
  ## [0.1.0] - 2023-02-04
13
23
 
data/Gemfile CHANGED
@@ -6,7 +6,10 @@ gemspec
6
6
  gem "bridgetown", ENV["BRIDGETOWN_VERSION"] if ENV["BRIDGETOWN_VERSION"]
7
7
 
8
8
  group :test do
9
+ gem "debug", ">= 1.0.0"
9
10
  gem "minitest"
10
11
  gem "minitest-reporters"
11
12
  gem "shoulda"
13
+ gem "timecop"
14
+ gem "webmock"
12
15
  end
data/README.md CHANGED
@@ -1,34 +1,51 @@
1
- # Sample plugin for Bridgetown
1
+ # Bridgetown Notions CMS Plugin
2
2
 
3
- _NOTE: This isn't a real plugin! Copy this sample code and use it to create your own Ruby gem! [Help guide here…](https://www.bridgetownrb.com/docs/plugins)_ 😃
3
+ A Bridgetown plugin to pull content directly out of a Notion database. Each page in the
4
+ Notion database is added to your posts collection in Bridgetown.
4
5
 
5
- _You can run_ `bridgetown plugins new` _to easily set up a customized verison of this starter repo._
6
-
7
- A Bridgetown plugin to [fill in the blank]…
8
6
 
9
7
  ## Installation
10
8
 
11
- Run this command to add this plugin to your site's Gemfile:
9
+ 1. Run this command to add this plugin to your site's Gemfile:
12
10
 
13
11
  ```shell
14
- $ bundle add my-awesome-plugin -g bridgetown_plugins
12
+ $ bundle add bridgetown_notion
15
13
  ```
16
14
 
17
- Or if there's a `bridgetown.automation.rb` automation script, you can run that instead for guided setup:
15
+ 2. Add the following to your site's `config/initializers.rb`:
18
16
 
19
- ```shell
20
- $ bin/bridgetown apply https://github.com/username/my-awesome-plugin
17
+ ```ruby
18
+ Bridgetown.configure do |config|
19
+ init :bridgetown_notion do
20
+ notion_key '<your-notion-connection-key>'
21
+ notion_db_id '<your-notion-db-id>'
22
+ end
23
+ end
21
24
  ```
22
25
 
26
+ You should consider using environment variables to store the `notion_key` and `notion_db_id`.
27
+ It is generally a bad practice to store credentials in version control.
28
+
23
29
  ## Usage
24
30
 
25
- The plugin will…
31
+ ### Notion Setup
32
+
33
+ [bridgetown_notion](https://github.com/fbuys/bridgetown_notion) assumes that you have a Notion
34
+ database table with the following fileds:
26
35
 
27
- ### Optional configuration options
36
+ | Field | Type |
37
+ |-|-|
38
+ | title (required | Title |
39
+ | published_at (required) | Date |
40
+ | published | Checkbox |
41
+ | categories | Multi-selet |
42
+ | tags | Multi-selet |
43
+ | author | Select |
28
44
 
29
- The plugin will automatically use any of the following metadata variables if they are present in your site's `_data/site_metadata.yml` file.
45
+ Note the case of the fields as this is important.
30
46
 
31
-
47
+ You would also need to create a Notion connection that provides read access to the specific
48
+ database. You can find the [instructions for adding a connection over here](https://www.notion.so/help/add-and-manage-connections-with-the-api).
32
49
 
33
50
  ## Testing
34
51
 
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
19
19
 
20
20
  spec.add_dependency "bridgetown", ">= 1.0", "< 2.0"
21
21
  spec.add_dependency "notion-ruby-client", ">= 1.0", "< 2.0"
22
+ spec.add_dependency "activesupport"
22
23
 
23
24
  spec.add_development_dependency "bundler"
24
25
  spec.add_development_dependency "rake", ">= 13.0"
@@ -1,78 +1,21 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "bridgetown_notion/notion_posts_factory"
4
+
3
5
  module BridgetownNotion
4
6
  class Builder < Bridgetown::Builder
5
- # rubocop:disable Metrics/CyclomaticComplexity, Metrics/AbcSize, Metrics/PerceivedComplexity, Metrics/MethodLength
6
7
  def build
7
- Notion.configure do |config|
8
- config.token = ENV.fetch("NOTION_KEY")
9
- end
10
-
11
- client = Notion::Client.new
12
-
13
- client.database_query(database_id: ENV.fetch("NOTION_DB_ID")) do |posts_page|
14
- posts_page.results.each do |post|
15
- title = post.dig("properties", "title", "title", 0, "text", "content")
16
- categories = (post.dig("properties", "categories", "multi_select") || [])
17
- .map { |c| c["name"] }.join(" ")
18
- tags = (post.dig("properties", "tags", "multi_select") || [])
19
- .map { |t| t["name"] }.join(" ")
20
- is_published = post["properties"]["published"]["checkbox"]
21
- published_at = post.dig("properties", "published_at", "date", "start")
22
- content = ""
23
-
24
- next if published_at.nil? || title.nil?
25
-
26
- client.block_children(block_id: post.id) do |blocks_page|
27
- blocks_page.results.each do |block|
28
- content += extract_content(block)
29
- end
30
- end
31
-
32
- add_resource :posts, "#{published_at}-#{title}.md" do
33
- categories categories
34
- content content
35
- layout :post
36
- published is_published
37
- tags tags
38
- title title
39
- end
8
+ BridgetownNotion::NotionPostsFactory.create_posts(config.bridgetown_notion).each do |post|
9
+ add_resource :posts, "#{post[:slug]}.md" do
10
+ categories post[:categories]
11
+ content post[:content]
12
+ layout :post
13
+ published post[:is_published]
14
+ tags post[:tags]
15
+ title post[:title]
40
16
  end
41
17
  end
42
18
  end
43
- # rubocop:enable Metrics/CyclomaticComplexity, Metrics/AbcSize, Metrics/PerceivedComplexity, Metrics/MethodLength
44
-
45
- private
46
-
47
- # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
48
- def extract_content(block)
49
- result = block.dig("heading_1", "rich_text", 0, "text", "content")
50
- return "# #{result}\n" if result
51
-
52
- result = block.dig("heading_2", "rich_text", 0, "text", "content")
53
- return "## #{result}\n" if result
54
-
55
- result = block.dig("heading_3", "rich_text", 0, "text", "content")
56
- return "### #{result}\n" if result
57
-
58
- result = block.dig("heading_4", "rich_text", 0, "text", "content")
59
- return "#### #{result}\n" if result
60
-
61
- result = block.dig("heading_5", "rich_text", 0, "text", "content")
62
- return "##### #{result}\n" if result
63
-
64
- result = block.dig("heading_6", "rich_text", 0, "text", "content")
65
- return "###### #{result}\n" if result
66
-
67
- result = block.dig("paragraph", "rich_text", 0, "text", "content")
68
- return "#{result}\n" if result
69
-
70
- result = block.dig("bulleted_list_item", "rich_text", 0, "text", "content")
71
- return "- #{result}\n" if result
72
-
73
- "\n"
74
- end
75
- # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
76
19
  end
77
20
  end
78
21
 
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BridgetownNotion
4
+ module MarkdownGenerators
5
+ class BulletedListItemMarkdownGenerator
6
+ def self.generate(text)
7
+ "- #{text}\n"
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BridgetownNotion
4
+ module MarkdownGenerators
5
+ class Heading1MarkdownGenerator
6
+ def self.generate(text)
7
+ "# #{text}\n"
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BridgetownNotion
4
+ module MarkdownGenerators
5
+ class Heading2MarkdownGenerator
6
+ def self.generate(text)
7
+ "## #{text}\n"
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BridgetownNotion
4
+ module MarkdownGenerators
5
+ class Heading3MarkdownGenerator
6
+ def self.generate(text)
7
+ "### #{text}\n"
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BridgetownNotion
4
+ module MarkdownGenerators
5
+ class Heading4MarkdownGenerator
6
+ def self.generate(text)
7
+ "#### #{text}\n"
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BridgetownNotion
4
+ module MarkdownGenerators
5
+ class Heading5MarkdownGenerator
6
+ def self.generate(text)
7
+ "##### #{text}\n"
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BridgetownNotion
4
+ module MarkdownGenerators
5
+ class Heading6MarkdownGenerator
6
+ def self.generate(text)
7
+ "###### #{text}\n"
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BridgetownNotion
4
+ module MarkdownGenerators
5
+ class ParagraphMarkdownGenerator
6
+ def self.generate(text)
7
+ "#{text}\n"
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BridgetownNotion
4
+ class NotionPostsFactory
5
+ # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
6
+ def self.create_posts(config)
7
+ notion_key = config.notion_key
8
+ notion_db_id = config.notion_db_id
9
+
10
+ Notion.configure do |notion|
11
+ notion.token = notion_key
12
+ end
13
+
14
+ notion_client = Notion::Client.new
15
+
16
+ result = []
17
+
18
+ notion_client.database_query(database_id: notion_db_id) do |posts_page|
19
+ posts_page.results.each do |post|
20
+ notion_client.block_children(block_id: post.id) do |blocks_page|
21
+ post["blocks"] = [*post["blocks"], *blocks_page.results]
22
+ end
23
+
24
+ parsed_post = BridgetownNotion::Parsers::PostParser.parse(post)
25
+
26
+ next if parsed_post.published_at.nil? || parsed_post.title.nil?
27
+
28
+ result.push({
29
+ categories: parsed_post.categories,
30
+ content: parsed_post.content,
31
+ is_published: parsed_post.is_published,
32
+ slug: parsed_post.slug,
33
+ tags: parsed_post.tags,
34
+ title: parsed_post.title,
35
+ })
36
+ end
37
+ end
38
+
39
+ result
40
+ end
41
+ # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
42
+ end
43
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BridgetownNotion
4
+ module Parsers
5
+ class BlockParser
6
+ def self.parse(block)
7
+ for_each_block_type do |block_type|
8
+ content = block.dig(block_type, "rich_text", 0, "text", "content")
9
+ return [block_type, content] if content
10
+ end
11
+ []
12
+ end
13
+
14
+ private_class_method def self.for_each_block_type
15
+ pattern = %r{(?<block_type>\w+)(?!.*/)_markdown_generator.rb}
16
+ markdown_generator_files = Dir[
17
+ "#{File.dirname(__FILE__)}/../markdown_generators/**/*_markdown_generator.rb"
18
+ ]
19
+ markdown_generator_files.each do |file|
20
+ yield file.match(pattern)[:block_type].to_s
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BridgetownNotion
4
+ module Parsers
5
+ class CategoriesParser
6
+ def self.parse(post)
7
+ categories = (post.dig("properties", "categories", "multi_select") || [])
8
+ categories.map { |c| c["name"] }.join(" ")
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/core_ext/string/inflections"
4
+
5
+ module BridgetownNotion
6
+ module Parsers
7
+ class ContentParser
8
+ def self.parse(post)
9
+ content = ""
10
+ blocks = post.fetch("blocks", [])
11
+ blocks.each do |block|
12
+ content += get_content(block)
13
+ end
14
+ content
15
+ end
16
+
17
+ private_class_method def self.get_content(block)
18
+ block_type, content = BridgetownNotion::Parsers::BlockParser.parse(block)
19
+ Object.const_get(
20
+ "BridgetownNotion::MarkdownGenerators::#{block_type.camelize}MarkdownGenerator"
21
+ ).generate(content)
22
+ rescue StandardError
23
+ "\n"
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BridgetownNotion
4
+ module Parsers
5
+ class IsPublishedParser
6
+ def self.parse(post)
7
+ post.dig("properties", "published", "checkbox") || false
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/core_ext/string/inflections"
4
+
5
+ module BridgetownNotion
6
+ module Parsers
7
+ class PostParser
8
+ def initialize(post)
9
+ @post = post
10
+ end
11
+
12
+ def self.parse(post)
13
+ new(post)
14
+ end
15
+
16
+ def method_missing(method_name)
17
+ parser = method_name.to_s.camelize
18
+ Object.const_get("BridgetownNotion::Parsers::#{parser}Parser").parse(@post)
19
+ end
20
+
21
+ def respond_to_missing?(method_name)
22
+ Dir["./**/*_parser.rb"].each do |f|
23
+ return true if f.include?(method_name)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BridgetownNotion
4
+ module Parsers
5
+ class PublishedAtParser
6
+ def self.parse(post)
7
+ post.dig("properties", "published_at", "date", "start")
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BridgetownNotion
4
+ module Parsers
5
+ class SlugParser
6
+ def self.parse(post)
7
+ published_at = BridgetownNotion::Parsers::PublishedAtParser.parse(post)
8
+ title = BridgetownNotion::Parsers::TitleParser.parse(post)
9
+ "#{published_at}-#{title}".downcase.strip.tr(" ", "-").gsub(%r/[^\w-]/, "")
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BridgetownNotion
4
+ module Parsers
5
+ class TagsParser
6
+ def self.parse(post)
7
+ tags = (post.dig("properties", "tags", "multi_select") || [])
8
+ tags.map { |t| t["name"] }.join(" ")
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BridgetownNotion
4
+ module Parsers
5
+ class TitleParser
6
+ def self.parse(post)
7
+ post.dig("properties", "title", "title", 0, "text", "content")
8
+ end
9
+ end
10
+ end
11
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module BridgetownNotion
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
@@ -3,3 +3,15 @@
3
3
  require "bridgetown"
4
4
  require "bridgetown_notion/builder"
5
5
  require "notion-ruby-client"
6
+ require "zeitwerk"
7
+
8
+ loader = Zeitwerk::Loader.for_gem
9
+ loader.setup
10
+
11
+ Bridgetown.initializer :bridgetown_notion do |config, notion_key:, notion_db_id:|
12
+ config.bridgetown_notion ||= {}
13
+ config.bridgetown_notion.notion_key ||= notion_key || ENV.fetch("NOTION_KEY")
14
+ config.bridgetown_notion.notion_db_id ||= notion_db_id || ENV.fetch("NOTION_DB_ID")
15
+
16
+ config.builder BridgetownNotion::Builder
17
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bridgetown_notion
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Francois Buys
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-04 00:00:00.000000000 Z
11
+ date: 2023-03-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bridgetown
@@ -50,6 +50,20 @@ dependencies:
50
50
  - - "<"
51
51
  - !ruby/object:Gem::Version
52
52
  version: '2.0'
53
+ - !ruby/object:Gem::Dependency
54
+ name: activesupport
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ type: :runtime
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
53
67
  - !ruby/object:Gem::Dependency
54
68
  name: bundler
55
69
  requirement: !ruby/object:Gem::Requirement
@@ -109,6 +123,24 @@ files:
109
123
  - bridgetown_notion.gemspec
110
124
  - lib/bridgetown_notion.rb
111
125
  - lib/bridgetown_notion/builder.rb
126
+ - lib/bridgetown_notion/markdown_generators/bulleted_list_item_markdown_generator.rb
127
+ - lib/bridgetown_notion/markdown_generators/heading_1_markdown_generator.rb
128
+ - lib/bridgetown_notion/markdown_generators/heading_2_markdown_generator.rb
129
+ - lib/bridgetown_notion/markdown_generators/heading_3_markdown_generator.rb
130
+ - lib/bridgetown_notion/markdown_generators/heading_4_markdown_generator.rb
131
+ - lib/bridgetown_notion/markdown_generators/heading_5_markdown_generator.rb
132
+ - lib/bridgetown_notion/markdown_generators/heading_6_markdown_generator.rb
133
+ - lib/bridgetown_notion/markdown_generators/paragraph_markdown_generator.rb
134
+ - lib/bridgetown_notion/notion_posts_factory.rb
135
+ - lib/bridgetown_notion/parsers/block_parser.rb
136
+ - lib/bridgetown_notion/parsers/categories_parser.rb
137
+ - lib/bridgetown_notion/parsers/content_parser.rb
138
+ - lib/bridgetown_notion/parsers/is_published_parser.rb
139
+ - lib/bridgetown_notion/parsers/post_parser.rb
140
+ - lib/bridgetown_notion/parsers/published_at_parser.rb
141
+ - lib/bridgetown_notion/parsers/slug_parser.rb
142
+ - lib/bridgetown_notion/parsers/tags_parser.rb
143
+ - lib/bridgetown_notion/parsers/title_parser.rb
112
144
  - lib/bridgetown_notion/version.rb
113
145
  homepage: https://github.com/fbuys/bridgetown_notion
114
146
  licenses: