ironment 0.0.4 → 0.0.5
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 +4 -4
- data/README.md +6 -1
- data/lib/ironment/cl.rb +18 -27
- data/lib/ironment/runcom.rb +1 -0
- data/lib/ironment/version.rb +1 -1
- data/lib/ironment.rb +12 -0
- data/test/cl_test.rb +40 -40
- data/test/ironment_test.rb +22 -0
- data/test/runcom_test.rb +10 -0
- metadata +30 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0e22103ee32450e82906177426670ee179a4783f
|
4
|
+
data.tar.gz: 34771f4603e957fa89df5487e3e77135ae4cfb66
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 481b3985f1e6603d067b9333798b970d349b5f1a42f7b0c0e030714086947819d07ededc5ddada9d67fe0d5925bcd922ef2bf8a8509987ccc36dabb2c75872b6
|
7
|
+
data.tar.gz: 5d6746488c1fe5066de1fca7b8d35b09d997dd65dffc2a45f47b13537a4cc1a1031f2aacebd5f0d2c3c862c01b2db2b271a32746c7824697e732e7e584391f23
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Ironment
|
2
2
|
========
|
3
3
|
|
4
|
-
[](https://travis-ci.org/badeball/ironment)
|
4
|
+
[](https://travis-ci.org/badeball/ironment)
|
5
5
|
[](https://codeclimate.com/github/badeball/ironment)
|
6
6
|
[](https://codeclimate.com/github/badeball/ironment/coverage)
|
7
7
|
|
@@ -43,6 +43,11 @@ $ yaourt -S ruby-ironment
|
|
43
43
|
|
44
44
|
## Changelog
|
45
45
|
|
46
|
+
### 0.0.5
|
47
|
+
|
48
|
+
* `iron exec` now handles EACCES, ENOENT & EISDIR like `iron trust` and `iron untrust` does.
|
49
|
+
* `iron exec` now handles malformed runcom files.
|
50
|
+
|
46
51
|
### 0.0.4
|
47
52
|
|
48
53
|
* Correcting a bug under ruby-1.9.3.
|
data/lib/ironment/cl.rb
CHANGED
@@ -1,14 +1,21 @@
|
|
1
1
|
class Ironment
|
2
2
|
class CL
|
3
3
|
def initialize(options = {})
|
4
|
-
@ironment = options[:ironment] || Ironment.new
|
4
|
+
@ironment = options[:ironment] || Ironment.new(options)
|
5
5
|
@prompter = options[:prompter] || Prompter.new
|
6
|
-
@
|
7
|
-
@stderr = options[:stderr] || $stderr
|
6
|
+
@err = options[:err] || $stderr
|
8
7
|
end
|
9
8
|
|
10
9
|
def exec_with_environment(command, *args)
|
11
10
|
@ironment.exec_with_environment command, *args
|
11
|
+
rescue Errno::EACCES
|
12
|
+
@err.puts "ironment: Permission denied"
|
13
|
+
rescue Errno::ENOENT
|
14
|
+
@err.puts "ironment: No such file or directory"
|
15
|
+
rescue Errno::EISDIR
|
16
|
+
@err.puts "ironment: Is a directory"
|
17
|
+
rescue Ironment::MalformedRuncom
|
18
|
+
@err.puts "ironment: Malformed runcom"
|
12
19
|
rescue Truster::NotTrusted => e
|
13
20
|
if @prompter.not_trusted e.runcom
|
14
21
|
exec_with_environment command, *args
|
@@ -20,39 +27,23 @@ class Ironment
|
|
20
27
|
end
|
21
28
|
|
22
29
|
def trust(file)
|
23
|
-
@
|
24
|
-
|
25
|
-
true
|
30
|
+
@ironment.trust file
|
26
31
|
rescue Errno::EACCES
|
27
|
-
@
|
28
|
-
|
29
|
-
false
|
32
|
+
@err.puts "ironment: Permission denied"
|
30
33
|
rescue Errno::ENOENT
|
31
|
-
@
|
32
|
-
|
33
|
-
false
|
34
|
+
@err.puts "ironment: No such file or directory"
|
34
35
|
rescue Errno::EISDIR
|
35
|
-
@
|
36
|
-
|
37
|
-
false
|
36
|
+
@err.puts "ironment: Is a directory"
|
38
37
|
end
|
39
38
|
|
40
39
|
def untrust(file)
|
41
|
-
@
|
42
|
-
|
43
|
-
true
|
40
|
+
@ironment.untrust file
|
44
41
|
rescue Errno::EACCES
|
45
|
-
@
|
46
|
-
|
47
|
-
false
|
42
|
+
@err.puts "ironment: Permission denied"
|
48
43
|
rescue Errno::ENOENT
|
49
|
-
@
|
50
|
-
|
51
|
-
false
|
44
|
+
@err.puts "ironment: No such file or directory"
|
52
45
|
rescue Errno::EISDIR
|
53
|
-
@
|
54
|
-
|
55
|
-
false
|
46
|
+
@err.puts "ironment: Is a directory"
|
56
47
|
end
|
57
48
|
end
|
58
49
|
end
|
data/lib/ironment/runcom.rb
CHANGED
data/lib/ironment/version.rb
CHANGED
data/lib/ironment.rb
CHANGED
@@ -8,6 +8,8 @@ require "ironment/runcom"
|
|
8
8
|
require "ironment/truster"
|
9
9
|
|
10
10
|
class Ironment
|
11
|
+
class MalformedRuncom < StandardError; end
|
12
|
+
|
11
13
|
class << self
|
12
14
|
attr_writer :runcom
|
13
15
|
|
@@ -32,6 +34,16 @@ class Ironment
|
|
32
34
|
@executor.exec command, *args
|
33
35
|
end
|
34
36
|
|
37
|
+
def trust(file)
|
38
|
+
@truster.trust Runcom.new file
|
39
|
+
end
|
40
|
+
|
41
|
+
def untrust(file)
|
42
|
+
@truster.untrust Runcom.new file
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
35
47
|
def load_environment
|
36
48
|
@finder.find.each do |runcom|
|
37
49
|
@truster.validate runcom
|
data/test/cl_test.rb
CHANGED
@@ -1,88 +1,88 @@
|
|
1
1
|
require "test_helper"
|
2
2
|
require "stringio"
|
3
3
|
|
4
|
-
def test_exception_handling(exception, method,
|
5
|
-
|
4
|
+
def test_exception_handling(exception, message, method, *args)
|
5
|
+
ironment = Object.new
|
6
6
|
|
7
|
-
|
7
|
+
ironment.define_singleton_method method do |*|
|
8
8
|
raise exception
|
9
9
|
end
|
10
10
|
|
11
11
|
describe "upon receiving #{exception.inspect}" do
|
12
|
-
it "should return false" do
|
13
|
-
result = Ironment::CL.new(truster: truster, stderr: StringIO.new).send(method, ".envrc")
|
14
|
-
|
15
|
-
assert_equal false, result
|
16
|
-
end
|
17
|
-
|
18
12
|
it "should write #{message.inspect} to :stderr" do
|
19
|
-
|
13
|
+
err = StringIO.new
|
20
14
|
|
21
|
-
Ironment::CL.new(
|
15
|
+
Ironment::CL.new(ironment: ironment, err: err).send(method, *args)
|
22
16
|
|
23
|
-
assert_includes
|
17
|
+
assert_includes err.string, message
|
24
18
|
end
|
25
19
|
|
26
20
|
it ":stderr should end with a newline" do
|
27
|
-
|
21
|
+
err = StringIO.new
|
28
22
|
|
29
|
-
Ironment::CL.new(
|
23
|
+
Ironment::CL.new(ironment: ironment, err: err).send(method, *args)
|
30
24
|
|
31
|
-
assert_equal "\n",
|
25
|
+
assert_equal "\n", err.string[-1]
|
32
26
|
end
|
33
27
|
end
|
34
28
|
end
|
35
29
|
|
36
30
|
describe Ironment::CL do
|
37
|
-
describe "#
|
38
|
-
describe "when
|
39
|
-
it "should
|
40
|
-
|
41
|
-
|
31
|
+
describe "#exec_with_environment" do
|
32
|
+
describe "when successfully execing with a command" do
|
33
|
+
it "should not write to :stderr" do
|
34
|
+
ironment = Minitest::Mock.new
|
35
|
+
ironment.expect :exec_with_environment, true, ["foo"]
|
36
|
+
|
37
|
+
err = StringIO.new
|
38
|
+
|
39
|
+
Ironment::CL.new(ironment: ironment, err: err).exec_with_environment("foo")
|
42
40
|
|
43
|
-
assert_equal
|
41
|
+
assert_equal "", err.string
|
44
42
|
end
|
43
|
+
end
|
44
|
+
|
45
|
+
test_exception_handling Errno::EACCES, "ironment: Permission denied", :exec_with_environment, "foo"
|
46
|
+
test_exception_handling Errno::ENOENT, "ironment: No such file or directory", :exec_with_environment, "foo"
|
47
|
+
test_exception_handling Errno::EISDIR, "ironment: Is a directory", :exec_with_environment, "foo"
|
48
|
+
test_exception_handling Ironment::MalformedRuncom, "ironment: Malformed runcom", :exec_with_environment, "foo"
|
49
|
+
end
|
45
50
|
|
51
|
+
describe "#trust" do
|
52
|
+
describe "when succesfully trusting a file" do
|
46
53
|
it "should not write to :stderr" do
|
47
54
|
truster = Minitest::Mock.new
|
48
55
|
truster.expect :trust, true, [Ironment::Runcom.new(".envrc")]
|
49
56
|
|
50
|
-
|
57
|
+
err = StringIO.new
|
51
58
|
|
52
|
-
Ironment::CL.new(truster: truster,
|
59
|
+
Ironment::CL.new(truster: truster, err: err).trust(".envrc")
|
53
60
|
|
54
|
-
assert_equal "",
|
61
|
+
assert_equal "", err.string
|
55
62
|
end
|
56
63
|
end
|
57
64
|
|
58
|
-
test_exception_handling Errno::EACCES,
|
59
|
-
test_exception_handling Errno::ENOENT,
|
60
|
-
test_exception_handling Errno::EISDIR,
|
65
|
+
test_exception_handling Errno::EACCES, "ironment: Permission denied", :trust, ".envrc"
|
66
|
+
test_exception_handling Errno::ENOENT, "ironment: No such file or directory", :trust, ".envrc"
|
67
|
+
test_exception_handling Errno::EISDIR, "ironment: Is a directory", :trust, ".envrc"
|
61
68
|
end
|
62
69
|
|
63
70
|
describe "#untrust" do
|
64
71
|
describe "when succesfully untrusting a file" do
|
65
|
-
it "should return true" do
|
66
|
-
truster = Minitest::Mock.new
|
67
|
-
truster.expect :untrust, true, [Ironment::Runcom.new(".envrc")]
|
68
|
-
|
69
|
-
assert_equal true, Ironment::CL.new(truster: truster).untrust(".envrc")
|
70
|
-
end
|
71
|
-
|
72
72
|
it "should not write to :stderr" do
|
73
73
|
truster = Minitest::Mock.new
|
74
74
|
truster.expect :untrust, true, [Ironment::Runcom.new(".envrc")]
|
75
75
|
|
76
|
-
|
76
|
+
err = StringIO.new
|
77
77
|
|
78
|
-
Ironment::CL.new(truster: truster,
|
78
|
+
Ironment::CL.new(truster: truster, err: err).untrust(".envrc")
|
79
79
|
|
80
|
-
assert_equal "",
|
80
|
+
assert_equal "", err.string
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
84
|
-
test_exception_handling Errno::EACCES,
|
85
|
-
test_exception_handling Errno::ENOENT,
|
86
|
-
test_exception_handling Errno::EISDIR,
|
84
|
+
test_exception_handling Errno::EACCES, "ironment: Permission denied", :untrust, ".envrc"
|
85
|
+
test_exception_handling Errno::ENOENT, "ironment: No such file or directory", :untrust, ".envrc"
|
86
|
+
test_exception_handling Errno::EISDIR, "ironment: Is a directory", :untrust, ".envrc"
|
87
87
|
end
|
88
88
|
end
|
data/test/ironment_test.rb
CHANGED
@@ -27,4 +27,26 @@ describe Ironment do
|
|
27
27
|
[finder, truster, populator, executor].each &:verify
|
28
28
|
end
|
29
29
|
end
|
30
|
+
|
31
|
+
describe "#trust" do
|
32
|
+
it "should invoke Ironment::Truster#trust with a runcom" do
|
33
|
+
truster = MiniTest::Mock.new
|
34
|
+
truster.expect :trust, nil, [Ironment::Runcom.new("foo")]
|
35
|
+
|
36
|
+
Ironment.new(truster: truster).trust "foo"
|
37
|
+
|
38
|
+
truster.verify
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "#untrust" do
|
43
|
+
it "should invoke Ironment::Truster#untrust with a runcom" do
|
44
|
+
truster = MiniTest::Mock.new
|
45
|
+
truster.expect :untrust, nil, [Ironment::Runcom.new("foo")]
|
46
|
+
|
47
|
+
Ironment.new(truster: truster).untrust "foo"
|
48
|
+
|
49
|
+
truster.verify
|
50
|
+
end
|
51
|
+
end
|
30
52
|
end
|
data/test/runcom_test.rb
CHANGED
@@ -66,6 +66,16 @@ describe Ironment::Runcom do
|
|
66
66
|
|
67
67
|
assert_equal 0, enum.count
|
68
68
|
end
|
69
|
+
|
70
|
+
it "should raise MalformedRuncom upon reading a malformed file" do
|
71
|
+
File.write(".envrc", <<-DAT.gsub(/^\s+/, ""))
|
72
|
+
FOO+1
|
73
|
+
DAT
|
74
|
+
|
75
|
+
assert_raises Ironment::MalformedRuncom do
|
76
|
+
Ironment::Runcom.new(".envrc").each_pair
|
77
|
+
end
|
78
|
+
end
|
69
79
|
end
|
70
80
|
|
71
81
|
describe "#==" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ironment
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonas Amundsen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: commander
|
@@ -52,6 +52,34 @@ dependencies:
|
|
52
52
|
- - '='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 0.6.7
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: guard
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 2.13.0
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 2.13.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: guard-minitest
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 2.4.4
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 2.4.4
|
55
83
|
- !ruby/object:Gem::Dependency
|
56
84
|
name: minitest
|
57
85
|
requirement: !ruby/object:Gem::Requirement
|