vendorificator 0.0.1
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/.gitignore +19 -0
- data/.travis.yml +9 -0
- data/Gemfile +11 -0
- data/LICENSE +22 -0
- data/README.md +45 -0
- data/Rakefile +29 -0
- data/bin/vendor +4 -0
- data/bin/vendorify +6 -0
- data/examples/Vendorfile +25 -0
- data/features/chef_cookbook.feature +44 -0
- data/features/deprecated.feature +17 -0
- data/features/fixtures/git/testrepo/HEAD +1 -0
- data/features/fixtures/git/testrepo/config +7 -0
- data/features/fixtures/git/testrepo/description +1 -0
- data/features/fixtures/git/testrepo/hooks/applypatch-msg.sample +15 -0
- data/features/fixtures/git/testrepo/hooks/commit-msg.sample +24 -0
- data/features/fixtures/git/testrepo/hooks/post-update.sample +8 -0
- data/features/fixtures/git/testrepo/hooks/pre-applypatch.sample +14 -0
- data/features/fixtures/git/testrepo/hooks/pre-commit.sample +50 -0
- data/features/fixtures/git/testrepo/hooks/pre-rebase.sample +169 -0
- data/features/fixtures/git/testrepo/hooks/prepare-commit-msg.sample +36 -0
- data/features/fixtures/git/testrepo/hooks/update.sample +128 -0
- data/features/fixtures/git/testrepo/info/exclude +6 -0
- data/features/fixtures/git/testrepo/info/refs +5 -0
- data/features/fixtures/git/testrepo/objects/info/packs +2 -0
- data/features/fixtures/git/testrepo/objects/pack/pack-46f7621b6a6b9b1c22dd15c08d457dfedf76e55f.idx +0 -0
- data/features/fixtures/git/testrepo/objects/pack/pack-46f7621b6a6b9b1c22dd15c08d457dfedf76e55f.pack +0 -0
- data/features/fixtures/git/testrepo/packed-refs +6 -0
- data/features/fixtures/git/testrepo/refs/heads/.sentinel +0 -0
- data/features/fixtures/git/testrepo/refs/tags/.sentinel +0 -0
- data/features/fixtures/vcr_cassettes/vendorificator.yml +2375 -0
- data/features/git.feature +12 -0
- data/features/needed.feature +16 -0
- data/features/smoke.feature +14 -0
- data/features/status.feature +47 -0
- data/features/step_definitions/basic.rb +52 -0
- data/features/step_definitions/git.rb +39 -0
- data/features/step_definitions/vendorificator.rb +27 -0
- data/features/support/env.rb +32 -0
- data/features/support/transform_pattern.rb +12 -0
- data/features/support/world_git.rb +40 -0
- data/features/support/world_runs.rb +90 -0
- data/features/tarball.feature +63 -0
- data/features/tarball_edit.feature +15 -0
- data/features/vendor.feature +16 -0
- data/lib/vendorificator/cli.rb +233 -0
- data/lib/vendorificator/config.rb +72 -0
- data/lib/vendorificator/hooks/chef_cookbook.rb +23 -0
- data/lib/vendorificator/repo.rb +69 -0
- data/lib/vendorificator/vendor/archive.rb +90 -0
- data/lib/vendorificator/vendor/chef_cookbook.rb +58 -0
- data/lib/vendorificator/vendor/git.rb +47 -0
- data/lib/vendorificator/vendor.rb +260 -0
- data/lib/vendorificator/version.rb +3 -0
- data/lib/vendorificator.rb +9 -0
- data/vendorificator.gemspec +30 -0
- metadata +321 -0
@@ -0,0 +1,12 @@
|
|
1
|
+
Feature: Git-based vendor module
|
2
|
+
|
3
|
+
Scenario:
|
4
|
+
Given a repository with following Vendorfile:
|
5
|
+
"""ruby
|
6
|
+
git "file://#{ENV['FIXTURES_DIR']}/git/testrepo"
|
7
|
+
"""
|
8
|
+
When I run "vendor"
|
9
|
+
Then following has been conjured:
|
10
|
+
| Name | testrepo |
|
11
|
+
| Version | 10e9ac58c77bc229d8c59a5b4eb7422916453148 |
|
12
|
+
| With file | test/alias.c |
|
@@ -0,0 +1,16 @@
|
|
1
|
+
Feature: a vendor module is downloaded only if needed
|
2
|
+
|
3
|
+
Scenario: already downloaded tarball
|
4
|
+
Given a repository with following Vendorfile:
|
5
|
+
"""ruby
|
6
|
+
archive :testrepo, :version => '0.1',
|
7
|
+
:url => 'http://test-assets.3ofcoins.net.s3-website-us-east-1.amazonaws.com/testrepo-0.1.tar.gz'
|
8
|
+
"""
|
9
|
+
When I run "vendor"
|
10
|
+
Then I'm on "master" branch
|
11
|
+
And command output includes /module\s+testrepo/
|
12
|
+
And command output includes "testrepo-0.1.tar.gz"
|
13
|
+
Then I run "vendor"
|
14
|
+
And command output includes /module\s+testrepo/
|
15
|
+
And command output includes /up to date\s+testrepo/
|
16
|
+
And command output does not include "testrepo-0.1.tar.gz"
|
@@ -0,0 +1,14 @@
|
|
1
|
+
Feature: smoke test of the test suite
|
2
|
+
In order to trust my tests,
|
3
|
+
As the developer of Vendorificator,
|
4
|
+
I want to make sure that test environment itself does not emit smoke.
|
5
|
+
|
6
|
+
Scenario: The default environment
|
7
|
+
Given nothing in particular
|
8
|
+
When nothing happens
|
9
|
+
Then the README file exists
|
10
|
+
And git repository is clean
|
11
|
+
And git history has one commit
|
12
|
+
And I'm on "master" branch
|
13
|
+
And no other branch exists
|
14
|
+
|
@@ -0,0 +1,47 @@
|
|
1
|
+
Feature: Module status
|
2
|
+
|
3
|
+
The `status` subcommand statuss all known modules and their status.
|
4
|
+
|
5
|
+
Background:
|
6
|
+
Given a repository with following Vendorfile:
|
7
|
+
"""ruby
|
8
|
+
vendor 'generated', :version => '0.23' do |v|
|
9
|
+
File.open('README', 'w') { |f| f.puts "Hello, World!" }
|
10
|
+
File.open('VERSION', 'w') { |f| f.puts v.version }
|
11
|
+
end
|
12
|
+
"""
|
13
|
+
|
14
|
+
Scenario: status new module
|
15
|
+
When I run "vendor status"
|
16
|
+
Then command output includes /new\s+generated\/0.23/
|
17
|
+
|
18
|
+
Scenario: status up-to-date module
|
19
|
+
When I run "vendor"
|
20
|
+
And I run "vendor status"
|
21
|
+
Then command output includes /up to date\s+generated\/0.23/
|
22
|
+
|
23
|
+
Scenario: status outdated modules
|
24
|
+
When I run "vendor"
|
25
|
+
And I change Vendorfile to:
|
26
|
+
"""ruby
|
27
|
+
vendor 'generated', :version => '0.42' do |v|
|
28
|
+
File.open('README', 'w') { |f| f.puts "Hello, Updated, World!" }
|
29
|
+
File.open('VERSION', 'w') { |f| f.puts v.version }
|
30
|
+
end
|
31
|
+
"""
|
32
|
+
And I run "vendor status"
|
33
|
+
Then command output includes /outdated\s+generated\/0.42/
|
34
|
+
|
35
|
+
Scenario: Module's dependencies are statused if they are known
|
36
|
+
When I change Vendorfile to:
|
37
|
+
"""ruby
|
38
|
+
require 'vendorificator/vendor/chef_cookbook'
|
39
|
+
chef_cookbook 'memcached'
|
40
|
+
"""
|
41
|
+
And I run "vendor status"
|
42
|
+
Then command output includes /new\s+memcached/
|
43
|
+
And command output does not include "runit"
|
44
|
+
When I run "vendor"
|
45
|
+
And I run "vendor status"
|
46
|
+
Then command output includes /up to date\s+memcached/
|
47
|
+
And command output includes /up to date\s+runit/
|
@@ -0,0 +1,52 @@
|
|
1
|
+
Given /^nothing in particular$/ do
|
2
|
+
nil # NOP
|
3
|
+
end
|
4
|
+
|
5
|
+
When /^nothing happens$/ do
|
6
|
+
nil # NOP
|
7
|
+
end
|
8
|
+
|
9
|
+
Then /^file "(.*?)" exists$/ do |path|
|
10
|
+
assert { File.exists?(path) }
|
11
|
+
end
|
12
|
+
|
13
|
+
Then /^file "(.*?)" does not exist$/ do |path|
|
14
|
+
deny { File.exists?(path) }
|
15
|
+
end
|
16
|
+
|
17
|
+
Then /^the README file exists$/ do
|
18
|
+
step 'file "README" exists'
|
19
|
+
end
|
20
|
+
|
21
|
+
Then /^file "(.*?)" reads "(.*?)"$/ do |path, text|
|
22
|
+
assert { File.read(path).strip == text.strip }
|
23
|
+
end
|
24
|
+
|
25
|
+
Given /^a repository with following Vendorfile:$/ do |string|
|
26
|
+
commit_file('Vendorfile', string)
|
27
|
+
end
|
28
|
+
|
29
|
+
When /^I change Vendorfile to:$/ do |string|
|
30
|
+
commit_file('Vendorfile', string, "Updated Vendorfile")
|
31
|
+
end
|
32
|
+
|
33
|
+
When /^I try to run "(.*?)"$/ do |command_string|
|
34
|
+
run command_string
|
35
|
+
end
|
36
|
+
|
37
|
+
When /^I run "(.*?)"$/ do |command_string|
|
38
|
+
step "I try to run \"#{command_string}\""
|
39
|
+
assert { command_succeeded }
|
40
|
+
end
|
41
|
+
|
42
|
+
Then /the command has failed/ do
|
43
|
+
deny { command_succeeded(false) }
|
44
|
+
end
|
45
|
+
|
46
|
+
Then /^command (output|stdout|stderr) includes (#{PATTERN})$/ do |stream, pat|
|
47
|
+
assert { command_output(stream) =~ pat }
|
48
|
+
end
|
49
|
+
|
50
|
+
Then /^command (output|stdout|stderr) does not include (#{PATTERN})$/ do |stream, pat|
|
51
|
+
deny { command_output(stream) =~ pat }
|
52
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
Then /^git repository is clean$/ do
|
2
|
+
assert { repo_clean? }
|
3
|
+
end
|
4
|
+
|
5
|
+
Then /^git history has one commit$/ do
|
6
|
+
assert { git.log.count == 1 }
|
7
|
+
end
|
8
|
+
|
9
|
+
Then /^I\'m on "(.*?)" branch$/ do |expected_branch|
|
10
|
+
assert { branch == expected_branch }
|
11
|
+
end
|
12
|
+
|
13
|
+
Then /^no other branch exists$/ do
|
14
|
+
assert { branches.length == 1 }
|
15
|
+
end
|
16
|
+
|
17
|
+
Then /^branch "(.*?)" exists$/ do |branch_name|
|
18
|
+
assert { branches.include?(branch_name) }
|
19
|
+
end
|
20
|
+
|
21
|
+
Then /^branch "(.*?)" does not exist$/ do |branch_name|
|
22
|
+
deny { branches.include?(branch_name) }
|
23
|
+
end
|
24
|
+
|
25
|
+
Then /^tag "(.*?)" exists$/ do |tag_name|
|
26
|
+
assert { tags.include?(tag_name) }
|
27
|
+
end
|
28
|
+
|
29
|
+
Then /^tag "(.*?)" does not exist$/ do |tag_name|
|
30
|
+
deny { tags.include?(tag_name) }
|
31
|
+
end
|
32
|
+
|
33
|
+
Then /^tag matching (#{PATTERN}) exists$/ do |pat|
|
34
|
+
assert { tags.any?{|t| t=~pat} }
|
35
|
+
end
|
36
|
+
|
37
|
+
Then /^tag matching (#{PATTERN}) does not exist$/ do |pat|
|
38
|
+
deny { tags.any?{|t| t=~pat} }
|
39
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
Then /^(?:the )?following has( not)? been conjured:$/ do |not_p, table|
|
2
|
+
exists_p = not_p ? "does not exist" : "exists"
|
3
|
+
|
4
|
+
step "I'm on \"master\" branch"
|
5
|
+
|
6
|
+
table.transpose.hashes.each do |mod|
|
7
|
+
step "branch \"vendor/#{mod['Name']}\" #{exists_p}"
|
8
|
+
|
9
|
+
if mod['Version']
|
10
|
+
step "tag \"vendor/#{mod['Name']}/#{mod['Version']}\" #{exists_p}"
|
11
|
+
else
|
12
|
+
step "tag matching /^vendor\\/#{Regexp.quote(mod['Name']).gsub('/', '\\/')}\\// #{exists_p}"
|
13
|
+
end
|
14
|
+
|
15
|
+
if mod['With file']
|
16
|
+
mod['With file'].lines.each do |path|
|
17
|
+
step "file \"vendor/#{mod['Name']}/#{path.strip}\" #{exists_p}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
if mod['Without file']
|
22
|
+
mod['Without file'].lines.each do |path|
|
23
|
+
step "file \"vendor/#{mod['Name']}/#{path.strip}\" does not exist"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'pathname'
|
3
|
+
require 'tmpdir'
|
4
|
+
|
5
|
+
require 'wrong'
|
6
|
+
|
7
|
+
World(Wrong)
|
8
|
+
|
9
|
+
# Run each test in a temporary directory, initialized as a git repository
|
10
|
+
FileUtils::mkdir_p 'tmp'
|
11
|
+
|
12
|
+
Before do
|
13
|
+
@orig_wd = Dir.getwd
|
14
|
+
@tmp_wd = Dir.mktmpdir(nil, 'tmp')
|
15
|
+
Dir.chdir(@tmp_wd)
|
16
|
+
|
17
|
+
commit_file('README', 'Lorem ipsum dolor sit amet')
|
18
|
+
end
|
19
|
+
|
20
|
+
After do |scenario|
|
21
|
+
Dir::chdir(@orig_wd)
|
22
|
+
if ENV['DEBUG'] || scenario.failed?
|
23
|
+
puts "Keeping working directory #{@tmp_wd} for debugging"
|
24
|
+
else
|
25
|
+
FileUtils::rm_rf(@tmp_wd)
|
26
|
+
end
|
27
|
+
@tmp_wd = nil
|
28
|
+
end
|
29
|
+
|
30
|
+
ENV['FIXTURES_DIR'] = Pathname.new(__FILE__).
|
31
|
+
dirname.join('..', 'fixtures').realpath.to_s
|
32
|
+
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# Matching (#{PATTERN}) will match "foo" or /foo/, and return a
|
2
|
+
# regular expression. With quotes, the expression will be escaped.
|
3
|
+
|
4
|
+
PATTERN = /[\"\/](?:\\.|[^\"\/\\])*[\"\/]/
|
5
|
+
|
6
|
+
Transform /^\/((?:\\.|[^\/\\])*)\/$/ do |rx|
|
7
|
+
Regexp.new(rx)
|
8
|
+
end
|
9
|
+
|
10
|
+
Transform /^\"((?:\\.|[^\"\\])*)\"$/ do |str|
|
11
|
+
Regexp.new(Regexp.quote(str))
|
12
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'git'
|
3
|
+
|
4
|
+
module Vendorificator
|
5
|
+
module TestSupport
|
6
|
+
module Git
|
7
|
+
def git(*args)
|
8
|
+
@git ||= {}
|
9
|
+
@git[args] ||= ::Git.init(*args)
|
10
|
+
end
|
11
|
+
|
12
|
+
def commit_file(path, contents, message=nil)
|
13
|
+
message ||= "Added #{path}"
|
14
|
+
FileUtils.mkdir_p(File.dirname(path))
|
15
|
+
File.open(path, 'w') { |f| f.puts(contents) }
|
16
|
+
git.add(path)
|
17
|
+
git.commit(message)
|
18
|
+
end
|
19
|
+
|
20
|
+
def repo_clean?
|
21
|
+
# FIXME: How to do that with ruby-git?
|
22
|
+
`git status --porcelain` == ""
|
23
|
+
end
|
24
|
+
|
25
|
+
def branch
|
26
|
+
git.current_branch
|
27
|
+
end
|
28
|
+
|
29
|
+
def branches
|
30
|
+
git.branches.map(&:to_s)
|
31
|
+
end
|
32
|
+
|
33
|
+
def tags
|
34
|
+
git.tags.map(&:name)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
World(Vendorificator::TestSupport::Git)
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'mixlib/shellout'
|
2
|
+
|
3
|
+
class String
|
4
|
+
def strip_console_escapes
|
5
|
+
self.gsub(/\e\[[^m]{1,5}m/,'')
|
6
|
+
end
|
7
|
+
|
8
|
+
def indent(amount, char=' ')
|
9
|
+
prefix = char * amount
|
10
|
+
lines.map { |ln| ln =~ /^\s*$/ ? ln : prefix+ln }.join
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
module Vendorificator
|
15
|
+
module TestSupport
|
16
|
+
module RunsCommands
|
17
|
+
def command
|
18
|
+
raise RuntimeError, "No command has run yet!" unless @command
|
19
|
+
@command
|
20
|
+
end
|
21
|
+
|
22
|
+
def run(*command_args)
|
23
|
+
opts = {}
|
24
|
+
opts = command_args.pop if command_args.last.is_a?(Hash)
|
25
|
+
|
26
|
+
# We need to clear out Git environment variables left here by
|
27
|
+
# the Git gem.
|
28
|
+
opts[:environment] ||= {}
|
29
|
+
opts[:environment].merge!(
|
30
|
+
'GIT_DIR' => nil,
|
31
|
+
'GIT_INDEX_FILE' => nil,
|
32
|
+
'GIT_WORK_TREE' => nil)
|
33
|
+
|
34
|
+
command_args.push opts
|
35
|
+
@command = Mixlib::ShellOut.new(*command_args)
|
36
|
+
|
37
|
+
command.run_command
|
38
|
+
print_command_result if ENV['VERBOSE']
|
39
|
+
end
|
40
|
+
|
41
|
+
def command_succeeded(print_failed=true)
|
42
|
+
command.error!
|
43
|
+
true
|
44
|
+
rescue Mixlib::ShellOut::ShellCommandFailed
|
45
|
+
print_command_result if print_failed
|
46
|
+
false
|
47
|
+
end
|
48
|
+
|
49
|
+
def command_stdout
|
50
|
+
command.stdout.strip_console_escapes
|
51
|
+
end
|
52
|
+
|
53
|
+
def command_stderr
|
54
|
+
command.stderr.strip_console_escapes
|
55
|
+
end
|
56
|
+
|
57
|
+
# Depending on stream, returns:
|
58
|
+
# when 'stdout': command_stdout
|
59
|
+
# when 'stderr': command_stderr
|
60
|
+
# otherwise: command.stdout + "\n" + command_stderr
|
61
|
+
def command_output(stream=nil)
|
62
|
+
case stream
|
63
|
+
when 'stdout'
|
64
|
+
command_stdout
|
65
|
+
when 'stderr'
|
66
|
+
command_stderr
|
67
|
+
else
|
68
|
+
"#{command_stdout}\n#{command_stderr}"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def print_command_result
|
73
|
+
puts <<EOF
|
74
|
+
|
75
|
+
-------- BEGIN #{command.command.inspect} --------
|
76
|
+
Exit status: #{command.exitstatus}
|
77
|
+
Execution time: #{command.execution_time}
|
78
|
+
Stdout:
|
79
|
+
#{command_stdout.indent(4)}
|
80
|
+
Stderr:
|
81
|
+
#{command_stderr.indent(4)}
|
82
|
+
-------- END #{command.command.inspect} --------
|
83
|
+
|
84
|
+
EOF
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
World(Vendorificator::TestSupport::RunsCommands)
|
@@ -0,0 +1,63 @@
|
|
1
|
+
Feature: simple tarball module
|
2
|
+
|
3
|
+
Scenario: just URL as name
|
4
|
+
Given a repository with following Vendorfile:
|
5
|
+
"""ruby
|
6
|
+
archive 'http://test-assets.3ofcoins.net.s3-website-us-east-1.amazonaws.com/testrepo-0.1.tar.gz'
|
7
|
+
"""
|
8
|
+
When I run "vendor"
|
9
|
+
Then following has been conjured:
|
10
|
+
| Name | testrepo-0.1 |
|
11
|
+
| Version | testrepo-0.1.tar.gz |
|
12
|
+
| With file | test/alias.c |
|
13
|
+
|
14
|
+
Scenario: URL as keyword
|
15
|
+
Given a repository with following Vendorfile:
|
16
|
+
"""ruby
|
17
|
+
archive :testrepo,
|
18
|
+
:url => 'http://test-assets.3ofcoins.net.s3-website-us-east-1.amazonaws.com/testrepo-0.1.tar.gz'
|
19
|
+
"""
|
20
|
+
When I run "vendor"
|
21
|
+
Then following has been conjured:
|
22
|
+
| Name | testrepo |
|
23
|
+
| Version | testrepo-0.1.tar.gz |
|
24
|
+
| With file | test/alias.c |
|
25
|
+
|
26
|
+
Scenario: Version & checksum
|
27
|
+
Given a repository with following Vendorfile:
|
28
|
+
"""ruby
|
29
|
+
archive :testrepo,
|
30
|
+
:url => 'http://test-assets.3ofcoins.net.s3-website-us-east-1.amazonaws.com/testrepo-0.1.tar.gz',
|
31
|
+
:version => '0.1',
|
32
|
+
:checksum => 'ea207a896f929ffb3a1dfe128332d6134a18edab7c01b97bfb2b1c7eacebe0cb'
|
33
|
+
"""
|
34
|
+
When I run "vendor"
|
35
|
+
Then following has been conjured:
|
36
|
+
| Name | testrepo |
|
37
|
+
| Version | 0.1 |
|
38
|
+
| With file | test/alias.c |
|
39
|
+
|
40
|
+
Scenario: Wrong checksum
|
41
|
+
Given a repository with following Vendorfile:
|
42
|
+
"""ruby
|
43
|
+
archive :testrepo,
|
44
|
+
:url => 'http://test-assets.3ofcoins.net.s3-website-us-east-1.amazonaws.com/testrepo-0.1.tar.gz',
|
45
|
+
:version => '0.1',
|
46
|
+
:checksum => 'incorrect'
|
47
|
+
"""
|
48
|
+
When I try to run "vendor"
|
49
|
+
Then the command has failed
|
50
|
+
Then following has not been conjured:
|
51
|
+
| Name | testrepo |
|
52
|
+
| With file | test/alias.c |
|
53
|
+
|
54
|
+
Scenario: Tarball without a root directory
|
55
|
+
Given a repository with following Vendorfile:
|
56
|
+
"""ruby
|
57
|
+
archive :testrepo,
|
58
|
+
:url => 'http://test-assets.3ofcoins.net.s3-website-us-east-1.amazonaws.com/testrepo-0.1-noroot.tar.gz'
|
59
|
+
"""
|
60
|
+
When I run "vendor"
|
61
|
+
Then following has been conjured:
|
62
|
+
| Name | testrepo |
|
63
|
+
| With file | test/alias.c |
|
@@ -0,0 +1,15 @@
|
|
1
|
+
Feature: Edit the tarball after downloading
|
2
|
+
|
3
|
+
Scenario:
|
4
|
+
Given a repository with following Vendorfile:
|
5
|
+
"""ruby
|
6
|
+
archive :testrepo,
|
7
|
+
:url => 'http://test-assets.3ofcoins.net.s3-website-us-east-1.amazonaws.com/testrepo-0.1.tar.gz' do
|
8
|
+
FileUtils::rm Dir['test/archive*.c']
|
9
|
+
end
|
10
|
+
"""
|
11
|
+
When I run "vendor"
|
12
|
+
Then following has been conjured:
|
13
|
+
| Name | testrepo |
|
14
|
+
| With file | test/alias.c |
|
15
|
+
| Without file | test/archive.c |
|
@@ -0,0 +1,16 @@
|
|
1
|
+
Feature: bare 'vendor' clause
|
2
|
+
|
3
|
+
Scenario:
|
4
|
+
Given a repository with following Vendorfile:
|
5
|
+
"""ruby
|
6
|
+
vendor 'generated', :version => '0.23' do |v|
|
7
|
+
File.open('README', 'w') { |f| f.puts "Hello, World!" }
|
8
|
+
File.open('VERSION', 'w') { |f| f.puts v.version }
|
9
|
+
end
|
10
|
+
"""
|
11
|
+
When I run "vendor"
|
12
|
+
Then the following has been conjured:
|
13
|
+
| Name | generated |
|
14
|
+
| Version | 0.23 |
|
15
|
+
| With file | README |
|
16
|
+
And file "vendor/generated/VERSION" reads "0.23"
|