rails-erd 0.4.3 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
data/.gemtest ADDED
File without changes
data/CHANGES.rdoc CHANGED
@@ -1,3 +1,14 @@
1
+ === 0.4.4:
2
+
3
+ * Added the ability to disable HTML markup in node labels (markup=false). This
4
+ causes .dot files to be compatible with OmniGraffle, which otherwise fails
5
+ to import graphs with HTML node labels (issue reported by Lucas Florio,
6
+ implementation based on template by Troy Anderson).
7
+ * Prevent models named after Graphviz reserved words (Node, Edge) from causing
8
+ errors in .dot files (reported by gguthrie).
9
+ * Improved error messages when Graphviz is throwing errors (reported by
10
+ Michael Irwin).
11
+
1
12
  === 0.4.3:
2
13
 
3
14
  * Display the scale of decimal attributes when set. A decimal attribute with
data/Gemfile CHANGED
@@ -5,8 +5,6 @@ gem "activesupport", "~> 3.0"
5
5
  gem "ruby-graphviz", "~> 0.9.18"
6
6
 
7
7
  group :development do
8
- gem "rake"
9
- gem "bundler", "~> 1.0.0"
10
8
  gem "jeweler", "~> 1.5.2"
11
9
 
12
10
  platforms :ruby do
data/Gemfile.lock CHANGED
@@ -1,18 +1,18 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- activemodel (3.0.3)
5
- activesupport (= 3.0.3)
4
+ activemodel (3.0.4)
5
+ activesupport (= 3.0.4)
6
6
  builder (~> 2.1.2)
7
7
  i18n (~> 0.4)
8
- activerecord (3.0.3)
9
- activemodel (= 3.0.3)
10
- activesupport (= 3.0.3)
8
+ activerecord (3.0.4)
9
+ activemodel (= 3.0.4)
10
+ activesupport (= 3.0.4)
11
11
  arel (~> 2.0.2)
12
12
  tzinfo (~> 0.3.23)
13
13
  activerecord-jdbc-adapter (1.1.1)
14
- activesupport (3.0.3)
15
- arel (2.0.7)
14
+ activesupport (3.0.4)
15
+ arel (2.0.8)
16
16
  bouncy-castle-java (1.5.0145.2)
17
17
  builder (2.1.2)
18
18
  git (1.2.5)
@@ -37,10 +37,8 @@ DEPENDENCIES
37
37
  activerecord (~> 3.0)
38
38
  activerecord-jdbc-adapter
39
39
  activesupport (~> 3.0)
40
- bundler (~> 1.0.0)
41
40
  jdbc-sqlite3
42
41
  jeweler (~> 1.5.2)
43
42
  jruby-openssl
44
- rake
45
43
  ruby-graphviz (~> 0.9.18)
46
44
  sqlite3
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2010 Voormedia B.V.
1
+ Copyright (c) 2010-2011 Voormedia B.V.
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -51,7 +51,7 @@ About Rails ERD
51
51
 
52
52
  Rails ERD was created by Rolf Timmermans (r.timmermans *at* voormedia.com)
53
53
 
