Sha256: 63f7c3c2205b1796a2fe5c2e33711eec844512d869cfeef9e27c53023ceede88
Contents?: true
Size: 1.95 KB
Versions: 1
Compression:
Stored size: 1.95 KB
Contents
# frozen_string_literal: true require 'json' module Cosensee # for Project class Project extend Delegatable def self.parse(source, renderer_class:) json = JSON.parse(source, symbolize_names: true) name, display_name, exported, users, pages = json.values_at(:name, :displayName, :exported, :users, :pages) Cosensee::Project.new(name:, display_name:, exported:, users:, pages:, source:, renderer_class:) end def self.parse_file(filename, renderer_class:) src = File.read(filename) parse(src, renderer_class:) end def initialize(name:, exported:, users:, pages:, source:, renderer_class:, **kwargs) @name = name @display_name = if kwargs.keys.size == 1 && kwargs.key?(:display_name) kwargs[:display_name] elsif kwargs.keys.size == 1 && kwargs.key?(:displayName) kwargs[:displayName] else raise Cosensee::Error, 'Cosensee::User.new need an argument :display_name or :displayName' end @users = Cosensee::User.from_array(users) @pages = Cosensee::Page.from_array(pages) @exported = Time.at(exported) @source = source @page_store = PageStore.new(project: self) @renderer_class = renderer_class end attr_reader :name, :display_name, :users, :pages, :exported, :source, :page_store, :renderer_class delegate :orphan_page_titles, :dump_search_data, :find_page_by_title, to: :page_store def sorted_pages_for_top pinned_pages = page_store.pinned_pages if pinned_pages.empty? pages.sort_by(&:updated).reverse else unpinned_pages = pages - pinned_pages pinned_pages + unpinned_pages.sort_by(&:updated).reverse end end def to_obj { name:, displayName: display_name, exported: exported.to_i, users:, pages: } end def to_json(*) to_obj.to_json(*) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
cosensee-0.8.0 | lib/cosensee/project.rb |