ironment 0.0.5 → 0.0.6

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: 0e22103ee32450e82906177426670ee179a4783f
4
- data.tar.gz: 34771f4603e957fa89df5487e3e77135ae4cfb66
3
+ metadata.gz: b98178e9d9b70dce2165e1db18355670ba75cbaf
4
+ data.tar.gz: a5d25fafd95d58888723bbd1c09f7728d8067c7d
5
5
  SHA512:
6
- metadata.gz: 481b3985f1e6603d067b9333798b970d349b5f1a42f7b0c0e030714086947819d07ededc5ddada9d67fe0d5925bcd922ef2bf8a8509987ccc36dabb2c75872b6
7
- data.tar.gz: 5d6746488c1fe5066de1fca7b8d35b09d997dd65dffc2a45f47b13537a4cc1a1031f2aacebd5f0d2c3c862c01b2db2b271a32746c7824697e732e7e584391f23
6
+ metadata.gz: 736d4ac789d1e4780cc1ac93c5936f940f6ccec3c1a24b0ce9563eb665984eb2b2ae7cbee89e00023b01485f75292f8cedcd78b6dadbde2536f58936b83039aa
7
+ data.tar.gz: 05222e19c2b9ea8eba1db40aae476a03758e11e33f2515a3f3934b0e193c75b7483a76930ad5cad9db5c060d05d1a1842b88d51ef62d2553bc305b1ba1eb782b
data/README.md CHANGED
@@ -43,6 +43,11 @@ $ yaourt -S ruby-ironment
43
43
 
44
44
  ## Changelog
45
45
 
46
+ ### 0.0.6
47
+
48
+ * Correct an issue where an unreadable, untrusted runcom would cause a stacktrace.
49
+ * Errors now contain the file subject (eg. *ironment: foo: No such file or directory*).
50
+
46
51
  ### 0.0.5
47
52
 
48
53
  * `iron exec` now handles EACCES, ENOENT & EISDIR like `iron trust` and `iron untrust` does.
data/lib/ironment/cl.rb CHANGED
@@ -1,5 +1,27 @@
1
1
  class Ironment
2
2
  class CL
3
+ class << self
4
+ def rescue_common_exceptions(method_name)
5
+ new_name = "original_#{method_name}"
6
+
7
+ alias_method new_name, method_name
8
+
9
+ define_method method_name do |*args|
10
+ begin
11
+ send new_name, *args
12
+ rescue Ironment::AccessDenied => e
13
+ @err.puts "ironment: #{e.message}: Permission denied"
14
+ rescue Ironment::NoEntity=> e
15
+ @err.puts "ironment: #{e.message}: No such file or directory"
16
+ rescue Ironment::IsDirectory=> e
17
+ @err.puts "ironment: #{e.message}: Is a directory"
18
+ rescue Ironment::MalformedRuncom=> e
19
+ @err.puts "ironment: #{e.message}: Malformed runcom"
20
+ end
21
+ end
22
+ end
23
+ end
24
+
3
25
  def initialize(options = {})
4
26
  @ironment = options[:ironment] || Ironment.new(options)
5
27
  @prompter = options[:prompter] || Prompter.new
@@ -7,43 +29,31 @@ class Ironment
7
29
  end
8
30
 
9
31
  def exec_with_environment(command, *args)
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"
19
- rescue Truster::NotTrusted => e
20
- if @prompter.not_trusted e.runcom
21
- exec_with_environment command, *args
22
- end
23
- rescue Truster::Modified => e
24
- if @prompter.modified e.runcom
25
- exec_with_environment command, *args
32
+ begin
33
+ @ironment.exec_with_environment command, *args
34
+ rescue Truster::NotTrusted => e
35
+ if @prompter.not_trusted e.runcom
36
+ exec_with_environment command, *args
37
+ end
38
+ rescue Truster::Modified => e
39
+ if @prompter.modified e.runcom
40
+ exec_with_environment command, *args
41
+ end
26
42
  end
27
43
  end
28
44
 
45
+ rescue_common_exceptions :exec_with_environment
46
+
29
47
  def trust(file)
30
48
  @ironment.trust file
31
- rescue Errno::EACCES
32
- @err.puts "ironment: Permission denied"
33
- rescue Errno::ENOENT
34
- @err.puts "ironment: No such file or directory"
35
- rescue Errno::EISDIR
36
- @err.puts "ironment: Is a directory"
37
49
  end
38
50
 
51
+ rescue_common_exceptions :trust
52
+
39
53
  def untrust(file)
40
54
  @ironment.untrust file
41
- rescue Errno::EACCES
42
- @err.puts "ironment: Permission denied"
43
- rescue Errno::ENOENT
44
- @err.puts "ironment: No such file or directory"
45
- rescue Errno::EISDIR
46
- @err.puts "ironment: Is a directory"
47
55
  end
56
+
57
+ rescue_common_exceptions :untrust
48
58
  end
49
59
  end
@@ -0,0 +1,7 @@
1
+ class Ironment
2
+ class Exec
3
+ def exec(command, *args)
4
+ Kernel.exec command, *args
5
+ end
6
+ end
7
+ end
@@ -1,7 +1,19 @@
1
+ require "ironment/exec"
2
+
1
3
  class Ironment
2
4
  class Executor
5
+ def initialize(options = {})
6
+ @exec = options[:exec] || Exec.new
7
+ end
8
+
3
9
  def exec(command, *args)
4
- Kernel.exec command, *args
10
+ @exec.exec command, *args
11
+ rescue Errno::EACCES
12
+ raise AccessDenied, command
13
+ rescue Errno::ENOENT
14
+ raise NoEntity, command
15
+ rescue Errno::EISDIR
16
+ raise IsDirectory, command
5
17
  end