54
- Copyright 2010 Voormedia - [www.voormedia.com](http://www.voormedia.com/)
54
+ Copyright 2010-2011 Voormedia - [www.voormedia.com](http://www.voormedia.com/)
55
55
 
56
56
 
57
57
  License
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.3
1
+ 0.4.4
data/lib/rails_erd.rb CHANGED
@@ -4,9 +4,9 @@ require "rails_erd/railtie" if defined? Rails
4
4
  # Welcome to the API documentation of Rails ERD. If you wish to extend or
5
5
  # customise the output that is generated by Rails ERD, you have come to the
6
6
  # right place.
7
- #
7
+ #
8
8
  # == Creating custom output
9
- #
9
+ #
10
10
  # If you want to create your own kind of diagrams, or some other output, a
11
11
  # good starting point is the RailsERD::Diagram class. It can serve as the base
12
12
  # of your output generation code.
@@ -33,7 +33,7 @@ module RailsERD
33
33
  # RailsERD::Diagram will use these options unless overridden.
34
34
  attr_accessor :options
35
35
  end
36
-
36
+
37
37
  module Inspectable # @private :nodoc:
38
38
  def inspection_attributes(*attributes)
39
39
  attribute_inspection = attributes.collect { |attribute|
@@ -54,6 +54,7 @@ module RailsERD
54
54
  :filetype, :pdf,
55
55
  :indirect, true,
56
56
  :inheritance, false,
57
+ :markup, true,
57
58
  :notation, :simple,
58
59
  :orientation, :horizontal,
59
60
  :polymorphism, false,
@@ -40,13 +40,13 @@ module RailsERD
40
40
  # or +:vertical+. Defaults to +horizontal+. The orientation of the
41
41
  # PDF that is generated depends on the amount of hierarchy
42
42
  # in your models.
43
- # title:: The title to add at the top of the diagram. Defaults to
43
+ # title:: The title to add at the top of the diagram. Defaults to
44
44
  # <tt>"YourApplication domain model"</tt>.
45
45
  class Graphviz < Diagram
46
- NODE_LABEL_TEMPLATE = ERB.new(File.read(File.expand_path("templates/node.erb", File.dirname(__FILE__))), nil, "<>") # @private :nodoc:
46
+ NODE_LABEL_TEMPLATES = { :html => "node.html.erb", :record => "node.record.erb" } # @private :nodoc:
47
47
 
48
48
  NODE_WIDTH = 130 # @private :nodoc:
49
-
49
+
50
50
  # Default graph attributes.
51
51
  GRAPH_ATTRIBUTES = {
52
52
  :rankdir => :LR,
@@ -78,16 +78,16 @@ module RailsERD
78
78
  :penwidth => 1.0,
79
79
  :labelangle => 32,
80
80
  :labeldistance => 1.8,
81
- :fontsize => 7
81
+ :fontsize => 7
82
82
  }
83
-
83
+
84
84
  module Simple
85
85
  def entity_style(entity, attributes)
86
86
  {}.tap do |options|
87
87
  options[:fontcolor] = options[:color] = :grey60 if entity.abstract?
88
88
  end
89
89
  end
90
-
90
+
91
91
  def relationship_style(relationship)
92
92
  {}.tap do |options|
93
93
  options[:style] = :dotted if relationship.indirect?
@@ -102,7 +102,7 @@ module RailsERD
102
102
  { :color => :grey60, :arrowtail => :onormal, :arrowhead => :none, :arrowsize => 1.2 }
103
103
  end
104
104
  end
105
-
105
+
106
106
  module Bachman
107
107
  include Simple
108
108
  def relationship_style(relationship)
@@ -121,7 +121,7 @@ module RailsERD
121
121
  end
122
122
  end
123
123
  end
124
-
124
+
125
125
  module Uml
126
126
  include Simple
127
127
  def relationship_style(relationship)
@@ -143,7 +143,7 @@ module RailsERD
143
143
  end
144
144
  end
145
145
  end
146
-
146
+
147
147
  attr_accessor :graph
148
148
 
149
149
  setup do
@@ -156,33 +156,36 @@ module RailsERD
156
156
 
157
157
  # Switch rank direction if we're creating a vertically oriented graph.
158
158
  graph[:rankdir] = :TB if options.orientation == :vertical
159
-
159
+
160
160
  # Title of the graph itself.
161
161
  graph[:label] = "#{title}\\n\\n" if title
162
-
162
+
163
163
  # Setup notation options.
164
164
  extend self.class.const_get(options.notation.to_s.capitalize.to_sym)
165
165
  end
166
-
166
+
167
167
  save do
168
- raise "Saving diagram failed. Output directory '#{File.dirname(filename)}' does not exist." unless File.directory?(File.dirname(filename))
168
+ raise "Saving diagram failed!\nOutput directory '#{File.dirname(filename)}' does not exist." unless File.directory?(File.dirname(filename))
169
169
  begin
170
170
  graph.output(filetype => filename)
171
171
  filename
172
+ rescue RuntimeError => e
173
+ raise "Saving diagram failed!\nGraphviz produced errors. Verify it has support for filetype=#{options.filetype}, or use filetype=dot." <<
174
+ "\nOriginal error: #{e.message.split("\n").last}"
172
175
  rescue StandardError => e
173
- raise "Saving diagram failed. Verify that Graphviz is installed or select filetype=dot."
176
+ raise "Saving diagram failed!\nVerify that Graphviz is installed and in your path, or use filetype=dot."
174
177
  end
175
178
  end
176
179
 
177
180
  each_entity do |entity, attributes|
178
181
  draw_node entity.name, entity_options(entity, attributes)
179
182
  end
180
-
183
+
181
184
  each_specialization do |specialization|
182
185
  from, to = specialization.generalized, specialization.specialized
183
186
  draw_edge from.name, to.name, specialization_options(specialization)
184
187
  end
185
-
188
+
186
189
  each_relationship do |relationship|
187
190
  from, to = relationship.source, relationship.destination
188
191
  unless draw_edge from.name, to.name, relationship_options(relationship)
@@ -193,19 +196,23 @@ module RailsERD
193
196
  end
194
197
  end
195
198
  end
196
-
199
+
197
200
  private
198
-
201
+
199
202
  def node_exists?(name)
200
- !!graph.get_node(name)
203
+ !!graph.get_node(escape_name(name))
201
204
  end
202
-
205
+
203
206
  def draw_node(name, options)
204
- graph.add_node name, options
207
+ graph.add_node escape_name(name), options
205
208
  end
206
-
209
+
207
210
  def draw_edge(from, to, options)
208
- graph.add_edge graph.get_node(from), graph.get_node(to), options if node_exists?(from) and node_exists?(to)
211
+ graph.add_edge graph.get_node(escape_name(from)), graph.get_node(escape_name(to)), options if node_exists?(from) and node_exists?(to)
212
+ end
213
+
214
+ def escape_name(name)
215
+ "m_#{name}"
209
216
  end
210
217
 
211
218
  # Returns the title to be used for the graph.
@@ -217,26 +224,27 @@ module RailsERD
217
224
  else options.title
218
225
  end
219
226
  end
220
-
227
+
221
228
  # Returns the file name that will be used when saving the diagram.
222
229
  def filename
223
230
  "#{options.filename}.#{options.filetype}"
224
231
  end
225
-
232
+
226
233
  # Returns the default file extension to be used when saving the diagram.
227
234
  def filetype
228
235
  if options.filetype.to_sym == :dot then :none else options.filetype.to_sym end
229
236
  end
230
237
 
231
238
  def entity_options(entity, attributes)
232
- entity_style(entity, attributes).merge :label => "<#{NODE_LABEL_TEMPLATE.result(binding)}>"
239
+ label = options[:markup] ? "<#{read_template(:html).result(binding)}>" : "#{read_template(:record).result(binding)}"
240
+ entity_style(entity, attributes).merge :label => label
233
241
  end
234
-
242
+
235
243
  def relationship_options(relationship)
236
244
  relationship_style(relationship).tap do |options|
237
245
  # Edges with a higher weight are optimised to be shorter and straighter.
238
246
  options[:weight] = relationship.strength
239
-
247
+
240
248
  # Indirect relationships should not influence node ranks.
241
249
  options[:constraint] = false if relationship.indirect?
242
250
  end
@@ -245,6 +253,10 @@ module RailsERD
245
253
  def specialization_options(specialization)
246
254
  specialization_style(specialization)
247
255
  end
256
+
257
+ def read_template(type)
258
+ ERB.new(File.read(File.expand_path("templates/#{NODE_LABEL_TEMPLATES[type]}", File.dirname(__FILE__))), nil, "<>")
259
+ end
248
260
  end
249
261
  end
250
262
  end
@@ -0,0 +1,4 @@
1
+ <% if options.orientation == :vertical %>{<% end %><%= entity.name %><% if attributes.any? %>
2
+ |<% attributes.each do |attribute| %><%=
3
+ attribute %> (<%= attribute.type_description %>)
4
+ <% end %><% end %><% if options.orientation == :vertical %>}<% end %>
@@ -13,17 +13,17 @@ namespace :erd do
13
13
  end
14
14
  end
15
15
  end
16
-
16
+
17
17
  task :load_models do
18
18
  say "Loading application environment..."
19
19
  Rake::Task[:environment].invoke
20
20
 
21
21
  say "Loading code in search of Active Record models..."
22
22
  Rails.application.eager_load!
23
-
23
+
24
24
  raise "Active Record was not loaded." unless defined? ActiveRecord
25
25
  end
26
-
26
+
27
27
  task :generate => [:options, :load_models] do
28
28
  say "Generating Entity-Relationship Diagram for #{ActiveRecord::Base.descendants.length} models..."
29
29
 
data/rails-erd.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rails-erd}
8
- s.version = "0.4.3"
8
+ s.version = "0.4.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Rolf Timmermans"]
12
- s.date = %q{2011-01-27}
12
+ s.date = %q{2011-03-22}
13
13
  s.description = %q{Automatically generate an entity-relationship diagram (ERD) for your Rails models.}
14
14
  s.email = %q{r.timmermans@voormedia.com}
15
15
  s.extra_rdoc_files = [
@@ -17,6 +17,7 @@ Gem::Specification.new do |s|
17
17
  "README.md"
18
18
  ]
19
19
  s.files = [
20
+ ".gemtest",
20
21
  "CHANGES.rdoc",
21
22
  "Gemfile",
22
23
  "Gemfile.lock",
@@ -28,7 +29,8 @@ Gem::Specification.new do |s|
28
29
  "lib/rails_erd.rb",
29
30
  "lib/rails_erd/diagram.rb",
30
31
  "lib/rails_erd/diagram/graphviz.rb",
31
- "lib/rails_erd/diagram/templates/node.erb",
32
+ "lib/rails_erd/diagram/templates/node.html.erb",
33
+ "lib/rails_erd/diagram/templates/node.record.erb",
32
34
  "lib/rails_erd/domain.rb",
33
35
  "lib/rails_erd/domain/attribute.rb",
34
36
  "lib/rails_erd/domain/entity.rb",
@@ -52,7 +54,7 @@ Gem::Specification.new do |s|
52
54
  s.homepage = %q{http://rails-erd.rubyforge.org/}
53
55
  s.require_paths = ["lib"]
54
56
  s.rubyforge_project = %q{rails-erd}
55
- s.rubygems_version = %q{1.3.7}
57
+ s.rubygems_version = %q{1.5.2}
56
58
  s.summary = %q{Entity-relationship diagram for your Rails models.}
57
59
  s.test_files = [
58
60
  "test/test_helper.rb",
@@ -68,15 +70,12 @@ Gem::Specification.new do |s|
68
70
  ]
69
71
 
70
72
  if s.respond_to? :specification_version then
71
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
72
73
  s.specification_version = 3
73
74
 
74
75
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
75
76
  s.add_runtime_dependency(%q<activerecord>, ["~> 3.0"])
76
77
  s.add_runtime_dependency(%q<activesupport>, ["~> 3.0"])
77
78
  s.add_runtime_dependency(%q<ruby-graphviz>, ["~> 0.9.18"])
78
- s.add_development_dependency(%q<rake>, [">= 0"])
79
- s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
80
79
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
81
80
  s.add_development_dependency(%q<sqlite3>, [">= 0"])
82
81
  s.add_development_dependency(%q<jdbc-sqlite3>, [">= 0"])
@@ -86,8 +85,6 @@ Gem::Specification.new do |s|
86
85
  s.add_dependency(%q<activerecord>, ["~> 3.0"])
87
86
  s.add_dependency(%q<activesupport>, ["~> 3.0"])
88
87
  s.add_dependency(%q<ruby-graphviz>, ["~> 0.9.18"])
89
- s.add_dependency(%q<rake>, [">= 0"])
90
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
91
88
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
92
89
  s.add_dependency(%q<sqlite3>, [">= 0"])
93
90
  s.add_dependency(%q<jdbc-sqlite3>, [">= 0"])
@@ -98,8 +95,6 @@ Gem::Specification.new do |s|
98
95
  s.add_dependency(%q<activerecord>, ["~> 3.0"])
99
96
  s.add_dependency(%q<activesupport>, ["~> 3.0"])
100
97
  s.add_dependency(%q<ruby-graphviz>, ["~> 0.9.18"])
101
- s.add_dependency(%q<rake>, [">= 0"])
102
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
103
98
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
104
99
  s.add_dependency(%q<sqlite3>, [">= 0"])
105
100
  s.add_dependency(%q<jdbc-sqlite3>, [">= 0"])
@@ -6,18 +6,18 @@ class GraphvizTest < ActiveSupport::TestCase
6
6
  RailsERD.options.warn = false
7
7
  load "rails_erd/diagram/graphviz.rb"
8
8
  end
9
-
9
+
10
10
  def teardown
11
11
  FileUtils.rm Dir["ERD.*"] rescue nil
12
12
  RailsERD::Diagram.send :remove_const, :Graphviz rescue nil
13
13
  end
14
-
14
+
15
15
  def diagram(options = {})
16
16
  @diagram ||= Diagram::Graphviz.new(Domain.generate(options), options).tap do |diagram|
17
17
  diagram.generate
18
18
  end
19
19
  end
20
-
20
+
21
21
  def find_dot_nodes(diagram)
22
22
  [].tap do |nodes|
23
23
  diagram.graph.each_node do |name, node|
@@ -37,7 +37,7 @@ class GraphvizTest < ActiveSupport::TestCase
37
37
  end
38
38
  end
39
39
  end
40
-
40
+
41
41
  def find_dot_edges(diagram)
42
42
  [].tap do |edges|
43
43
  diagram.graph.each_edge do |edge|
@@ -45,7 +45,7 @@ class GraphvizTest < ActiveSupport::TestCase
45
45
  end
46
46
  end
47
47
  end
48
-
48
+
49
49
  def find_dot_edge_styles(diagram)
50
50
  find_dot_edges(diagram).map { |e| [e[:arrowtail].to_s.tr('"', ''), e[:arrowhead].to_s.tr('"', '')] }
51
51
  end
@@ -59,7 +59,7 @@ class GraphvizTest < ActiveSupport::TestCase
59
59
  FileUtils.rm "ERD.svg" rescue nil
60
60
  end
61
61
  end
62
-
62
+
63
63
  test "rank direction should be lr for horizontal orientation" do
64
64
  create_simple_domain
65
65
  assert_equal '"LR"', diagram(:orientation => :horizontal).graph[:rankdir].to_s
@@ -69,7 +69,7 @@ class GraphvizTest < ActiveSupport::TestCase
69
69
  create_simple_domain
70
70
  assert_equal '"TB"', diagram(:orientation => :vertical).graph[:rankdir].to_s
71
71
  end
72
-
72
+
73
73
  # Diagram generation =======================================================
74
74
  test "create should create output for domain with attributes" do
75
75
  create_model "Foo", :bar => :references, :column => :string do
@@ -85,7 +85,7 @@ class GraphvizTest < ActiveSupport::TestCase
85
85
  Diagram::Graphviz.create
86
86
  assert File.exists?("ERD.png")
87
87
  end
88
-
88
+
89
89
  test "create should write to file with dot extension if type is dot" do
90
90
  create_simple_domain
91
91
  Diagram::Graphviz.create :filetype => :dot
@@ -108,7 +108,7 @@ class GraphvizTest < ActiveSupport::TestCase
108
108
  end
109
109
  end
110
110
  end
111
-
111
+
112
112
  test "create should create output for domain with attributes if orientation is vertical" do
113
113
  create_model "Foo", :bar => :references, :column => :string do
114
114
  belongs_to :bar
@@ -138,7 +138,7 @@ class GraphvizTest < ActiveSupport::TestCase
138
138
  end
139
139
  assert_match /No entities found/, message
140
140
  end
141
-
141
+
142
142
  test "create should write to given file name plus extension if present" do
143
143
  begin
144
144
  create_simple_domain
@@ -148,7 +148,7 @@ class GraphvizTest < ActiveSupport::TestCase
148
148
  FileUtils.rm "foobar.png" rescue nil
149
149
  end
150
150
  end
151
-
151
+
152
152
  test "create should abort and complain if output directory does not exist" do
153
153
  message = nil
154
154
  begin
@@ -160,12 +160,22 @@ class GraphvizTest < ActiveSupport::TestCase
160
160
  assert_match /Output directory 'does_not_exist' does not exist/, message
161
161
  end
162
162
 
163
+ test "create should not fail when reserved words are used as node names" do
164
+ create_model "Node", :name => :string
165
+ create_model "Edge", :node => :references do
166
+ belongs_to :node
167
+ end
168
+ assert_nothing_raised do
169
+ Diagram::Graphviz.create
170
+ end
171
+ end
172
+
163
173
  # Graphviz output ==========================================================
164
174
  test "generate should create directed graph" do
165
175
  create_simple_domain
166
176
  assert_equal "digraph", diagram.graph.type
167
177
  end
168
-
178
+
169
179
  test "generate should add title to graph" do
170
180
  create_simple_domain
171
181
  assert_equal '"Domain model\n\n"', diagram.graph.graph[:label].to_s
@@ -189,29 +199,49 @@ class GraphvizTest < ActiveSupport::TestCase
189
199
  create_simple_domain
190
200
  assert_equal "", diagram(:title => false).graph.graph[:label].to_s
191
201
  end
192
-
202
+
193
203
  test "generate should create node for each entity" do
194
204
  create_model "Foo", :bar => :references do
195
205
  belongs_to :bar
196
206
  end
197
207
  create_model "Bar"
198
- assert_equal ["Bar", "Foo"], find_dot_nodes(diagram).map(&:id).sort
208
+ assert_equal ["m_Bar", "m_Foo"], find_dot_nodes(diagram).map(&:id).sort
209
+ end
210
+
211
+ test "generate should add html label for entities" do
212
+ RailsERD.options.markup = true
213
+ create_model "Foo", :bar => :references do
214
+ belongs_to :bar
215
+ end
216
+ create_model "Bar"
217
+ assert_match %r{<\w+.*?>Bar</\w+>}, find_dot_node(diagram, "m_Bar")[:label].to_gv
199
218
  end
200
-
201
- test "generate should add label for entities" do
219
+
220
+ test "generate should add record label for entities" do
221
+ RailsERD.options.markup = false
202
222
  create_model "Foo", :bar => :references do
203
223
  belongs_to :bar
204
224
  end
205
225
  create_model "Bar"
206
- assert_match %r{<\w+.*?>Bar</\w+>}, find_dot_node(diagram, "Bar")[:label].to_gv
226
+ assert_equal %Q("Bar"), find_dot_node(diagram, "m_Bar")[:label].to_gv
207
227
  end
208
228
 
209
- test "generate should add attributes to entity labels" do
229
+ test "generate should add attributes to entity html labels" do
230
+ RailsERD.options.markup = true
210
231
  create_model "Foo", :bar => :references do
211
232
  belongs_to :bar
212
233
  end
213
234
  create_model "Bar", :column => :string
214
- assert_match %r{<\w+.*?>column <\w+.*?>string</\w+.*?>}, find_dot_node(diagram, "Bar")[:label].to_gv
235
+ assert_match %r{<\w+.*?>column <\w+.*?>string</\w+.*?>}, find_dot_node(diagram, "m_Bar")[:label].to_gv
236
+ end
237
+
238
+ test "generate should add attributes to entity record labels" do
239
+ RailsERD.options.markup = false
240
+ create_model "Foo", :bar => :references do
241
+ belongs_to :bar
242
+ end
243
+ create_model "Bar", :column => :string, :column_two => :boolean
244
+ assert_equal %Q("Bar|column (string)\\ncolumn_two (boolean)\\n"), find_dot_node(diagram, "m_Bar")[:label].to_gv
215
245
  end
216
246
 
217
247
  test "generate should not add any attributes to entity labels if attributes is set to false" do
@@ -219,35 +249,55 @@ class GraphvizTest < ActiveSupport::TestCase
219
249
  create_model "Lid", :jar => :references do
220
250
  belongs_to :jar
221
251
  end
222
- assert_no_match %r{contents}, find_dot_node(diagram(:attributes => false), "Jar")[:label].to_gv
252
+ assert_no_match %r{contents}, find_dot_node(diagram(:attributes => false), "m_Jar")[:label].to_gv
223
253
  end
224
254
 
225
- test "generate should create edge for each relationship" do
226
- create_model "Foo", :bar => :references do
227
- belongs_to :bar
255
+ test "node html labels should have direction reversing braces for vertical orientation" do
256
+ RailsERD.options.markup = true
257
+ create_model "Book", :author => :references do
258
+ belongs_to :author
228
259
  end
229
- create_model "Bar", :foo => :references do
230
- belongs_to :foo
260
+ create_model "Author", :name => :string
261
+ assert_match %r(\A<\{\s*<.*\|.*>\s*\}>\Z)m, find_dot_node(diagram(:orientation => :vertical), "m_Author")[:label].to_gv
262
+ end
263
+
264
+ test "node html labels should not have direction reversing braces for horizontal orientation" do
265
+ RailsERD.options.markup = true
266
+ create_model "Book", :author => :references do
267
+ belongs_to :author
231
268
  end
232
- assert_equal [["Bar", "Foo"], ["Foo", "Bar"]], find_dot_node_pairs(diagram).sort
269
+ create_model "Author", :name => :string
270
+ assert_match %r(\A<\s*<.*\|.*>\s*>\Z)m, find_dot_node(diagram(:orientation => :horizontal), "m_Author")[:label].to_gv
233
271
  end
234
-
235
- test "node records should have direction reversing braces for vertical orientation" do
272
+
273
+ test "node record labels should have direction reversing braces for vertical orientation" do
274
+ RailsERD.options.markup = false
236
275
  create_model "Book", :author => :references do
237
276
  belongs_to :author
238
277
  end
239
278
  create_model "Author", :name => :string
240
- assert_match %r(\A<\{\s*<.*\|.*>\s*\}>\Z)m, find_dot_node(diagram(:orientation => :vertical), "Author")[:label].to_gv
279
+ assert_match %r(\A"\{\w+|.*\}"\Z)m, find_dot_node(diagram(:orientation => :vertical), "m_Author")[:label].to_gv
241
280
  end
242
281
 
243
- test "node records should not have direction reversing braces for horizontal orientation" do
282
+ test "node record labels should not have direction reversing braces for horizontal orientation" do
283
+ RailsERD.options.markup = false
244
284
  create_model "Book", :author => :references do
245
285
  belongs_to :author
246
286
  end
247
287
  create_model "Author", :name => :string
248
- assert_match %r(\A<\s*<.*\|.*>\s*>\Z)m, find_dot_node(diagram(:orientation => :horizontal), "Author")[:label].to_gv
288
+ assert_match %r(\A"\w+|.*"\Z)m, find_dot_node(diagram(:orientation => :horizontal), "m_Author")[:label].to_gv
249
289
  end
250
-
290
+
291
+ test "generate should create edge for each relationship" do
292
+ create_model "Foo", :bar => :references do
293
+ belongs_to :bar
294
+ end
295
+ create_model "Bar", :foo => :references do
296
+ belongs_to :foo
297
+ end
298
+ assert_equal [["m_Bar", "m_Foo"], ["m_Foo", "m_Bar"]], find_dot_node_pairs(diagram).sort
299
+ end
300
+
251
301
  test "generate should create edge to generalized entity if polymorphism is true" do
252
302
  create_model "Cannon", :defensible => :references do
253
303
  belongs_to :defensible, :polymorphic => true
@@ -258,7 +308,7 @@ class GraphvizTest < ActiveSupport::TestCase
258
308
  create_model "Galleon" do
259
309
  has_many :cannons, :as => :defensible
260
310
  end
261
- assert_equal [["Defensible", "Cannon"], ["Defensible", "Galleon"], ["Defensible", "Stronghold"]],
311
+ assert_equal [["m_Defensible", "m_Cannon"], ["m_Defensible", "m_Galleon"], ["m_Defensible", "m_Stronghold"]],
262
312
  find_dot_node_pairs(diagram(:polymorphism => true)).sort
263
313
  end
264
314
 
@@ -272,9 +322,9 @@ class GraphvizTest < ActiveSupport::TestCase
272
322
  create_model "Galleon" do
273
323
  has_many :cannons, :as => :defensible
274
324
  end
275
- assert_equal [["Galleon", "Cannon"], ["Stronghold", "Cannon"]], find_dot_node_pairs(diagram).sort
325
+ assert_equal [["m_Galleon", "m_Cannon"], ["m_Stronghold", "m_Cannon"]], find_dot_node_pairs(diagram).sort
276
326
  end
277
-
327
+
278
328
  # Simple notation style ====================================================
279
329
  test "generate should use no style for one to one cardinalities with simple notation" do
280
330
  create_one_to_one_assoc_domain
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-erd
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 4
8
- - 3
9
- version: 0.4.3
4
+ prerelease:
5
+ version: 0.4.4
10
6
  platform: ruby
11
7
  authors:
12
8
  - Rolf Timmermans
@@ -14,7 +10,7 @@ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2011-01-27 00:00:00 +01:00
13
+ date: 2011-03-22 00:00:00 +01:00
18
14
  default_executable:
19
15
  dependencies:
20
16
  - !ruby/object:Gem::Dependency
@@ -24,9 +20,6 @@ dependencies:
24
20
  requirements:
25
21
  - - ~>
26
22
  - !ruby/object:Gem::Version
27
- segments:
28
- - 3
29
- - 0
30
23
  version: "3.0"
31
24
  type: :runtime
32
25
  prerelease: false
@@ -38,9 +31,6 @@ dependencies:
38
31
  requirements:
39
32
  - - ~>
40
33
  - !ruby/object:Gem::Version
41
- segments:
42
- - 3
43
- - 0
44
34
  version: "3.0"
45
35
  type: :runtime
46
36
  prerelease: false
@@ -52,109 +42,65 @@ dependencies:
52
42
  requirements:
53
43
  - - ~>
54
44
  - !ruby/object:Gem::Version
55
- segments:
56
- - 0
57
- - 9
58
- - 18
59
45
  version: 0.9.18
60
46
  type: :runtime
61
47
  prerelease: false
62
48
  version_requirements: *id003
63
- - !ruby/object:Gem::Dependency
64
- name: rake
65
- requirement: &id004 !ruby/object:Gem::Requirement
66
- none: false
67
- requirements:
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- segments:
71
- - 0
72
- version: "0"
73
- type: :development
74
- prerelease: false
75
- version_requirements: *id004
76
- - !ruby/object:Gem::Dependency
77
- name: bundler
78
- requirement: &id005 !ruby/object:Gem::Requirement
79
- none: false
80
- requirements:
81
- - - ~>
82
- - !ruby/object:Gem::Version
83
- segments:
84
- - 1
85
- - 0
86
- - 0
87
- version: 1.0.0
88
- type: :development
89
- prerelease: false
90
- version_requirements: *id005
91
49
  - !ruby/object:Gem::Dependency
92
50
  name: jeweler
93
- requirement: &id006 !ruby/object:Gem::Requirement
51
+ requirement: &id004 !ruby/object:Gem::Requirement
94
52
  none: false
95
53
  requirements:
96
54
  - - ~>
97
55
  - !ruby/object:Gem::Version
98
- segments:
99
- - 1
100
- - 5
101
- - 2
102
56
  version: 1.5.2
103
57
  type: :development
104
58
  prerelease: false
105
- version_requirements: *id006
59
+ version_requirements: *id004
106
60
  - !ruby/object:Gem::Dependency
107
61
  name: sqlite3
108
- requirement: &id007 !ruby/object:Gem::Requirement
62
+ requirement: &id005 !ruby/object:Gem::Requirement
109
63
  none: false
110
64
  requirements:
111
65
  - - ">="
112
66
  - !ruby/object:Gem::Version
113
- segments:
114
- - 0
115
67
  version: "0"
116
68
  type: :development
117
69
  prerelease: false
118
- version_requirements: *id007
70
+ version_requirements: *id005
119
71
  - !ruby/object:Gem::Dependency
120
72
  name: jdbc-sqlite3
121
- requirement: &id008 !ruby/object:Gem::Requirement
73
+ requirement: &id006 !ruby/object:Gem::Requirement
122
74
  none: false
123
75
  requirements:
124
76
  - - ">="
125
77
  - !ruby/object:Gem::Version
126
- segments:
127
- - 0
128
78
  version: "0"
129
79
  type: :development
130
80
  prerelease: false
131
- version_requirements: *id008
81
+ version_requirements: *id006
132
82
  - !ruby/object:Gem::Dependency
133
83
  name: activerecord-jdbc-adapter
134
- requirement: &id009 !ruby/object:Gem::Requirement
84
+ requirement: &id007 !ruby/object:Gem::Requirement
135
85
  none: false
136
86
  requirements:
137
87
  - - ">="
138
88
  - !ruby/object:Gem::Version
139
- segments:
140
- - 0
141
89
  version: "0"
142
90
  type: :development
143
91
  prerelease: false
144
- version_requirements: *id009
92
+ version_requirements: *id007
145
93
  - !ruby/object:Gem::Dependency
146
94
  name: jruby-openssl
147
- requirement: &id010 !ruby/object:Gem::Requirement
95
+ requirement: &id008 !ruby/object:Gem::Requirement
148
96
  none: false
149
97
  requirements:
150
98
  - - ">="
151
99
  - !ruby/object:Gem::Version
152
- segments:
153
- - 0
154
100
  version: "0"
155
101
  type: :development
156
102
  prerelease: false
157
- version_requirements: *id010
103
+ version_requirements: *id008
158
104
  description: Automatically generate an entity-relationship diagram (ERD) for your Rails models.
159
105
  email: r.timmermans@voormedia.com
160
106
  executables: []
@@ -165,6 +111,7 @@ extra_rdoc_files:
165
111
  - LICENSE
166
112
  - README.md
167
113
  files:
114
+ - .gemtest
168
115
  - CHANGES.rdoc
169
116
  - Gemfile
170
117
  - Gemfile.lock
@@ -176,7 +123,8 @@ files:
176
123
  - lib/rails_erd.rb
177
124
  - lib/rails_erd/diagram.rb
178
125
  - lib/rails_erd/diagram/graphviz.rb
179
- - lib/rails_erd/diagram/templates/node.erb
126
+ - lib/rails_erd/diagram/templates/node.html.erb
127
+ - lib/rails_erd/diagram/templates/node.record.erb
180
128
  - lib/rails_erd/domain.rb
181
129
  - lib/rails_erd/domain/attribute.rb
182
130
  - lib/rails_erd/domain/entity.rb
@@ -210,21 +158,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
210
158
  requirements:
211
159
  - - ">="
212
160
  - !ruby/object:Gem::Version
213
- segments:
214
- - 0
215
161
  version: "0"
216
162
  required_rubygems_version: !ruby/object:Gem::Requirement
217
163
  none: false
218
164
  requirements:
219
165
  - - ">="
220
166
  - !ruby/object:Gem::Version
221
- segments:
222
- - 0
223
167
  version: "0"
224
168
  requirements: []
225
169
 
226
170
  rubyforge_project: rails-erd
227
- rubygems_version: 1.3.7
171
+ rubygems_version: 1.5.2
228
172
  signing_key:
229
173
  specification_version: 3
230
174
  summary: Entity-relationship diagram for your Rails models.