Class: Urbit::Graph
- Inherits:
-
Object
- Object
- Urbit::Graph
- Defined in:
- lib/urbit/graph.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#host_ship_name ⇒ Object
readonly
Returns the value of attribute host_ship_name.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#ship ⇒ Object
readonly
Returns the value of attribute ship.
Instance Method Summary collapse
- #add_node(node:) ⇒ Object
- #creator ⇒ Object
- #delete ⇒ Object
- #description ⇒ Object
- #group ⇒ Object
- #group=(a_group) ⇒ Object
- #host_ship ⇒ Object
-
#initialize(ship:, graph_name:, host_ship_name:) ⇒ Graph
constructor
A new instance of Graph.
-
#molt ⇒ Object
Transform this Graph into a PublishGraph.
-
#newer_sibling_nodes(node:, count:) ⇒ Object
Answers the count newer sibling nodes relative to the passed #node.
- #newest_nodes(count: 10) ⇒ Object
-
#node(index:) ⇒ Object
Finds a single node in this graph by its index.
-
#nodes ⇒ Object
Answers an array with all of this Graph’s currently attached Nodes, recursively inluding all of the Node’s children.
-
#older_sibling_nodes(node:, count:) ⇒ Object
Answers the count older sibling nodes relative to the passed #node.
- #oldest_nodes(count: 10) ⇒ Object
- #resource ⇒ Object
- #title ⇒ Object
-
#to_s ⇒ Object
the canonical printed representation of a Graph.
- #type ⇒ Object
Constructor Details
#initialize(ship:, graph_name:, host_ship_name:) ⇒ Graph
9 10 11 12 13 14 15 |
# File 'lib/urbit/graph.rb', line 9 def initialize(ship:, graph_name:, host_ship_name:) @ship = ship @group = nil @host_ship_name = host_ship_name @name = graph_name @nodes = SortedSet.new end |
Instance Attribute Details
#host_ship_name ⇒ Object (readonly)
Returns the value of attribute host_ship_name.
7 8 9 |
# File 'lib/urbit/graph.rb', line 7 def host_ship_name @host_ship_name end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
7 8 9 |
# File 'lib/urbit/graph.rb', line 7 def name @name end |
#ship ⇒ Object (readonly)
Returns the value of attribute ship.
7 8 9 |
# File 'lib/urbit/graph.rb', line 7 def ship @ship end |
Instance Method Details
#add_node(node:) ⇒ Object
17 18 19 |
# File 'lib/urbit/graph.rb', line 17 def add_node(node:) @nodes << node unless node.deleted? end |
#creator ⇒ Object
21 22 23 24 |
# File 'lib/urbit/graph.rb', line 21 def creator self.fetch_link if @creator.nil? @creator end |
#delete ⇒ Object
26 27 28 29 |
# File 'lib/urbit/graph.rb', line 26 def delete resp = self.ship.spider(mark_in: 'graph-view-action', mark_out: 'json', thread: 'graph-delete', data: self.delete_graph_json, args: ["NO_RESPONSE"]) @persistent = !(200 == resp[:status]) end |
#description ⇒ Object
31 32 33 34 |
# File 'lib/urbit/graph.rb', line 31 def description self.fetch_link if @description.nil? @description end |
#group ⇒ Object
36 37 38 39 40 41 42 |
# File 'lib/urbit/graph.rb', line 36 def group if @group.nil? @link = self.fetch_link @group = @link.group unless @link.nil? end @group end |
#group=(a_group) ⇒ Object
44 45 46 |
# File 'lib/urbit/graph.rb', line 44 def group=(a_group) @group = a_group end |
#host_ship ⇒ Object
48 49 50 |
# File 'lib/urbit/graph.rb', line 48 def host_ship "~#{@host_ship_name}" end |
#molt ⇒ Object
Transform this Graph into a PublishGraph.
TODO: This is a very crude way to do this since we don’t get the type of graph back from
our initial call to retrieve the graphs, only later with the .
This will need some more thought.
68 69 70 71 |
# File 'lib/urbit/graph.rb', line 68 def molt return PublishGraph.new(ship: self.ship, graph_name: self.name, title: self.title, description: self.description, persistent: true) if 'publish' == self.type self end |
#newer_sibling_nodes(node:, count:) ⇒ Object
Answers the count newer sibling nodes relative to the passed #node.
117 118 119 |
# File 'lib/urbit/graph.rb', line 117 def newer_sibling_nodes(node:, count:) self.fetch_sibling_nodes(node, :newer, count)[0..(count - 1)] end |
#newest_nodes(count: 10) ⇒ Object
97 98 99 100 101 102 |
# File 'lib/urbit/graph.rb', line 97 def newest_nodes(count: 10) count = 1 if count < 1 return self.fetch_newest_nodes(count) if @nodes.empty? || @nodes.count < count last_node = self.nodes.count - 1 self.nodes[(last_node - count)..last_node] end |
#node(index:) ⇒ Object
Finds a single node in this graph by its index. The index here should be the atom representation (as returned by Node#index).
77 78 79 |
# File 'lib/urbit/graph.rb', line 77 def node(index:) self.fetch_node(index).first end |
#nodes ⇒ Object
Answers an array with all of this Graph’s currently attached Nodes, recursively inluding all of the Node’s children.
85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/urbit/graph.rb', line 85 def nodes self.fetch_all_nodes if @nodes.empty? @all_n = [] @nodes.each do |n| @all_n << n n.children.each do |c| @all_n << c end end @all_n end |
#older_sibling_nodes(node:, count:) ⇒ Object
Answers the count older sibling nodes relative to the passed #node.
124 125 126 |
# File 'lib/urbit/graph.rb', line 124 def older_sibling_nodes(node:, count:) self.fetch_sibling_nodes(node, :older, count)[0..(count - 1)] end |
#oldest_nodes(count: 10) ⇒ Object
104 105 106 107 108 |
# File 'lib/urbit/graph.rb', line 104 def oldest_nodes(count: 10) count = 1 if count < 1 return self.fetch_oldest_nodes(count) if @nodes.empty? || @nodes.count < count self.nodes[0..(count - 1)] end |
#resource ⇒ Object
110 111 112 |
# File 'lib/urbit/graph.rb', line 110 def resource "#{self.host_ship}/#{self.name}" end |
#title ⇒ Object
128 129 130 131 |
# File 'lib/urbit/graph.rb', line 128 def title self.fetch_link if @title.nil? @title end |
#to_s ⇒ Object
the canonical printed representation of a Graph
140 141 142 |
# File 'lib/urbit/graph.rb', line 140 def to_s "a #{self.class.name.split('::').last}(#{self.resource})" end |
#type ⇒ Object
133 134 135 136 |
# File 'lib/urbit/graph.rb', line 133 def type self.fetch_link if @type.nil? @type end |