Class: Rufio::RakefileParser

Inherits:
Object
  • Object
show all
Defined in:
lib/rufio/rakefile_parser.rb

Overview

Rakefileをパースしてタスク名を抽出するパーサー正規表現ベースでtask定義を検出し、コマンドモードからrake:task_name 形式で実行可能にする

Constant Summary collapse

RAKEFILE_NAMES =
%w[Rakefile rakefile Rakefile.rb].freeze
TASK_PATTERN =
/^\s*task\s+[:'"]?(\w+)/.freeze

Instance Method Summary collapse

Constructor Details

#initialize(directory = nil) ⇒ RakefileParser

Returns a new instance of RakefileParser.

Parameters:

  • directory (String, nil) (defaults to: nil)

    スキャン対象ディレクトリ



12
13
14
15
# File 'lib/rufio/rakefile_parser.rb', line 12

def initialize(directory = nil)
  @directory = directory
  @tasks_cache = nil
end

Instance Method Details

#complete(prefix) ⇒ Array<String>

Tab補完候補を取得

Parameters:

  • prefix (String)

    入力中の文字列

Returns:

  • (Array<String>)

    補完候補のタスク名



41
42
43
# File 'lib/rufio/rakefile_parser.rb', line 41

def complete(prefix)
  tasks.select { |name| name.start_with?(prefix) }
end

#rakefile_exists?Boolean

Rakefileが存在するかどうか

Returns:

  • (Boolean)


28
29
30
# File 'lib/rufio/rakefile_parser.rb', line 28

def rakefile_exists?
  !!find_rakefile
end

#tasksArray<String>

Rakefileからタスク名を抽出

Returns:

  • (Array<String>)

    タスク名の配列(ソート済み・ユニーク)



34
35
36
# File 'lib/rufio/rakefile_parser.rb', line 34

def tasks
  @tasks_cache ||= parse_tasks
end

#update_directory(directory) ⇒ Object

ディレクトリ変更時にキャッシュを無効化

Parameters:

  • directory (String)

    新しいディレクトリ



19
20
21
22
23
24
# File 'lib/rufio/rakefile_parser.rb', line 19

def update_directory(directory)
  return if @directory == directory

  @directory = directory
  @tasks_cache = nil
end