gviz 0.1.2 → 0.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c6238dfcf0f09e9b3afd83cb9a4815af62b517f2
4
- data.tar.gz: cc3d2435e20ad0a9b3c83f73e87ba06bb096e4d8
3
+ metadata.gz: 9143e573c91a80a888a66007403500d36f5406dc
4
+ data.tar.gz: d8512ead6616fd21edd84d61730ec0c70af97682
5
5
  SHA512:
6
- metadata.gz: 05045c7c238b0687ec198fa275880abd944eb6311c78dff31a49e822ccf97f6a360680e1b84d479574e746582816d88d0a829e24fbc5758e84f4cd624439d9cc
7
- data.tar.gz: 5b84db6cbc2b4baf86d005726490ded619dd0fab929e7334ad791d873bad875e5202aeaf88198293787b45ef972d44578114e100622b61d12ac217022432f0dd
6
+ metadata.gz: 8c9af9c343b65c8d03669d4b604934fcbb3c0e65a88f2da3701be27f87acc2a199bcdb83237cdb6492736c419661438d5157a50e63d9349d6ec81622102e9586
7
+ data.tar.gz: cf4ee9d30253268b5c6115491ec7f2f136f89f5d82667cfbd41e69b3d06ba13da4e7c8ecbd5547b32767142cbb05365ed1d4e6af4b950da0445b27bf338b17fb
data/README.md CHANGED
@@ -118,14 +118,12 @@ Example of graph.ru:
118
118
 
119
119
  Usage:
120
120
 
121
- gviz [options] <graph filename>
121
+ gviz build [FILE] [options]
122
122
 
123
123
  where [options] are:
124
124
 
125
125
  --name, -n : Graph name (default: G)
126
126
  --type, -t : Graph type (default: digraph)
127
- --version, -v: Print version and exit
128
- --help, -h: Show this message
129
127
 
130
128
  ## Contributing
131
129
 
data/bin/gviz CHANGED
@@ -1,91 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
2
  require "gviz"
3
- require "trollop"
4
3
 
