hss 1.0.1 → 1.1.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 9dd6fe9513ef938a661f864f1b666180fca1900c
4
- data.tar.gz: b8893ba888ce0d6ffb96259ba02e8d41f8d144aa
2
+ SHA256:
3
+ metadata.gz: ea38be50183638d064b68bb7869612eefe61aae3955b3bf74687178a1299788a
4
+ data.tar.gz: e3fcb36de03c7832e05fee113b21eebaa403a5d2e01aa2b4ce6152617185dccd
5
5
  SHA512:
6
- metadata.gz: 0ccd01d5f12c20afe8e6c045d001d74f7f0b0918c510a24eff46c6300a990a040873b33edc7784f0de161d42626e195ba7d925c891207299b098b929283eb23a
7
- data.tar.gz: f8c42d417a64b5374feaab330d913580e29fae8ac484999f9446f0da86d0e2991c0efd1e304dfca914cd17210fc2fc153372adc6398792a0e1f79ae99f60c6a7
6
+ metadata.gz: '08f83fa733d1699a22ece2b98490b3d5c60b946b851dd86050d26d8fa3d42dddcb778065a23a971f4e6639f2566519d6ac6985c878628fb8de86c852343c3d8c'
7
+ data.tar.gz: 767ab68f6cef6e5b200e8ac97401416557ea946728abae8414314cbcd87d19b93c91f78ca39fe996b871e90b9e97c0dca68af5d5be1928a75e8c17eeec90f786
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+
5
+ URL="https://exporter.akerl.app/metric"
6
+ AUTH="Authorization: Bearer $EXPORTER_TOKEN"
7
+ if [[ "$JOB_STATUS" == "success" ]] ; then
8
+ VALUE=1
9
+ else
10
+ VALUE=0
11
+ fi
12
+ BODY="{\"name\":\"gh/${GITHUB_REPOSITORY}\",\"metrics\":[{\"name\":\"ghactions\",\"type\":\"gauge\",\"tags\":{\"repo\":\"${GITHUB_REPOSITORY}\"},\"value\":\"${VALUE}\"}]}"
13
+
14
+ echo "$BODY"
15
+
16
+ curl -i -XPOST -d "$BODY" -H"$AUTH" "$URL"
@@ -0,0 +1,37 @@
1
+ ---
2
+ name: Build
3
+ 'on':
4
+ push:
5
+ branches:
6
+ - main
7
+ tags:
8
+ - "**"
9
+ pull_request_target:
10
+ jobs:
11
+ build:
12
+ name: Build
13
+ runs-on: ubuntu-22.04
14
+ permissions:
15
+ contents: write
16
+ steps:
17
+ - name: Checkout
18
+ uses: actions/checkout@v3
19
+ with:
20
+ submodules: recursive
21
+ - uses: ruby/setup-ruby@v1
22
+ with:
23
+ ruby-version: '3.1'
24
+ bundler-cache: true
25
+ - name: Build
26
+ run: bundle exec rake
27
+ - name: Release
28
+ if: github.ref_type == 'tag'
29
+ run: bundle exec rake release
30
+ env:
31
+ GEM_HOST_API_KEY: "${{ secrets.GEM_HOST_API_KEY }}"
32
+ - name: Post to hook-exporter
33
+ run: "./.github/exporter.sh"
34
+ env:
35
+ EXPORTER_TOKEN: "${{ secrets.EXPORTER_TOKEN }}"
36
+ JOB_STATUS: "${{ job.status }}"
37
+ if: always() && github.ref == 'refs/heads/main'
data/.rubocop.yml CHANGED
@@ -1,7 +1,2 @@
1
- AllCops:
2
- Exclude:
3
- - spec/test/bad_helpers/module.rb
4
- Encoding:
5
- Enabled: false
6
- HashSyntax:
7
- Enabled: false
1
+ inherit_gem:
2
+ goodcop: .rubocop.yml
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ # 1.1.0 / 2023-08-08
2
+
3
+ * [BUGFIX] Support ';' as an HSS_CONFIG delimiter on all platforms, and do not use ':' on Windows, to support the presence of ':' in Windows paths
4
+
1
5
  # 1.0.1 / 2015-05-15