6
18
  end
7
19
  end
@@ -24,12 +24,14 @@ class Ironment
24
24
  @file == other.file
25
25
  end
26
26
 
27
+ private
28
+
27
29
  def content
28
30
  @content ||= File.read(file)
31
+ rescue Errno::EACCES
32
+ raise AccessDenied, file
29
33
  end
30
34
 
31
- private
32
-
33
35
  def read_pairs
34
36
  Hash[*content.split(/\n/).reject { |line|
35
37
  /^\s*#/ =~line
@@ -1,3 +1,3 @@
1
1
  class Ironment
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
data/lib/ironment.rb CHANGED
@@ -8,7 +8,12 @@ require "ironment/runcom"
8
8
  require "ironment/truster"
9
9
 
10
10
  class Ironment
11
- class MalformedRuncom < StandardError; end
11
+ class IronmentError < StandardError; end
12
+
13
+ class MalformedRuncom < IronmentError; end
14
+ class AccessDenied < IronmentError; end
15
+ class NoEntity < IronmentError; end
16
+ class IsDirectory < IronmentError; end
12
17
 
13
18
  class << self
14
19
  attr_writer :runcom
data/test/cl_test.rb CHANGED
@@ -5,7 +5,7 @@ def test_exception_handling(exception, message, method, *args)
5
5
  ironment = Object.new
6
6
 
7
7
  ironment.define_singleton_method method do |*|
8
- raise exception
8
+ raise exception, args.first
9
9
  end
10
10
 
11
11
  describe "upon receiving #{exception.inspect}" do
@@ -42,10 +42,10 @@ describe Ironment::CL do
42
42
  end
43
43
  end
44
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"
45
+ test_exception_handling Ironment::AccessDenied, "ironment: foo: Permission denied", :exec_with_environment, "foo"
46
+ test_exception_handling Ironment::NoEntity, "ironment: foo: No such file or directory", :exec_with_environment, "foo"
47
+ test_exception_handling Ironment::IsDirectory, "ironment: foo: Is a directory", :exec_with_environment, "foo"
48
+ test_exception_handling Ironment::MalformedRuncom, "ironment: foo: Malformed runcom", :exec_with_environment, "foo"
49
49
  end
50
50
 
51
51
  describe "#trust" do
@@ -62,9 +62,9 @@ describe Ironment::CL do
62
62
  end
63
63
  end
64
64
 
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"
65
+ test_exception_handling Ironment::AccessDenied, "ironment: .envrc: Permission denied", :trust, ".envrc"
66
+ test_exception_handling Ironment::NoEntity, "ironment: .envrc: No such file or directory", :trust, ".envrc"
67
+ test_exception_handling Ironment::IsDirectory, "ironment: .envrc: Is a directory", :trust, ".envrc"
68
68
  end
69
69
 
70
70
  describe "#untrust" do
@@ -81,8 +81,8 @@ describe Ironment::CL do
81
81
  end
82
82
  end
83
83
 
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"
84
+ test_exception_handling Ironment::AccessDenied, "ironment: .envrc: Permission denied", :untrust, ".envrc"
85
+ test_exception_handling Ironment::NoEntity, "ironment: .envrc: No such file or directory", :untrust, ".envrc"
86
+ test_exception_handling Ironment::IsDirectory, "ironment: .envrc: Is a directory", :untrust, ".envrc"
87
87
  end
88
88
  end
@@ -0,0 +1,27 @@
1
+ require "test_helper"
2
+
3
+ def test_exception_mapping(map)
4
+ from, to = map.flatten
5
+
6
+ describe "when exec raises #{from.to_s}" do
7
+ it "should raise #{to.to_s}" do
8
+ exec = Object.new.tap do |exec|
9
+ exec.define_singleton_method :exec do |*|
10
+ raise from
11
+ end
12
+ end
13
+
14
+ assert_raises to do
15
+ Ironment::Executor.new(exec: exec).exec "foo"
16
+ end
17
+ end
18
+ end
19
+ end
20
+
21
+ describe Ironment::Executor do
22
+ describe "#exec" do
23
+ test_exception_mapping Errno::EACCES => Ironment::AccessDenied
24
+ test_exception_mapping Errno::ENOENT => Ironment::NoEntity
25
+ test_exception_mapping Errno::EISDIR => Ironment::IsDirectory
26
+ end
27
+ end
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.5
4
+ version: 0.0.6
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-10-15 00:00:00.000000000 Z
11
+ date: 2015-10-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: commander
@@ -123,6 +123,7 @@ files:
123
123
  - lib/ironment/cl.rb
124
124
  - lib/ironment/cl/prompter.rb
125
125
  - lib/ironment/config.rb
126
+ - lib/ironment/exec.rb
126
127
  - lib/ironment/executor.rb
127
128
  - lib/ironment/finder.rb
128
129
  - lib/ironment/populator.rb
@@ -131,6 +132,7 @@ files:
131
132
  - lib/ironment/version.rb
132
133
  - test/cl_test.rb
133
134
  - test/config_test.rb
135
+ - test/executor_test.rb
134
136
  - test/finder_test.rb
135
137
  - test/ironment_test.rb
136
138
  - test/populator_test.rb
@@ -162,6 +164,7 @@ signing_key:
162
164
  specification_version: 4
163
165
  summary: Environment populator & command wrapper utility.
164
166
  test_files:
167
+ - test/executor_test.rb
165
168
  - test/truster_test.rb
166
169
  - test/runcom_test.rb
167
170
  - test/cl_test.rb