jekyll-notion 0.0.2 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 47fd2ef3b63206ceb2e5ca1933daf4eb90bf283703371c4497c73f9beafd23f4
4
- data.tar.gz: e44cf9e5a3b3b44a0e02b48334375df9e8afe779b7745bdbc146baff3e8de903
3
+ metadata.gz: cb54ec7b63c705b241d71a4f631e06ceeb423b3cb880154ff23c4d28b4dafb9c
4
+ data.tar.gz: 4de1c60b106d86fe042b1a05690c5095165ac173535a103493c85cac24961abf
5
5
  SHA512:
6
- metadata.gz: 281ae8dca0453fb7a498a4457863b666ab7363bcca6e11d707843b35c9b81df91f5dfb6c7073a8af0c8f640560fbc9407c97e101495bef480dd8236c0f013f38
7
- data.tar.gz: e915dc5d190bda6caae8b4942929fdc506ed4ae171e0a8cce126f0d2bee42d1ab5503205f970ee279f58a706c23e9684c0076a6c42e0d1eb856270e7effcad8c
6
+ metadata.gz: e2182b355e1732039b09838268c2decedf0498bf3ecb34db794267ad6c10455442f70c4de3219b07a777e2d0611628786b42a464e6fc914657694c5783f54410
7
+ data.tar.gz: ddbdb1b6caa7b1b19ecec525e9bc1e84df232db9ce1981dfa4daf87d4edc2302cd6bff92554c8f32f9a84567ce9b37d07be7fa4a213f3b6b31458fcd52a254ea
data/README.md CHANGED
@@ -61,16 +61,52 @@ Below, page notion default properties are set in each page frontmatter.
61
61
 
62
62
  ```
63
63
  ---
64
- id: id
65
- title: properties > Name > title > plain_text
66
- cover: cover > external > url
67
- date: created_time
68
- icon: icon > emoji
64
+ id: b2998...
65
+ title: A title
66
+ cover: https://img.bank.sh/an_image.jpg
67
+ date: 2022-01-23T12:31:00.000Z
68
+ icon: \U0001F4A5
69
69
  ---
70
70
  ```
71
71
 
72
72
  Any property provided in the frontmatter config that matches a default property will be overwritten by the default value.
73
73
 
74
+ ### Custom properties
75
+
76
+ In addition to default properties, custom properties are also supported.
77
+
78
+ Custom properties are appended to page frontmatter by default. Every property name is snake-cased.
79
+ For example, two properties named `Multiple Options` and `Tags` will be transformed to `multiple_options` and `tags`, respectively.
80
+
81
+ ```
82
+ ---
83
+ id: b2998...
84
+ title: A title
85
+ cover: https://img.bank.sh/an_image.jpg
86
+ date: 2022-01-23T12:31:00.000Z
87
+ icon: \U0001F4A5
88
+ tags: tag1, tag2, tag3
89
+ multiple_options: option1, option2
90
+ ---
91
+ ```
92
+
93
+ The supported properties are:
94
+
95
+ * `number`
96
+ * `select`
97
+ * `multi_select`
98
+ * `date`
99
+ * `people`
100
+ * `files`
101
+ * `checkbox`
102
+ * `url`
103
+ * `email`
104
+ * `phone_number`
105
+
106
+ `created_time`, `last_edited_time`, `created_by`, `last_edited_by`, `title`, `rich_text` as advanced types like `formula`, `relation` and `rollup` are not supported.
107
+
108
+ Check notion documentation about [property values](https://developers.notion.com/reference/property-value-object#all-property-values).
109
+
74
110
  ## Page filename
75
111
 
76
112
  There are two kinds of collections: posts and others.
@@ -36,23 +36,17 @@ module JekyllNotion
36
36
  end
37
37
 
38
38
  def make_frontmatter
39
- data = Jekyll::Utils.deep_merge_hashes(config_frontmatter, notion_frontmatter)
40
- page_frontmatter = data.to_a.map { |k, v| "#{k}: #{v}" }.join("\n")
39
+ data = Jekyll::Utils.deep_merge_hashes(config_frontmatter, page_frontmatter)
40
+ frontmatter = data.to_a.map { |k, v| "#{k}: #{v}" }.join("\n")
41
41
  <<~CONTENT
42
42
  ---
43
- #{page_frontmatter}
43
+ #{frontmatter}
44
44
  ---
45
45
  CONTENT
46
46
  end
47
47
 
48
- def notion_frontmatter
49
- {
50
- :id => current_page.id,
51
- :title => current_page.title,
52
- :date => current_page.created_datetime,
53
- :cover => current_page.cover,
54
- :icon => current_page.icon,
55
- }
48
+ def page_frontmatter
49
+ Jekyll::Utils.deep_merge_hashes(current_page.custom_props, current_page.default_props)
56
50
  end
57
51
 
58
52
  def config_frontmatter
@@ -46,5 +46,71 @@ module JekyllNotion
46
46
  def url
47
47
  page[:url]
48
48
  end
49
+
50
+ def custom_props
51
+ @custom_props ||= page.properties.each_with_object({}) do |prop, memo|
52
+ name = prop.first
53
+ value = prop.last # Notion::Messages::Message
54
+ type = value.type
55
+
56
+ next memo unless CustomProperty.respond_to?(type.to_sym)
57
+
58
+ memo[name.parameterize.underscore] = CustomProperty.send(type, value)
59
+ end.reject { |_k, v| v.presence.nil? }
60
+ end
61
+
62
+ def default_props
63
+ @default_props ||= {
64
+ :id => id,
65
+ :title => title,
66
+ :date => created_datetime,
67
+ :cover => cover,
68
+ :icon => icon,
69
+ :updated_date => updated_datetime,
70
+ }
71
+ end
72
+
73
+ class CustomProperty
74
+ class << self
75
+ def multi_select(prop)
76
+ prop.multi_select.map(&:name).join(", ")
77
+ end
78
+
79
+ def select(prop)
80
+ prop["select"].name
81
+ end
82
+
83
+ def people(prop)
84
+ prop.people.map(&:name).join(", ")
85
+ end
86
+
87
+ def files(prop)
88
+ prop.files.map { |f| f.file.url }.join(", ")
89
+ end
90
+
91
+ def phone_number(prop)
92
+ prop.phone_number
93
+ end
94
+
95
+ def number(prop)
96
+ prop.number
97
+ end
98
+
99
+ def email(prop)
100
+ prop.email
101
+ end
102
+
103
+ def checkbox(prop)
104
+ prop.checkbox.to_s
105
+ end
106
+
107
+ # date type properties not supported:
108
+ # - end
109
+ # - time_zone
110
+ def date(prop)
111
+ prop.date.start
112
+ end
113
+ end
114
+ end
49
115
  end
50
116
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JekyllNotion
4
- VERSION = "0.0.2"
4
+ VERSION = "0.1.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-notion
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.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-01-23 00:00:00.000000000 Z
11
+ date: 2022-01-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport