### Home Classes Methods

### In Files

- lib/ramaze/app_graph.rb

### Parent

Object

### Methods

- ::new
- #connect
- #generate
- #show
- #write_dot

### Class/Module Index

Quicksearch

- Ramaze
- Ramaze::App
- Ramaze::AppGraph
- Ramaze::Bin
- Ramaze::Bin::Console
- Ramaze::Bin::Create
- Ramaze::Bin::Helper
- Ramaze::Bin::Restart
- Ramaze::Bin::Runner
- Ramaze::Bin::Start
- Ramaze::Bin::Status
- Ramaze::Bin::Stop
- Ramaze::Cache
- Ramaze::Cache::LRU
- Ramaze::Cache::LocalMemCache
- Ramaze::Cache::MemCache
- Ramaze::Cache::Redis
- Ramaze::Cache::Sequel
- Ramaze::Controller
- Ramaze::CoreExtensions
- Ramaze::CoreExtensions::Array
- Ramaze::CoreExtensions::Binding
- Ramaze::CoreExtensions::Kernel
- Ramaze::CoreExtensions::Numeric
- Ramaze::CoreExtensions::Object
- Ramaze::CoreExtensions::Proc
- Ramaze::CoreExtensions::String
- Ramaze::Current
- Ramaze::DefaultController
- Ramaze::Dictionary
- Ramaze::Fiber
- Ramaze::Files
- Ramaze::GemSetup
- Ramaze::Gestalt
- Ramaze::Helper
- Ramaze::Helper::Auth
- Ramaze::Helper::Bench
- Ramaze::Helper::BlueForm
- Ramaze::Helper::BlueForm::Form
- Ramaze::Helper::CSRF
- Ramaze::Helper::Cache
- Ramaze::Helper::Cache::SingletonMethods
- Ramaze::Helper::Disqus
- Ramaze::Helper::Email
- Ramaze::Helper::Erector
- Ramaze::Helper::Flash
- Ramaze::Helper::Formatting
- Ramaze::Helper::Gestalt
- Ramaze::Helper::Gravatar
- Ramaze::Helper::Identity
- Ramaze::Helper::Layout
- Ramaze::Helper::Layout::SingletonMethods
- Ramaze::Helper::Link
- Ramaze::Helper::Localize
- Ramaze::Helper::Localize::Dictionary
- Ramaze::Helper::Localize::Parser
- Ramaze::Helper::Markaby
- Ramaze::Helper::Maruku
- Ramaze::Helper::Paginate
- Ramaze::Helper::Paginate::Paginator
- Ramaze::Helper::Paginate::Paginator::ArrayPager
- Ramaze::Helper::Paginate::Paginator::DataMapperPager
- Ramaze::Helper::Remarkably
- Ramaze::Helper::RequestAccessor
- Ramaze::Helper::SendFile
- Ramaze::Helper::SimpleCaptcha
- Ramaze::Helper::Stack
- Ramaze::Helper::Thread
- Ramaze::Helper::Ultraviolet
- Ramaze::Helper::Upload
- Ramaze::Helper::Upload::ClassMethods
- Ramaze::Helper::Upload::UploadedFile
- Ramaze::Helper::UserHelper
- Ramaze::Helper::UserHelper::Wrapper
- Ramaze::Helper::XHTML
- Ramaze::LRUHash
- Ramaze::Logger
- Ramaze::Logger::Analogger
- Ramaze::Logger::Growl
- Ramaze::Logger::Informer
- Ramaze::Logger::Knotify
- Ramaze::Logger::LogHub
- Ramaze::Logger::Logger
- Ramaze::Logger::RotatingInformer
- Ramaze::Logger::Syslog
- Ramaze::Logger::Xosd
- Ramaze::Logging
- Ramaze::MiddlewareCompiler
- Ramaze::Plugin
- Ramaze::Reloader
- Ramaze::Reloader::Hooks
- Ramaze::Reloader::WatchInotify
- Ramaze::Reloader::WatchStat
- Ramaze::Reloader::Watcher
- Ramaze::Request
- Ramaze::Response
- Ramaze::SpecLogger
- Ramaze::Struct
- Ramaze::View
- Ramaze::View::Erector
- Ramaze::View::Erubis
- Ramaze::View::Ezamar
- Ramaze::View::Gestalt
- Ramaze::View::Haml
- Ramaze::View::Liquid
- Ramaze::View::Liquid::Tag
- Ramaze::View::Lokar
- Ramaze::View::Mustache
- Ramaze::View::Mustache::RamazeContext
- Ramaze::View::Nagoro
- Ramaze::View::Remarkably
- Ramaze::View::Sass
- Ramaze::View::Slippers
- Ramaze::View::Tagz
- Ramaze::View::Tagz::Methods
- Ramaze::View::Tenjin
- Nagoro
- Nagoro::Pipe
- Nagoro::Pipe::RenderPartial
- Bacon
- Bacon::PrettyOutput
- Erector
- Erector::Widget
- Rack
- Rack::RouteExceptions
- Tenjin
- Tenjin::Template
- BlankSlate
- Controller
- Fiber
- FiberError
- MainController
- Object
- OrderedSet
- Thread

