jekyll-notion 0.0.2 → 0.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: 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