awt 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: ba28acfb7c2b085b5932197f7a2145c82bb74085
4
- data.tar.gz: fb4d005cf06fda90dc483f721fa6d8de189c7126
3
+ metadata.gz: 8e3158b8b1980b0db7939acfe0af10e5c4f6940b
4
+ data.tar.gz: c17259140354d4debd4ede725e46c8f4281bb2ff
5
5
  SHA512:
6
- metadata.gz: 82cfc32ee11022ee12b2699091c821ffedc00e5bee4e976ad70a50f8b6d858699d66258e1fffa137107be491664a4f114913200c0201907fb2aa8d7279d341fe
7
- data.tar.gz: b6b16cfaff66874e4769e4c790408f33f2a3504bf08813ed423ed5f01cfc8f0531c55dba80694fc1a0432465ab7f13d8c23e3b598751bdb521c50584b7c57deb
6
+ metadata.gz: 7abeaab52b73ce75ff0884a8d83139f86e862b98f2ed593cfa25fe17dcf98b3a1f963b4914440b8d6d19348a4cc3981d933a4be0d8f09fe82730dc0130dc60c4
7
+ data.tar.gz: 100d3833184ce553f7378ab6a63ae4bf1bbdee267fe78a47176738f996afb3633ddee07a1708391dede024816d319a2582ae4e8f367934232265a4730949c66a
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  # Awt
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/awt.png)](http://badge.fury.io/rb/awt)
3
4
  [![Build Status](https://travis-ci.org/i2bskn/awt.png)](https://travis-ci.org/i2bskn/awt)
4
5
  [![Coverage Status](https://coveralls.io/repos/i2bskn/awt/badge.png)](https://coveralls.io/r/i2bskn/awt)
5
6
  [![Code Climate](https://codeclimate.com/github/i2bskn/awt.png)](https://codeclimate.com/github/i2bskn/awt)
@@ -43,6 +44,8 @@ server "hostname", user: "awt", port: 22, key: "/path/to/id_rsa"
43
44
 
44
45
  task :task_name do
45
46
  run "do something"
47
+ put "/path/to/local/file", "/path/to/remote/file"
48
+ get "/path/to/remote/file", "/path/to/local/file"
46
49
  end
47
50
  ```
48
51
 
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_dependency "net-ssh"
22
+ spec.add_dependency "net-scp"
22
23
 
23
24
  spec.add_development_dependency "bundler", "~> 1.3"
24
25
  spec.add_development_dependency "rake"
data/bin/awt CHANGED
@@ -3,38 +3,6 @@
3
3
  path = File.expand_path("../../lib", __FILE__)
4
4
  $:.unshift(path) unless $:.include?(path)
5
5
 
6
- require "optparse"
6
+ require "awt/cli"
7
7
 
8
- require "awt"
9
- require "awt/dsl"
10
-
11
- include Awt::DSL
12
-
13
- options = {}
14
- OptionParser.new do |opt|
15
- opt.on("-H VAL") {|v| options[:hosts] = v.split(",")}
16
- opt.on("-u VAL") {|v| options[:user] = v}
17
- opt.on("-p VAL") {|v| options[:port] = v.to_i}
18
- opt.on("-i VAL") {|v| options[:key] = v}
19
- opt.on("-f VAL") {|v| options[:task_file] = v}
20
-
21
- begin
22
- opt.parse!(ARGV)
23
- rescue => e
24
- puts e
25
- exit 1
26
- end
27
- end
28
-
29
- task_name = ARGV.first.to_sym
30
- hosts = options.delete(:hosts) || []
31
- task_file = options.delete(:task_file) || task_find
32
-
33
- hosts.each do |host|
34
- server host, options
35
- end
36
-
37
- unless task_file.nil?
38
- load task_file
39
- $AWT_TASKS[task_name].exec($AWT_TARGETS)
40
- end
8
+ Awt::CLI.start
data/lib/awt.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "net/ssh"
2
+ require "net/scp"
2
3
 
3
4
  require "awt/printer"
4
5
  require "awt/server"
@@ -0,0 +1,60 @@
1
+ require "optparse"
2
+
3
+ require "awt"
4
+ require "awt/dsl"
5
+
6
+ include Awt::DSL
7
+
8
+ module Awt
9
+ class CLI
10
+ attr_reader :executable
11
+
12
+ def initialize
13
+ parse_opt
14
+ end
15
+
16
+ def execute
17
+ register_targets(@hosts)
18
+ raise "Awtfile not found." if @task_file.nil?
19
+ load @task_file
20
+ $AWT_TASKS[@task_name].exec($AWT_TARGETS)
21
+ end
22
+
23
+ class << self
24
+ def start
25
+ begin
26
+ cli = self.new
27
+ cli.execute
28
+ rescue => e
29
+ puts e
30
+ end
31
+ end
32
+ end
33
+
34
+ private
35
+ def parse_opt
36
+ @options = {}
37
+ @hosts = []
38
+ @task_file = task_find
39
+ OptionParser.new do |opt|
40
+ opt.version = VERSION
41
+ opt.banner = "Usage: awt [options] TASK_NAME"
42
+ opt.on("-H HOSTNAME", "target host names.") {|v| @hosts = v.split(",")}
43
+ opt.on("-u USER", "login user.") {|v| @options[:user] = v}
44
+ opt.on("-p PORT", "ssh port number.") {|v| @options[:port] = v.to_i}
45
+ opt.on("-i IDENTITY_FILE", "SSH private key file.") {|v| @options[:key] = v}
46
+ opt.on("-f Awtfile", "Task file.") {|v| @task_file = v}
47
+ opt.parse!(ARGV)
48
+ end
49
+
50
+ raise "Task name is not specified." if ARGV.empty?
51
+ @task_name = ARGV.first.to_sym
52
+ end
53
+
54
+ def register_targets(hosts)
55
+ hosts.each do |host|
56
+ server host, @options
57
+ end
58
+ end
59
+ end
60
+ end
@@ -10,12 +10,33 @@ module Awt
10
10
  end
11
11
 
12
12
  def run(cmd)
13
- @printer.host = @host if @printer.host != @host
13
+ reset_printer_host
14
14
  Net::SSH.start(@host, @user, @options) do |ssh|
15
15
  @printer.print_run cmd
16
16
  out = ssh.exec!(cmd)
17
17
  @printer.print_out out
18
18
  end
19
19
  end
20
+
21
+ def put(local, remote)
22
+ reset_printer_host
23
+ Net::SSH.start(@host, @user, @options) do |ssh|
24
+ @printer.print_upload local
25
+ ssh.scp.upload! local, remote
26
+ end
27
+ end
28
+
29
+ def get(remote, local)
30
+ reset_printer_host
31
+ Net::SSH.start(@host, @user, @options) do |ssh|
32
+ @printer.print_download remote
33
+ ssh.scp.download! remote, local
34
+ end
35
+ end
36
+
37
+ private
38
+ def reset_printer_host
39
+ @printer.host = @host if @printer.host != @host
40
+ end
20
41
  end
21
42
  end
@@ -1,3 +1,3 @@
1
1
  module Awt
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1,111 @@
1
+ require "spec_helper"
2
+
3
+ describe Awt::CLI do
4
+ let(:cli) {Awt::CLI.new}
5
+
6
+ before do
7
+ ARGV.clear
8
+ ["-H", "host1,host2", "-u", "awt", "-p", "30022", "-i", "/path/to/id_rsa", "-f", "Awtfile", "example"].each do |opt|
9
+ ARGV << opt
10
+ end
11
+ end
12
+
13
+ describe "#initialize" do
14
+ it "should call CLI#parse_opt" do
15
+ Awt::CLI.any_instance.should_receive(:parse_opt)
16
+ Awt::CLI.new
17
+ end
18
+ end
19
+
20
+ describe "#execute" do
21
+ before do
22
+ Awt::Server.any_instance.stub(:run)
23
+ Awt::CLI.any_instance.stub(:load)
24
+ cli.instance_eval do
25
+ task :example do
26
+ run "something"
27
+ end
28
+ end
29
+ end
30
+
31
+ after do
32
+ $AWT_TASKS.clear
33
+ $AWT_TARGETS.clear
34
+ end
35
+
36
+ it "should call #register_targets" do
37
+ Awt::CLI.any_instance.should_receive(:register_targets).with(["host1", "host2"])
38
+ cli.execute
39
+ end
40
+
41
+ it "should throw exception if @task_file is nil" do
42
+ cli.instance_eval {@task_file = nil}
43
+ expect {
44
+ cli.execute
45
+ }.to raise_error
46
+ end
47
+
48
+ it "should load task file" do
49
+ Awt::CLI.any_instance.should_receive(:load)
50
+ cli.execute
51
+ end
52
+
53
+ it "should call Awt::Task#exec" do
54
+ mock = double("Awt::Task mock").as_null_object
55
+ mock.should_receive(:exec)
56
+ $AWT_TASKS.store(:example, mock)
57
+ cli.execute
58
+ end
59
+ end
60
+
61
+ describe "#parse_opt" do
62
+ it "should set task_name" do
63
+ expect(cli.instance_eval{@task_name}).to eq(:example)
64
+ end
65
+
66
+ it "should set hosts" do
67
+ expect(cli.instance_eval{@hosts}).to eq(["host1", "host2"])
68
+ end
69
+
70
+ it "should set user" do
71
+ expect(cli.instance_eval{@options[:user]}).to eq("awt")
72
+ end
73
+
74
+ it "should set port" do
75
+ expect(cli.instance_eval{@options[:port]}).to eq(30022)
76
+ end
77
+
78
+ it "should set port" do
79
+ expect(cli.instance_eval{@options[:key]}).to eq("/path/to/id_rsa")
80
+ end
81
+
82
+ it "should set task file" do
83
+ expect(cli.instance_eval{@task_file}).to eq("Awtfile")
84
+ end
85
+ end
86
+
87
+ describe "#register_targets" do
88
+ before {$AWT_TARGETS.clear}
89
+
90
+ it "should add targets" do
91
+ cli.send(:register_targets, cli.instance_eval{@hosts})
92
+ expect($AWT_TARGETS.size).to eq(2)
93
+ end
94
+ end
95
+
96
+ describe ".#start" do
97
+ it "should call Awt::CLI#execute" do
98
+ Awt::CLI.any_instance.should_receive(:execute)
99
+ Awt::CLI.start
100
+ end
101
+
102
+ it "should print error message if raise error" do
103
+ Awt::CLI.any_instance.should_receive(:execute).and_raise("error")
104
+ expect(
105
+ capture(:stdout){
106
+ Awt::CLI.start
107
+ }.chomp
108
+ ).to eq("error")
109
+ end
110
+ end
111
+ end
@@ -1,10 +1,14 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe Awt::Server do
4
+ let(:server) {Awt::Server.new}
5
+ let(:ssh) {double("Net::SSH mock").as_null_object}
6
+ let(:scp) {double("Net::SCP mock").as_null_object}
7
+ let(:local) {"/local/file"}
8
+ let(:remote) {"/remote/file"}
9
+
4
10
  describe "#initialize" do
5
11
  context "with default params" do
6
- let(:server) {Awt::Server.new}
7
-
8
12
  it "should set default host" do
9
13
  expect(server.host).to eq("localhost")
10
14
  end
@@ -50,9 +54,6 @@ describe Awt::Server do
50
54
  end
51
55
 
52
56
  describe "#run" do
53
- let(:server) {Awt::Server.new}
54
- let(:ssh) {double("Net::SSH mock").as_null_object}
55
-
56
57
  before do
57
58
  Net::SSH.stub(:start).and_yield(ssh)
58
59
  Awt::Printer.any_instance.stub(:print_run)
@@ -66,13 +67,69 @@ describe Awt::Server do
66
67
  Awt::Printer.any_instance.should_receive(:print_out)
67
68
  end
68
69
 
69
- it "should call Net::SSH::Connection::Session#exec" do
70
+ it "should call #exec! of Net::SSH" do
70
71
  ssh.should_receive(:exec!)
71
72
  end
72
73
 
73
- it "should re-set host of Printer" do
74
+ it "should call #reset_printer_host" do
75
+ Awt::Server.any_instance.should_receive(:reset_printer_host)
76
+ end
77
+ end
78
+
79
+ describe "#put" do
80
+ before do
81
+ ssh.stub(:scp).and_return(scp)
82
+ Net::SSH.stub(:start).and_yield(ssh)
83
+ Awt::Printer.any_instance.stub(:print_upload)
84
+ end
85
+
86
+ after {server.put(local, remote)}
87
+
88
+ it "should call Awt::Printer#print_*" do
89
+ Awt::Printer.any_instance.should_receive(:print_upload)
90
+ end
91
+
92
+ it "should call #upload! of Net::SCP" do
93
+ scp.should_receive(:upload!)
94
+ end
95
+
96
+ it "should call #reset_printer_host" do
97
+ Awt::Server.any_instance.should_receive(:reset_printer_host)
98
+ end
99
+ end
100
+
101
+ describe "#get" do
102
+ before do
103
+ ssh.stub(:scp).and_return(scp)
104
+ Net::SSH.stub(:start).and_yield(ssh)
105
+ Awt::Printer.any_instance.stub(:print_download)
106
+ end
107
+
108
+ after {server.get(remote, local)}
109
+
110
+ it "should call Awt::Printer#print_*" do
111
+ Awt::Printer.any_instance.should_receive(:print_download)
112
+ end
113
+
114
+ it "should call #download! of Net::SCP" do
115
+ scp.should_receive(:download!)
116
+ end
117
+
118
+ it "should call #reset_printer_host" do
119
+ Awt::Server.any_instance.should_receive(:reset_printer_host)
120
+ end
121
+ end
122
+
123
+ describe "#reset_printer_host" do
124
+ after {server.send(:reset_printer_host)}
125
+
126
+ it "should re-set host of Printer if changed host" do
74
127
  Awt::Printer.any_instance.should_receive(:host=)
75
128
  server.host = "example.com"
76
129
  end
130
+
131
+ it "should not re-set host of Printer" do
132
+ Awt::Printer.any_instance.should_not_receive(:host=)
133
+ end
77
134
  end
78
135
  end
@@ -13,7 +13,7 @@ SimpleCov.start do
13
13
  end
14
14
 
15
15
  require "awt"
16
- require "awt/dsl"
16
+ require "awt/cli"
17
17
 
18
18
  support_files = File.join(File.expand_path("..", __FILE__), "support/*.rb")
19
19
  Dir[support_files].each {|f| require f}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: awt
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
  - i2bskn
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: net-scp
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -84,11 +98,13 @@ files:
84
98
  - awt.gemspec
85
99
  - bin/awt
86
100
  - lib/awt.rb
101
+ - lib/awt/cli.rb
87
102
  - lib/awt/dsl.rb
88
103
  - lib/awt/printer.rb
89
104
  - lib/awt/server.rb
90
105
  - lib/awt/task.rb
91
106
  - lib/awt/version.rb
107
+ - spec/awt/cli_spec.rb
92
108
  - spec/awt/dsl_spec.rb
93
109
  - spec/awt/printer_spec.rb
94
110
  - spec/awt/server_spec.rb
@@ -115,11 +131,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
131
  version: '0'
116
132
  requirements: []
117
133
  rubyforge_project:
118
- rubygems_version: 2.1.9
134
+ rubygems_version: 2.1.6
119
135
  signing_key:
120
136
  specification_version: 4
121
137
  summary: Awt is cli tool for system administration.
122
138
  test_files:
139
+ - spec/awt/cli_spec.rb
123
140
  - spec/awt/dsl_spec.rb
124
141
  - spec/awt/printer_spec.rb
125
142
  - spec/awt/server_spec.rb