ironment 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: 9bdd77dc405bac4474f7721fd16c102c3524220b
4
- data.tar.gz: 8482bb744aafa577e15c4efdefb642fde2089cb5
3
+ metadata.gz: 81b877fd7435f4cc6689bee20a99ab1092aadca7
4
+ data.tar.gz: ce2dcb7c10a2024bd489095362b97a1540d22046
5
5
  SHA512:
6
- metadata.gz: 9f8c79750ead0345cd59660c84a4445662242cf2440f12a48ce059d70300ca97850a1763b4655a2d03e7b6a6140b01dbc7e8728a09ce82d42b2dfe961b0ae302
7
- data.tar.gz: b39bd04abc6afcbe48e326e2bc4b0ab447828a0c325e9277c37254065232a61c5fa4b19a9fb56ea163650c871f5836d16a4b4ca8f91bc7144e1418308b27ec37
6
+ metadata.gz: 93ec5f6c900641ec715ef4d6d87e1f562c5bd8b881a0af12045701a6be1fef65d68c6324fde66451f380db8d9308af5e7b019f70b927a17b07786ab36fb6b529
7
+ data.tar.gz: 36ef3945d5821e96364e3fd59a41f72f87bd9007172e2786e91591a78db96e55e6d0a4eeab2310216e4602517c313fa3e6ed0ed9a6a5de032e3ac2214be952f7
data/Gemfile.lock CHANGED
@@ -1,20 +1,34 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ironment (0.0.1)
4
+ ironment (0.0.2)
5
+ commander (= 4.3.4)
5
6
 
6
7
  GEM
7
8
  remote: https://rubygems.org/
8
9
  specs:
10
+ codeclimate-test-reporter (0.4.7)
11
+ simplecov (>= 0.7.1, < 1.0.0)
12
+ commander (4.3.4)
13
+ highline (~> 1.7.2)
14
+ docile (1.1.5)
9
15
  fakefs (0.6.7)
16
+ highline (1.7.2)
17
+ json (1.8.2)
10
18
  minitest (5.5.1)
11
19
  rake (10.4.2)
20
+ simplecov (0.10.0)
21
+ docile (~> 1.1.0)
22
+ json (~> 1.8)
23
+ simplecov-html (~> 0.10.0)
24
+ simplecov-html (0.10.0)
12
25
 
13
26
  PLATFORMS
14
27
  ruby
15
28
 
16
29
  DEPENDENCIES
17
- fakefs
30
+ codeclimate-test-reporter (= 0.4.7)
31
+ fakefs (= 0.6.7)
18
32
  ironment!
19
- minitest
20
- rake
33
+ minitest (= 5.5.1)
34
+ rake (= 10.4.2)
data/README.md CHANGED
@@ -2,6 +2,8 @@ Ironment
2
2
  ========
3
3
 
