howzit 2.0.7 → 2.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +32 -0
- data/README.md +4 -343
- data/bin/howzit +101 -83
- data/howzit.gemspec +2 -0
- data/lib/howzit/buildnote.rb +170 -19
- data/lib/howzit/colors.rb +3 -0
- data/lib/howzit/config.rb +62 -7
- data/lib/howzit/console_logger.rb +39 -1
- data/lib/howzit/hash.rb +2 -2
- data/lib/howzit/prompt.rb +6 -5
- data/lib/howzit/stringutils.rb +1 -1
- data/lib/howzit/task.rb +1 -0
- data/lib/howzit/topic.rb +21 -4
- data/lib/howzit/util.rb +10 -5
- data/lib/howzit/version.rb +1 -1
- data/lib/howzit.rb +13 -0
- data/spec/cli_spec.rb +27 -0
- data/spec/spec_helper.rb +1 -0
- metadata +32 -3
- data/lib/howzit/buildnotes.rb +0 -1252
    
        data/lib/howzit/topic.rb
    CHANGED
    
    | @@ -9,6 +9,12 @@ module Howzit | |
| 9 9 |  | 
| 10 10 | 
             
                attr_reader :title, :tasks, :prereqs, :postreqs
         | 
| 11 11 |  | 
| 12 | 
            +
                ##
         | 
| 13 | 
            +
                ## Initialize a topic object
         | 
| 14 | 
            +
                ##
         | 
| 15 | 
            +
                ## @param      title    [String] The topic title
         | 
| 16 | 
            +
                ## @param      content  [String] The raw topic content
         | 
| 17 | 
            +
                ##
         | 
| 12 18 | 
             
                def initialize(title, content)
         | 
| 13 19 | 
             
                  @title = title
         | 
| 14 20 | 
             
                  @content = content
         | 
| @@ -17,18 +23,29 @@ module Howzit | |
| 17 23 | 
             
                  @tasks = gather_tasks
         | 
| 18 24 | 
             
                end
         | 
| 19 25 |  | 
| 26 | 
            +
                ##
         | 
| 27 | 
            +
                ## Search title and contents for a pattern
         | 
| 28 | 
            +
                ##
         | 
| 29 | 
            +
                ## @param      term  [String] the search pattern
         | 
| 30 | 
            +
                ##
         | 
| 20 31 | 
             
                def grep(term)
         | 
| 21 32 | 
             
                  @title =~ /#{term}/i || @content =~ /#{term}/i
         | 
| 22 33 | 
             
                end
         | 
| 23 34 |  | 
| 24 | 
            -
                # Handle run command, execute directives
         | 
| 35 | 
            +
                # Handle run command, execute directives in topic
         | 
| 25 36 | 
             
                def run(nested: false)
         | 
| 26 37 | 
             
                  output = []
         | 
| 27 38 | 
             
                  tasks = 0
         | 
| 39 | 
            +
                  cols = begin
         | 
| 40 | 
            +
                    TTY::Screen.columns > 60 ? 60 : TTY::Screen.columns
         | 
| 41 | 
            +
                  rescue StandardError
         | 
| 42 | 
            +
                    60
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
             | 
| 28 45 | 
             
                  if @tasks.count.positive?
         | 
| 29 46 | 
             
                    unless @prereqs.empty?
         | 
| 30 | 
            -
                      puts @prereqs.join("\n\n")
         | 
