sshy 0.0.1 → 0.0.2

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
2
  SHA1:
3
- metadata.gz: 5e2f3bd7959c1400f354fb2b650e8fee8bb818a7
4
- data.tar.gz: 5381480b9b73f3dd19d12033e3993aa64cd3178f
3
+ metadata.gz: fc20369e84dc0f45b91dbc14f62f4e7b156994dd
4
+ data.tar.gz: 1273d6e52ad6611b0525471cb053a8c2d6e699a5
5
5
  SHA512:
6
- metadata.gz: b9916073e7004c82b82e2bdcf9ba1074f54b69584e617fb1448c068f80d7e7b88f295deffd5e157b1a46502338778a6424b85289644d2aa2262b44fc24f4867f
7
- data.tar.gz: c8c7314c709d5d16f36e3954cf9ddd0180325a64c2ca36cf0034f98c93930f2fcbaebdc25d9ff82de5b65d1e6d21b9092be612eeebcfe33b26b720ab083c7712
6
+ metadata.gz: 52526406101ded5171a14e8799ad450f4633bea354b3a0c60d96cc74f10c496e2d83a999cccc0653a8cce026bdf028ff98f4aaf8c5f6542a87e92bd3a79d8d7f
7
+ data.tar.gz: 901d5bf1cbbcdec99cf0f7200971df49784d273ecd213860a71744eca2191b66ae01a9c8196657826db2fcdf4a6642f6bb019c582fb2093ca287f189d04b1061
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
- # Sshy
1
+ # SSHY
2
2
 
3
- Sshy help you connect to your ssh server without remember every name of it. — Edit
3
+ _version 0.0.2_
4
+
5
+ Sshy help you connect to your ssh server without remember every name of it.
4
6
 
5
7
  ## Installation
6
8
 
@@ -20,7 +22,12 @@ Or install it yourself as:
20
22
 
21
23
  ## Usage
22
24
 
23
- TODO: Write usage instructions here
25
+ ```
26
+ $ sshy
27
+ server01 server02 server03 server04
28
+ server05
29
+ ```
30
+ And now you could select one and press `Enter` to ssh it
24
31
 
25
32
  ## Contributing
26
33
 
@@ -0,0 +1,114 @@
1
+ #!/usr/bin/env ruby
2
+ require 'terminal-table'
3
+ require 'io/console'
4
+
5
+ require 'bundler/setup'
6
+ Bundler.setup
7
+ require_relative '../lib/sshy'
8
+
9
+
10
+ # puts Sshy::VERSION
11
+ HIDE_CURSOR = "/usr/bin/tput civis"
12
+ SHOW_CURSOR = "/usr/bin/tput cnorm"
13
+
14
+ _table_size = [3, 3]
15
+ _x_y = [0, 0]
16
+
17
+ # TODO: check windows size >= ?
18
+ def winsize
19
+ IO.console.winsize
20
+ rescue LoadError
21
+ [Integer(`tput li`), Integer(`tput co`)]
22
+ end
23
+
24
+ def get_hosts
25
+ hosts = []
26
+ f = File.open("#{Dir.home}/.ssh/config", "r")
27
+ f.each_line do |line|
28
+ if /^Host\s/.match(line)
29
+ hosts << line.split(' ').last
30
+ end
31
+ end
32
+ f.close
33
+
34
+ hosts.sort!
35
+ end
36
+
37
+ def formattd_output(rows)
38
+ table = Terminal::Table.new :rows => rows
39
+ table.style = {:width => 100, :border_x => " ", :border_i => " ", :border_y => " "}
40
+ return table
41
+ end
42
+
43
+ def read_char
44
+ STDIN.echo = false
45
+ STDIN.raw!
46
+
47
+ input = STDIN.getc.chr
48
+ if input == "\e" then
49
+ input << STDIN.read_nonblock(3) rescue nil
50
+ input << STDIN.read_nonblock(2) rescue nil
51
+ end
52
+ ensure
53
+ STDIN.echo = true
54
+ STDIN.cooked!
55
+
56
+ return input
57
+ end
58
+
59
+
60
+ system(HIDE_CURSOR) # hide cursor
61
+
62
+ begin
63
+ hosts = get_hosts
64
+ data = Sshy::Data.new hosts
65
+
66
+ arrow_key = ''
67
+ while true do
68
+ data.move(arrow_key)
69
+ table = formattd_output(data.output)
70
+
71
+ # refresh new output
72
+ puts table
73
+
74
+ # read input
75
+ char = read_char
76
+ if char == 'q' or char == "\u0003" # Ctrl-C
77
+ exit
78
+ end
79
+ case char
80
+ when "\r"
81
+ # open ssh
82
+ location = data.location
83
+ pid = Process.fork
84
+ if pid.nil? then
85
+ command = "open ssh://#{data.data[location[1]][location[0]]}"
86
+ puts "`#{command}`" + ' now'
87
+ exec command
88
+ else
89
+ Process.detach(pid)
90
+ puts "exit"
91
+ end
92
+ #Process.wait pid
93
+ exit
94
+ when "\e[A", "\u0010", 'k' # UP, CTRL-P, k
95
+ arrow_key = 'up'
96
+ when "\e[B", "\u000E", 'j' # DOWN, CTRL-N, j
97
+ arrow_key = 'down'
98
+ when "\e[C", "\u0006", 'l' # RIGHT, CTRL-F, l
99
+ arrow_key = 'right'
100
+ when "\e[D", "\u0002", 'h' # LEFT, CTRL-B, h
101
+ arrow_key = 'left'
102
+ end
103
+
104
+ # clear old output
105
+ (data.length + 2).times do
106
+ system('/usr/bin/tput cuu1')
107
+ system('/usr/bin/tput el')
108
+ end
109
+ end
110
+ rescue Interrupt
111
+ exit
112
+ ensure
113
+ system(SHOW_CURSOR) # show cursor
114
+ end
@@ -1,5 +1,11 @@
1
- require "sshy/version"
1
+ # require all files
2
+ $:.unshift File.dirname(__FILE__)
3
+ %w(version).each do |file|
4
+ require "sshy/#{file}"
5
+ end
2
6
 
