awt 0.0.2 → 0.0.3

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: 8e3158b8b1980b0db7939acfe0af10e5c4f6940b
4
- data.tar.gz: c17259140354d4debd4ede725e46c8f4281bb2ff
3
+ metadata.gz: c1814106982fdedf5ba321096decea1ea902bec0
4
+ data.tar.gz: 4ef116fdbc3c99b4fd309fe35d1a265c04a71131
5
5
  SHA512:
6
- metadata.gz: 7abeaab52b73ce75ff0884a8d83139f86e862b98f2ed593cfa25fe17dcf98b3a1f963b4914440b8d6d19348a4cc3981d933a4be0d8f09fe82730dc0130dc60c4
7
- data.tar.gz: 100d3833184ce553f7378ab6a63ae4bf1bbdee267fe78a47176738f996afb3633ddee07a1708391dede024816d319a2582ae4e8f367934232265a4730949c66a
6
+ metadata.gz: ee9dc653d1a9ac8feafa9ea221a46a533dffb28a1991421a2f9e774817750dcad133e0285b38e9002e663e1488b0947c8c6784751d3e14bf8fe0a50ad3216135
7
+ data.tar.gz: f2b372d74d5df8c0695d30e12d12a8e6b126550c10629bcf05c73f565810784a6cffcd40755334ebf0171b10a966a47f3315abe05490a4efc413812d226afaad
data/README.md CHANGED
@@ -49,6 +49,28 @@ task :task_name do
49
49
  end
50
50
  ```
51
51
 
52
+ `run` is returns a result object.
53
+ Result object with a exit-status, etc.
54
+
55
+ ```ruby
56
+ if run("cat /etc/centos-release").status == 0
57
+ puts "Hello CentOS"
58
+ end
59
+
60
+ if run("uname -a").data.chomp == "Linux"
61
+ puts "Hello Linux"
62
+ end
63
+ ```
64
+
65
+ Using the `with_env` method if you want to use the environment variable.
66
+ Key is applied upcase it is converted to String.
67
+
68
+ ```ruby
69
+ with_env key: "value" do
70
+ run "echo $KEY"
71
+ end
72
+ ```
73
+
52
74
  #### Execute
53
75
 
54
76
  Awt task executable as follows:
data/lib/awt.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require "ostruct"
1
2
  require "net/ssh"
2
3
  require "net/scp"
3
4
 
@@ -1,6 +1,6 @@
1
1
  module Awt
2
2
  class Server
3
- attr_accessor :host, :user, :options
3
+ attr_accessor :host, :user, :options, :envs
4
4
 
5
5
  def initialize(host: "localhost", port: 22, user: nil, key: "~/.ssh/id_rsa")
6
6
  @host = host
@@ -9,13 +9,34 @@ module Awt
9
9
  @printer = Printer.new(@host)
10
10
  end
11
11
 
12
+ def with_env(envs, &block)
13
+ env = []
14
+ envs.each {|k,v| env << "export #{k.to_s.upcase}=\"#{v}\""}
15
+ @envs = env.join(";") unless env.empty?
16
+ self.instance_eval &block
17
+ @envs = nil
18
+ end
19
+
12
20
  def run(cmd)
13
21
  reset_printer_host
22
+ cmd = "#{@envs};#{cmd}" if @envs
23
+ result = OpenStruct.new
24
+
14
25
  Net::SSH.start(@host, @user, @options) do |ssh|
15
26
  @printer.print_run cmd
16
- out = ssh.exec!(cmd)
17
- @printer.print_out out
27
+ ssh.open_channel do |channel|
28
+ channel.exec cmd do |ch, success|
29
+ channel.on_data {|ch,data| result.data = data}
30
+ channel.on_extended_data {|ch,type,data| result.extended_data = data}
31
+ channel.on_request("exit-status") {|ch,data| result.status = data.read_long}
32
+ end
33
+ end
34
+ ssh.loop
18
35
  end
36
+
37
+ @printer.print_out result.data if result.data
38
+ @printer.print_ext result.extended_data if result.extended_data
39
+ result
19
40
  end
20
41
 
21
42
  def put(local, remote)
@@ -1,3 +1,3 @@
1
1
  module Awt
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -53,22 +53,47 @@ describe Awt::Server do
53
53
  end
54
54
  end
55
55
 
56
+ describe "#with_env" do
57
+ it "should call instance methods" do
58
+ server.should_receive(:run)
59
+ server.with_env(key: :value) {run "example"}
60
+ end
61
+ end
62
+
56
63
  describe "#run" do
64
+ let(:channel) {double.as_null_object}
65
+
57
66
  before do
67
+ channel.stub(:exec).with("example").and_yield(double, double)
68
+ ssh.stub(:open_channel).and_yield(channel)
58
69
  Net::SSH.stub(:start).and_yield(ssh)
59
70
  Awt::Printer.any_instance.stub(:print_run)
60
71
  Awt::Printer.any_instance.stub(:print_out)
72
+ Awt::Printer.any_instance.stub(:print_ext)
61
73
  end
62
74
 
63
75
  after {server.run("example")}
64
76
 
65
77
  it "should call Awt::Printer#print_*" do
66
78
  Awt::Printer.any_instance.should_receive(:print_run)
79
+ end
80
+
81
+ it "should call #on_data" do
82
+ channel.should_receive(:on_data).and_yield(double, double)
67
83
  Awt::Printer.any_instance.should_receive(:print_out)
68
84
  end
69
85
 
70
- it "should call #exec! of Net::SSH" do
71
- ssh.should_receive(:exec!)
86
+ it "should call #on_extended_data" do
87
+ channel.should_receive(:on_extended_data).and_yield(double, double, double)
88
+ Awt::Printer.any_instance.should_receive(:print_ext)
89
+ end
90
+
91
+ it "should call #on_request" do
92
+ channel.should_receive(:on_request).with("exit-status").and_yield(double, double.as_null_object)
93
+ end
94
+
95
+ it "should call #loop" do
96
+ ssh.should_receive(:loop)
72
97
  end
73
98
 
74
99
  it "should call #reset_printer_host" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: awt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - i2bskn
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-18 00:00:00.000000000 Z
11
+ date: 2013-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: net-ssh
@@ -131,7 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
131
131
  version: '0'
132
132
  requirements: []
133
133
  rubyforge_project:
134
- rubygems_version: 2.1.6
134
+ rubygems_version: 2.1.9
135
135
  signing_key:
136
136
  specification_version: 4
137
137
  summary: Awt is cli tool for system administration.