Module: Notion::Compat
- Defined in:
- lib/notion/compat.rb
Class Method Summary collapse
- .downgrade(value, version) ⇒ Object
- .downgrade_key(key, version) ⇒ Object
- .downgrade_pair(key, item, version) ⇒ Object
- .downgrade_value(key, item, version) ⇒ Object
- .normalize(value, version) ⇒ Object
- .normalize_value(item, version) ⇒ Object
- .reject_meeting_notes!(key, item, version) ⇒ Object
- .reject_unsupported!(version, path) ⇒ Object
- .request(version, request) ⇒ Object
- .response(version, response) ⇒ Object
Class Method Details
.downgrade(value, version) ⇒ Object
22 23 24 25 26 27 28 |
# File 'lib/notion/compat.rb', line 22 def downgrade(value, version) case value when Array then value.map { |item| downgrade(item, version) } when Hash then value.to_h { |key, item| downgrade_pair(key, item, version) } else value end end |
.downgrade_key(key, version) ⇒ Object
54 55 56 57 58 59 60 61 |
# File 'lib/notion/compat.rb', line 54 def downgrade_key(key, version) key = key.to_s return "archived" if key == "in_trash" return "transcription" if version == "2025-09-03" && key == "meeting_notes" return "database_id" if version == "2022-06-28" && key == "data_source_id" key end |
.downgrade_pair(key, item, version) ⇒ Object
30 31 32 33 34 35 36 37 38 39 |
# File 'lib/notion/compat.rb', line 30 def downgrade_pair(key, item, version) reject_meeting_notes!(key, item, version) if key.to_s == "position" && item.is_a?(Hash) && item["type"] == "after_block" return ["after", item.dig("after_block", "id")] end new_key = downgrade_key(key, version) new_item = downgrade_value(key, item, version) [new_key, new_item] end |
.downgrade_value(key, item, version) ⇒ Object
48 49 50 51 52 |
# File 'lib/notion/compat.rb', line 48 def downgrade_value(key, item, version) return "transcription" if key.to_s == "type" && item == "meeting_notes" downgrade(item, version) end |
.normalize(value, version) ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/notion/compat.rb', line 63 def normalize(value, version) value.each_with_object({}) do |(key, item), result| new_key = { "archived" => "in_trash", "transcription" => "meeting_notes" }.fetch(key, key) new_key = "data_source_id" if version == "2022-06-28" && new_key == "database_id" result[new_key] = if key == "type" && item == "transcription" "meeting_notes" else normalize_value(item, version) end end end |
.normalize_value(item, version) ⇒ Object
75 76 77 78 79 80 81 |
# File 'lib/notion/compat.rb', line 75 def normalize_value(item, version) case item when Hash then normalize(item, version) when Array then item.map { |entry| normalize_value(entry, version) } else item end end |
.reject_meeting_notes!(key, item, version) ⇒ Object
41 42 43 44 45 46 |
# File 'lib/notion/compat.rb', line 41 def reject_meeting_notes!(key, item, version) meeting_notes = key.to_s == "meeting_notes" || (key.to_s == "type" && item == "meeting_notes") return unless version == "2022-06-28" && meeting_notes raise UnsupportedInVersionError, "meeting_notes is unavailable in Notion API #{version}" end |
.reject_unsupported!(version, path) ⇒ Object
83 84 85 86 87 88 89 90 91 92 |
# File 'lib/notion/compat.rb', line 83 def reject_unsupported!(version, path) return if version == "2026-03-11" unsupported = path.match?(%r{\A/v1/(views|agents|sessions)(?=/|\z)}) || path.end_with?("/markdown") unsupported ||= path.match?(%r{\A/v1/blocks/meeting_notes(?=/|\z)}) unsupported ||= version == "2022-06-28" && path.match?(%r{\A/v1/data_sources/[^/]+/templates}) return unless unsupported raise UnsupportedInVersionError, "#{path} is unavailable in Notion API #{version}" end |
.request(version, request) ⇒ Object
7 8 9 10 11 12 13 14 |
# File 'lib/notion/compat.rb', line 7 def request(version, request) reject_unsupported!(version, request.path) return request if version == "2026-03-11" path = request.path path = path.sub(%r{\A/v1/data_sources(?=/|\z)}, "/v1/databases") if version == "2022-06-28" request.with(path: path, body: downgrade(request.body, version)) end |
.response(version, response) ⇒ Object
16 17 18 19 20 |
# File 'lib/notion/compat.rb', line 16 def response(version, response) return response if version == "2026-03-11" || !response.body.is_a?(Hash) response.with(body: normalize(response.body, version)) end |