3
7
  module Sshy
4
- # Your code goes here...
8
+ require 'sshy/data'
9
+ autoload :VERSION, 'sshy/version'
10
+ #autoload :Data, 'sshy/data'
5
11
  end
@@ -0,0 +1,94 @@
1
+ require 'colorize'
2
+
3
+ module Sshy
4
+ class Data
5
+ def initialize(array, width = 3)
6
+ @data = to_nested_array array, width
7
+
8
+ #@data = [['server01', 'server02', 'server09'],
9
+ # ['server03', 'server04', 'server00', 'hahaha'],
10
+ # ['server05'],
11
+ # ['server03', 'server04', 'server00', 'hahaha'],
12
+ # ['server07', 'server08'],
13
+ # ['server11', 'server12', '000000', '222', '1', '2']]
14
+ @location = [0, 2]
15
+ end
16
+
17
+ def to_nested_array(array, width)
18
+ length = array.length
19
+ rows = []
20
+ tmp_array = []
21
+ i = 0
22
+ while i < length do
23
+ j = 0
24
+ while j < width do
25
+ tmp_array << array[i] if i < length
26
+ j += 1
27
+ i += 1
28
+ end
29
+ rows << tmp_array
30
+ tmp_array = []
31
+ end
32
+ rows
33
+ end
34
+
35
+ def move(key)
36
+ case key
37
+ when ""
38
+ when 'up'
39
+ move_up
40
+ when 'down'
41
+ move_down
42
+ when 'left'
43
+ move_left
44
+ when 'right'
45
+ move_right
46
+ end
47
+ end
48
+
49
+ def output
50
+ data = Marshal.load(Marshal.dump(@data))
51
+
52
+ # location check, if there is element in data
53
+ length = data[@location[1]].length - 1
54
+ if @location[0] > length
55
+ @location[0] = length
56
+ end
57
+
58
+ data[@location[1]][@location[0]] =
59
+ data[@location[1]][@location[0]].colorize(:color => :red, :mode => :bold)
60
+
61
+ return data
62
+ end
63
+
64
+ def length
65
+ return @data.length
66
+ end
67
+
68
+ def move_up
69
+ @location[1] -= 1 if @location[1] > 0
70
+ end
71
+
72
+ def move_down
73
+ @location[1] += 1 if @location[1] < (@data.length - 1)
74
+ end
75
+
76
+ def move_left
77
+ @location[0] -= 1 if @location[0] > 0
78
+ end
79
+
80
+ def move_right
81
+ @location[0] += 1 if @location[0] < (@data[@location[1]].length - 1)
82
+ end
83
+
84
+ def location
85
+ @location
86
+ end
87
+
88
+ def data
89
+ @data
90
+ end
91
+
92
+ private :move_up, :move_down, :move_left, :move_right
93
+ end
94
+ end
@@ -1,3 +1,3 @@
1
1
  module Sshy
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1,6 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sshy do
4
+ pending "This is a test spec tester"
5
+ puts Sshy::VERSION
6
+ end
@@ -0,0 +1,9 @@
1
+ require 'bundler/setup'
2
+ Bundler.setup
3
+
4
+ require_relative "../lib/sshy"
5
+ #require '../lib/sshy' # and any other gems you need
6
+
7
+ RSpec.configure do |config|
8
+ # some (optional) config here
9
+ end
@@ -18,6 +18,9 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
+ spec.add_runtime_dependency 'colorize', '>= 0.7.5'
22
+
21
23
  spec.add_development_dependency "bundler", "~> 1.7"
22
24
  spec.add_development_dependency "rake", "~> 10.0"
25
+ spec.add_development_dependency "rspec", "~> 3.2"
23
26
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sshy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shown Tien
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-07 00:00:00.000000000 Z
11
+ date: 2015-04-09 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: colorize
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.7.5
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 0.7.5
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,22 +52,42 @@ dependencies:
38
52
  - - "~>"
39
53
  - !ruby/object:Gem::Version
40
54
  version: '10.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'
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'
41
69
  description: Sshy help you connect to your ssh server without remember every name
42
70
  of it.
43
71
  email:
44
72
  - hightian@gmail.com
45
- executables: []
73
+ executables:
74
+ - sshy
46
75
  extensions: []
47
76
  extra_rdoc_files: []
48
77
  files:
49
78
  - ".gitignore"
79
+ - ".rspec"
50
80
  - Gemfile
51
81
  - LICENSE
52
82
  - LICENSE.txt
53
83
  - README.md
54
84
  - Rakefile
85
+ - bin/sshy
55
86
  - lib/sshy.rb
87
+ - lib/sshy/data.rb
56
88
  - lib/sshy/version.rb
89
+ - spec/foobar_spec.rb
90
+ - spec/spec_helper.rb
57
91
  - sshy.gemspec
58
92
  homepage: https://github.com/wenxer/sshy
59
93
  licenses:
@@ -79,4 +113,6 @@ rubygems_version: 2.4.4
79
113
  signing_key:
80
114
  specification_version: 4
81
115
  summary: SSH Tool
82
- test_files: []
116
+ test_files:
117
+ - spec/foobar_spec.rb
118
+ - spec/spec_helper.rb