dependencies 0.0.2 → 0.0.3
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.
- data/bin/dep +33 -5
- data/dependencies.gemspec +4 -2
- data/lib/dependencies/dep.rb +9 -5
- data/test/dependencies_test.rb +74 -10
- metadata +13 -4
data/bin/dep
CHANGED
@@ -1,13 +1,41 @@
|
|
1
1
|
#! /usr/bin/env ruby
|
2
2
|
|
3
|
+
require "fileutils"
|
3
4
|
require "dependencies/dep"
|
5
|
+
require "thor"
|
4
6
|
|
5
|
-
|
7
|
+
class App < Thor
|
8
|
+
def list(env = nil)
|
9
|
+
deps.filter(env).each { |dep| puts dep }
|
10
|
+
deps.require(env)
|
11
|
+
end
|
6
12
|
|
7
|
-
|
13
|
+
def vendor(name)
|
14
|
+
dep = dependency(name) || flunk("Dependency #{name} not found in dependencies.")
|
15
|
+
dep.url || flunk("Don't know where to vendor #{name} from (no URL given...)")
|
8
16
|
|
9
|
-
|
10
|
-
|
17
|
+
FileUtils.mkdir("vendor") unless File.directory?("vendor")
|
18
|
+
|
19
|
+
Dir.chdir("vendor") do
|
20
|
+
system "git clone #{dep.url} #{dep.name} -q"
|
21
|
+
Dir.chdir(dep.name) { FileUtils.rm_rf(".git") }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
protected
|
26
|
+
|
27
|
+
def deps
|
28
|
+
@deps ||= Dep.new(File.read("dependencies"))
|
29
|
+
end
|
30
|
+
|
31
|
+
def dependency(name)
|
32
|
+
deps.find { |dep| dep.name == name }
|
33
|
+
end
|
34
|
+
|
35
|
+
def flunk(message)
|
36
|
+
$stderr.puts(message)
|
37
|
+
exit 1
|
38
|
+
end
|
11
39
|
end
|
12
40
|
|
13
|
-
|
41
|
+
App.start
|
data/dependencies.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "dependencies"
|
3
|
-
s.version = "0.0.
|
3
|
+
s.version = "0.0.3"
|
4
4
|
s.summary = "Specify your project's dependencies in one file."
|
5
5
|
s.authors = ["Damian Janowski", "Michel Martens"]
|
6
6
|
s.email = ["djanowski@dimaion.com", "michel@soveran.com"]
|
@@ -9,5 +9,7 @@ Gem::Specification.new do |s|
|
|
9
9
|
|
10
10
|
s.executables << "dep"
|
11
11
|
|
12
|
-
s.files = ["Rakefile", "bin/dep", "dependencies.gemspec", "lib/dependencies/dep.rb", "lib/dependencies.rb", "test/dependencies_test.rb", "test/vendor/barz-2.0", "test/vendor/baz-1.0"]
|
12
|
+
s.files = ["Rakefile", "bin/dep", "dependencies.gemspec", "lib/dependencies/dep.rb", "lib/dependencies.rb", "test/dependencies_test.rb", "test/vendor/bar/lib", "test/vendor/barz-2.0/lib", "test/vendor/baz-1.0/lib"]
|
13
|
+
|
14
|
+
s.add_dependency("thor", "~> 0.9")
|
13
15
|
end
|
data/lib/dependencies/dep.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
class Dep
|
2
|
-
attr :dependencies
|
3
|
-
|
4
2
|
class Dependency
|
5
3
|
attr :name
|
6
4
|
attr :version
|
7
5
|
attr :environment
|
6
|
+
attr :url
|
8
7
|
|
9
|
-
def initialize(name, version = nil, environment = nil)
|
8
|
+
def initialize(name, version = nil, environment = nil, url = nil)
|
10
9
|
@name = name
|
11
10
|
@version = version if version && !version.empty?
|
12
11
|
@environment = environment ? environment.split(/\, ?/) : []
|
12
|
+
@url = url
|
13
13
|
end
|
14
14
|
|
15
15
|
def for_environment?(env)
|
@@ -50,13 +50,17 @@ class Dep
|
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
|
+
include Enumerable
|
54
|
+
|
55
|
+
attr :dependencies
|
56
|
+
|
53
57
|
def initialize(dependencies)
|
54
58
|
@dependencies = []
|
55
59
|
@missing = []
|
56
60
|
|
57
61
|
dependencies.each_line do |line|
|
58
|
-
next unless line =~ /^([\w\-_]+) ?([<~=> \d\.]+)?( \(([\w, ]+)\))?$/
|
59
|
-
@dependencies << Dependency.new($1, $2, $4)
|
62
|
+
next unless line =~ /^([\w\-_]+) ?([<~=> \d\.]+)?(?: \(([\w, ]+)\))?(?: ([a-z]+:\/\/.+?))?$/
|
63
|
+
@dependencies << Dependency.new($1, $2, $3, $4)
|
60
64
|
end
|
61
65
|
end
|
62
66
|
|
data/test/dependencies_test.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require "rubygems"
|
2
|
-
require "
|
2
|
+
require "open3"
|
3
3
|
|
4
4
|
gem "contest"
|
5
5
|
|
@@ -81,22 +81,86 @@ class DependenciesTest < Test::Unit::TestCase
|
|
81
81
|
|
82
82
|
context "binary" do
|
83
83
|
def dep(args = nil)
|
84
|
-
|
84
|
+
out, err = nil
|
85
|
+
|
86
|
+
Open3.popen3("ruby -I#{LIB} -rubygems #{File.expand_path(File.join("../bin/dep"))} #{args}") do |stdin, stdout, stderr|
|
87
|
+
out = stdout.read
|
88
|
+
err = stderr.read
|
89
|
+
end
|
90
|
+
|
91
|
+
[out, err]
|
85
92
|
end
|
86
93
|
|
87
|
-
|
88
|
-
|
89
|
-
|
94
|
+
context "list" do
|
95
|
+
test "prints all dependencies" do
|
96
|
+
with_dependencies "foo ~> 1.0\nbar" do
|
97
|
+
out, err = dep "list"
|
98
|
+
|
99
|
+
assert_equal "foo ~> 1.0\nbar\n", out
|
100
|
+
end
|
101
|
+
end
|
90
102
|
|
91
|
-
|
103
|
+
test "prints dependencies based on given environment" do
|
104
|
+
with_dependencies "foo 1.0 (test)\nbar (development)\nbarz 2.0\nbaz 0.1 (test)" do
|
105
|
+
out, err = dep "list test"
|
106
|
+
|
107
|
+
assert_equal "foo 1.0 (test)\nbarz 2.0\nbaz 0.1 (test)\n", out
|
108
|
+
end
|
92
109
|
end
|
93
110
|
end
|
94
111
|
|
95
|
-
|
96
|
-
|
97
|
-
|
112
|
+
context "vendor" do
|
113
|
+
setup do
|
114
|
+
@dir = create_repo("foobar")
|
115
|
+
end
|
116
|
+
|
117
|
+
test "vendors dependencies" do
|
118
|
+
with_dependencies "foobar 1.0 file://#{@dir}" do
|
119
|
+
out, err = dep "vendor foobar"
|
120
|
+
|
121
|
+
assert File.exist?("vendor/foobar/lib/foobar.rb")
|
122
|
+
assert !File.exist?("vendor/foobar/.git")
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
test "complains when no URL given" do
|
127
|
+
with_dependencies "foobar 1.0" do
|
128
|
+
out, err = dep "vendor foobar"
|
129
|
+
|
130
|
+
assert_match %r{Don't know where to vendor foobar from \(no URL given...\)}, err
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
test "complains when the dependency is not found" do
|
135
|
+
with_dependencies "foobar 1.0" do
|
136
|
+
out, err = dep "vendor qux"
|
137
|
+
|
138
|
+
assert_match %r{Dependency qux not found.}, err
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
teardown do
|
143
|
+
FileUtils.rm_rf(@dir)
|
144
|
+
end
|
145
|
+
|
146
|
+
def create_repo(name)
|
147
|
+
dir = File.expand_path(File.join(File.dirname(__FILE__), "tmp", name))
|
148
|
+
|
149
|
+
FileUtils.rm_rf(dir)
|
150
|
+
FileUtils.rm_rf("vendor/#{name}")
|
151
|
+
FileUtils.mkdir_p(dir)
|
152
|
+
|
153
|
+
Dir.chdir(dir) do
|
154
|
+
`git init`
|
155
|
+
|
156
|
+
FileUtils.mkdir("lib")
|
157
|
+
FileUtils.touch("lib/#{name}.rb")
|
158
|
+
|
159
|
+
`git add lib`
|
160
|
+
`git commit -m 'Lorem.'`
|
161
|
+
end
|
98
162
|
|
99
|
-
|
163
|
+
dir
|
100
164
|
end
|
101
165
|
end
|
102
166
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dependencies
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Damian Janowski
|
@@ -10,10 +10,19 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2009-06-
|
13
|
+
date: 2009-06-25 00:00:00 -03:00
|
14
14
|
default_executable:
|
15
|
-
dependencies:
|
16
|
-
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: thor
|
18
|
+
type: :runtime
|
19
|
+
version_requirement:
|
20
|
+
version_requirements: !ruby/object:Gem::Requirement
|
21
|
+
requirements:
|
22
|
+
- - ~>
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: "0.9"
|
25
|
+
version:
|
17
26
|
description:
|
18
27
|
email:
|
19
28
|
- djanowski@dimaion.com
|