hss 0.1.19 → 0.2.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 +4 -4
- data/bin/hss +25 -0
- data/hss.gemspec +3 -1
- data/lib/helpers/command.rb +6 -0
- data/lib/helpers/default.rb +6 -0
- data/lib/helpers/expand.rb +7 -0
- data/lib/helpers/shortcut.rb +6 -0
- data/lib/hss.rb +71 -0
- data/test.conf +17 -0
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f97fd7bebd4754a4f541fe572bef404eb40cc54c
|
4
|
+
data.tar.gz: eb1f05b133757060a728d495658350e15f156033
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8458ac9a10dfc7f55f611afc1d98c156948fdd19003f0aa6188e89e8cee4b51714cb2eede13de8739e10f36664c11d12c9e806e533aab3fdde692be93d8eab0a
|
7
|
+
data.tar.gz: 9304ed0e110094902e659b1724f4dc7ad1e1441bd9868aacf59294cca84b5ea7ce859f0ade3c100e3e6c2eda9cd42113aa2fe7cc44f097276876dc1a05daacf1
|
data/bin/hss
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'hss'
|
4
|
+
|
5
|
+
My_Handler = HSS::Handler.new ENV['HSS_CONFIG']
|
6
|
+
|
7
|
+
if ARGV == ['version']
|
8
|
+
puts HSS::Version
|
9
|
+
exit
|
10
|
+
elsif ARGV == ['help'] or ARGV.empty?
|
11
|
+
puts 'How to use:'
|
12
|
+
puts '(what you type) -> (where it takes you)'
|
13
|
+
My_Handler.patterns.each { |pattern| puts pattern['example'] }
|
14
|
+
exit
|
15
|
+
end
|
16
|
+
|
17
|
+
Short_Host = ARGV.delete_at( ARGV.find_index { |x| x[0, 1] != '-' } || 0 )
|
18
|
+
Args = ARGV.inject('') { |memo, obj| memo += " '" + obj.gsub(/([$"])/, '\1') + "'" }
|
19
|
+
Command = (ENV.include? 'HSS_DEBUG') ? 'echo ssh' : 'ssh'
|
20
|
+
|
21
|
+
Long_Host = My_Handler.handle Short_Host
|
22
|
+
|
23
|
+
$stdout.syswrite "\033]0;#{Short_Host}\007"
|
24
|
+
exec "#{Command} #{Long_Host} #{Args}"
|
25
|
+
|
data/hss.gemspec
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
+
require File.join(Dir.pwd, 'lib/hss.rb')
|
2
|
+
|
1
3
|
Gem::Specification.new do |s|
|
2
4
|
s.name = 'hss'
|
3
|
-
s.version =
|
5
|
+
s.version = HSS::Version
|
4
6
|
s.date = Time.now.strftime("%Y-%m-%d")
|
5
7
|
s.summary = 'SSH helper'
|
6
8
|
s.description = 'Regex-based SSH shortcut tool'
|
data/lib/hss.rb
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'pathname'
|
3
|
+
require 'erb'
|
4
|
+
|
5
|
+
module HSS
|
6
|
+
Version = '0.2.0'
|
7
|
+
Default_Config = '~/.hss.yml'
|
8
|
+
Default_Library = Pathname.new(__FILE__).realpath.split()[0].to_s + '/helpers'
|
9
|
+
|
10
|
+
class << self
|
11
|
+
def new(*args)
|
12
|
+
HSS::Handler.new(*args)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Handler
|
17
|
+
attr_reader :patterns, :config
|
18
|
+
|
19
|
+
def initialize(config_path = nil, helper_path = nil)
|
20
|
+
load_config(config_path)
|
21
|
+
load_parser(helper_path)
|
22
|
+
end
|
23
|
+
|
24
|
+
def load_config(config_path = nil)
|
25
|
+
begin
|
26
|
+
@config = YAML.load open(File.expand_path(config_path || HSS::Default_Config)).read
|
27
|
+
@patterns = @config.delete('patterns')
|
28
|
+
rescue
|
29
|
+
raise "Failed to load config: #{config_path}"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def load_parser(helper_path = nil)
|
34
|
+
Dir::glob((helper_path || HSS::Default_Library) + '/*').each do |helper|
|
35
|
+
begin
|
36
|
+
require_relative helper
|
37
|
+
rescue LoadError
|
38
|
+
raise LoadError, "Failed to load helper: #{helper}"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
@parser = HSS::Parser.new(@config)
|
42
|
+
end
|
43
|
+
|
44
|
+
def handle(input)
|
45
|
+
@patterns.each do |pattern|
|
46
|
+
next unless @parser.check(input, pattern['short'])
|
47
|
+
return @parser.parse(pattern['long'])
|
48
|
+
end
|
49
|
+
raise "Couldn't find a matching host for: #{input}"
|
50
|
+
end
|
51
|
+
|
52
|
+
def woof()
|
53
|
+
puts "bark"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
class Parser
|
58
|
+
def initialize(config)
|
59
|
+
@config = config
|
60
|
+
end
|
61
|
+
|
62
|
+
def check(input, short_form)
|
63
|
+
return false unless input.match short_form
|
64
|
+
@match_data = binding
|
65
|
+
true
|
66
|
+
end
|
67
|
+
def parse(long_form)
|
68
|
+
eval '"' + long_form + '"', @match_data
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
data/test.conf
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
---
|
2
|
+
patterns:
|
3
|
+
- note: test
|
4
|
+
example: hahahah
|
5
|
+
short: '^(\d)([a-z]+)-([fcm])$'
|
6
|
+
long: '#{shortcut($2)} #$1 #{expand($3)}'
|
7
|
+
expansions:
|
8
|
+
fish:
|
9
|
+
- f
|
10
|
+
monkey:
|
11
|
+
- m
|
12
|
+
chicken:
|
13
|
+
- c
|
14
|
+
shortcuts:
|
15
|
+
bar: "hello #{expand('c') world"
|
16
|
+
...
|
17
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hss
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Les Aker
|
8
8
|
autorequire:
|
9
9
|
bindir: lib
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-11-02 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Regex-based SSH shortcut tool
|
14
14
|
email: me@lesaker.org
|
@@ -21,8 +21,15 @@ files:
|
|
21
21
|
- LICENSE
|
22
22
|
- README.md
|
23
23
|
- Rakefile
|
24
|
+
- bin/hss
|
24
25
|
- hss.gemspec
|
26
|
+
- lib/helpers/command.rb
|
27
|
+
- lib/helpers/default.rb
|
28
|
+
- lib/helpers/expand.rb
|
29
|
+
- lib/helpers/shortcut.rb
|
25
30
|
- lib/hss
|
31
|
+
- lib/hss.rb
|
32
|
+
- test.conf
|
26
33
|
homepage: https://github.com/akerl/hss
|
27
34
|
licenses:
|
28
35
|
- MIT
|