Sha256: 4799868c42f83f5e311744a9c9bb3215a6aedc22dee0dc97897ae94864d8fbf0

Contents?: true

Size: 1.83 KB

Versions: 1

Compression:

Stored size: 1.83 KB

Contents

require "optparse"

module SimpleHdGraph
  class FileNotExist < Error; end
  class DirectoryNotExist < Error; end # rubocop:disable Layout/EmptyLineBetweenDefs

  class Command
    #
    # @param parser [Parser]
    # @param reader [Reader]
    # @param renderer [Symbol]
    #
    def initialize(parser: Parser.new, reader: Reader.new, renderer: :plantuml)
      @parser = parser
      @reader = reader
      @renderer = SimpleHdGraph::Renderer.method(renderer.to_s)
    end
    attr_reader :parser, :reader, :renderer

    #
    # @param argv [Array]
    #
    def run(argv)
      parse(argv)
      if @file || @dir
        start
      end
    end

    #
    # @param argv [Array]
    #
    def parse(argv)
      opts.parse(argv)
    end

    #
    # @return [String]
    #
    def stream
      if @dir
        reader.read_dir(@dir)
      else
        reader.read_file(@file)
      end
    end

    def start
      nodes = parser.parse(stream)

      @renderer.call(nodes)
    end

    #
    # @return [OptionParser]
    #
    # :reek:NestedIterators, :reek:DuplicateMethodCall
    def opts
      OptionParser.new do |opt|
        opt.on("-d DIR", "--dir", "dirname") { |value|
          if File.exist?(value) && File.directory?(value)
            @dir = value
          else
            raise DirectoryNotExist, value
          end
        }
        opt.on("-f FILE", "--file", "filename") { |value|
          if File.exist?(value) && File.file?(value)
            @file = value
          else
            raise FileNotExist, value
          end
        }
        opt.on("-r RENDERER", "--renderer", "renderer") { |value|
          begin
            @renderer = SimpleHdGraph::Renderer.method(value)
          rescue NameError
            warn "[Warining] renderer `#{value}` not found. falling back to :plantuml"
          end
        }
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
simple-hd-graph-0.3.5 lib/simple-hd-graph/command.rb