Sha256: 981f50cbc1bd9a03984cc095dedbbb75291839093f2e8ce78f7c5e11275ec66e

Contents?: true

Size: 1.85 KB

Versions: 1

Compression:

Stored size: 1.85 KB

Contents

require 'colored'
require 'claide'
require 'active_support/core_ext/string/strip'

module Act
  class Command < CLAide::Command

    self.command = 'act'
    self.description = 'Act the command line tool to act on files'

    def self.options
      [
        ['--open', "Open the file in $EDITOR instead of printing it"],
        ['--no-line-numbers', "Show output without line numbers"],
        ['--version', 'Show the version of Act'],
      ].concat(super)
    end

    def self.run(argv)
      argv = CLAide::ARGV.new(argv)
      if argv.flag?('version')
        puts VERSION
        exit 0
      end
      super(argv)
    end

    def initialize(argv)
      @open = argv.flag?('open')
      @number_lines = argv.flag?('line-numbers', true)
      @file = argv.shift_argument
      super
    end

    def validate!
      super
      help! "A file is required." unless @file
    end

    def run
      file_information = @file.split(':')
      path = file_information[0]
      line = file_information[1]
      context_lines = 5

      if @open
        command = Helper.open_in_editor_command(path, line)
        system(command)
      else
        string = File.read(path) if File.exists?(path)

        if string
          if line
            line = line.to_i
            start_line = Helper.start_line(string, line, context_lines)
            end_line = Helper.end_line(string, line, context_lines)
            string = Helper.select_lines(string, start_line, end_line)
            puts "Showing from line #{start_line} to #{end_line}"
          end

          string = Helper.strip_indentation(string)
          string = Helper.syntax_highlith(string, path) if self.ansi_output?
          string = Helper.add_line_numbers(string, start_line, line) if @number_lines

          puts
          puts string
        else
          puts "[!] File not found"
        end
      end
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
act-0.0.1 lib/act/command.rb