class Act::Command

Constants

CONTEXT_LINES

Public Class Methods

arguments() click to toggle source
# File lib/act/command.rb, line 16
def self.arguments
  [
    CLAide::Argument.new('PATH', false),
  ]
end
completion_description() click to toggle source
Calls superclass method
# File lib/act/command.rb, line 32
def self.completion_description
  description = super
  # _path_files function
  description[:paths] = :all_files
  description
end
new(argv) click to toggle source
Calls superclass method
# File lib/act/command.rb, line 39
def initialize(argv)
  @stdin = STDIN.read unless STDIN.tty?
  @open = argv.flag?('open')
  @prettify = argv.flag?('prettify', false)
  @number_lines = argv.flag?('line-numbers', false)
  @lexer = argv.option('lexer', false)
  @always_color = argv.flag?('always-color')
  @file_string = argv.shift_argument
  super
end
options() click to toggle source
Calls superclass method
# File lib/act/command.rb, line 22
def self.options
  [
    ['--open', 'Open the file in $EDITOR instead of printing it'],
    ['--prettify', 'Prettify output'],
    ['--always-color', 'Always color the output'],
    ['--line-numbers', 'Show output with line numbers'],
    ['--lexer=NAME', 'Use the given lexer'],
  ].concat(super)
end

Public Instance Methods

cat_file(file) click to toggle source

@return [void]

# File lib/act/command.rb, line 124
def cat_file(file)
  string = File.read(file.path)
  if file.from_line && file.to_line
    string = Helper.select_lines(string, file.from_line, file.to_line)
  end
  cat_string(string, file)
end
cat_string(string, file = nil) click to toggle source
# File lib/act/command.rb, line 132
def cat_string(string, file = nil)
  if string
    path = file.path if file
    @lexer ||= Helper.lexer(path, string)
    string = Helper.strip_indentation(string)
    string = Helper.prettify(string, @lexer) if @prettify
    string = Helper.syntax_highlight(string, @lexer) if ansi_output? || @always_color
    string = Helper.add_line_numbers(string, file.from_line, file.highlight_line) if @number_lines && file
    UI.puts UI.tty? ? "\n#{string}" : string
  else
    UI.warn '[!] Nothing to show'
  end
end
infer_local_path(path) click to toggle source

@return [String, Nil]

# File lib/act/command.rb, line 96
def infer_local_path(path)
  path_components = Pathname(path).each_filename.to_a
  until path_components.empty?
    path_components.shift
    candidate = File.join(path_components)
    if File.exist?(candidate)
      return candidate
    end
  end
end
open_file(file) click to toggle source

@return [void]

# File lib/act/command.rb, line 109
def open_file(file)
  line = file.highlight_line || file.from_line
  command = Helper.open_in_editor_command(file.path, line)
  UI.puts command if self.verbose?
  if defined? Bundler
    Bundler.with_clean_env do
      system(command)
    end
  else
    system(command)
  end
end
pre_process_file_string(string) click to toggle source

@return [String]

# File lib/act/command.rb, line 90
def pre_process_file_string(string)
  string.sub(/https?:\/\//, '')
end
run() click to toggle source
# File lib/act/command.rb, line 57
def run
  if @stdin && !@open
    cat_string(@stdin)
    return
  end


  @file_string ||= '.'
  clean_file_string = pre_process_file_string(@file_string)
  file = ArgumentParser.parse_file_information(clean_file_string, CONTEXT_LINES)

  path_exists = File.exist?(file.path)
  unless path_exists
    inferred = infer_local_path(file.path)
    if inferred
      file.path = inferred
      path_exists = true
    end
  end

  if @open
    open_file(file)
  else
    if path_exists
      cat_file(file)
    else
      UI.warn '[!] File not found'
    end
  end
end
validate!() click to toggle source
Calls superclass method
# File lib/act/command.rb, line 50
def validate!
  super
  help! 'A file is required.' unless @file_string || @open || @stdin
end