sshy 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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