Sha256: 6d4e1b27a60ce023405f078035e9d095b6b7914dd717c51007638c05489262b8

Contents?: true

Size: 770 Bytes

Versions: 2

Compression:

Stored size: 770 Bytes

Contents

module Space
  class App
    class Parser
      attr_reader :names, :line

      def initialize(names)
        @names = names
      end

      def parse(line)
        @line = line
        scope = parse_scope
        command = parse_command
        [scope || names, command]
      end

      private

        def parse_scope
          scope = []
          pattern = /^(#{names.join('|')}|\d+)\s*/
          line.gsub!(pattern) { |repo| scope << resolve(repo.strip); '' } while line =~ pattern
          line.strip!
          scope unless scope.empty?
        end

        def parse_command
          line.strip
          line unless line.empty?
        end

        def resolve(repo)
          repo =~ /^\d+$/ ? names[repo.to_i - 1] : repo
        end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
space-0.0.5 lib/space/app/parser.rb
space-0.0.4 lib/space/app/parser.rb