Class: RedGrape::Graph
- Defined in:
- lib/red_grape/graph.rb
Constant Summary collapse
- UID =
nil
Instance Attribute Summary collapse
-
#name ⇒ Object
Returns the value of attribute name.
-
#serializer ⇒ Object
Returns the value of attribute serializer.
Class Method Summary collapse
-
.create_tinker_graph ⇒ Object
Returns the default graph which has 6 vertices and 6 edges.
-
.features ⇒ Object
Returns the features as a hash.
- .load(filename) ⇒ Object
- .readonly? ⇒ Boolean
Instance Method Summary collapse
- #add_edge(id, from, to, label, opts = {}) ⇒ Object
- #add_vertex(id, v = nil) ⇒ Object
- #dup ⇒ Object
- #edge(*id) ⇒ Object
- #find(*args) ⇒ Object
-
#initialize(name = nil, &block) ⇒ Graph
constructor
- Returns a new instance block
-
a block which is given the instance as the first argument to initialize it.
-
#items(type, *id) ⇒ Object
:nodoc:.
- #load(filename) ⇒ Object
- #readonly ⇒ Object
- #readonly! ⇒ Object
- #readonly? ⇒ Boolean
- #remove_edge(id) ⇒ Object
- #remove_vertex(id) ⇒ Object
- #save(file) ⇒ Object
- #shutdown ⇒ Object
- #to_h ⇒ Object
- #to_s ⇒ Object
-
#uid(denies = []) ⇒ Object
:nodoc:.
- #vertex(*id) ⇒ Object
Methods included from Pipe::E
Methods included from Pipe::V
Constructor Details
#initialize(name = nil, &block) ⇒ Graph
Returns a new instance
- block
-
a block which is given the instance as the first argument
to initialize it
75 76 77 78 79 80 81 82 |
# File 'lib/red_grape/graph.rb', line 75 def initialize(name=nil, &block) @name = name || uid @serializer = Serializer::GraphMLSerializer.new self @vertices = {} @edges = {} @property_descriptions = {} block.call self if block end |
Instance Attribute Details
#name ⇒ Object
Returns the value of attribute name.
70 71 72 |
# File 'lib/red_grape/graph.rb', line 70 def name @name end |
#serializer ⇒ Object
Returns the value of attribute serializer.
70 71 72 |
# File 'lib/red_grape/graph.rb', line 70 def serializer @serializer end |
Class Method Details
.create_tinker_graph ⇒ Object
Returns the default graph which has 6 vertices and 6 edges.
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/red_grape/graph.rb', line 19 def create_tinker_graph self.new :tinkergraph do |g| v1 = g.add_vertex 1, name:'marko', age:29 v2 = g.add_vertex 2, name:'vadas', age:27 v3 = g.add_vertex 3, name:'lop', lang:'java' v4 = g.add_vertex 4, name:'josh', age:32 v5 = g.add_vertex 5, name:'ripple', lang:'java' v6 = g.add_vertex 6, name:'peter', age:35 g.add_edge 7, v1, v2, 'knows', weight:0.5 g.add_edge 8, v1, v4, 'knows', weight:1.0 g.add_edge 9, v1, v3, 'created', weight:0.4 g.add_edge 10, v4, v5, 'created', weight:1.0 g.add_edge 11, v4, v3, 'created', weight:0.4 g.add_edge 12, v6, v3, 'created', weight:0.2 end end |
.features ⇒ Object
Returns the features as a hash
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/red_grape/graph.rb', line 37 def features { ignores_supplied_ids:false, is_persistent:false, is_rdf_model:false, is_wrapper:false, supports_boolean_property:true, supports_double_property:true, supports_duplicate_edges:true, supports_edge_index:false, supports_edge_iteration:true, supports_edge_key_index:false, supports_float_property:true, supports_indices:false, supports_integer_property:true, supports_key_indices:false, supports_long_property:true, supports_map_property:true, supports_mixed_list_property:true, supports_primitive_array_property:true, supports_self_loops:true, supports_serializable_object_property:true, supports_string_property:true, supports_threded_transactions:false, supports_transactions:false, supports_uniform_list_property:true, supports_vertex_index:false, supports_vertex_iteration:true, supports_vertex_key_index:false } end |
.load(filename) ⇒ Object
14 15 16 |
# File 'lib/red_grape/graph.rb', line 14 def load(filename) self.new.load filename end |
.readonly? ⇒ Boolean
214 |
# File 'lib/red_grape/graph.rb', line 214 def self.readonly?; true end |
Instance Method Details
#add_edge(id, from, to, label, opts = {}) ⇒ Object
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
# File 'lib/red_grape/graph.rb', line 160 def add_edge(id, from, to, label, opts={}) id = uid(@edges.keys) unless id if id.is_a? Edge raise ArgumentError.new "#{id.id} already exists." if @edges[id.id] @edges[id.id] = id else id = id.to_s raise ArgumentError.new "#{id} already exists." if @edges[id] from = self.vertex(from.to_s) unless from.is_a? Vertex to = self.vertex(to.to_s) unless to.is_a? Vertex add_vertex from unless self.vertex(from.id) add_vertex to unless self.vertex(to.id) @edges[id] = Edge.new self, id, from, to, label, opts end end |
#add_vertex(id, v = nil) ⇒ Object
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'lib/red_grape/graph.rb', line 120 def add_vertex(id, v=nil) id = uid(@vertices.keys) unless id if v if v.is_a? Hash id = id.to_s v = Vertex.new self, id, v end else if id.is_a? Hash v = id id = (v[:id] || v['id']).to_s elsif id.respond_to?(:id) v = id id = v.id.to_s else id = id.to_s v = {} end v = Vertex.new self, id, v end raise ArgumentError.new "invalid id" unless id == v.id raise ArgumentError.new "#{id} already exists." if @vertices[id] @vertices[id] = v end |
#dup ⇒ Object
226 227 228 229 230 231 232 233 |
# File 'lib/red_grape/graph.rb', line 226 def dup obj = self.class.new obj.instance_variable_set :@serializer, @serializer obj.instance_variable_set :@vertices, @vertices.dup obj.instance_variable_set :@edges, @edges.dup obj.instance_variable_set :@property_descriptions, @property_descriptions.dup obj end |
#edge(*id) ⇒ Object
116 117 118 |
# File 'lib/red_grape/graph.rb', line 116 def edge(*id) items :edge, *id end |
#find(*args) ⇒ Object
202 203 204 |
# File 'lib/red_grape/graph.rb', line 202 def find(*args) Graph::Vertex.new end |
#items(type, *id) ⇒ Object
:nodoc:
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/red_grape/graph.rb', line 84 def items(type, *id) # :nodoc: items = case type when :vertex, :vertices @vertices when :edge, :edges @edges else raise ArgumentError.new('type should be :vertex or :edge') end if id.size == 2 # TODO: for the time being items.values.select{|e| e[id[0]] == id[1]} elsif 1 < id.size id.map{|i| items[i.to_s]} elsif id.size == 0 items.values else case id.first when Array id.first.map{|i| items[i.to_s]} when :all items.values else items[id.first.to_s] end end end |
#load(filename) ⇒ Object
193 194 195 |
# File 'lib/red_grape/graph.rb', line 193 def load(filename) @serializer.load filename end |
#readonly ⇒ Object
206 207 208 |
# File 'lib/red_grape/graph.rb', line 206 def readonly dup.readonly! end |
#readonly! ⇒ Object
210 211 212 213 214 215 216 |
# File 'lib/red_grape/graph.rb', line 210 def readonly! %w(add_vertex add_edge remove_vertex remove_edge load).each do |name| eval "def self.#{name}(*args); raise NoMethodError end" end def self.readonly?; true end self end |
#readonly? ⇒ Boolean
218 219 220 |
# File 'lib/red_grape/graph.rb', line 218 def readonly? false end |
#remove_edge(id) ⇒ Object
177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 |
# File 'lib/red_grape/graph.rb', line 177 def remove_edge(id) if id.is_a? Edge e = id id = id.id else id = id.to_s e = @edges[id] end @edges.delete id if e e.source.out_edges.delete e e.target.in_edges.delete e end e end |
#remove_vertex(id) ⇒ Object
146 147 148 149 150 151 152 153 154 155 156 157 158 |
# File 'lib/red_grape/graph.rb', line 146 def remove_vertex(id) id = id.id if id.is_a? Vertex v = @vertices.delete id.to_s if v v.out_edges.dup.each do |e| remove_edge e end v.in_edges.dup.each do |e| remove_edge e end end v end |
#save(file) ⇒ Object
197 198 199 200 |
# File 'lib/red_grape/graph.rb', line 197 def save(file) file = File.open file if file.is_a? String @serializer.save file end |
#shutdown ⇒ Object
222 223 224 |
# File 'lib/red_grape/graph.rb', line 222 def shutdown # do nothing end |
#to_h ⇒ Object
248 249 250 251 252 253 254 255 256 257 |
# File 'lib/red_grape/graph.rb', line 248 def to_h { version:RedGrape::VERSION, name:'-', graph:to_s, features:self.class.features, readOnly:readonly?, type:self.class.name } end |
#to_s ⇒ Object
244 245 246 |
# File 'lib/red_grape/graph.rb', line 244 def to_s "redgrape[vertices:#{@vertices.size} edges:#{@edges.size}]" end |
#uid(denies = []) ⇒ Object
:nodoc:
235 236 237 238 239 240 241 242 |
# File 'lib/red_grape/graph.rb', line 235 def uid(denies=[]) # :nodoc: id = "##{Time.now.to_i}-#{rand(10000)}" if denies.include? id uid denies else id end end |
#vertex(*id) ⇒ Object
112 113 114 |
# File 'lib/red_grape/graph.rb', line 112 def vertex(*id) items :vertex, *id end |