Class: Cosensee::Project

Inherits:
Object
  • Object
show all
Extended by:
Delegatable
Defined in:
lib/cosensee/project.rb

Overview

for Project

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Delegatable

delegate

Constructor Details

#initialize(name:, exported:, users:, pages:, source:, renderer_class:, **kwargs) ⇒ Project

Returns a new instance of Project.



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/cosensee/project.rb', line 21

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

Instance Attribute Details

#display_nameObject (readonly)

Returns the value of attribute display_name.



39
40
41
# File 'lib/cosensee/project.rb', line 39

def display_name
  @display_name
end

#exportedObject (readonly)

Returns the value of attribute exported.



39
40
41
# File 'lib/cosensee/project.rb', line 39

def exported
  @exported
end

#nameObject (readonly)

Returns the value of attribute name.



39
40
41
# File 'lib/cosensee/project.rb', line 39

def name
  @name
end

#page_storeObject (readonly)

Returns the value of attribute page_store.



39
40
41
# File 'lib/cosensee/project.rb', line 39

def page_store
  @page_store
end

#pagesObject (readonly)

Returns the value of attribute pages.



39
40
41
# File 'lib/cosensee/project.rb', line 39

def pages
  @pages
end

#renderer_classObject (readonly)

Returns the value of attribute renderer_class.



39
40
41
# File 'lib/cosensee/project.rb', line 39

def renderer_class
  @renderer_class
end

#sourceObject (readonly)

Returns the value of attribute source.



39
40
41
# File 'lib/cosensee/project.rb', line 39

def source
  @source
end

#usersObject (readonly)

Returns the value of attribute users.



39
40
41
# File 'lib/cosensee/project.rb', line 39

def users
  @users
end

Class Method Details

.parse(source, renderer_class:) ⇒ Object



10
11
12
13
14
# File 'lib/cosensee/project.rb', line 10

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

.parse_file(filename, renderer_class:) ⇒ Object



16
17
18
19
# File 'lib/cosensee/project.rb', line 16

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

Instance Method Details

#sorted_pages_for_topObject



43
44
45
46
47
48
49
50
51
# File 'lib/cosensee/project.rb', line 43

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

#to_jsonObject



57
58
59
# File 'lib/cosensee/project.rb', line 57

def to_json(*)
  to_obj.to_json(*)
end

#to_objObject



53
54
55
# File 'lib/cosensee/project.rb', line 53

def to_obj
  { name:, displayName: display_name, exported: exported.to_i, users:, pages: }
end