5
- class OptionParser
6
- class << self
7
- def parse!
8
- opts = build_opts
9
- if man = opts[:man]
10
- print_manual(man)
11
- else
12
- draw_graph(opts)
13
- end
14
- end
15
-
16
- def build_opts
17
- Trollop::options do
18
- version "Gviz #{Gviz::VERSION} (c) 2012 kyoendo"
19
- banner ~<<-EOS
20
- Gviz is a tool for generating graphviz dot data with simple Ruby's syntax.
21
- It works with a graph spec file in which a graph spec describes with
22
- several gviz commands. If 'graph.ru' file exist on a directory of the
23
- execution, it will be automatically loaded as a graph spec file.
24
-
25
- Example of graph.ru:
26
-
27
- route :main => [:init, :parse, :cleanup, :printf]
28
- route :init => :make, :parse => :execute
29
- route :execute => [:make, :compare, :printf]
30
-
31
- save(:sample, :png)
32
-
33
- Usage:
34
-
35
- gviz [options] <graph filename>
36
-
37
- where [options] are:
38
- EOS
39
-
40
- opt :name, "Graph name", :default => 'G'
41
- opt :type, "Graph type", :default => 'digraph'
42
- opt :file, "Graph file", :default => 'graph.ru'
43
- opt :man, "Show Graphviz attributes (ex. node, shapes, color_names)", :type => :string
44
- end
45
- end
46
-
47
- def draw_graph(opts)
48
- Graph(opts[:name], opts[:type]) { instance_eval ::File.read(opts[:file]) }
49
- rescue Errno::ENOENT
50
- abort "graph file `#{opts[:file]}` not found"
51
- end
52
-
53
- def print_manual(man)
54
- attrs = %w(graph node edge subgraph cluster)
55
- consts = %w(color_names color_schemes full_color_names
56
- full_color_schemes arrows shapes layouts
57
- output_formats svg_color_names dark_colors)
58
- man_man = ~<<-EOS
59
- \e[35m--man(-m) accepts any of them:\e[0m
60
- graph, node, edge, subgraph, cluster,
61
- arrows, shapes, layouts, output_formats
62
- color_names, color_schemes,
63
- full_color_names, full_color_schemes,
64
- svg_color_names, dark_colors
65
- EOS
66
-
67
- res =
68
- case man.downcase
69
- when 'man'
70
- man_man
71
- when *attrs
72
- format_attrs(man)
73
- when *consts
74
- ["\e[35m#{man.capitalize.gsub('_', ' ')}:\e[0m"] +
75
- Gviz.const_get(man.upcase).join_by(", ", 70).map { |l| " " + l }
76
- else
77
- "Error: unknown subcommand '#{man}' for --man\n" + man_man
78
- end
79
- puts res
80
- end
81
-
82
- def format_attrs(target)
83
- header = ["\e[35m#{target.capitalize} attributes (type|default|minimum|notes):\e[0m"]
84
- attrs = Gviz.ATTR(target).map { |attr, desc| " #{attr} (#{desc.join(" | ")})" }
85
- [header] + attrs
86
- end
87
- end
88
- private_class_method :build_opts, :draw_graph, :print_manual, :format_attrs
89
- end
90
-
91
- OptionParser.parse!
4
+ Gviz::Command.start(ARGV)
data/gviz.gemspec CHANGED
@@ -18,5 +18,5 @@ Gem::Specification.new do |gem|
18
18
  gem.require_paths = ["lib"]
19
19
  gem.required_ruby_version = '>=1.9.3'
20
20
  gem.add_development_dependency 'rspec'
21
- gem.add_dependency 'trollop'
21
+ gem.add_dependency 'thor'
22
22
  end
data/lib/gviz.rb CHANGED
@@ -7,6 +7,6 @@ def Graph(name=:G, type=:digraph, &blk)
7
7
  Gviz.new(name, type).graph(&blk)
8
8
  end
9
9
 
10
- %w(core node edge version system_extension graphviz_attrs).each do |lib|
10
+ %w(core node edge version system_extension graphviz_attrs command).each do |lib|
11
11
  require_relative 'gviz/' + lib
12
12
  end
@@ -0,0 +1,76 @@
1
+ require "thor"
2
+
3
+ class Gviz::Command < Thor
4
+
5
+ desc "build [FILE]", "Build a graphviz dot data based on a file"
6
+ option :name, aliases:"-n", default:"G"
7
+ option :type, aliases:"-t", default:"digraph"
8
+ def build(file='graph.ru')
9
+ Graph(options[:name], options[:type]) { instance_eval ::File.read(file) }
10
+ rescue Errno::ENOENT
11
+ abort "graph file `#{file}` not found"
12
+ end
13
+
14
+ desc "version", "Show Gviz version"
15
+ def version
16
+ puts "Gviz #{Gviz::VERSION} (c) 2012-2013 kyoendo"
17
+ end
18
+ map "-v" => :version
19
+
20
+ desc "banner", "Describe Gviz usage", hide:true
21
+ def banner
22
+ banner = ~<<-EOS
23
+ Gviz is a tool for generating graphviz dot data with simple Ruby's syntax.
24
+ It works with a graph spec file (defaulting to load 'graph.ru').
25
+
26
+ Example of graph.ru:
27
+
28
+ route :main => [:init, :parse, :cleanup, :printf]
29
+ route :init => :make, :parse => :execute
30
+ route :execute => [:make, :compare, :printf]
31
+
32
+ save(:sample, :png)
33
+
34
+ EOS
35
+ puts banner
36
+ help
37
+ end
38
+ default_task :banner
39
+ map "-h" => :banner
40
+
41
+ desc "man [NAME]", "Show available attributes, constants, colors for graphviz"
42
+ def man(name='')
43
+ attrs = %w(graph node edge subgraph cluster)
44
+ consts = %w(arrows shapes layouts output_formats)
45
+ colors = %w(color_names color_schemes full_color_names
46
+ full_color_schemes svg_color_names dark_colors)
47
+ name = name.downcase
48
+ case name
49
+ when *attrs then puts format_attr(name)
50
+ when *consts then puts consts.map { |c| format_const c }
51
+ when *colors then puts format_const(name)
52
+ when /color/ then puts colors.map { |c| format_const c }
53
+ else
54
+ puts ~<<-EOS
55
+ Specify any of:
56
+ #{attrs.join(', ')}
57
+ #{consts.join(', ')}
58
+ #{colors.join(', ')}
59
+ EOS
60
+ end
61
+ end
62
+
63
+ no_commands do
64
+ def format_attr(target)
65
+ header = ["\e[35m#{target.capitalize} attributes (type|default|minimum|notes):\e[0m"]
66
+ attrs = Gviz.ATTR(target).map { |attr, desc| " #{attr} (#{desc.join(" | ")})" }
67
+ [header] + attrs
68
+ end
69
+
70
+ def format_const(target)
71
+ header = ["\e[35m#{target.capitalize.gsub('_', ' ')}:\e[0m"]
72
+ consts = Gviz.const_get(target.upcase).join_by(", ", 70).map { |l| " " + l }
73
+ [header] + consts
74
+ end
75
+ end
76
+ end
data/lib/gviz/core.rb CHANGED
@@ -115,7 +115,7 @@ class Gviz
115
115
  end
116
116
  end
117
117
 
118
- # +graph+ is a shorcut method.
118
+ # +graph+ is a shortcut method.
119
119
  #
120
120
  # gv = Gviz.new
121
121
  # gv.graph do
data/lib/gviz/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Gviz
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2.0"
3
3
  end
File without changes
@@ -1,89 +1,112 @@
1
1
  require_relative "spec_helper"
2
2
 
3
- ROOT = File.expand_path(File.dirname(__FILE__) + "/..")
4
-
5
- describe "gviz command" do
6
- context "when a graph file exist" do
7
- subject { syscmd "#{ROOT}/bin/gviz -f spec/graph.ru" }
8
- it do
9
- should eql ~<<-EOS
10
- digraph G {
11
- a;
12
- b;
13
- a -> b;
14
- }
15
- EOS
16
- end
3
+ describe Gviz::Command do
4
+ before(:each) do
5
+ $stdout, $stderr = StringIO.new, StringIO.new
6
+ @original_dir = Dir.pwd
7
+ Dir.chdir(source_root)
17
8
  end
18
9
 
19
- context "when a graph file not exist" do
20
- subject { syscmd "#{ROOT}/bin/gviz", :err }
21
- it { should eql "graph file `graph.ru` not found\n" }
10
+ after(:each) do
11
+ $stdout, $stderr = STDOUT, STDERR
12
+ Dir.chdir(@original_dir)
22
13
  end
23
14
 
24
- context "when a name option passed" do
25
- subject { syscmd "#{ROOT}/bin/gviz -n ABC -f spec/graph.ru" }
26
- it do
27
- should eql ~<<-EOS
28
- digraph ABC {
29
- a;
30
- b;
31
- a -> b;
32
- }
15
+ describe '#build' do
16
+ context 'with a graph file' do
17
+ it 'output a dot data' do
18
+ Gviz::Command.start(['build', 'graph.ru'])
19
+ expect($stdout.string).to eq ~<<-EOS
20
+ digraph G {
21
+ a;
22
+ b;
23
+ a -> b;
24
+ }
33
25
  EOS
26
+ end
34
27
  end
35
- end
36
28
 
37
- context "when a type option passed" do
38
- subject { syscmd "#{ROOT}/bin/gviz -t graph -f spec/graph.ru" }
39
- it do
40
- should eql ~<<-EOS
41
- graph G {
42
- a;
43
- b;
44
- a -> b;
45
- }
29
+ context 'without a graph file' do
30
+ it 'read "graph.ru" as a graph file' do
31
+ Gviz::Command.start(['build'])
32
+ expect($stdout.string).to eq ~<<-EOS
33
+ digraph G {
34
+ a;
35
+ b;
36
+ a -> b;
37
+ }
46
38
  EOS
39
+ end
47
40
  end
48
- end
49
41
 
50
- context "when -m with correct attr passed" do
51
- subject { syscmd("#{ROOT}/bin/gviz -m arrows") }
52
- it do
53
- should eql ~<<-EOS
54
- \e[35mArrows:\e[0m
55
- box, lbox, rbox, obox, olbox, orbox, crow, lcrow, rcrow, diamond, ldiamond, rdiamond
56
- oldiamond, ordiamond, dot, odot, inv, linv, rinv, oinv, olinv, orinv, none, normal, lnormal
57
- EOS
42
+ context 'when no graph file found' do
43
+ it 'abort the process' do
44
+ file = "no_existing_file"
45
+ expect{ Gviz::Command.start(['build', file]) }.to raise_error(SystemExit, "graph file `#{file}` not found")
46
+ end
58
47
  end
59
- end
60
48
 
61
- context "when -m with man word passed" do
62
- subject { syscmd "#{ROOT}/bin/gviz -m man" }
63
- it do
64
- should eql ~<<-EOS
65
- \e[35m--man(-m) accepts any of them:\e[0m
66
- graph, node, edge, subgraph, cluster,
67
- arrows, shapes, output_formats
68
- color_names, color_schemes,
69
- full_color_names, full_color_schemes,
70
- svg_color_names, dark_colors
71
- EOS
49
+ context "name option" do
50
+ it 'set a graph name' do
51
+ Gviz::Command.start(['build', '--name', 'ABC'])
52
+ expect($stdout.string).to eq ~<<-EOS
53
+ digraph ABC {
54
+ a;
55
+ b;
56
+ a -> b;
57
+ }
58
+ EOS
59
+ end
60
+ end
61
+
62
+ context "type option" do
63
+ it 'set a graph type' do
64
+ Gviz::Command.start(['build', '--type', 'graph'])
65
+ expect($stdout.string).to eq ~<<-EOS
66
+ graph G {
67
+ a;
68
+ b;
69
+ a -> b;
70
+ }
71
+ EOS
72
+ end
72
73
  end
73
74
  end
74
75
 
75
- context "when -m with incorrect attr passed" do
76
- subject { syscmd "#{ROOT}/bin/gviz -m abc" }
77
- it do
78
- should eql ~<<-EOS
79
- Error: unknown subcommand 'abc' for --man
80
- \e[35m--man(-m) accepts any of them:\e[0m
81
- graph, node, edge, subgraph, cluster,
82
- arrows, shapes, output_formats
83
- color_names, color_schemes,
84
- full_color_names, full_color_schemes,
85
- svg_color_names, dark_colors
86
- EOS
76
+ describe '#man' do
77
+ it 'shows arguments list without argument' do
78
+ Gviz::Command.start(['man'])
79
+ expect($stdout.string).to match /Specify any of/
80
+ end
81
+
82
+ it "shows Graph's attributes" do
83
+ Gviz::Command.start(['man', 'graph'])
84
+ expect($stdout.string).to match /Graph attributes/
85
+ end
86
+
87
+ it "shows Node's attributes" do
88
+ Gviz::Command.start(['man', 'node'])
89
+ expect($stdout.string).to match /Node attributes/
90
+ end
91
+
92
+ it "shows Arrow types" do
93
+ Gviz::Command.start(['man', 'arrows'])
94
+ expect($stdout.string).to match /Arrows/
95
+ end
96
+
97
+ it "shows Output formats" do
98
+ Gviz::Command.start(['man', 'output_formats'])
99
+ expect($stdout.string).to match /Output formats/
100
+ end
101
+
102
+ it "shows Color names" do
103
+ Gviz::Command.start(['man', 'color_names'])
104
+ expect($stdout.string).to match /Color names/
105
+ end
106
+
107
+ it "shows Colors" do
108
+ Gviz::Command.start(['man', 'colors'])
109
+ expect($stdout.string).to match /Color/
87
110
  end
88
111
  end
89
112
  end
data/spec/spec_helper.rb CHANGED
@@ -1,9 +1,13 @@
1
1
  require "gviz"
2
2
  require "rspec"
3
3
  require "stringio"
4
- require "open3"
5
4
 
6
- def syscmd(cmd, io=:out)
7
- idx = [:stdin, :stdout, :stderr].index { |st| st.match /#{io}/ }
8
- Open3.popen3(cmd)[idx].read
5
+ module Helpers
6
+ def source_root
7
+ File.join(File.dirname(__FILE__), 'fixtures')
8
+ end
9
+ end
10
+
11
+ RSpec.configure do |c|
12
+ c.include Helpers
9
13
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gviz
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - kyoendo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-04-01 00:00:00.000000000 Z
11
+ date: 2013-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: trollop
28
+ name: thor
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '>='
@@ -61,13 +61,14 @@ files:
61
61
  - examples/shapes.rb
62
62
  - gviz.gemspec
63
63
  - lib/gviz.rb
64
+ - lib/gviz/command.rb
64
65
  - lib/gviz/core.rb
65
66
  - lib/gviz/edge.rb
66
67
  - lib/gviz/graphviz_attrs.rb
67
68
  - lib/gviz/node.rb
68
69
  - lib/gviz/system_extension.rb
69
70
  - lib/gviz/version.rb
70
- - spec/graph.ru
71
+ - spec/fixtures/graph.ru
71
72
  - spec/gviz_command_spec.rb
72
73
  - spec/gviz_edge_spec.rb
73
74
  - spec/gviz_node_spec.rb
@@ -98,10 +99,11 @@ signing_key:
98
99
  specification_version: 4
99
100
  summary: Ruby's interface of graphviz. It generate a dot file with simple ruby's syntax.
100
101
  test_files:
101
- - spec/graph.ru
102
+ - spec/fixtures/graph.ru
102
103
  - spec/gviz_command_spec.rb
103
104
  - spec/gviz_edge_spec.rb
104
105
  - spec/gviz_node_spec.rb
105
106
  - spec/gviz_spec.rb
106
107
  - spec/spec_helper.rb
107
108
  - spec/system_extension_spec.rb
109
+ has_rdoc: