railroady 1.3.0 → 1.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8f5ab1921e48623ca0993f9c7ca08186802204b3
4
- data.tar.gz: eb23360fc687b72eddcba86d3eba896a2b3d791c
3
+ metadata.gz: 2c445e74b5659404f61ab558a1bf02f496d7b34c
4
+ data.tar.gz: f5a44d738815114e732b44c650129ff6870a710f
5
5
  SHA512:
6
- metadata.gz: 5956104262321ebcde50f24d5eee2b6a043f9a7972b613a041270d55851b811cc169ee32d8ef5fecbbe67a1e3d5a8abc86ae78efa0e8cd35a456b76289d24841
7
- data.tar.gz: c64b8551d6d1824a01193862f1b188166197b3825d12576aa08eba471d7e6ea0df8f1c25747d592a29c32fc6c5d7b0fcb557728f39edfb232d3c6ef70500369d
6
+ metadata.gz: 7fe0e9ecb631a4482179083fd47cbe75316ea3cfa39c48e6df315a802108336d6dba8b9ff94670125be8cc2486a7846a00d8e50b75aa8b7a0aa24b2f83fe6751
7
+ data.tar.gz: 4df37c87884a01dca2859f2ba244652c4c58099abddc9907d30d31dddfcd0ece044fd05c8a3de07497a8a9c8b93bb95f7e938b607599823196434d1f5a1c484b
data/Guardfile CHANGED
@@ -46,5 +46,4 @@ guard :minitest do
46
46
  # watch(%r{^lib/(.+)\.rb$}) { |m| "test/lib/#{m[1]}_test.rb" }
47
47
  # watch(%r{^test/.+_test\.rb$})
48
48
  # watch(%r{^test/test_helper\.rb$}) { 'test' }
49
-
50
49
  end
data/Rakefile CHANGED
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env rake
2
- require "bundler/gem_tasks"
3
-
2
+ require 'bundler/gem_tasks'
3
+
4
4
  require 'rake/testtask'
5
-
5
+
6
6
  Rake::TestTask.new do |t|
7
7
  t.libs << 'lib/railroady'
8
8
  t.test_files = FileList['test/lib/railroady/*_spec.rb']
9
9
  t.verbose = true
10
10
  end
11
-
12
- task :default => :test
11
+
12
+ task default: :test
data/bin/railroady CHANGED
@@ -19,13 +19,13 @@
19
19
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
20
20
  require 'railroady'
21
21
 
22
- APP_NAME = "railroady"
23
- APP_HUMAN_NAME = "RailRoady"
22
+ APP_NAME = 'railroady'
23
+ APP_HUMAN_NAME = 'RailRoady'
24
24
  # APP_VERSION = [RailRoady::VERSION::MAJOR, RailRoady::VERSION::MINOR, RailRoady::VERSION::PATCH]
25
25
  APP_VERSION = RailRoady::VERSION
26
- COPYRIGHT = "Copyright (C) 2007-2008 Javier Smaldone, 2009 Peter Hoeg, 2010 Preston Lee"
26
+ COPYRIGHT = 'Copyright (C) 2007-2008 Javier Smaldone, 2009 Peter Hoeg, 2010 Preston Lee'
27
27
 
28
- options = OptionsStruct.new({:app_name => APP_NAME, :app_human_name => APP_HUMAN_NAME, :app_version =>APP_VERSION, :copyright =>COPYRIGHT})
28
+ options = OptionsStruct.new(app_name: APP_NAME, app_human_name: APP_HUMAN_NAME, app_version: APP_VERSION, copyright: COPYRIGHT)
29
29
 
30
30
  options.parse ARGV
31
31
 
@@ -44,8 +44,8 @@ when 'controllers'
44
44
  when 'aasm'
45
45
  diagram = AasmDiagram.new(options)
46
46
  else
47
- STDERR.print "#{APP_HUMAN_NAME} v#{APP_VERSION}\n" +
48
- "Error: You must supply a command\n" +
47
+ STDERR.print "#{APP_HUMAN_NAME} v#{APP_VERSION}\n" \
48
+ "Error: You must supply a command\n" \
49
49
  " (try #{APP_NAME} -h)\n\n"
50
50
  exit 1
51
51
  end
@@ -56,4 +56,3 @@ diagram.generate
56
56
  Dir.chdir(old_dir)
57
57
 
58
58
  diagram.print
59
-
data/lib/railroady.rb CHANGED
@@ -1,5 +1,5 @@
1
- ['version', 'options_struct', 'models_diagram', 'controllers_diagram', 'aasm_diagram'].each { |f| require "railroady/#{f}" }
1
+ %w(version options_struct models_diagram controllers_diagram aasm_diagram).each { |f| require "railroady/#{f}" }
2
2
 
3
3
  module RailRoady
4
4
  require 'railroady/railtie' if defined?(Rails)
5
- end
5
+ end
@@ -10,9 +10,8 @@ require 'railroady/app_diagram'
10
10
 
11
11
  # Diagram for Acts As State Machine
12
12
  class AasmDiagram < AppDiagram
13
-
14
13
  def initialize(options = OptionsStruct.new)
15
- #options.exclude.map! {|e| e = "app/models/" + e}
14
+ # options.exclude.map! {|e| e = "app/models/" + e}
16
15
  super options
17
16
  @graph.diagram_type = 'Models'
18
17
  # Processed habtm associations
@@ -27,10 +26,10 @@ class AasmDiagram < AppDiagram
27
26
  end
28
27
  end
29
28
 
30
- def get_files(prefix ='')
31
- files = !@options.specify.empty? ? Dir.glob(@options.specify) : Dir.glob(prefix + "app/models/**/*.rb")
32
- files += Dir.glob("vendor/plugins/**/app/models/*.rb") if @options.plugins_models
33
- files -= Dir.glob(prefix + "app/models/concerns/**/*.rb") unless @options.include_concerns
29
+ def get_files(prefix = '')
30
+ files = !@options.specify.empty? ? Dir.glob(@options.specify) : Dir.glob(prefix + 'app/models/**/*.rb')
31
+ files += Dir.glob('vendor/plugins/**/app/models/*.rb') if @options.plugins_models
32
+ files -= Dir.glob(prefix + 'app/models/concerns/**/*.rb') unless @options.include_concerns
34
33
  files -= Dir.glob(@options.exclude)
35
34
  files
36
35
  end
@@ -39,20 +38,17 @@ class AasmDiagram < AppDiagram
39
38
 
40
39
  # Load model classes
41
40
  def load_classes
42
- begin
43
- disable_stdout
44
- get_files.each {|m| require m }
45
- enable_stdout
46
- rescue LoadError
47
- enable_stdout
48
- print_error "model classes"
49
- raise
50
- end
41
+ disable_stdout
42
+ get_files.each { |m| require m }
43
+ enable_stdout
44
+ rescue LoadError
45
+ enable_stdout
46
+ print_error 'model classes'
47
+ raise
51
48
  end # load_classes
52
49
 
53
50
  # Process a model class
54
51
  def process_class(current_class)
55
-
56
52
  STDERR.print "\tProcessing #{current_class}\n" if @options.verbose
57
53
 
58
54
  # Only interested in acts_as_state_machine models.
@@ -67,7 +63,7 @@ class AasmDiagram < AppDiagram
67
63
  STDERR.print "\t\tprocessing as acts_as_state_machine\n" if @options.verbose
68
64
  current_class.states.each do |state_name|
69
65
  state = current_class.read_inheritable_attribute(:states)[state_name]
70
- node_shape = (current_class.initial_state === state_name) ? ", peripheries = 2" : ""
66
+ node_shape = (current_class.initial_state == state_name) ? ', peripheries = 2' : ''
71
67
  node_attribs << "#{current_class.name.downcase}_#{state_name} [label=#{state_name} #{node_shape}];"
72
68
  end
73
69
  @graph.add_node [node_type, current_class.name, node_attribs]
