Sha256: eed96ef638146a1c86c720add2b451b73ec92bf8b02648621f517888614f6fb9

Contents?: true

Size: 1.3 KB

Versions: 1

Compression:

Stored size: 1.3 KB

Contents

require 'yaml'

module Prj

  class App
    class << self
      attr_accessor :config_path
    end
    @config_path = File.expand_path("~/.prj.yml").freeze

    def initialize(output, args = [])
      @letters = String(args.first).each_char.to_a
      @output = output
    end

    def run
      if @letters.empty?
        @output.puts config.fetch("projects_root")
        return 0
      end
      finder = Finder.new(config.fetch("projects_root"), symbolize_keys(config))
      filter = Filter.new(@letters, config.fetch("case_sensitive"))
      directories = finder.find_project_directories
      filtered_directories = filter.filter(directories)
      target_directory = File.expand_path(File.join(config.fetch("projects_root"), filtered_directories.first.to_s))
      @output.puts target_directory
      0
    end

    def config
      @config ||= begin
        config = File.exists?(self.class.config_path) ? YAML.load(File.read(self.class.config_path)) : {}
        default_config.merge(config)
      end
    end

    private

    def default_config
      default_config = {
        "projects_root"   => File.expand_path("~/Projects"),
        "vcs_directories" => [".git"],
        "case_sensitive"  => true
      }
    end

    def symbolize_keys(hash)
      Hash[hash.map { |k, v| [k.to_sym, v] }]
    end
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
prj-1.0.0 lib/prj/app.rb