4
4
  [![Build Status](https://travis-ci.org/badeball/ironment.svg)](https://travis-ci.org/badeball/ironment)
5
+ [![Code Climate](https://codeclimate.com/github/badeball/ironment/badges/gpa.svg)](https://codeclimate.com/github/badeball/ironment)
6
+ [![Test Coverage](https://codeclimate.com/github/badeball/ironment/badges/coverage.svg)](https://codeclimate.com/github/badeball/ironment/coverage)
5
7
 
6
8
  Ironment is a simple command line utility for populating the environment of a
7
9
  command by reading particular environment files and then exec-ing. Such
@@ -21,6 +23,12 @@ FOO=bar
21
23
 
22
24
  ## Changelog
23
25
 
26
+ ### 0.0.2
27
+
28
+ * Adding a concept of trust. A file that has never been seen will no longer
29
+ uncritically be used to populate the environment. Instead, the user will be
30
+ prompted with its sha1sum and asked if they really want to trust it.
31
+
24
32
  ### 0.0.1
25
33
 
26
34
  * Initial version. Contains basic support for wrapping commands and populating
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
1
  require "rake/testtask"
2
2
 
3
3
  Rake::TestTask.new do |t|
4
- t.libs.push "lib"
4
+ t.libs.push "test"
5
5
  t.test_files = FileList["test/*_test.rb"]
6
6
  t.verbose = true
7
7
  end
data/bin/iron CHANGED
@@ -1,26 +1,39 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "optparse"
3
+ require "commander/import"
4
4
  require "ironment"
5
+ require "ironment/version"
5
6
 
6
- opts = OptionParser.new do |opts|
7
- opts.banner = "Usage: ironment [options] COMMAND"
7
+ program :name, "Ironment"
8
+ program :version, Ironment::VERSION
9
+ program :description, "Environment populator & command wrapper utility."
8
10
 
9
- opts.on_tail("-h", "--help", "show this message") do
10
- puts opts
11
- exit
11
+ command :exec do |c|
12
+ c.syntax = "exec [files..]"
13
+ c.description = "create a new environment (default)"
14
+ c.action do |args|
15
+ Ironment::CL.new.exec_with_environment *args
12
16
  end
17
+ end
13
18
 
14
- opts.on_tail("-v", "--version", "print the version number of ironment") do
15
- puts "ironment #{Ironment::VERSION}"
16
- exit
19
+ command :trust do |c|
20
+ c.syntax = "trust [files..]"
21
+ c.description = "add a file as trusted"
22
+ c.action do |args|
23
+ args.each do |file|
24
+ Ironment::CL.new.trust file
25
+ end
17
26
  end
18
27
  end
19
28
 
20
- opts.parse!
21
-
22
- if ARGV.empty?
23
- raise ArgumentError, "missing command"
29
+ command :untrust do |c|
30
+ c.syntax = "untrust [files..]"
31
+ c.description = "remove a file as trusted"
32
+ c.action do |args|
33
+ args.each do |file|
34
+ Ironment::CL.new.untrust file
35
+ end
36
+ end
24
37
  end
25
38
 
26
- Ironment.new.exec_with_environment *ARGV
39
+ default_command :exec
data/ironment.gemspec CHANGED
@@ -4,9 +4,9 @@ Gem::Specification.new do |s|
4
4
  s.name = "ironment"
5
5
  s.version = Ironment::VERSION
6
6
  s.license = "MIT"
7
- s.date = "2015-05-04"
7
+ s.date = "2015-06-04"
8
8
 
9
- s.summary = "Automatic environment variable container."
9
+ s.summary = "Environment populator & command wrapper utility."
10
10
  s.description = "Ironment populates environment variables with runcoms and executes commands."
11
11
 
12
12
  s.authors = ["Jonas Amundsen"]
@@ -25,16 +25,26 @@ Gem::Specification.new do |s|
25
25
  bin/iron
26
26
  ironment.gemspec
27
27
  lib/ironment.rb
28
+ lib/ironment/config.rb
28
29
  lib/ironment/executor.rb
29
30
  lib/ironment/finder.rb
30
31
  lib/ironment/populator.rb
32
+ lib/ironment/runcom.rb
33
+ lib/ironment/truster.rb
31
34
  lib/ironment/version.rb
35
+ test/config_test.rb
32
36
  test/finder_test.rb
33
37
  test/ironment_test.rb
34
38
  test/populator_test.rb
39
+ test/runcom_test.rb
40
+ test/test_helper.rb
41
+ test/truster_test.rb
35
42
  ]
36
43
 
37
- s.add_development_dependency("fakefs")
38
- s.add_development_dependency("minitest")
39
- s.add_development_dependency("rake")
44
+ s.add_dependency("commander", "4.3.4")
45
+
46
+ s.add_development_dependency("codeclimate-test-reporter", "0.4.7")
47
+ s.add_development_dependency("fakefs", "0.6.7")
48
+ s.add_development_dependency("minitest", "5.5.1")
49
+ s.add_development_dependency("rake", "10.4.2")
40
50
  end
data/lib/ironment.rb CHANGED
@@ -1,6 +1,11 @@
1
+ require "ironment/cl"
2
+ require "ironment/config"
1
3
  require "ironment/finder"
2
4
  require "ironment/populator"
5
+ require "ironment/cl/prompter"
3
6
  require "ironment/executor"
7
+ require "ironment/runcom"
8
+ require "ironment/truster"
4
9
 
5
10
  class Ironment
6
11
  class << self
@@ -16,6 +21,7 @@ class Ironment
16
21
  end
17
22
 
18
23
  def initialize(options = {})
24
+ @truster = options[:truster] || Truster.new
19
25
  @finder = options[:finder] || Finder.new
20
26
  @populator = options[:populator] || Populator.new
21
27
  @executor = options[:executor] || Executor.new
@@ -28,6 +34,7 @@ class Ironment
28
34
 
29
35
  def load_environment
30
36
  @finder.find.each do |runcom|
37
+ @truster.validate runcom
31
38
  @populator.populate_with runcom
32
39
  end
33
40
  end
@@ -0,0 +1,64 @@
1
+ class Hash
2
+ def except(*keys)
3
+ dup.except!(*keys)
4
+ end
5
+
6
+ def except!(*keys)
7
+ keys.each { |key| delete(key) }
8
+ self
9
+ end
10
+ end
11
+
12
+ class Ironment
13
+ class Config
14
+ class << self
15
+ attr_writer :config_path
16
+
17
+ def config_path
18
+ @config_path || default_config_path
19
+ end
20
+
21
+ def default_config_path
22
+ File.join(Dir.home, ".config", "ironment", "config")
23
+ end
24
+ end
25
+
26
+ def [](key)
27
+ read_pairs[key]
28
+ end
29
+
30
+ def []=(key, value)
31
+ if value.nil?
32
+ write_pairs read_pairs.except(key)
33
+ else
34
+ write_pairs read_pairs.merge(key => value)
35
+ end
36
+ end
37
+
38
+ private
39
+
40
+ def read_pairs
41
+ if File.exist?(file)
42
+ Hash[*File.read(file).split(/\n/).map { |line|
43
+ line.split(/=/)
44
+ }.flatten]
45
+ else
46
+ {}
47
+ end
48
+ end
49
+
50
+ def write_pairs(pairs)
51
+ dir = Pathname.new(file).dirname
52
+
53
+ unless dir.exist?
54
+ dir.mkpath
55
+ end
56
+
57
+ File.write(file, pairs.map { |k, v| "#{k}=#{v}" }.join("\n"))
58
+ end
59
+
60
+ def file
61
+ self.class.config_path
62
+ end
63
+ end
64
+ end
@@ -9,11 +9,11 @@ class Ironment
9
9
  def find
10
10
  Enumerator.new do |y|
11
11
  until @pwd.root?
12
- y << cdrc if has_cdrc?
12
+ y << Runcom.new(cdrc) if has_cdrc?
13
13
  @pwd = @pwd.parent
14
14
  end
15
15
 
16
- y << cdrc if has_cdrc?
16
+ y << Runcom.new(cdrc) if has_cdrc?
17
17
  end
18
18
  end
19
19
 
@@ -4,12 +4,11 @@ class Ironment
4
4
  @env = options[:env] || ENV
5
5
  end
6
6
 
7
- def populate_with(name)
8
- File.readlines(name).each do |line|
9
- unless /^\s*#/ =~ line
10
- key, value = line.strip.split "="
11
- @env[key] = value
12
- end
7
+ def populate_with(runcom)
8
+ enum = runcom.each_pair
9
+
10
+ loop do
11
+ @env.[]= *enum.next
13
12
  end
14
13
  end
15
14
  end
@@ -0,0 +1,41 @@
1
+ require "digest/sha1"
2
+
3
+ class Ironment
4
+ class Runcom
5
+ attr_reader :file
6
+
7
+ def initialize(file)
8
+ @file = File.expand_path file
9
+ end
10
+
11
+ def sha1sum
12
+ Digest::SHA1.hexdigest(content)
13
+ end
14
+
15
+ def each_pair
16
+ if block_given?
17
+ read_pairs.each &Proc.new
18
+ else
19
+ read_pairs.each
20
+ end
21
+ end
22
+
23
+ def ==(other)
24
+ @file == other.file
25
+ end
26
+
27
+ def content
28
+ @content ||= File.read(file)
29
+ end
30
+
31
+ private
32
+
33
+ def read_pairs
34
+ Hash[*content.split(/\n/).reject { |line|
35
+ /^\s*#/ =~line
36
+ }.map { |line|
37
+ line.split(/=/)
38
+ }.flatten]
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,44 @@
1
+ require "digest/sha1"
2
+
3
+ class Ironment
4
+ class Truster
5
+ class RuncomError < StandardError
6
+ attr_reader :runcom
7
+
8
+ def initialize(runcom)
9
+ @runcom = runcom
10
+ end
11
+ end
12
+
13
+ class NotTrusted < RuncomError; end
14
+ class Modified < RuncomError; end
15
+
16
+ def initialize(options = {})
17
+ @config = options[:config] || Config.new
18
+ end
19
+
20
+ def validate(runcom)
21
+ expected_sha1sum = @config[runcom.file]
22
+
23
+ if expected_sha1sum.nil?
24
+ raise NotTrusted, runcom
25
+ end
26
+
27
+ real_sha1sum = runcom.sha1sum
28
+
29
+ unless expected_sha1sum == real_sha1sum
30
+ raise Modified, runcom
31
+ end
32
+
33
+ true
34
+ end
35
+
36
+ def trust(runcom)
37
+ @config[runcom.file] = runcom.sha1sum
38
+ end
39
+
40
+ def untrust(runcom)
41
+ @config[runcom.file] = nil
42
+ end
43
+ end
44
+ end
@@ -1,3 +1,3 @@
1
1
  class Ironment
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1,71 @@
1
+ require "test_helper"
2
+
3
+ describe Ironment::Config do
4
+ before :each do
5
+ Ironment::Config.config_path = "/config"
6
+ FakeFS.activate!
7
+ end
8
+
9
+ after :each do
10
+ FakeFS::FileSystem.clear
11
+ FakeFS.deactivate!
12
+ end
13
+
14
+ describe "#[]" do
15
+ it "should return the configuration value if it exist" do
16
+ File.write "/config", "FOO=1"
17
+
18
+ assert_equal "1", Ironment::Config.new["FOO"]
19
+ end
20
+
21
+ it "should return nil if the configuration value doesn't exist" do
22
+ File.write "/config", "FOO=1"
23
+
24
+ assert_nil Ironment::Config.new["BAR"]
25
+ end
26
+
27
+ it "should return nil if the configuration file doesn't exist" do
28
+ begin
29
+ File.delete "/config"
30
+ rescue Errno::ENOENT
31
+ # Noop
32
+ end
33
+
34
+ assert_nil Ironment::Config.new["BAR"]
35
+ end
36
+ end
37
+
38
+ describe "#[]=" do
39
+ it "should write a configuration value to the file" do
40
+ File.write "/config", ""
41
+
42
+ Ironment::Config.new["FOO"] = 1
43
+
44
+ assert_equal "FOO=1", File.read("/config")
45
+ end
46
+
47
+ it "should overwrite an existing configuration value" do
48
+ File.write "/config", "FOO=1"
49
+
50
+ Ironment::Config.new["FOO"] = 2
51
+
52
+ assert_equal "FOO=2", File.read("/config")
53
+ end
54
+
55
+ it "should create the directory if missing" do
56
+ Ironment::Config.config_path = "/foo/bar/config"
57
+
58
+ Ironment::Config.new["FOO"] = 1
59
+
60
+ assert_equal true, File.exist?("/foo/bar/config")
61
+ end
62
+
63
+ it "should delete the configuration value when set to nil" do
64
+ File.write "/config", "FOO=1"
65
+
66
+ Ironment::Config.new["FOO"] = nil
67
+
68
+ assert_equal "", File.read("/config")
69
+ end
70
+ end
71
+ end
data/test/finder_test.rb CHANGED
@@ -1,6 +1,4 @@
1
- require "minitest/autorun"
2
- require "fakefs/safe"
3
- require "ironment"
1
+ require "test_helper"
4
2
 
5
3
  module FakeFS
6
4
  class Pathname
@@ -26,7 +24,7 @@ describe Ironment::Finder do
26
24
  FileUtils.touch "/foo/bar/.envrc"
27
25
 
28
26
  Dir.chdir "/foo/bar" do
29
- assert_includes Ironment::Finder.new.find, "/foo/bar/.envrc"
27
+ assert_includes Ironment::Finder.new.find, Ironment::Runcom.new("/foo/bar/.envrc")
30
28
  end
31
29
  end
32
30
 
@@ -34,7 +32,7 @@ describe Ironment::Finder do
34
32
  FileUtils.touch "/foo/.envrc"
35
33
 
36
34
  Dir.chdir "/foo/bar" do
37
- assert_includes Ironment::Finder.new.find, "/foo/.envrc"
35
+ assert_includes Ironment::Finder.new.find, Ironment::Runcom.new("/foo/.envrc")
38
36
  end
39
37
  end
40
38
 
@@ -42,7 +40,7 @@ describe Ironment::Finder do
42
40
  FileUtils.touch "/.envrc"
43
41
 
44
42
  Dir.chdir "/foo/bar" do
45
- assert_includes Ironment::Finder.new.find, "/.envrc"
43
+ assert_includes Ironment::Finder.new.find, Ironment::Runcom.new("/.envrc")
46
44
  end
47
45
  end
48
46
  end
@@ -1,25 +1,30 @@
1
- require "minitest/autorun"
2
- require "ironment"
1
+ require "test_helper"
3
2
 
4
3
  describe Ironment do
5
4
  describe "#exec_with_environment" do
6
- it "find all runcoms, populate with their data and exec the command" do
5
+ it "find all runcoms, verify them, populate with their data and exec the command" do
6
+ runcom = Ironment::Runcom.new("/foo/.ironment")
7
+
7
8
  finder = Minitest::Mock.new
8
- finder.expect :find, ["/foo/.ironment"].to_enum
9
+ finder.expect :find, [runcom].to_enum
10
+
11
+ truster = Minitest::Mock.new
12
+ truster.expect :validate, true, [runcom]
9
13
 
10
14
  populator = Minitest::Mock.new
11
- populator.expect :populate_with, true, ["/foo/.ironment"]
15
+ populator.expect :populate_with, true, [runcom]
12
16
 
13
17
  executor = Minitest::Mock.new
14
18
  executor.expect :exec, true, ["some-command"]
15
19
 
16
20
  Ironment.new({
21
+ truster: truster,
17
22
  finder: finder,
18
23
  populator: populator,
19
24
  executor: executor
20
25
  }).exec_with_environment "some-command"
21
26
 
22
- [finder, populator, executor].each &:verify
27
+ [finder, truster, populator, executor].each &:verify
23
28
  end
24
29
  end
25
30
  end
@@ -1,22 +1,9 @@
1
- require "minitest/autorun"
2
- require "fakefs/safe"
3
- require "ironment"
1
+ require "test_helper"
4
2
 
5
3
  describe Ironment::Populator do
6
- before :each do
7
- FakeFS.activate!
8
- end
9
-
10
- after :each do
11
- FakeFS::FileSystem.clear
12
- FakeFS.deactivate!
13
- end
14
-
15
- it "should read a file and populate the environment with its content" do
16
- File.write("/foo", <<-DAT.gsub(/^\s+/, ""))
17
- BAR=1
18
- BAZ=2
19
- DAT
4
+ it "should populate the environment with the runcom's key-value pairs" do
5
+ runcom = Minitest::Mock.new
6
+ runcom.expect :each_pair, {"BAR" => "1", "BAZ" => "2"}.each
20
7
 
21
8
  env = Minitest::Mock.new
22
9
  env.expect :[]=, "1", ["BAR", "1"]
@@ -24,23 +11,7 @@ describe Ironment::Populator do
24
11
 
25
12
  Ironment::Populator.new(
26
13
  env: env
27
- ).populate_with "/foo"
28
-
29
- env.verify
30
- end
31
-
32
- it "should ignore comment lines" do
33
- File.write("/foo", <<-DAT.gsub(/^\s+/, ""))
34
- # This is a comment
35
- DAT
36
-
37
- env = Minitest::Mock.new
38
-
39
- # Expect no invokations
40
-
41
- Ironment::Populator.new(
42
- env: env
43
- ).populate_with "/foo"
14
+ ).populate_with runcom
44
15
 
45
16
  env.verify
46
17
  end
@@ -0,0 +1,86 @@
1
+ require "test_helper"
2
+
3
+ describe Ironment::Runcom do
4
+ before :each do
5
+ FakeFS.activate!
6
+ end
7
+
8
+ after :each do
9
+ FakeFS::FileSystem.clear
10
+ FakeFS.deactivate!
11
+ end
12
+
13
+ describe "#initialize" do
14
+ it "should expand the given path" do
15
+ Dir.mkdir "/foo"
16
+
17
+ Dir.chdir "/foo" do
18
+ expanded_path = Ironment::Runcom.new(".envrc").file
19
+
20
+ assert_equal "/foo/.envrc", expanded_path
21
+ end
22
+ end
23
+ end
24
+
25
+ describe "#sha1sum" do
26
+ it "should return the sha1sum of the runcom" do
27
+ File.write(".envrc", "FOO=1")
28
+
29
+ # The sha1sum of "FOO=1"
30
+ assert_equal "67364d1a7020017cf162d2751680b0f89f51da70", Ironment::Runcom.new(".envrc").sha1sum
31
+ end
32
+
33
+ it "should cache the file content on first read" do
34
+ File.write(".envrc", "FOO=1")
35
+
36
+ runcom = Ironment::Runcom.new(".envrc")
37
+
38
+ runcom.sha1sum
39
+
40
+ File.delete(".envrc")
41
+
42
+ # The sha1sum of "FOO=1"
43
+ assert_equal "67364d1a7020017cf162d2751680b0f89f51da70", runcom.sha1sum
44
+ end
45
+ end
46
+
47
+ describe "#each_pair" do
48
+ it "should return an enumerator for each key-value pair" do
49
+ File.write ".envrc", <<-DAT.gsub(/^\s+/, "")
50
+ BAR=1
51
+ BAZ=2
52
+ DAT
53
+
54
+ enum = Ironment::Runcom.new(".envrc").each_pair
55
+
56
+ assert_equal enum.next, ["BAR", "1"]
57
+ assert_equal enum.next, ["BAZ", "2"]
58
+ end
59
+
60
+ it "should ignore comment lines" do
61
+ File.write(".envrc", <<-DAT.gsub(/^\s+/, ""))
62
+ # This is a comment
63
+ DAT
64
+
65
+ enum = Ironment::Runcom.new(".envrc").each_pair
66
+
67
+ assert_equal 0, enum.size
68
+ end
69
+ end
70
+
71
+ describe "#==" do
72
+ it "should return true for two runcoms of same file" do
73
+ one = Ironment::Runcom.new ".envrc"
74
+ two = Ironment::Runcom.new ".envrc"
75
+
76
+ assert_equal true, one == two
77
+ end
78
+
79
+ it "should return false for two runcoms of different file" do
80
+ one = Ironment::Runcom.new "foo/.envrc"
81
+ two = Ironment::Runcom.new "bar/.envrc"
82
+
83
+ assert_equal false, one == two
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,7 @@
1
+ require "codeclimate-test-reporter"
2
+
3
+ CodeClimate::TestReporter.start
4
+
5
+ require "ironment"
6
+ require "fakefs/safe"
7
+ require "minitest/autorun"
@@ -0,0 +1,70 @@
1
+ require "test_helper"
2
+
3
+ describe Ironment::Truster do
4
+ describe "#validate" do
5
+ it "should raise NotTrusted if the file is untrusted" do
6
+ config = Minitest::Mock.new
7
+ config.expect :[], nil, [".envrc"]
8
+
9
+ runcom = Minitest::Mock.new
10
+ runcom.expect :file, ".envrc"
11
+
12
+ assert_raises Ironment::Truster::NotTrusted do
13
+ Ironment::Truster.new(config: config).validate(runcom)
14
+ end
15
+ end
16
+
17
+ it "should raise Modified if the file is trusted, but modified" do
18
+ config = Minitest::Mock.new
19
+ config.expect :[], "da39a3ee5e6b4b0d3255bfef95601890afd80709", [".envrc"]
20
+
21
+ runcom = Minitest::Mock.new
22
+ runcom.expect :file, ".envrc"
23
+ runcom.expect :sha1sum, "94b720c5eafb6205d7e0399a41d2ea78f69c653c"
24
+
25
+ assert_raises Ironment::Truster::Modified do
26
+ Ironment::Truster.new(config: config).validate(runcom)
27
+ end
28
+ end
29
+
30
+ it "should return true if the file is trusted" do
31
+ config = Minitest::Mock.new
32
+ config.expect :[], "67364d1a7020017cf162d2751680b0f89f51da70", [".envrc"]
33
+
34
+ runcom = Minitest::Mock.new
35
+ runcom.expect :file, ".envrc"
36
+ runcom.expect :sha1sum, "67364d1a7020017cf162d2751680b0f89f51da70"
37
+
38
+ assert_equal true, Ironment::Truster.new(config: config).validate(runcom)
39
+ end
40
+ end
41
+
42
+ describe "#trust" do
43
+ it "should mark it and its sha1 as trusted" do
44
+ config = Minitest::Mock.new
45
+ config.expect :[]=, nil, [".envrc", "67364d1a7020017cf162d2751680b0f89f51da70"]
46
+
47
+ runcom = Minitest::Mock.new
48
+ runcom.expect :file, ".envrc"
49
+ runcom.expect :sha1sum, "67364d1a7020017cf162d2751680b0f89f51da70"
50
+
51
+ Ironment::Truster.new(config: config).trust(runcom)
52
+
53
+ config.verify
54
+ end
55
+ end
56
+
57
+ describe "#untrust" do
58
+ it "should remove the trust mark of the file" do
59
+ config = Minitest::Mock.new
60
+ config.expect :[]=, nil, [".envrc", nil]
61
+
62
+ runcom = Minitest::Mock.new
63
+ runcom.expect :file, ".envrc"
64
+
65
+ Ironment::Truster.new(config: config).untrust(runcom)
66
+
67
+ config.verify
68
+ end
69
+ end
70
+ end
metadata CHANGED
@@ -1,57 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ironment
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
  - Jonas Amundsen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-04 00:00:00.000000000 Z
11
+ date: 2015-06-04 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: commander
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 4.3.4
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 4.3.4
27
+ - !ruby/object:Gem::Dependency
28
+ name: codeclimate-test-reporter
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 0.4.7
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 0.4.7
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: fakefs
15
43
  requirement: !ruby/object:Gem::Requirement
16
44
  requirements:
17
- - - ">="
45
+ - - '='
18
46
  - !ruby/object:Gem::Version
19
- version: '0'
47
+ version: 0.6.7
20
48
  type: :development
21
49
  prerelease: false
22
50
  version_requirements: !ruby/object:Gem::Requirement
23
51
  requirements:
24
- - - ">="
52
+ - - '='
25
53
  - !ruby/object:Gem::Version
26
- version: '0'
54
+ version: 0.6.7
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: minitest
29
57
  requirement: !ruby/object:Gem::Requirement
30
58
  requirements:
31
- - - ">="
59
+ - - '='
32
60
  - !ruby/object:Gem::Version
33
- version: '0'
61
+ version: 5.5.1
34
62
  type: :development
35
63
  prerelease: false
36
64
  version_requirements: !ruby/object:Gem::Requirement
37
65
  requirements:
38
- - - ">="
66
+ - - '='
39
67
  - !ruby/object:Gem::Version
40
- version: '0'
68
+ version: 5.5.1
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: rake
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
- - - ">="
73
+ - - '='
46
74
  - !ruby/object:Gem::Version
47
- version: '0'
75
+ version: 10.4.2
48
76
  type: :development
49
77
  prerelease: false
50
78
  version_requirements: !ruby/object:Gem::Requirement
51
79
  requirements:
52
- - - ">="
80
+ - - '='
53
81
  - !ruby/object:Gem::Version
54
- version: '0'
82
+ version: 10.4.2
55
83
  description: Ironment populates environment variables with runcoms and executes commands.
56
84
  email:
57
85
  - jonasba+gem@gmail.com
@@ -69,13 +97,20 @@ files:
69
97
  - bin/iron
70
98
  - ironment.gemspec
71
99
  - lib/ironment.rb
100
+ - lib/ironment/config.rb
72
101
  - lib/ironment/executor.rb
73
102
  - lib/ironment/finder.rb
74
103
  - lib/ironment/populator.rb
104
+ - lib/ironment/runcom.rb
105
+ - lib/ironment/truster.rb
75
106
  - lib/ironment/version.rb
107
+ - test/config_test.rb
76
108
  - test/finder_test.rb
77
109
  - test/ironment_test.rb
78
110
  - test/populator_test.rb
111
+ - test/runcom_test.rb
112
+ - test/test_helper.rb
113
+ - test/truster_test.rb
79
114
  homepage: https://github.com/badeball/ironment
80
115
  licenses:
81
116
  - MIT
@@ -99,5 +134,5 @@ rubyforge_project:
99
134
  rubygems_version: 2.4.5
100
135
  signing_key:
101
136
  specification_version: 4
102
- summary: Automatic environment variable container.
137
+ summary: Environment populator & command wrapper utility.
103
138
  test_files: []