@@ -75,11 +71,11 @@ class AasmDiagram < AppDiagram
75
71
  current_class.read_inheritable_attribute(:transition_table).each do |event_name, event|
76
72
  event.each do |transition|
77
73
  @graph.add_edge [
78
- 'event',
79
- current_class.name.downcase + "_" + transition.from.to_s,
80
- current_class.name.downcase + "_" + transition.to.to_s,
81
- event_name.to_s
82
- ]
74
+ 'event',
75
+ current_class.name.downcase + '_' + transition.from.to_s,
76
+ current_class.name.downcase + '_' + transition.to.to_s,
77
+ event_name.to_s
78
+ ]
83
79
  end
84
80
  end
85
81
  end
@@ -90,7 +86,7 @@ class AasmDiagram < AppDiagram
90
86
 
91
87
  STDERR.print "\t\tprocessing as aasm\n" if @options.verbose
92
88
  current_class.aasm.states.each do |state|
93
- node_shape = (current_class.aasm.initial_state === state.name) ? ", peripheries = 2" : ""
89
+ node_shape = (current_class.aasm.initial_state == state.name) ? ', peripheries = 2' : ''
94
90
  node_attribs << "#{current_class.name.downcase}_#{state.name} [label=#{state.name} #{node_shape}];"
95
91
  end
96
92
  @graph.add_node [node_type, current_class.name, node_attribs]
@@ -98,13 +94,12 @@ class AasmDiagram < AppDiagram
98
94
  current_class.aasm.events.each do |event_name, event|
99
95
  event.transitions.each do |transition|
100
96
  @graph.add_edge [
101
- 'event',
102
- current_class.name.downcase + "_" + transition.from.to_s,
103
- current_class.name.downcase + "_" + transition.to.to_s,
104
- event_name.to_s
105
- ]
97
+ 'event',
98
+ current_class.name.downcase + '_' + transition.from.to_s,
99
+ current_class.name.downcase + '_' + transition.to.to_s,
100
+ event_name.to_s
101
+ ]
106
102
  end
107
103
  end
108
104
  end
109
-
110
105
  end # class AasmDiagram
@@ -8,14 +8,12 @@ require 'railroady/diagram_graph'
8
8
 
9
9
  # Root class for RailRoady diagrams
10
10
  class AppDiagram
11
-
12
11
  def initialize(options = OptionsStruct.new)
13
12
  @options = options
14
13
  @graph = DiagramGraph.new
15
14
  @graph.show_label = @options.label
16
15
  @graph.alphabetize = @options.alphabetize
17
16
  end
18
-
19
17
 
20
18
  # Print diagram
21
19
  def print
@@ -28,18 +26,16 @@ class AppDiagram
28
26
  exit 2
29
27
  end
30
28
  end
31
-
32
- if @options.xmi
33
- STDERR.print "Generating XMI diagram\n" if @options.verbose
34
- STDOUT.print @graph.to_xmi
29
+
30
+ if @options.xmi
31
+ STDERR.print "Generating XMI diagram\n" if @options.verbose
32
+ STDOUT.print @graph.to_xmi
35
33
  else
36
- STDERR.print "Generating DOT graph\n" if @options.verbose
37
- STDOUT.print @graph.to_dot
34
+ STDERR.print "Generating DOT graph\n" if @options.verbose
35
+ STDOUT.print @graph.to_dot
38
36
  end
39
37
 
40
- if @options.output
41
- STDOUT.reopen(old_stdout)
42
- end
38
+ STDOUT.reopen(old_stdout) if @options.output
43
39
  end # print
44
40
 
45
41
  def process
@@ -49,7 +45,7 @@ class AppDiagram
49
45
  # get all engines
50
46
  def engines
51
47
  engines = []
52
-
48
+
53
49
  if defined?(Rails)
54
50
  engines = if Rails::Application::Railties.respond_to?(:engines)
55
51
  Rails::Application::Railties.engines
@@ -61,9 +57,8 @@ class AppDiagram
61
57
  engines
62
58
  end