No matching classes.

# Ramaze::AppGraph

The AppGraph class can be used to generate a graph of all the URLs mapped in a Ramaze application and saves this graph as an image.

In order to generate a graph of your application all you need to do is the following:

    require 'ramaze/app_graph'

    graph = Ramaze::AppGraph.new graph.generate graph.show

Once this code is executed you can find the .dot and PNG files in the root directory of your application.

@author Michael Fellinger

### Public Class Methods

new() click to toggle source

Creates a new instance of the class.

@author Michael Fellinger

    # File lib/ramaze/app_graph.rb, line 26
    def initialize
      @out = Set.new
    end

### Public Instance Methods

connect(hash) click to toggle source

Connects various elements in the graph to each other.

@author Michael Fellinger

    # File lib/ramaze/app_graph.rb, line 69
    def connect(hash)
      hash.each do |from, to|
        @out << ("  %p -> %p;" % [from.to_s, to.to_s])
      end
    end

generate() click to toggle source

Generates the graph based on all the current routes. The graph is saved in the application directory.

@author Michael Fellinger

    # File lib/ramaze/app_graph.rb, line 36
    def generate
      Ramaze::AppMap.to_hash.each do |location, app|
        connect(location => app.name)

        app.url_map.to_hash.each do |c_location, c_node|
          connect(app.name => c_node)
          connect(c_node.mapping => c_node)

          c_node.update_template_mappings
          c_node.view_templates.each do |wish, mapping|
            mapping.each do |action_name, template|
              action_path = File.join(c_node.mapping, action_name)
              connect(c_node => action_path, action_path => template)
            end
          end

          c_node.update_method_arities
          c_node.method_arities.each do |method, arity|
            action_path = File.join(c_node.mapping, method.to_s)
            connect(
              action_path => "#{c_node}##{method}[#{arity}]",
              c_node      => action_path
            )
          end
        end
      end
    end

show() click to toggle source

Generates a PNG file based on the .dot file.

@author Michael Fellinger

    # File lib/ramaze/app_graph.rb, line 93
    def show
      write_dot
      options = {
        'rankdir' => 'LR',
        'splines' => 'true',
        'overlap' => 'false',
      }
      args = options.map{|k,v| "-G#{k}=#{v}" }
      system("dot -O -Tpng #{args.join(' ')} graph.dot")
      system('feh graph.dot.png')
    end

write_dot() click to toggle source

Writes the dot file containing the graph data.

@author Michael Fellinger

    # File lib/ramaze/app_graph.rb, line 80
    def write_dot
      File.open('graph.dot', 'w+') do |dot|
        dot.puts 'digraph appmap {'
        dot.puts(*@out)
        dot.puts '}'
      end
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.