Sha256: b6b76daf2be33064808204ef66de188a9b2c0bbb43e6b9e494a137f1f72ecd31

Contents?: true

Size: 1.42 KB

Versions: 1

Compression:

Stored size: 1.42 KB

Contents

# frozen_string_literal: true

require 'json'

module Cosensee
  # for Project
  class Project
    def self.parse(source)
      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:)
    end

    def self.parse_file(filename)
      src = File.read(filename)
      parse(src)
    end

    def initialize(name:, exported:, users:, pages:, source:, **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)
    end

    attr_reader :name, :display_name, :users, :pages, :exported, :source, :page_store

    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.6.0 lib/cosensee/project.rb