63
59
 
60
+ private
64
61
 
65
- private
66
-
67
62
  # Load Rails application's environment
68
63
  def load_environment
69
64
  STDERR.print "Loading application environment\n" if @options.verbose
@@ -74,7 +69,7 @@ class AppDiagram
74
69
  enable_stdout
75
70
  rescue LoadError
76
71
  enable_stdout
77
- print_error "application environment"
72
+ print_error 'application environment'
78
73
  raise
79
74
  end
80
75
  STDERR.print "Loading application classes as we go\n" if @options.verbose
@@ -83,28 +78,26 @@ class AppDiagram
83
78
  # Prevents Rails application from writing to STDOUT
84
79
  def disable_stdout
85
80
  @old_stdout = STDOUT.dup
86
- #via Tomas Matousek, http://www.ruby-forum.com/topic/205887
87
- STDOUT.reopen(::RUBY_PLATFORM =~ /djgpp|(cyg|ms|bcc)win|mingw/? "NUL" : "/dev/null")
81
+ # via Tomas Matousek, http://www.ruby-forum.com/topic/205887
82
+ STDOUT.reopen(::RUBY_PLATFORM =~ /djgpp|(cyg|ms|bcc)win|mingw/ ? 'NUL' : '/dev/null')
88
83
  end
89
84
 
90
- # Restore STDOUT
85
+ # Restore STDOUT
91
86
  def enable_stdout
92
87
  STDOUT.reopen(@old_stdout)
93
88
  end
94
89
 
95
-
96
90
  # Print error when loading Rails application
97
91
  def print_error(type)
98
- STDERR.print "Error loading #{type}.\n (Are you running " +
92
+ STDERR.print "Error loading #{type}.\n (Are you running " \
99
93
  "#{@options.app_name} on the aplication's root directory?)\n\n"
100
94
  end
101
95
 
102
96
  # Extract class name from filename
103
97
  def extract_class_name(filename)
104
- #filename.split('/')[2..-1].join('/').split('.').first.camelize
98
+ # filename.split('/')[2..-1].join('/').split('.').first.camelize
105
99
  # Fixed by patch from ticket #12742
106
100
  # File.basename(filename).chomp(".rb").camelize
107
- filename.split('/')[2..-1].collect { |i| i.camelize }.join('::').chomp(".rb")
101
+ filename.split('/')[2..-1].collect(&:camelize).join('::').chomp('.rb')
108
102
  end
109
-
110
103
  end # class AppDiagram
@@ -8,13 +8,12 @@ require 'railroady/app_diagram'
8
8
 
9
9
  # RailRoady controllers diagram
10
10
  class ControllersDiagram < AppDiagram
11
-
12
11
  # as of Rails 2.3 the file is no longer application.rb but instead
13
12
  # application_controller.rb
14
13
  APP_CONTROLLER = File.exist?('app/controllers/application.rb') ? 'app/controllers/application.rb' : 'app/controllers/application_controller.rb'
15
14
 
16
15
  def initialize(options = OptionsStruct.new)
17
- #options.exclude.map! {|e| "app/controllers/" + e}
16
+ # options.exclude.map! {|e| "app/controllers/" + e}
18
17
  super options
19
18
  @graph.diagram_type = 'Controllers'
20
19
  end
@@ -32,66 +31,61 @@ class ControllersDiagram < AppDiagram
32
31
  begin
33
32
  process_class class_name.constantize
34
33
  rescue Exception
35
- STDERR.print "Warning: exception #{$!} raised while trying to load controller class #{f}"
34
+ STDERR.print "Warning: exception #{$ERROR_INFO} raised while trying to load controller class #{f}"
36
35
  end
37
- end
36
+ end
38
37
  end # generate
39
38
 
