Class: Rufio::InterpreterResolver

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

Overview

拡張子からインタープリタを解決するクラス

Constant Summary collapse

DEFAULT_EXTENSIONS =

デフォルトの拡張子とインタープリタのマッピング

{
  ".rb" => "ruby",
  ".py" => "python3",
  ".sh" => "bash",
  ".js" => "node",
  ".pl" => "perl",
  ".lua" => "lua",
  ".ts" => "ts-node",
  ".php" => "php",
  ".ps1" => nil # プラットフォーム依存
}.freeze

Class Method Summary collapse

Class Method Details

.all_extensionsHash

全ての拡張子マッピングを取得する

Returns:

  • (Hash)

    拡張子とインタープリタのマッピング



46
47
48
49
# File 'lib/rufio/interpreter_resolver.rb', line 46

def all_extensions
  # PowerShellのプラットフォーム依存を解決した状態で返す
  DEFAULT_EXTENSIONS.merge(".ps1" => resolve_powershell)
end

.linux?Boolean

Linuxプラットフォームかどうか

Returns:

  • (Boolean)


65
66
67
# File 'lib/rufio/interpreter_resolver.rb', line 65

def linux?
  RUBY_PLATFORM =~ /linux/ ? true : false
end

.macos?Boolean

macOSプラットフォームかどうか

Returns:

  • (Boolean)


59
60
61
# File 'lib/rufio/interpreter_resolver.rb', line 59

def macos?
  RUBY_PLATFORM =~ /darwin/ ? true : false
end

.resolve(extension) ⇒ String?

拡張子からインタープリタを解決する

Parameters:

  • extension (String)

    拡張子(ドット付きまたはなし)

Returns:

  • (String, nil)

    インタープリタ名、解決できない場合はnil



23
24
25
26
27
28
29
30
31
32
# File 'lib/rufio/interpreter_resolver.rb', line 23

def resolve(extension)
  # ドットで始まらない場合は追加
  ext = extension.start_with?(".") ? extension : ".#{extension}"
  ext = ext.downcase

  # PowerShellはプラットフォーム依存
  return resolve_powershell if ext == ".ps1"

  DEFAULT_EXTENSIONS[ext]
end

.resolve_from_path(path) ⇒ String?

ファイルパスから拡張子を取得してインタープリタを解決する

Parameters:

  • path (String)

    ファイルパス

Returns:

  • (String, nil)

    インタープリタ名、解決できない場合はnil



37
38
39
40
41
42
# File 'lib/rufio/interpreter_resolver.rb', line 37

def resolve_from_path(path)
  ext = File.extname(path)
  return nil if ext.empty?

  resolve(ext)
end

.windows?Boolean

Windowsプラットフォームかどうか

Returns:

  • (Boolean)


53
54
55
# File 'lib/rufio/interpreter_resolver.rb', line 53

def windows?
  RUBY_PLATFORM =~ /mingw|mswin|cygwin/ ? true : false
end