diff --git a/.gems b/.gems index e2583eb..240450a 100644 --- a/.gems +++ b/.gems @@ -1 +1,2 @@ cutest -v 1.2.0 +override -v 0.0.10 diff --git a/bin/dep b/bin/dep index 192277f..b716eea 100755 --- a/bin/dep +++ b/bin/dep @@ -2,6 +2,10 @@ require "fileutils" +def die + abort("error: dep --help for more info") +end + module Dep class List attr :path @@ -52,7 +56,7 @@ module Dep end def to_s - "#{name} -v #{version}" + "#{name}:#{version}" end def ==(other) @@ -60,12 +64,10 @@ module Dep end end - module CLI - class << self - attr_accessor :prerelease, :list, :file - end + class CLI + attr_accessor :prerelease, :list, :file - def self.add(name) + def add(name) dependency = Gem::Dependency.new(name) fetcher = Gem::SpecFetcher.fetcher @@ -87,14 +89,14 @@ module Dep puts "dep: added #{lib}" end - def self.rm(name) + def rm(name) @list.remove(Dep::Lib.new(name)) @list.save puts "dep: removed #{name}" end - def self.check + def check if @list.missing_libraries.empty? puts "dep: all cool" else @@ -108,25 +110,19 @@ module Dep end end - def self.install + def install if @list.missing_libraries.empty? puts "dep: nothing to install" exit end - @list.missing_libraries.each do |lib| - run "gem install #{lib}" - end + run "gem install #{@list.missing_libraries.join(" ")}" end - def self.run(cmd) + def run(cmd) puts " #{cmd}" `#{cmd}` end - - def self.abort - abort("error: dep --help for more info") - end end end @@ -140,7 +136,7 @@ private when 1 then block.call(ARGV.delete_at(index)) when 0 then block.call else - Dep::CLI.abort + die end end end @@ -151,15 +147,17 @@ end # script, we have to instead rely on a different condition. if File.basename($0) == "dep" - Dep::CLI.file = File.join(Dir.pwd, ".gems") - Dep::CLI.prerelease = false + cli = Dep::CLI.new + + cli.file = File.join(Dir.pwd, ".gems") + cli.prerelease = false on("-f") do |file| - Dep::CLI.file = file + cli.file = file end on("--pre") do - Dep::CLI.prerelease = true + cli.prerelease = true end on("--help") do @@ -171,21 +169,21 @@ if File.basename($0) == "dep" exit end - Dep::CLI.list = Dep::List.new(Dep::CLI.file) + cli.list = Dep::List.new(cli.file) - FileUtils.touch(Dep::CLI.list.path) unless File.exist?(Dep::CLI.list.path) + FileUtils.touch(cli.list.path) unless File.exist?(cli.list.path) case ARGV[0] when "add" - Dep::CLI.add(ARGV[1]) + cli.add(ARGV[1]) when "rm" - Dep::CLI.rm(ARGV[1]) + cli.rm(ARGV[1]) when "install", "i" - Dep::CLI.install + cli.install when nil - Dep::CLI.check + cli.check else - Dep::CLI.abort + die end end diff --git a/test/dep.rb b/test/dep.rb index 91a0c40..4ad8e80 100644 --- a/test/dep.rb +++ b/test/dep.rb @@ -1,7 +1,12 @@ require "cutest" +require "override" load File.expand_path("../../bin/dep", __FILE__) +class Cutest::Scope + include Override +end + # Dep::Lib scope do test "parsing" do @@ -23,7 +28,7 @@ test "to_s" do lib = Dep::Lib.new("cutest", "1.1.3") - assert_equal "cutest -v 1.1.3", lib.to_s + assert_equal "cutest:1.1.3", lib.to_s end end @@ -51,3 +56,28 @@ assert list.libraries.include?(Dep::Lib.new("cutest", "2.0")) end end + +# Dep::CLI +scope do + setup do + list = Dep::List.new("/dev/null") + + list.add(Dep::Lib.new("foo", "2.0")) + list.add(Dep::Lib.new("bar", "1.1")) + + commands = [] + + cli = Dep::CLI.new + cli.list = list + + override(cli, run: -> args { commands << args }) + + [cli, commands] + end + + test "install" do |cli, commands| + cli.install + + assert_equal ["gem install foo:2.0 bar:1.1"], commands + end +end