40
- def get_files(prefix ='')
41
- files = !@options.specify.empty? ? Dir.glob(@options.specify) : Dir.glob(prefix << "app/controllers/**/*_controller.rb")
42
- files += get_engine_files if @options.engine_controllers
39
+ def get_files(prefix = '')
40
+ files = !@options.specify.empty? ? Dir.glob(@options.specify) : Dir.glob(prefix << 'app/controllers/**/*_controller.rb')
41
+ files += engine_files if @options.engine_controllers
43
42
  files -= Dir.glob(@options.exclude)
44
43
  files
45
44
  end
46
-
47
- def get_engine_files
48
- engines.collect { |engine| Dir.glob("#{engine.root.to_s}/app/controllers/**/*_controller.rb")}.flatten
45
+
46
+ def engine_files
47
+ engines.collect { |engine| Dir.glob("#{engine.root}/app/controllers/**/*_controller.rb") }.flatten
49
48
  end
50
-
49
+
51
50
  def extract_class_name(filename)
52
- controller_index = filename.split('/').index("controllers") + 1
53
- filename.split('/')[controller_index..-1].collect { |i| i.camelize }.join('::').chomp(".rb")
51
+ filename.match(/.*\/controllers\/(.*).rb$/)[1].camelize
54
52
  end
55
53
 
56
-
57
-
58
54
  private
55
+
59
56
  # Load controller classes
60
57
  def load_classes
61
- begin
62
- disable_stdout
63
- # ApplicationController must be loaded first
64
- require APP_CONTROLLER
65
- get_files.each {|c| require "./#{c}" }
66
- enable_stdout
67
- rescue LoadError
68
- enable_stdout
69
- print_error "controller classes"
70
- raise
71
- end
58
+ disable_stdout
59
+ # ApplicationController must be loaded first
60
+ require APP_CONTROLLER
61
+ get_files.each { |c| require "./#{c}" }
62
+ enable_stdout
63
+ rescue LoadError
64
+ enable_stdout
65
+ print_error 'controller classes'
66
+ raise
72
67
  end # load_classes
73
68
 
74
69
  # Proccess a controller class
75
70
  def process_class(current_class)
76
-
77
71
  STDERR.print "\tProcessing #{current_class}\n" if @options.verbose
78
72
 
79
73
  if @options.brief
80
74
  @graph.add_node ['controller-brief', current_class.name]
81
- elsif current_class.is_a? Class
75
+ elsif current_class.is_a? Class
82
76
  # Collect controller's methods
83
- node_attribs = {:public => [],
84
- :protected => [],
85
- :private => []}
86
- current_class.public_instance_methods(false).sort.each { |m|
77
+ node_attribs = { public: [],
78
+ protected: [],
79
+ private: [] }
80
+ current_class.public_instance_methods(false).sort.each do |m|
87
81
  node_attribs[:public] << m
88
- } unless @options.hide_public
89
- current_class.protected_instance_methods(false).sort.each { |m|
82
+ end unless @options.hide_public
83
+ current_class.protected_instance_methods(false).sort.each do |m|
90
84
  node_attribs[:protected] << m
91
- } unless @options.hide_protected
92
- current_class.private_instance_methods(false).sort.each { |m|
93
- node_attribs[:private] << m
94
- } unless @options.hide_private
85
+ end unless @options.hide_protected
86
+ current_class.private_instance_methods(false).sort.each do |m|
87
+ node_attribs[:private] << m
88
+ end unless @options.hide_private
95
89
  @graph.add_node ['controller', current_class.name, node_attribs]
96
90
  elsif @options.modules && current_class.is_a?(Module)
97
91
  @graph.add_node ['module', current_class.name]
@@ -104,7 +98,6 @@ class ControllersDiagram < AppDiagram
104
98
  end # process_class
105
99
 
106
100
  def transitive_subclasses_of(klass)
107
- klass.subclasses | klass.subclasses.map {|subklass| transitive_subclasses_of(subklass)}.flatten
101
+ klass.subclasses | klass.subclasses.map { |subklass| transitive_subclasses_of(subklass) }.flatten
108
102
  end
109
-
110
103
  end # class ControllersDiagram
@@ -4,10 +4,8 @@
4
4
  # Copyright 2007-2008 - Javier Smaldone (http://www.smaldone.com.ar)
