class Depend

イカサマ依存関係自動解決クラス。 あまり頼りにしないでくれ、Rubyのパース面倒なんだよ

Attributes

spec[R]

Public Class Methods

new(*args) click to toggle source
Calls superclass method
# File core/boot/shell/spec.rb, line 11
def initialize(*args)
  @last_const = ""
  super end

Public Instance Methods

depend(slug) click to toggle source

slug に依存していることを登録する

Args

slug

依存しているプラグイン (Symbol)

# File core/boot/shell/spec.rb, line 71
def depend(slug)
  if spec['slug'].to_sym != slug and not spec["depends"]["plugin"].include?(slug.to_s)
    spec["depends"]["plugin"] << slug.to_s end end
on_const(tok, f) click to toggle source

定数。Gtk::TimeLine みたいなのが出てきた場合、on_const Gtk, #on_op ::, #on_const NestedQuote の順番でイベントが発生するみたい…。

# File core/boot/shell/spec.rb, line 31
def on_const(tok, f)
  if f == :op
    @last_const += '::' + tok
  else
    @last_const = tok end
  case @last_const
  when /\AG[td]k\Z/             # GtkクラスとかGdkクラス使ってたらgtkプラグインに依存してるだろう
    depend :gtk
  when /\APlugin::(\w+)/       # Plugin::なんとか は、プラグインスラッグのキャメルケース名なので、使ってたら依存してる
    depend $1.gsub(/([a-z])([A-Z])/, '\1_\2').downcase.to_sym end end
on_ex_ident(tok) click to toggle source

変数とかメソッド的なやつ。 command DSLを検出してもcommandプラグインには依存させない。 commandプラグインは基本的なmikutterコマンドを定義するだけで、mikutterコマンドの仕組み自体には関係ないから。 commandプラグインで使われている条件クラスを使っていたら、on_constで依存してると判断される。

# File core/boot/shell/spec.rb, line 55
def on_ex_ident(tok)
  case tok
  when 'defactivity'
    depend :activity
  when 'tab', 'timeline', 'nativewidget' # UIっぽい単語があったらguiに依存してそう
    depend :gui
  when 'profiletab'         # profiletabはプロフィールにも依存する
    depend :gui
    depend :profile
  when 'settings'            # 設定DSLの開始。settingsプラグイン。
    depend :settings
  end end
on_ex_symbol(tok) click to toggle source

シンボル

# File core/boot/shell/spec.rb, line 48
def on_ex_symbol(tok)
end
on_ident(tok, f) click to toggle source
# File core/boot/shell/spec.rb, line 23
def on_ident(tok, f)
  if f == :symbol
    on_ex_symbol(tok)
  else
    on_ex_ident(tok) end end
on_op(tok, f) click to toggle source
# File core/boot/shell/spec.rb, line 42
def on_op(tok, f)
  case tok
  when "::"
    :op end end
on_symbeg(tok, f) click to toggle source

シンボル開始の:。次のidentをシンボルと見る

# File core/boot/shell/spec.rb, line 20
def on_symbeg(tok, f)
  :symbol end
set_spec(spec) click to toggle source
# File core/boot/shell/spec.rb, line 15
def set_spec(spec)
  @spec = spec
  self end