awt 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: 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