5
5
  # See COPYING for more details
6
6
 
7
-
8
7
  # RailRoady diagram structure
9
8
  class DiagramGraph
10
-
11
9
  def initialize
12
10
  @diagram_type = ''
13
11
  @show_label = false
@@ -24,90 +22,83 @@ class DiagramGraph
24
22
  @edges << edge
25
23
  end
26
24
 
27
- def diagram_type= (type)
28
- @diagram_type = type
29
- end
25
+ attr_writer :diagram_type
30
26
 
31
- def show_label= (value)
32
- @show_label = value
33
- end
34
-
35
- def alphabetize= (flag)
36
- @alphabetize = flag
37
- end
27
+ attr_writer :show_label
38
28
 
29
+ attr_writer :alphabetize
39
30
 
40
31
  # Generate DOT graph
41
32
  def to_dot
42
- return dot_header +
43
- @nodes.map{|n| dot_node n[0], n[1], n[2]}.join +
44
- @edges.map{|e| dot_edge e[0], e[1], e[2], e[3]}.join +
45
- dot_footer
33
+ dot_header +
34
+ @nodes.map { |n| dot_node n[0], n[1], n[2], n[3] }.join +
35
+ @edges.map { |e| dot_edge e[0], e[1], e[2], e[3] }.join +
36
+ dot_footer
46
37
  end
47
38
 
48
39
  # Generate XMI diagram (not yet implemented)
49
40
  def to_xmi
50
- STDERR.print "Sorry. XMI output not yet implemented.\n\n"
51
- return ""
41
+ STDERR.print "Sorry. XMI output not yet implemented.\n\n"
42
+ ''
52
43
  end
53
44
 
54
45
  private
55
46
 
56
47
  # Build DOT diagram header
57
48
  def dot_header
58
- result = "digraph #{@diagram_type.downcase}_diagram {\n" +
59
- "\tgraph[overlap=false, splines=true]\n"
49
+ result = "digraph #{@diagram_type.downcase}_diagram {\n" \
50
+ "\tgraph[overlap=false, splines=true, bgcolor=\"none\"]\n"
60
51
  result += dot_label if @show_label
61
- return result
52
+ result
62
53
  end
63
54
 
64
55
  # Build DOT diagram footer
65
56
  def dot_footer
66
- return "}\n"
57
+ "}\n"
67
58
  end
68
59
 
69
60
  # Build diagram label
70
61
  def dot_label
71
- return "\t_diagram_info [shape=\"plaintext\", " +
72
- "label=\"#{@diagram_type} diagram\\l" +
73
- "Date: #{Time.now.strftime "%b %d %Y - %H:%M"}\\l" +
74
- (defined?(ActiveRecord::Migrator) ? "Migration version: " +
75
- "#{ActiveRecord::Migrator.current_version}\\l" : "") +
76
- "Generated by #{APP_HUMAN_NAME} #{APP_VERSION}\\l"+
77
- "http://railroady.prestonlee.com" +
62
+ "\t_diagram_info [shape=\"plaintext\", " \
63
+ "label=\"#{@diagram_type} diagram\\l" \
64
+ "Date: #{Time.now.strftime '%b %d %Y - %H:%M'}\\l" +
65
+ (defined?(ActiveRecord::Migrator) ? 'Migration version: ' \
66
+ "#{ActiveRecord::Migrator.current_version}\\l" : '') +
67
+ "Generated by #{APP_HUMAN_NAME} #{APP_VERSION}\\l" + 'http://railroady.prestonlee.com' \
78
68
  "\\l\", fontsize=13]\n"
79
69
  end
80
70
 
81
71
  # Build a DOT graph node
82
- def dot_node(type, name, attributes=nil)
72
+ def dot_node(type, name, attributes = nil, custom_options = '')
83
73
  case type
84
74
  when 'model'
