New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

ancestors_visualization

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ancestors_visualization

  • 0.1.1
  • Rubygems
  • Socket score

Version published
Maintainers
1
Created
Source

AncestorsVisualization

概要

Gem のクラス継承・モジュール利用を可視化する Gem です

作ったきっかけとしては、Gem の実装を読む時に全体感を把握したいなと思うことがあったので

例えば、以下のクラス・モジュール(Gem 名は GemName を想定)があったとして

# sample_gem_dir/lib/gem_name/c1.rb
module GemName
  class C1 < C2
    include Modules::M1_1
    extend Modules::M1_2
  end
end

# sample_gem_dir/lib/gem_name/modules/m1_1.rb
module GemName
  module Modules
    module M1_1
      include M1_1_1
      extend M1_1_2

      def m1_1
      end
    end
  end
end

# sample_gem_dir/lib/gem_name/modules/m1_2.rb
module GemName
  module Modules
    module M1_2
      def self.m1_2
      end
    end
  end
end

# sample_gem_dir/lib/gem_name/modules/m1_1_1.rb
module GemName
  module Modules
    module M1_1_1
      def m1_1_1
      end
    end
  end
end

# sample_gem_dir/lib/gem_name/modules/m1_1_2.rb
module GemName
  module Modules
    module M1_1_2
      def self.m1_1_2
      end
    end
  end
end

# sample_gem_dir/lib/gem_name/c2.rb
module GemName
  class C2
    include Modules::M2_1
    extend Modules::M2_2
  end
end

# sample_gem_dir/lib/gem_name/modules/m2_1.rb
module GemName
  module Modules
    module M2_1
      def m2_1
      end
    end
  end
end

# sample_gem_dir/lib/gem_name/modules/m2_2.rb
module GemName
  module Modules
    module M2_2
      def self.m2_2
      end
    end
  end
end

本 Gem を使うと、↓ の画像を生成します

test

  • 右上に表示されている括りが、名前空間に対応
  • 各ノードは、クラス・モジュールに対応
    • 水色がクラス
    • オレンジ色がモジュール
  • 矢印は、継承・インクルードに対応

⚠️ 注意点

  • 描画内容は正確でないことがあります
    • まず前提として、描画対象となるクラス・モジュールは、該当 Gem 名から判定した名前空間配下のみにしてます
      • 特に制限せずに描画した時に、ノードが多過ぎて見にくかったので
      • なので、標準クラスは描画されないです
    • 実装としては存在するのに、描画されてないクラスがあるかもしれないです
      • 実装を見てもらうとわかるのですが、描画対象を解析する際に、対象の Gem の作りにいくつか前提を置いています
      • なので、それが守られていないと、描画に失敗します(
  • あくまでコードリーディングする際の参考として使ってください

インストール方法

以下を Gemfile に追記して $ bundle install

gem 'ancestors_visualization'

Budler を使わない場合は

$ gem install ancestors_visualization

使い方

実行フォーマットは以下

$ bundle exec ancestors_visualization --gem [Gem 名] --output_path [描画ファイルの出力先]
  • gem は必須
  • output_path は必要であれば
    • デフォルトは、[Gem 名]_ancestors_[年月日時分秒].png
    • 例えば、twitter_ancestors_20220504141646.png

実行例 1

例えば、Twitter Gem に対して実行する場合

$ bundle exec ancestors_visualization --gem twitter

twitter_ancestors_20220504141646

実行例 2

例えば、Rspec に対して実行する場合

該当 Gem の lib 配下のクラス・モジュールを描画対象にしているので、依存先の Gem が本体みたいなケースは、意図しない描画結果になります

↓ で描画結果を表示しているのですが、何も表示されていないのはそういうことです

rspec_ancestors_20220504174723

ライセンス

MIT License

FAQs

Package last updated on 08 May 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc