Commit 17b7973

mo khan <mo@mokhan.ca>
2021-02-05 22:04:58
chore: dev stuff
1 parent c284cf1
.github/workflows/ci.yml
@@ -12,10 +12,17 @@ jobs:
         ruby-version: ['2.5', '2.6', '2.7', '3.0']
     steps:
       - uses: actions/checkout@v2
-      - name: Set up Ruby
-        uses: ruby/setup-ruby@v1
+      - uses: ruby/setup-ruby@v1
         with:
           ruby-version: ${{ matrix.ruby-version }}
           bundler-cache: true
-      - name: Running tests…
-        run: ./bin/test
+      - run: ./bin/test
+  style:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v2
+      - uses: ruby/setup-ruby@v1
+        with:
+          ruby-version: '3'
+          bundler-cache: true
+      - run: ./bin/style
bin/console
@@ -1,4 +1,5 @@
 #!/usr/bin/env ruby
+# frozen_string_literal: true
 
 require "bundler/setup"
 require "jive"
bin/style
@@ -0,0 +1,6 @@
+#!/bin/sh
+set -e
+
+cd "$(dirname "$0")/.."
+
+bundle exec rubocop "$@"
bin/test
@@ -3,4 +3,10 @@ set -e
 
 cd "$(dirname "$0")/.."
 