85
- options = 'shape=Mrecord, label="{' + name + '|'
86
- options += attributes.sort_by { |s| @alphabetize ? s : nil }.join('\l')
87
- options += '\l}"'
75
+ options = 'shape=Mrecord, label="{' + name + '|'
76
+ options += attributes.sort_by { |s| @alphabetize ? s : nil }.join('\l')
77
+ options += '\l}"'
88
78
  when 'model-brief'
89
- options = ''
79
+ options = ''
90
80
  when 'class'
91
- options = 'shape=record, label="{' + name + '|}"'
81
+ options = 'shape=record, label="{' + name + '|}"'
92
82
  when 'class-brief'
93
- options = 'shape=box'
83
+ options = 'shape=box'
94
84
  when 'controller'
95
- options = 'shape=Mrecord, label="{' + name + '|'
96
- public_methods = attributes[:public].sort_by { |s| @alphabetize ? s : nil }.join('\l')
97
- protected_methods = attributes[:protected].sort_by { |s| @alphabetize ? s : nil }.join('\l')
98
- private_methods = attributes[:private].sort_by { |s| @alphabetize ? s : nil }.join('\l')
99
- options += public_methods + '\l|' + protected_methods + '\l|' +
100
- private_methods + '\l'
101
- options += '}"'
85
+ options = 'shape=Mrecord, label="{' + name + '|'
86
+ public_methods = attributes[:public].sort_by { |s| @alphabetize ? s : nil }.join('\l')
87
+ protected_methods = attributes[:protected].sort_by { |s| @alphabetize ? s : nil }.join('\l')
88
+ private_methods = attributes[:private].sort_by { |s| @alphabetize ? s : nil }.join('\l')
89
+ options += public_methods + '\l|' + protected_methods + '\l|' +
90
+ private_methods + '\l'
91
+ options += '}"'
102
92
  when 'controller-brief'
103
- options = ''
93
+ options = ''
104
94
  when 'module'
105
- options = 'shape=box, style=dotted, label="' + name + '"'
95
+ options = 'shape=box, style=dotted, label="' + name + '"'
106
96
  when 'aasm'
107
- # Return subgraph format
108
- return "subgraph cluster_#{name.downcase} {\n\tlabel = #{quote(name)}\n\t#{attributes.join("\n ")}}"
97
+ # Return subgraph format
98
+ return "subgraph cluster_#{name.downcase} {\n\tlabel = #{quote(name)}\n\t#{attributes.join("\n ")}}"
109
99
  end # case
110
- return "\t#{quote(name)} [#{options}]\n"
100
+ options = [options, custom_options].compact.join(', ')
101
+ "\t#{quote(name)} [#{options}]\n"
111
102
  end # dot_node
112
103
 
113
104
  # Build a DOT graph edge
@@ -117,22 +108,21 @@ class DiagramGraph
117
108
  suffix = ", dir=both color=#{edge_color}"
118
109
  case type
119
110
  when 'one-one'
120
- options += "arrowtail=odot, arrowhead=dot" + suffix
111
+ options += 'arrowtail=odot, arrowhead=dot' + suffix
121
112
  when 'one-many'
122
- options += "arrowtail=odot, arrowhead=crow" + suffix
113
+ options += 'arrowtail=odot, arrowhead=crow' + suffix
123
114
  when 'many-many'
124
- options += "arrowtail=crow, arrowhead=crow" + suffix
115
+ options += 'arrowtail=crow, arrowhead=crow' + suffix
125
116
  when 'is-a'
126
- options += 'arrowhead="none", arrowtail="onormal"'
117
+ options += 'arrowhead="none", arrowtail="onormal"'
127
118
  when 'event'
128
- options += "fontsize=10"
119
+ options += 'fontsize=10'
129
120
  end
130
- return "\t#{quote(from)} -> #{quote(to)} [#{options}]\n"
121
+ "\t#{quote(from)} -> #{quote(to)} [#{options}]\n"
131
122
  end # dot_edge
132
123
 
133
124
  # Quotes a class name
134
125
  def quote(name)
135
126
  '"' + name.to_s + '"'
136
127
  end
137
-
138
128
  end # class DiagramGraph