cgraph 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ *.png
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source :rubygems
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,35 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ cgraph (0.0.1)
5
+ ruby-graphviz
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ ffi (1.0.11)
11
+ guard (1.2.3)
12
+ listen (>= 0.4.2)
13
+ thor (>= 0.14.6)
14
+ guard-minitest (0.5.0)
15
+ guard (>= 0.4)
16
+ listen (0.4.7)
17
+ rb-fchange (~> 0.0.5)
18
+ rb-fsevent (~> 0.9.1)
19
+ rb-inotify (~> 0.8.8)
20
+ minitest (3.3.0)
21
+ rb-fchange (0.0.5)
22
+ ffi
23
+ rb-fsevent (0.9.1)
24
+ rb-inotify (0.8.8)
25
+ ffi (>= 0.5.0)
26
+ ruby-graphviz (1.0.8)
27
+ thor (0.15.4)
28
+
29
+ PLATFORMS
30
+ ruby
31
+
32
+ DEPENDENCIES
33
+ cgraph!
34
+ guard-minitest
35
+ minitest
data/Guardfile ADDED
@@ -0,0 +1,11 @@
1
+ guard 'minitest', :colour => true do
2
+ # with Minitest::Unit
3
+ #watch(%r|^test/test_(.*)\.rb|)
4
+ #watch(%r|^lib/(.*)\.rb|) { |m| "test/test_#{m[1]}.rb" }
5
+ #watch(%r|^test/test_helper\.rb|) { "test" }
6
+
7
+ # with Minitest::Spec
8
+ watch(%r|^spec/(.*)_spec\.rb|)
9
+ watch(%r|^lib/(.*)\.rb|) { |m| "spec/#{m[1]}_spec.rb" }
10
+ watch(%r|^spec/spec_helper\.rb|) { "spec" }
11
+ end
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
data/cgraph.gemspec ADDED
@@ -0,0 +1,20 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |gem|
4
+ gem.authors = ["Martin Schneider"]
5
+ gem.email = ["martin.schneider@pludoni.de"]
6
+ gem.description = %q{}
7
+ gem.summary = %q{}
8
+ gem.homepage = ""
9
+
10
+ gem.files = `git ls-files`.split($\)
11
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
12
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
13
+ gem.name = "cgraph"
14
+ gem.require_paths = ["lib"]
15
+ gem.version = "0.0.1"
16
+ gem.add_development_dependency "guard-minitest"
17
+ gem.add_development_dependency "minitest"
18
+
19
+ gem.add_dependency "ruby-graphviz"
20
+ end
data/lib/cgraph.rb ADDED
@@ -0,0 +1,85 @@
1
+ require 'graphviz'
2
+ module Cgraph
3
+ class Entity
4
+ @@count = 0
5
+ @@names = []
6
+ attr_accessor :picture, :outgoing, :label, :group
7
+ attr_reader :name, :id
8
+ def initialize name
9
+ @name = Entity.check_name name
10
+ @id = Entity.get_id
11
+ @picture = ""
12
+ @group = ""
13
+ @outgoing = []
14
+ end
15
+ def self.clear_namelist
16
+ @@names = []
17
+ end
18
+ def label
19
+ return @name if @label.nil?
20
+ @label
21
+ end
22
+
23
+ private
24
+ def self.get_id
25
+ @@count += 1
26
+ end
27
+ def self.check_name name
28
+ throw :same_name_error if @@names.include? name
29
+ @@names.push name
30
+ name
31
+ end
32
+ end
33
+
34
+ class Graph
35
+ attr_reader :entities, :connections
36
+ def initialize data, info
37
+ Entity.clear_namelist
38
+ @connections = []
39
+ @entities = []
40
+ generate_entities data, info
41
+ generate_connections data
42
+ end
43
+ def generate_entities data, infos = nil
44
+ data.flatten.uniq.each do |name|
45
+ tmp = Entity.new name
46
+ if !infos.nil? && !infos[name].nil?
47
+ info = infos[name]
48
+ tmp.label = info[:label] || ""
49
+ tmp.picture = info[:picture] || ""
50
+ tmp.group = info[:group] || ""
51
+ end
52
+ @entities.push tmp
53
+ end
54
+ end
55
+ def generate_connections data
56
+ @connections = data.group_by do |a,b|
57
+ a+b; [a,b]
58
+ end.map do |a,b|
59
+ [a ,{count: b.count}]
60
+ end
61
+ end
62
+ def find_entity name
63
+ @entities.each do |e|
64
+ return e if e.name == name
65
+ end
66
+ end
67
+ def generate_graph
68
+ graph = GraphViz.new(:G, :type => :digraph)
69
+ graph = add_connections_to_graph graph
70
+ graph.output(:png => "test.png")
71
+ graph
72
+ end
73
+ def add_connections_to_graph graph
74
+ @connections.each do |conn|
75
+ p conn
76
+ tupel = conn.first
77
+
78
+ options = {penwidth: conn[1][:count]}
79
+ graph.add_edges tupel[0],tupel[1],options
80
+ end
81
+ graph
82
+ end
83
+
84
+ end
85
+ end
@@ -0,0 +1,67 @@
1
+ require_relative 'spec_helper'
2
+ require_relative 'spec_data'
3
+ require 'cgraph'
4
+ include Cgraph
5
+ describe Entity do
6
+ after do
7
+ Entity.clear_namelist
8
+ end
9
+ let(:e) {Entity.new "abc" }
10
+ let(:f) {Entity.new "blub" }
11
+ it "has automagic id" do
12
+ e.id.must_be_instance_of Fixnum
13
+ e.id.wont_equal f.id
14
+ end
15
+ it "must have a name" do
16
+ e.name.must_equal "abc"
17
+ end
18
+ it "has a label" do
19
+ e.label.must_equal "abc"
20
+ e.label = "xyz"
21
+ e.label.must_equal "xyz"
22
+ e.name.must_equal "abc"
23
+ end
24
+ it "can have a group" do
25
+ e.group.must_equal ""
26
+ e.group = "woo"
27
+ e.group.must_equal "woo"
28
+ end
29
+ it "should not allow same names" do
30
+ Entity.new("blub")
31
+ proc {Entity.new("blub")}.must_throw :same_name_error
32
+ end
33
+ it "can have a picture" do
34
+ e.picture.must_equal ""
35
+ e.picture = "link"
36
+ e.picture.must_equal "link"
37
+ end
38
+ it "knows the outgoing connections" do
39
+ e.outgoing.must_be_instance_of Array
40
+ end
41
+ end
42
+
43
+ describe Graph do
44
+ let(:g) {Graph.new TEST_CONNECTIONS, TEST_ENTITIES}
45
+
46
+ it "should take an array, and a hash as parameter" do
47
+ Graph.new [], {}
48
+ end
49
+ it "should create 3 Entities with the given data" do
50
+ g.entities.count.must_equal 3
51
+ end
52
+ it "should find entity by name" do
53
+ g.find_entity("peter").name.must_equal "peter"
54
+ end
55
+ it "should create connections between the entities" do
56
+ g.connections.must_be_kind_of Array
57
+ g.connections.count.must_be :>, 0
58
+ end
59
+ it "should generate an basic graphviz graph" do
60
+ g.generate_graph.to_s.must_match /digraph/
61
+ end
62
+ it "should use the info data to enhance the entities" do
63
+ g.find_entity("peter").label.must_equal "Peter Pan"
64
+ g.find_entity("paul").picture.must_equal "logo_url"
65
+
66
+ end
67
+ end
data/spec/spec_data.rb ADDED
@@ -0,0 +1,12 @@
1
+ TEST_ENTITIES = {
2
+ "peter" => { label: "Peter Pan"},
3
+ "paul" => { picture: "logo_url", label: "Paulchen Panther"},
4
+ "pedro" => { }
5
+ }
6
+ TEST_CONNECTIONS =
7
+ [
8
+ ["peter","paul"],
9
+ ["peter","paul"],
10
+ ["peter","paul"],
11
+ ["peter","pedro"]
12
+ ]
@@ -0,0 +1,3 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require 'minitest/spec'
metadata ADDED
@@ -0,0 +1,91 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cgraph
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Martin Schneider
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-08-31 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: guard-minitest
16
+ requirement: &20170240 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *20170240
25
+ - !ruby/object:Gem::Dependency
26
+ name: minitest
27
+ requirement: &20186200 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *20186200
36
+ - !ruby/object:Gem::Dependency
37
+ name: ruby-graphviz
38
+ requirement: &20185780 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *20185780
47
+ description: ''
48
+ email:
49
+ - martin.schneider@pludoni.de
50
+ executables: []
51
+ extensions: []
52
+ extra_rdoc_files: []
53
+ files:
54
+ - .gitignore
55
+ - Gemfile
56
+ - Gemfile.lock
57
+ - Guardfile
58
+ - Rakefile
59
+ - cgraph.gemspec
60
+ - lib/cgraph.rb
61
+ - spec/cgraph_spec.rb
62
+ - spec/spec_data.rb
63
+ - spec/spec_helper.rb
64
+ homepage: ''
65
+ licenses: []
66
+ post_install_message:
67
+ rdoc_options: []
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ! '>='
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ requirements: []
83
+ rubyforge_project:
84
+ rubygems_version: 1.8.10
85
+ signing_key:
86
+ specification_version: 3
87
+ summary: ''
88
+ test_files:
89
+ - spec/cgraph_spec.rb
90
+ - spec/spec_data.rb
91
+ - spec/spec_helper.rb