2010-03-22 77 views
3

Railroad是Ruby on Rails的一個很好的UML工具。它可以自動生成模型和控制器的類圖。使用鐵路創建模型圖

對於模型,鐵路生成的類圖顯示了每個模型的屬性以及一個模型和另一個模型之間的關聯。 A sample diagram可以在這裏找到。開發人員查看模型的屬性和關聯非常有用。雖然屬性和關聯揭示了模型的內部狀態和關係,但方法指定了它們的行爲。他們在班級圖中都是可取的。我希望鐵路能夠生成一個類圖,該圖還列出了模型的方法,這將幫助我瞭解每個模型的功能。我知道方法顯示在a diagram that is generated for controllers,但我沒有看到這樣的模型圖的選項。有人知道如何用鐵路做到這一點嗎?或者是可能的?

謝謝!

回答

2

鐵路不模型方法添加到圖。你可以猴子修補鐵路代碼來獲得這個功能。

config/initializers目錄中創建一個名爲rail_road_monkey_patch.rb的文件,並添加以下代碼。

require 'app_diagram' 

# RailRoad models diagram 
class ModelsDiagram 

    alias_method_chain :process_class, :methods 

    def process_class_with_methods(current_class) 
    if current_class.is_a? Class 
     na = {:public => [], :protected => [], :private => []} 
     na[:public] = current_class.public_instance_methods(false).sort unless @options.hide_public 
     na[:protected] = current_class.protected_instance_methods(false).sort unless @options.hide_protected 
     na[:private] = current_class.private_instance_methods(false).sort unless @options.hide_private 
     @graph.add_node ['model', current_class.name, na] 
    end 
    process_class_without_methods(current_class) 
    end 
end 

現在你需要一個耙子任務運行鐵路(你需要這個以確保補丁被加載)。

namespace :doc do 
namespace :diagram do 
    task :models => :environment do 
    sh "railroad -i -l -a -m -M | dot -Tsvg | sed 's/font-size:14.00/font-size:11.00/g' > doc/models.svg" 
    end 

    task :controllers => :environment do 
    sh "railroad -i -l -C | neato -Tsvg | sed 's/font-size:14.00/font-size:11.00/g' > doc/controllers.svg" 
    end 
end 

task :diagrams => %w(diagram:models diagram:controllers) 
end 

然後,rake doc:diagrams產生doc/models.svgdoc/controllers.svg。如果您在Windows上,請適當修改rake任務。

注1:Rake任務取自Railroad自述文件。

注2我還沒有測試過代碼。

+0

我已經更新了添加rake任務的答案,請看一看。 – 2010-05-04 06:40:27

+0

謝謝。讓我看看它是如何工作的。 – Shuo 2010-05-05 03:23:45

1

從 「http://railroad.rubyforge.org/

用法摘自:

railroad [options] command 


Models diagram options 

* -a, --all 
    Include all models (not only ActiveRecord::Base derived) 
+0

感謝Hock。這個選項給了我所有的模型。但我想要的是模型顯示方法。 – Shuo 2010-03-22 06:21:11