| 31 | 
            -
                      res = Prompt.yn(' | 
| 47 | 
            +
                      puts TTY::Box.frame("{by}#{@prereqs.join("\n\n").wrap(cols - 4)}{x}".c, width: cols)
         | 
| 48 | 
            +
                      res = Prompt.yn('Have the above prerequisites been met?', default: true)
         | 
| 32 49 | 
             
                      Process.exit 1 unless res
         | 
| 33 50 |  | 
| 34 51 | 
             
                    end
         | 
| @@ -85,7 +102,7 @@ module Howzit | |
| 85 102 | 
             
                  end
         | 
| 86 103 | 
             
                  output.push("{bm}Ran #{tasks} #{tasks == 1 ? 'task' : 'tasks'}{x}".c) if Howzit.options[:log_level] < 2 && !nested
         | 
| 87 104 |  | 
| 88 | 
            -
                  puts postreqs.join("\n\n") unless postreqs.empty?
         | 
| 105 | 
            +
                  puts TTY::Box.frame("{bw}#{@postreqs.join("\n\n").wrap(cols - 4)}{x}".c, width: cols) unless @postreqs.empty?
         | 
| 89 106 |  | 
| 90 107 | 
             
                  output
         | 
| 91 108 | 
             
                end
         | 
    
        data/lib/howzit/util.rb
    CHANGED
    
    | @@ -1,21 +1,26 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            module Howzit
         | 
| 4 | 
            +
              # Util class
         | 
| 2 5 | 
             
              module Util
         | 
| 3 6 | 
             
                class << self
         | 
| 7 | 
            +
                  def read_file(path)
         | 
| 8 | 
            +
                    IO.read(path).force_encoding('utf-8').strip
         | 
| 9 | 
            +
                  end
         | 
| 10 | 
            +
             | 
| 4 11 | 
             
                  def valid_command?(command)
         | 
| 5 12 | 
             
                    cmd = command.split(' ')[0]
         | 
| 6 13 | 
             
                    command_exist?(cmd)
         | 
| 7 14 | 
             
                  end
         | 
| 8 | 
            -
             | 
| 15 | 
            +
             | 
| 9 16 | 
             
                  def command_exist?(command)
         | 
| 10 17 | 
             
                    exts = ENV.fetch('PATHEXT', '').split(::File::PATH_SEPARATOR)
         | 
| 11 18 | 
             
                    if Pathname.new(command).absolute?
         | 
| 12 | 
            -
                      ::File.exist?(command) ||
         | 
| 13 | 
            -
                        exts.any? { |ext| ::File.exist?("#{command}#{ext}") }
         | 
| 19 | 
            +
                      ::File.exist?(command) || exts.any? { |ext| ::File.exist?("#{command}#{ext}") }
         | 
| 14 20 | 
             
                    else
         | 
| 15 21 | 
             
                      ENV.fetch('PATH', '').split(::File::PATH_SEPARATOR).any? do |dir|
         | 
| 16 22 | 
             
                        file = ::File.join(dir, command)
         | 
| 17 | 
            -
                        ::File.exist?(file) ||
         | 
| 18 | 
            -
                          exts.any? { |ext| ::File.exist?("#{file}#{ext}") }
         | 
| 23 | 
            +
                        ::File.exist?(file) || exts.any? { |ext| ::File.exist?("#{file}#{ext}") }
         | 
| 19 24 | 
             
                      end
         | 
| 20 25 | 
             
                    end
         | 
| 21 26 | 
             
                  end
         | 
    
        data/lib/howzit/version.rb
    CHANGED
    
    
    
        data/lib/howzit.rb
    CHANGED
    
    | @@ -21,15 +21,28 @@ require 'tempfile' | |
| 21 21 | 
             
            require 'yaml'
         | 
| 22 22 |  | 
| 23 23 | 
             
            require 'tty/screen'
         | 
| 24 | 
            +
            require 'tty/box'
         | 
| 24 25 | 
             
            # require 'tty/prompt'
         | 
| 25 26 |  | 
| 27 | 
            +
            # Main config dir
         | 
| 26 28 | 
             
            CONFIG_DIR = '~/.config/howzit'
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            # Config file name
         | 
| 27 31 | 
             
            CONFIG_FILE = 'howzit.yaml'
         | 
| 32 | 
            +
             | 
| 33 | 
            +
            # Ignore file name
         | 
| 28 34 | 
             
            IGNORE_FILE = 'ignore.yaml'
         | 
| 35 | 
            +
             | 
| 36 | 
            +
            # Available options for matching method
         | 
| 29 37 | 
             
            MATCHING_OPTIONS = %w[partial exact fuzzy beginswith].freeze
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            # Available options for multiple_matches method
         | 
| 30 40 | 
             
            MULTIPLE_OPTIONS = %w[first best all choose].freeze
         | 
| 41 | 
            +
             | 
| 42 | 
            +
            # Available options for header formatting
         | 
| 31 43 | 
             
            HEADER_FORMAT_OPTIONS = %w[border block].freeze
         | 
| 32 44 |  | 
| 45 | 
            +
            # Main module for howzit
         | 
| 33 46 | 
             
            module Howzit
         | 
| 34 47 | 
             
              class << self
         | 
| 35 48 | 
             
                attr_accessor :arguments, :cli_args
         | 
    
        data/spec/cli_spec.rb
    ADDED
    
    | @@ -0,0 +1,27 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'spec_helper'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            # https://github.com/thoiberg/cli-test
         | 
| 6 | 
            +
            describe 'CLI' do
         | 
| 7 | 
            +
              include CliTest
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              it 'executes successfully' do
         | 
| 10 | 
            +
                execute_script('bin/howzit', use_bundler: true)
         | 
| 11 | 
            +
                expect(last_execution).to be_successful
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              it 'lists available topics' do
         | 
| 15 | 
            +
                execute_script('bin/howzit', use_bundler: true, args: %w[-L])
         | 
| 16 | 
            +
                expect(last_execution).to be_successful
         | 
| 17 | 
            +
                expect(last_execution.stdout).to match(/Topic Balogna/)
         | 
| 18 | 
            +
                expect(last_execution.stdout.split(/\n/).count).to eq 3
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              it 'lists available tasks' do
         | 
| 22 | 
            +
                execute_script('bin/howzit', use_bundler: true, args: %w[-T])
         | 
| 23 | 
            +
                expect(last_execution).to be_successful
         | 
| 24 | 
            +
                expect(last_execution.stdout).to match(/Topic Balogna/)
         | 
| 25 | 
            +
                expect(last_execution.stdout.split(/\n/).count).to eq 2
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
            end
         | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: howzit
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 2.0. | 
| 4 | 
            +
              version: 2.0.10
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Brett Terpstra
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2022-08- | 
| 11 | 
            +
            date: 2022-08-05 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -136,6 +136,20 @@ dependencies: | |
| 136 136 | 
             
                - - "~>"
         | 
| 137 137 | 
             
                  - !ruby/object:Gem::Version
         | 
| 138 138 | 
             
                    version: '3.1'
         | 
| 139 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 140 | 
            +
              name: cli-test
         | 
| 141 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 142 | 
            +
                requirements:
         | 
| 143 | 
            +
                - - "~>"
         | 
| 144 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 145 | 
            +
                    version: '1.0'
         | 
| 146 | 
            +
              type: :development
         | 
| 147 | 
            +
              prerelease: false
         | 
| 148 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 149 | 
            +
                requirements:
         | 
| 150 | 
            +
                - - "~>"
         | 
| 151 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 152 | 
            +
                    version: '1.0'
         | 
| 139 153 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 140 154 | 
             
              name: simplecov
         | 
| 141 155 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -240,6 +254,20 @@ dependencies: | |
| 240 254 | 
             
                - - "~>"
         | 
| 241 255 | 
             
                  - !ruby/object:Gem::Version
         | 
| 242 256 | 
             
                    version: '0.8'
         | 
| 257 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 258 | 
            +
              name: tty-box
         | 
| 259 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 260 | 
            +
                requirements:
         | 
| 261 | 
            +
                - - "~>"
         | 
| 262 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 263 | 
            +
                    version: '0.7'
         | 
| 264 | 
            +
              type: :runtime
         | 
| 265 | 
            +
              prerelease: false
         | 
| 266 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 267 | 
            +
                requirements:
         | 
| 268 | 
            +
                - - "~>"
         | 
| 269 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 270 | 
            +
                    version: '0.7'
         | 
| 243 271 | 
             
            description: Command line project documentation and task runner
         | 
| 244 272 | 
             
            email:
         | 
| 245 273 | 
             
            - me@brettterpstra.com
         | 
| @@ -269,7 +297,6 @@ files: | |
| 269 297 | 
             
            - lib/.rubocop.yml
         | 
| 270 298 | 
             
            - lib/howzit.rb
         | 
| 271 299 | 
             
            - lib/howzit/buildnote.rb
         | 
| 272 | 
            -
            - lib/howzit/buildnotes.rb
         | 
| 273 300 | 
             
            - lib/howzit/colors.rb
         | 
| 274 301 | 
             
            - lib/howzit/config.rb
         | 
| 275 302 | 
             
            - lib/howzit/console_logger.rb
         | 
| @@ -283,6 +310,7 @@ files: | |
| 283 310 | 
             
            - spec/.rubocop.yml
         | 
| 284 311 | 
             
            - spec/buildnote_spec.rb
         | 
| 285 312 | 
             
            - spec/buildnotes.md.bak
         | 
| 313 | 
            +
            - spec/cli_spec.rb
         | 
| 286 314 | 
             
            - spec/ruby_gem_spec.rb
         | 
| 287 315 | 
             
            - spec/spec_helper.rb
         | 
| 288 316 | 
             
            - spec/task_spec.rb
         | 
| @@ -316,6 +344,7 @@ test_files: | |
| 316 344 | 
             
            - spec/.rubocop.yml
         | 
| 317 345 | 
             
            - spec/buildnote_spec.rb
         | 
| 318 346 | 
             
            - spec/buildnotes.md.bak
         | 
| 347 | 
            +
            - spec/cli_spec.rb
         | 
| 319 348 | 
             
            - spec/ruby_gem_spec.rb
         | 
| 320 349 | 
             
            - spec/spec_helper.rb
         | 
| 321 350 | 
             
            - spec/task_spec.rb
         |