2
6
 
3
7
  * [FEATURE] Support HSS_COMMAND for changing base command
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2014 Les Aker
3
+ Copyright (c) 2022 Les Aker
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -2,10 +2,7 @@ hss
2
2
  =========
3
3
 
4
4
  [![Gem Version](https://img.shields.io/gem/v/hss.svg)](https://rubygems.org/gems/hss)
5
- [![Dependency Status](https://img.shields.io/gemnasium/akerl/hss.svg)](https://gemnasium.com/akerl/hss)
6
- [![Code Climate](https://img.shields.io/codeclimate/github/akerl/hss.svg)](https://codeclimate.com/github/akerl/hss)
7
- [![Coverage Status](https://img.shields.io/coveralls/akerl/hss.svg)](https://coveralls.io/r/akerl/hss)
8
- [![Build Status](https://img.shields.io/travis/akerl/hss.svg)](https://travis-ci.org/akerl/hss)
5
+ [![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/akerl/hss/build.yml?branch=main)](https://github.com/akerl/hss/actions)
9
6
  [![MIT Licensed](https://img.shields.io/badge/license-MIT-green.svg)](https://tldrlegal.com/license/mit-license)
10
7
 
11
8
  SSH helper that uses regex and fancy expansion to dynamically manage SSH shortcuts
@@ -42,7 +39,7 @@ alias cnysr='rsync -e hss'
42
39
 
43
40
  ## Configuration
44
41
 
45
- 1. You can put your configuration in ~/.hss.yml or another file specified by the "HSS\_CONFIG" environment variable.
42
+ 1. You can put your configuration in ~/.hss.yml or another file specified by the "HSS\_CONFIG" environment variable. You can refer to multiple config files in "HSS\_CONFIG" by separating them with colons and the configs will be merged (HSS\_CONFIG=$HOME/.hss-shared.yml:$HOME/.hss-mine.yml).
46
43
  2. The only required configuration section is "patterns", which contains an array of hashes with the following attributes:
47
44
  * note: Name of this pattern ("my servers")
48
45
  * example: Shows how this is used ("jimbo -> root@jimbo.example.org")
data/Rakefile CHANGED
@@ -11,4 +11,4 @@ RuboCop::RakeTask.new(:rubocop) do |task|
11
11
  task.fail_on_error = true
12
12
  end
13
13
 
14
- task :default => [:spec, :rubocop, :build, :install]
14
+ task default: %i[spec rubocop build install]
data/bin/hss CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'hss'
4
4
 
5
- My_Handler = HSS::Handler.new(:config => ENV['HSS_CONFIG'])
5
+ My_Handler = HSS::Handler.new(config: ENV.fetch('HSS_CONFIG', nil))
6
6
 
7
7
  if ARGV == ['version']
8
8
  puts HSS::VERSION
@@ -15,7 +15,9 @@ elsif ARGV == ['help'] || ARGV.empty?
15
15
  end
16
16
 
17
17
  short_host = ARGV.delete_at(ARGV.find_index { |x| x[0, 1] != '-' } || 0)
18
- args = ARGV.reduce('') { |a, e| a + " '" + e.gsub(/([$"])/, '\1') + "'" }
18
+ args = ARGV.reduce('') do |acc, elem|
19
+ "#{acc} '#{elem.gsub(/([$"])/, '\1')}'"
20
+ end
19
21
  command = ENV['HSS_COMMAND'] || 'ssh'
20
22
  command.prepend('echo ') if ENV['HSS_DEBUG']
21
23
 
data/hss.gemspec CHANGED
@@ -1,10 +1,11 @@
1
- $:.unshift File.expand_path('../lib/', __FILE__)
1
+ $LOAD_PATH.unshift File.expand_path('lib', __dir__)
2
2
  require 'hss/version'
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = 'hss'
6
6
  s.version = HSS::VERSION
7
- s.date = Time.now.strftime("%Y-%m-%d")
7
+ s.required_ruby_version = '>= 2.6'
8
+
8
9
  s.summary = 'SSH helper'
9
10
  s.description = 'Regex-based SSH shortcut tool'
10
11
  s.authors = ['Les Aker']
@@ -13,12 +14,8 @@ Gem::Specification.new do |s|
13
14
  s.license = 'MIT'
14
15
 
15
16
  s.files = `git ls-files`.split
16
- s.test_files = `git ls-files spec/*`.split
17
17
  s.executables = ['hss']
18
18
 
19
- s.add_development_dependency 'rubocop', '~> 0.31.0'
20
- s.add_development_dependency 'rake', '~> 10.4.0'
21
- s.add_development_dependency 'coveralls', '~> 0.8.0'
22
- s.add_development_dependency 'rspec', '~> 3.2.0'
23
- s.add_development_dependency 'fuubar', '~> 2.0.0'
19
+ s.add_development_dependency 'goodcop', '~> 0.9.7'
20
+ s.metadata['rubygems_mfa_required'] = 'true'
24
21
  end
@@ -8,7 +8,7 @@ module HSS
8
8
 
9
9
  def command(input)
10
10
  result = IO.popen(input) { |cmd| cmd.read.chomp }
11
- fail "Command failed: #{input}" unless $CHILD_STATUS == 0
11
+ raise("Command failed: #{input}") unless $CHILD_STATUS.exitstatus.zero?
12
12
  result
13
13
  rescue Errno::ENOENT
14
14
  raise "Command not found: #{input}"
@@ -8,7 +8,7 @@ module HSS
8
8
  @config['expansions'].each do |long, shorts|
9
9
  return long if shorts.include? input
10
10
  end
11
- fail NameError, "No expansion found for: #{input}"
11
+ raise NameError, "No expansion found for: #{input}"
12
12
  end
13
13
  end
14
14
  end
@@ -7,16 +7,12 @@ module HSS
7
7
  private
8
8
 
9
9
  def external(source, key)
10
- begin
11
- config = open(File.expand_path(source)) { |f| YAML.load f.read }
12
- rescue Psych::SyntaxError, Errno::ENOENT
13
- raise "Failed to open YAML file: #{source}"
14
- end
15
- begin
16
- key.split('.').reduce(config) { |a, e| a[e] } || fail
17
- rescue
18
- raise NameError, "Key not found in YAML: #{key}"
19
- end
10
+ config = File.open(File.expand_path(source)) { |f| YAML.safe_load f.read }
11
+ key.split('.').reduce(config) { |acc, elem| acc[elem] } || raise
12
+ rescue Psych::SyntaxError, Errno::ENOENT
13
+ raise "Failed to open YAML file: #{source}"
14
+ rescue StandardError
15
+ raise NameError, "Key not found in YAML: #{key}"
20
16
  end
21
17
  end
22
18
  end
@@ -5,9 +5,19 @@ module HSS
5
5
  private
6
6
 
7
7
  def shortcut(input)
8
- @config['shortcuts'][input] || fail
9
- rescue
10
- raise NameError, "Shortcut does not exist #{input}"
8
+ @config.dig('shortcuts', input) || raise(NameError, "Shortcut does not exist #{input}")
9
+ end
10
+ end
11
+ end
12
+
13
+ unless {}.respond_to? :dig
14
+ ##
15
+ # Define dig method if it didn't exist (because Ruby predates 2.3)
16
+ class Hash
17
+ def dig(arg, *args)
18
+ val = self[arg]
19
+ return val if val.nil? || args.empty?
20
+ val.dig(*args)
11
21
  end
12
22
  end
13
23
  end
data/lib/hss/version.rb CHANGED
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ##
2
4
  # Define the version
3
5
  module HSS
4
- VERSION = '1.0.1'
6
+ VERSION = '1.1.0'
5
7
  end
data/lib/hss.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yaml'
2
4
  require 'pathname'
3
5
  require 'hss/version'
@@ -5,8 +7,9 @@ require 'hss/version'
5
7
  ##
6
8
  # HSS module provides a helper for SSH shortcuts
7
9
  module HSS
8
- DEFAULT_CONFIG = '~/.hss.yml'
9
- DEFAULT_LIB = Pathname.new(__FILE__).realpath.split[0].to_s + '/hss/helpers'
10
+ DEFAULT_CONFIG = File.join(Dir.home, '.hss.yml')
11
+ DEFAULT_LIB = File.join(Pathname.new(__FILE__).realpath.split[0], 'hss', 'helpers')
12
+ CONFIG_DELIMITERS = /cygwin|mswin|mingw|bccwin|wince|emx/.match?(RUBY_PLATFORM) ? ';' : /[:;]/
10
13
 
11
14
  class << self
12
15
  ##
@@ -25,7 +28,7 @@ module HSS
25
28
  ## Make a new handler with a config and parser
26
29
 
27
30
  def initialize(params = {})
28
- params = { :config => params } if params.is_a? String
31
+ params = { config: params } if params.is_a? String
29
32
  load_config(params[:config])
30
33
  @helpers = []
31
34
  load_helpers(params[:helpers])
@@ -40,7 +43,7 @@ module HSS
40
43
  next unless @parser.check(input, pattern['short'])
41
44
  return @parser.parse(pattern['long'])
42
45
  end
43
- fail NameError, "Couldn't find a matching host for: #{input}"
46
+ raise NameError, "Couldn't find a matching host for: #{input}"
44
47
  end
45
48
 
46
49
  private
@@ -50,12 +53,14 @@ module HSS
50
53
 
51
54
  def load_config(config_path = nil)
52
55
  path = File.expand_path(config_path || HSS::DEFAULT_CONFIG)
53
- files = path.split(':').map { |x| YAML.load File.read x }
56
+ files = path.split(CONFIG_DELIMITERS).map { |x| YAML.safe_load File.read x }
54
57
  @config = files.reverse.reduce(&:deep_merge)
55
- @patterns = @config.delete('patterns') || fail
58
+ @patterns = @config.delete('patterns') || raise
59
+ # rubocop:disable Lint/ShadowedException
56
60
  rescue Psych::SyntaxError, RuntimeError, Errno::ENOENT
57
61
  raise "Failed to load config: #{config_path}"
58
62
  end
63
+ # rubocop:enable Lint/ShadowedException
59
64
 
60
65
  ##
61
66
  # Load helper modules
@@ -63,13 +68,11 @@ module HSS
63
68
  def load_helpers(helper_path = nil)
64
69
  helper_path ||= HSS::DEFAULT_LIB
65
70
  helper_path = File.expand_path(helper_path)
66
- Dir.glob(helper_path + '/*').each do |helper|
67
- begin
68
- require helper
69
- @helpers << helper
70
- rescue LoadError, SyntaxError
71
- raise LoadError, "Failed to load helper: #{helper}"
72
- end
71
+ Dir.glob(File.join(helper_path, '*')).sort.each do |helper|
72
+ require helper
73
+ @helpers << helper
74
+ rescue LoadError, SyntaxError
75
+ raise LoadError, "Failed to load helper: #{helper}"
73
76
  end
74
77
  end
75
78
  end
@@ -90,7 +93,7 @@ module HSS
90
93
 
91
94
  def check(input, short_form)
92
95
  return false unless input.match short_form
93
- x = Regexp.last_match # rubocop:disable UselessAssignment
96
+ x = Regexp.last_match
94
97
  @match_data = binding
95
98
  true
96
99
  end
@@ -99,7 +102,7 @@ module HSS
99
102
  # Evaluate the long_form using the stored context
100
103
 
101
104
  def parse(long_form)
102
- a = eval '%Q{' + long_form + '}', @match_data # rubocop:disable Eval
105
+ a = eval "%Q{#{long_form}}", @match_data, __FILE__, __LINE__ # rubocop:disable Security/Eval
103
106
  a == long_form ? a : parse(a)
104
107
  end
105
108
  end
@@ -113,9 +116,10 @@ class Hash
113
116
 
114
117
  def deep_merge(new)
115
118
  merge(new) do |_, oldval, newval|
116
- if oldval.is_a? Hash
119
+ case oldval
120
+ when Hash
117
121
  deep_merge oldval, newval
118
- elsif oldval.is_a? Array
122
+ when Array
119
123
  oldval + newval
120
124
  else
121
125
  newval
data/spec/bin_spec.rb CHANGED
@@ -21,11 +21,11 @@ describe 'HSS script' do
21
21
  expect(`hss g`.strip).to eql 'git@github.com'
22
22
  ENV.delete 'HSS_COMMAND'
23
23
  end
24
- it 'connects via SSH' do
25
- expect(`hss l echo 'hello \\"world\\"'`.strip).to eql "hello \"world\""
26
- end
27
- it 'connects via SCP' do
28
- `scp -S hss spec/test/config.yml l:#{Dir.pwd}/scp_test`
29
- expect(File.exist? 'scp_test').to be_truthy
30
- end
24
+ # it 'connects via SSH' do
25
+ # expect(`hss l echo 'hello \\"world\\"'`.strip).to eql 'hello "world"'
26
+ # end
27
+ # it 'connects via SCP' do
28
+ # `scp -S hss spec/test/config.yml l:#{Dir.pwd}/scp_test`
29
+ # expect(File.exist?('scp_test')).to be_truthy
30
+ # end
31
31
  end
@@ -6,7 +6,7 @@ describe HSS::Parser do
6
6
 
7
7
  describe '#command' do
8
8
  it 'runs shell commands' do
9
- expect(handler.handle 'cmd_bar').to eql 'bar@example.org'
9
+ expect(handler.handle('cmd_bar')).to eql 'bar@example.org'
10
10
  end
11
11
  context 'if the command is invalid' do
12
12
  it 'raises an error' do
@@ -6,10 +6,10 @@ describe HSS::Parser do
6
6
 
7
7
  describe '#default' do
8
8
  it 'uses the provided value if set' do
9
- expect(handler.handle 'def_77').to eql 'chose_77'
9
+ expect(handler.handle('def_77')).to eql 'chose_77'
10
10
  end
11
11
  it 'uses the default if the value is unset' do
12
- expect(handler.handle 'def_').to eql 'chose_10'
12
+ expect(handler.handle('def_')).to eql 'chose_10'
13
13
  end
14
14
  end
15
15
  end
@@ -6,8 +6,8 @@ describe HSS::Parser do
6
6
 
7
7
  describe '#expand' do
8
8
  it 'matches keywords in a mapping' do
9
- expect(handler.handle 'exp_a').to eql 'exp_alpha'
10
- expect(handler.handle 'exp_2').to eql 'exp_beta'
9
+ expect(handler.handle('exp_a')).to eql 'exp_alpha'
10
+ expect(handler.handle('exp_2')).to eql 'exp_beta'
11
11
  end
12
12
  context 'when no match is found' do
13
13
  it 'raises an error' do
@@ -6,7 +6,7 @@ describe HSS::Parser do
6
6
 
7
7
  describe '#external' do
8
8
  it 'reads values from a YAML file' do
9
- expect(handler.handle 'ext_test.first.color').to eql 'external_blue'
9
+ expect(handler.handle('ext_test.first.color')).to eql 'external_blue'
10
10
  end
11
11
  context 'when a key is not found' do
12
12
  it 'raises an error' do
@@ -6,8 +6,8 @@ describe HSS::Parser do
6
6
 
7
7
  describe '#shortcut' do
8
8
  it 'expands shortcut text' do
9
- expect(handler.handle 'short_a').to eql 'short_ALPHA'
10
- expect(handler.handle 'short_b').to eql 'short_BETA'
9
+ expect(handler.handle('short_a')).to eql 'short_ALPHA'
10
+ expect(handler.handle('short_b')).to eql 'short_BETA'
11
11
  end
12
12
  context 'when an invalid shortcut is used' do
13
13
  it 'raises an error' do
data/spec/hss_spec.rb CHANGED
@@ -77,30 +77,31 @@ describe HSS do
77
77
 
78
78
  describe '#handle' do
79
79
  it 'matches input to patterns' do
80
- expect(handler.handle 'g').to eql 'git@github.com'
80
+ expect(handler.handle('g')).to eql 'git@github.com'
81
81
  end
82
82
  it 'supports regex capturing' do
83
- expect(handler.handle 'cap99').to eql 'server99.example.org'
83
+ expect(handler.handle('cap99')).to eql 'server99.example.org'
84
84
  end
85
85
  it 'supports named captures' do
86
- expect(handler.handle 'name_a').to eql 'name_ALPHA'
86
+ expect(handler.handle('name_a')).to eql 'name_ALPHA'
87
87
  end
88
88
  it 'raises an error if no match is found' do
89
89
  expect { handler.handle 'x' }.to raise_exception NameError
90
90
  end
91
91
  it 'supports combination of helpers' do
92
- expect(handler.handle 'bar__1_b').to eql 'bar_9_alpha_BETA'
92
+ expect(handler.handle('bar__1_b')).to eql 'bar_9_alpha_BETA'
93
93
  end
94
94
  it 'supports shallow nested operations' do
95
- expect(handler.handle 'nest_a').to eql 'winner'
95
+ expect(handler.handle('nest_a')).to eql 'winner'
96
96
  end
97
97
  it 'supports deep nested operations' do
98
- expect(handler.handle 'deep_cat_c').to eql 'CHARLIE'
98
+ expect(handler.handle('deep_cat_c')).to eql 'CHARLIE'
99
99
  end
100
100
  end
101
101
  end
102
102
 
103
103
  describe HSS::Parser do
104
+ # rubocop:disable Lint/InterpolationCheck
104
105
  let(:parser) { HSS::Parser.new(key: 'value') }
105
106
 
106
107
  describe '#initialize' do
@@ -126,5 +127,6 @@ describe HSS do
126
127
  expect(parser.parse('#{$1}')).to eql 'winner'
127
128
  end
128
129
  end
130
+ # rubocop:enable Lint/InterpolationCheck
129
131
  end
130
132
  end
data/spec/spec_helper.rb CHANGED
@@ -1,10 +1,2 @@
1
- require 'simplecov'
2
- require 'coveralls'
3
-
4
- SimpleCov.formatter = Coveralls::SimpleCov::Formatter
5
- SimpleCov.start do
6
- add_filter '/spec/'
7
- end
8
-
9
1
  require 'rspec'
10
2
  require 'hss'
@@ -1,7 +1,9 @@
1
1
  ##
2
2
  # Provides a helper to have default values
3
- class HSS::Parser
4
- def default(a, b)
5
- a.nil? || a.empty? ? b : a
3
+ module HSS
4
+ class Parser
5
+ def default(a, b)
6
+ a.nil? || a.empty? ? b : a
7
+ end
6
8
  end
7
9
  end
@@ -1,7 +1,9 @@
1
1
  ##
2
2
  # Allow shortcut expansion from the config
3
- class HSS::Parser
4
- def shortcut(input)
5
- @config['shortcuts'][input]
3
+ module HSS
4
+ class Parser
5
+ def shortcut(input)
6
+ @config['shortcuts'][input]
7
+ end
6
8
  end
7
9
  end
metadata CHANGED
@@ -1,85 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hss
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Les Aker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-16 00:00:00.000000000 Z
11
+ date: 2023-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rubocop
14
+ name: goodcop
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.31.0
19
+ version: 0.9.7
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.31.0
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: 10.4.0
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: 10.4.0
41
- - !ruby/object:Gem::Dependency
42
- name: coveralls
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: 0.8.0
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: 0.8.0
55
- - !ruby/object:Gem::Dependency
56
- name: rspec
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: 3.2.0
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: 3.2.0
69
- - !ruby/object:Gem::Dependency
70
- name: fuubar
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: 2.0.0
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: 2.0.0
26
+ version: 0.9.7
83
27
  description: Regex-based SSH shortcut tool
84
28
  email: me@lesaker.org
85
29
  executables:
@@ -87,10 +31,11 @@ executables:
87
31
  extensions: []
88
32
  extra_rdoc_files: []
89
33
  files:
34
+ - ".github/exporter.sh"
35
+ - ".github/workflows/build.yml"
90
36
  - ".gitignore"
91
37
  - ".rspec"
92
38
  - ".rubocop.yml"
93
- - ".travis.yml"
94
39
  - CHANGELOG.md
95
40
  - Gemfile
96
41
  - LICENSE
@@ -124,7 +69,8 @@ files:
124
69
  homepage: https://github.com/akerl/hss
125
70
  licenses:
126
71
  - MIT
127
- metadata: {}
72
+ metadata:
73
+ rubygems_mfa_required: 'true'
128
74
  post_install_message:
129
75
  rdoc_options: []
130
76
  require_paths:
@@ -133,32 +79,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
133
79
  requirements:
134
80
  - - ">="
135
81
  - !ruby/object:Gem::Version
136
- version: '0'
82
+ version: '2.6'
137
83
  required_rubygems_version: !ruby/object:Gem::Requirement
138
84
  requirements:
139
85
  - - ">="
140
86
  - !ruby/object:Gem::Version
141
87
  version: '0'
142
88
  requirements: []
143
- rubyforge_project:
144
- rubygems_version: 2.4.5
89
+ rubygems_version: 3.3.26
145
90
  signing_key:
146
91
  specification_version: 4
147
92
  summary: SSH helper
148
- test_files:
149
- - spec/bin_spec.rb
150
- - spec/helpers/command_spec.rb
151
- - spec/helpers/default_spec.rb
152
- - spec/helpers/expand_spec.rb
153
- - spec/helpers/external_spec.rb
154
- - spec/helpers/shortcut_spec.rb
155
- - spec/hss_spec.rb
156
- - spec/spec_helper.rb
157
- - spec/test/bad_helpers/module.rb
158
- - spec/test/config.yml
159
- - spec/test/external_test.yml
160
- - spec/test/good_helpers/default.rb
161
- - spec/test/good_helpers/shortcut.rb
162
- - spec/test/incomplete.yml
163
- - spec/test/invalid.yml
164
- - spec/test/other.yml
93
+ test_files: []
data/.travis.yml DELETED
@@ -1,18 +0,0 @@
1
- before_script:
2
- - ssh-keygen -N '' -C 'build-test' -f ~/.ssh/id_rsa
3
- - cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
4
- language: ruby
5
- cache: bundler
6
- sudo: false
7
- rvm:
8
- - 2.2.0
9
- - 2.1.5
10
- - 2.0.0-p598
11
- - 1.9.3-p551
12
- notifications:
13
- email: false
14
- irc:
15
- channels:
16
- - irc.oftc.net#akerl
17
- template:
18
- - "%{repository}/%{branch}/%{build_number}: %{message} -- %{build_url}"