-bundle exec ruby -Ilib:test test/**/*_test.rb
+export RUBYOPT="-Ilib:test"
+
+if [ $# -gt 0 ]; then
+  bundle exec ruby "$@"
+else
+  bundle exec ruby test/**/*_test.rb
+fi
exe/jive
@@ -1,3 +1,4 @@
-#!/usr/bin/env ruby
+#!/usr/bin/env -S ruby --disable-gems
+# frozen_string_literal: true
 
 require "jive"
lib/jive/version.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Jive
   VERSION = "0.1.0"
 end
lib/jive.rb
@@ -23,12 +23,13 @@ module Jive
     def self.popen_with_detail(command, path = Dir.pwd, env = {})
       FileUtils.mkdir_p(path) unless File.directory?(path)
 
-      captured_stdout = ''
-      captured_stderr = ''
+      captured_stdout = ""
+      captured_stderr = ""
       exit_status = nil
       start = Time.now
 
-      Open3.popen3(env.merge('PWD' => path), *Array(command), { chdir: path }) do |stdin, stdout, stderr, wait_thr|
+      Open3.popen3(env.merge("PWD" => path), *Array(command),
+                   { chdir: path }) do |stdin, stdout, stderr, wait_thr|
         out_reader = Thread.new { stdout.read }
         err_reader = Thread.new { stderr.read }
 
@@ -39,14 +40,15 @@ module Jive
         captured_stderr = err_reader.value
         exit_status = wait_thr.value
       end
-      Result.new(command, captured_stdout, captured_stderr, exit_status, Time.now - start)
+      Result.new(command, captured_stdout, captured_stderr, exit_status,
+                 Time.now - start)
     end
   end
 
   class BatchRunner
     attr_reader :runner, :stdout
 
-    def initialize(runner: Runner.new, stdout: STDOUT)
+    def initialize(runner: Runner.new, stdout: $stdout)
       @runner = runner
       @stdout = stdout
     end
@@ -54,27 +56,27 @@ module Jive
     def run(tasks, verbose: true)
       runner.run(tasks) do |command, &run|
         stdout.puts
-        stdout.puts "$ #{command.join(' ')}"
+        stdout.puts "$ #{command.join(" ")}"
         result = run.call
         stdout.print result.stdout if verbose
         stdout.print result.stderr if verbose
         stdout.puts "==> Finished in #{result.duration} seconds"
         stdout.puts
       end
-      stdout.puts '==================================================='
+      stdout.puts "==================================================="
       if runner.all_success_and_clean?
-        stdout.puts 'Passed successfully.'
-        return 0
+        stdout.puts "Passed successfully."
+        0
       elsif runner.all_success?
-        stdout.puts 'Passed successfully, but we have warnings:'
+        stdout.puts "Passed successfully, but we have warnings:"
         stdout.puts
         emit_warnings
-        return 2
+        2
       else
-        stdout.puts 'Something failed:'
+        stdout.puts "Something failed:"
         emit_warnings
         emit_errors
-        return 1
+        1
       end
     end
 
@@ -83,7 +85,7 @@ module Jive
     def emit_warnings
       runner.warned_results.each do |result|
         stdout.puts
-        stdout.puts "**** #{result.command.join(' ')} had the following warning(s):"
+        stdout.puts "**** #{result.command.join(" ")} had the following warning(s):"
         stdout.puts
         stdout.puts result.stderr
         stdout.puts
@@ -93,7 +95,7 @@ module Jive
     def emit_errors
       runner.failed_results.each do |result|
         stdout.puts
-        stdout.puts "**** #{result.command.join(' ')} failed with the following error(s):"
+        stdout.puts "**** #{result.command.join(" ")} failed with the following error(s):"
         stdout.puts
         stdout.puts result.stdout
         stdout.puts result.stderr
test/unit/jive_test.rb
@@ -1,7 +1,9 @@
-require 'test_helper'
+# frozen_string_literal: true
+
+require "test_helper"
 
 class JiveTest < Minitest::Test
-  def test_version
+  def test_that_it_has_a_version_number
     refute_nil Jive::VERSION
   end
 end
test/test_helper.rb
@@ -1,3 +1,5 @@
-require 'minitest'
-require 'minitest/autorun'
-require 'jive'
+# frozen_string_literal: true
+
+$LOAD_PATH.unshift File.expand_path("../lib", __dir__)
+require "jive"
+require "minitest/autorun"
.rubocop.yml
@@ -0,0 +1,16 @@
+AllCops:
+  TargetRubyVersion: 2.5
+
+Layout/LineLength:
+  Max: 120
+
+Style/Documentation:
+  Enabled: false
+
+Style/StringLiterals:
+  Enabled: true
+  EnforcedStyle: double_quotes
+
+Style/StringLiteralsInInterpolation:
+  Enabled: true
+  EnforcedStyle: double_quotes
Gemfile
@@ -1,4 +1,10 @@
+# frozen_string_literal: true
+
 source "https://rubygems.org"
 
 # Specify your gem's dependencies in jive.gemspec
 gemspec
+
+gem "minitest", "~> 5.0"
+gem "rake", "~> 13.0"
+gem "rubocop", "~> 1.7"
Gemfile.lock
@@ -7,17 +7,38 @@ PATH
 GEM
   remote: https://rubygems.org/
   specs:
+    ast (2.4.2)
     minitest (5.14.3)
-    rake (10.5.0)
+    parallel (1.20.1)
+    parser (3.0.0.0)
+      ast (~> 2.4.1)
+    rainbow (3.0.0)
+    rake (13.0.3)
+    regexp_parser (2.0.3)
+    rexml (3.2.4)
+    rubocop (1.9.1)
+      parallel (~> 1.10)
+      parser (>= 3.0.0.0)
+      rainbow (>= 2.2.2, < 4.0)
+      regexp_parser (>= 1.8, < 3.0)
+      rexml
+      rubocop-ast (>= 1.2.0, < 2.0)
+      ruby-progressbar (~> 1.7)
+      unicode-display_width (>= 1.4.0, < 3.0)
+    rubocop-ast (1.4.1)
+      parser (>= 2.7.1.5)
+    ruby-progressbar (1.11.0)
     thor (1.1.0)
+    unicode-display_width (2.0.0)
 
 PLATFORMS
   ruby
 
 DEPENDENCIES
   jive!
-  minitest (~> 5.14)
-  rake (~> 10.0)
+  minitest (~> 5.0)
+  rake (~> 13.0)
+  rubocop (~> 1.7)
 
 BUNDLED WITH
    2.2.8
jive.gemspec
@@ -1,6 +1,6 @@
-lib = File.expand_path("lib", __dir__)
-$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
-require "jive/version"
+# frozen_string_literal: true
+
+require_relative "lib/jive/version"
 
 Gem::Specification.new do |spec|
   spec.name          = "jive"
@@ -8,23 +8,24 @@ Gem::Specification.new do |spec|
   spec.authors       = ["mo khan"]
   spec.email         = ["mo@mokhan.ca"]
 
-  spec.summary       = %q{The art just comes.}
-  spec.description   = %q{The art just comes.}
+  spec.summary       = "The art just comes."
+  spec.description   = "The art just comes."
   spec.homepage      = "https://rubygems.org/gems/jive"
   spec.license       = "MIT"
+  spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
 
   spec.metadata["homepage_uri"] = spec.homepage
 
   # Specify which files should be added to the gem when it is released.
   # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
-  spec.files         = Dir.chdir(File.expand_path('..', __FILE__)) do
-    `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
+  spec.files = Dir.chdir(File.expand_path(__dir__)) do
+    `git ls-files -z`.split("\x0").reject do |f|
+      f.match(%r{^(test|spec|features)/})
+    end
   end
   spec.bindir        = "exe"
-  spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
+  spec.executables   = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
   spec.require_paths = ["lib"]
 
   spec.add_dependency "thor", "~> 1.1"
-  spec.add_development_dependency "rake", "~> 10.0"
-  spec.add_development_dependency "minitest", "~> 5.14"
 end
Rakefile
@@ -1,1 +1,14 @@
+# frozen_string_literal: true
+
 require "bundler/gem_tasks"
+require "rake/testtask"
+require "rubocop/rake_task"
+
+Rake::TestTask.new(:test) do |task|
+  task.libs << "lib"
+  task.libs << "test"
+  task.test_files = FileList["test/**/*_test.rb"]
+end
+RuboCop::RakeTask.new
+
+task default: %i[test rubocop]