Class: NotionRails::Service
- Inherits:
-
Object
- Object
- NotionRails::Service
- Defined in:
- lib/notion_rails/service.rb
Instance Method Summary collapse
- #default_query(tag: nil, slug: nil) ⇒ Object
- #default_sorting ⇒ Object
- #get_article(id) ⇒ Object
- #get_articles(tag: nil, slug: nil, page_size: 10) ⇒ Object
- #get_blocks(id) ⇒ Object
-
#initialize ⇒ Service
constructor
A new instance of Service.
Constructor Details
#initialize ⇒ Service
Returns a new instance of Service.
5 6 7 |
# File 'lib/notion_rails/service.rb', line 5 def initialize @client = Notion::Client.new(token: NotionRails.config.notion_api_token) end |
Instance Method Details
#default_query(tag: nil, slug: nil) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/notion_rails/service.rb', line 9 def default_query(tag: nil, slug: nil) query = [ { property: 'public', checkbox: { equals: true } } ] if slug query.push({ property: 'slug', rich_text: { equals: slug } }) end if tag query.push({ property: 'tags', multi_select: { contains: tag } }) end query end |
#default_sorting ⇒ Object
40 41 42 43 44 45 |
# File 'lib/notion_rails/service.rb', line 40 def default_sorting { property: 'published', direction: 'descending' } end |
#get_article(id) ⇒ Object
53 54 55 56 57 |
# File 'lib/notion_rails/service.rb', line 53 def get_article(id) base_page = NotionRails::BasePage.new(__get_page(id)) base_blocks = NotionRails.config.cache_store.fetch(id) { get_blocks(id) } NotionRails::Page.new(base_page, base_blocks) end |
#get_articles(tag: nil, slug: nil, page_size: 10) ⇒ Object
47 48 49 50 51 |
# File 'lib/notion_rails/service.rb', line 47 def get_articles(tag: nil, slug: nil, page_size: 10) __get_articles(tag: tag, slug: slug, page_size: page_size)['results'].map do |page| NotionRails::BasePage.new(page) end end |
#get_blocks(id) ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/notion_rails/service.rb', line 59 def get_blocks(id) blocks = __get_blocks(id) parent_list_block_index = nil results = [] blocks['results'].each_with_index do |block, index| base_block = NotionRails::BaseBlock.new(block) base_block.children = get_blocks(base_block.id) if base_block.has_children # Notion returns same list items as different blocks so we have to do some processing to have them be related # TODO: Separate this into a function, add support for bulleted items. # Currently bulleted items render fine, but they do it in separate ul blocks # Make them appear in the same ul block as numbered_items appear in the same ol block if %w[numbered_list_item].include? base_block.type siblings = !parent_list_block_index.nil? && index != parent_list_block_index && base_block.type == results[parent_list_block_index]&.type && base_block.parent == results[parent_list_block_index]&.parent if siblings results[parent_list_block_index].siblings << base_block next else parent_list_block_index = results.length end else parent_list_block_index = nil end results << base_block end results end |