velcro 0.0.1 → 0.1.0
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/velcro +7 -0
- data/lib/velcro/brewfile.rb +13 -7
- data/lib/velcro/errors.rb +3 -0
- data/lib/velcro/executable.rb +19 -0
- data/lib/velcro/file_helpers.rb +14 -0
- data/lib/velcro/lockfile.rb +21 -10
- data/lib/velcro/version.rb +1 -1
- data/lib/velcro.rb +3 -3
- data/spec/velcro/brewfile_spec.rb +1 -1
- data/spec/velcro/file_helpers_spec.rb +21 -0
- data/spec/velcro/lockfile_spec.rb +13 -11
- data/spec/velcro_spec.rb +1 -1
- data/velcro.gemspec +2 -0
- metadata +28 -5
data/bin/velcro
ADDED
data/lib/velcro/brewfile.rb
CHANGED
@@ -1,14 +1,12 @@
|
|
1
|
+
require 'velcro/errors'
|
2
|
+
require 'velcro/file_helpers'
|
1
3
|
require 'ostruct'
|
2
4
|
|
3
5
|
class Velcro
|
4
6
|
class Brewfile
|
5
|
-
|
6
|
-
|
7
|
-
attr_accessor :path
|
7
|
+
include FileHelpers
|
8
8
|
|
9
|
-
|
10
|
-
self.path = path
|
11
|
-
end
|
9
|
+
DEPENDENCY_FORMAT = %r{^brew '(?<name>\S*)'(, '(?<version>\S*)')?$}
|
12
10
|
|
13
11
|
def dependencies
|
14
12
|
parse_dependencies(content)
|
@@ -29,7 +27,15 @@ class Velcro
|
|
29
27
|
end
|
30
28
|
|
31
29
|
def content
|
32
|
-
|
30
|
+
if location
|
31
|
+
File.read(brewfile_in(location))
|
32
|
+
else
|
33
|
+
fail BrewfileNotFound, 'Could not locate Brewfile'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def brewfile_in(directory)
|
38
|
+
File.join(directory, 'Brewfile')
|
33
39
|
end
|
34
40
|
end
|
35
41
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'velcro'
|
2
|
+
require 'thor'
|
3
|
+
|
4
|
+
class Velcro
|
5
|
+
class Executable < Thor
|
6
|
+
default_task :install
|
7
|
+
|
8
|
+
desc 'install', 'Install dependencies defined in the Brewfile'
|
9
|
+
def install
|
10
|
+
velcro.install
|
11
|
+
end
|
12
|
+
|
13
|
+
no_tasks do
|
14
|
+
def velcro
|
15
|
+
Velcro.new
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class Velcro
|
2
|
+
module FileHelpers
|
3
|
+
def location
|
4
|
+
ENV['VELCRO_BREWFILE'] || recursive_search
|
5
|
+
end
|
6
|
+
|
7
|
+
def recursive_search(directory = Dir.pwd)
|
8
|
+
until directory == '/'
|
9
|
+
return directory if File.exists?(brewfile_in(directory))
|
10
|
+
directory = File.expand_path(File.join(directory, '..'))
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/velcro/lockfile.rb
CHANGED
@@ -1,22 +1,29 @@
|
|
1
|
+
require 'velcro/file_helpers'
|
1
2
|
require 'velcro/homebrew'
|
2
3
|
|
3
4
|
class Velcro
|
4
5
|
class Lockfile
|
5
|
-
|
6
|
+
include FileHelpers
|
6
7
|
|
7
|
-
|
8
|
-
|
8
|
+
attr_accessor :homebrew
|
9
|
+
|
10
|
+
def initialize
|
9
11
|
self.homebrew = Homebrew.new
|
10
12
|
end
|
11
13
|
|
12
14
|
def generate(dependencies)
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
15
|
+
File.open(lockfile_in(Dir.pwd), 'w+') do |lockfile|
|
16
|
+
lockfile.write(
|
17
|
+
[
|
18
|
+
'FORMULA',
|
19
|
+
indent(generate_formula(dependencies)),
|
20
|
+
'',
|
21
|
+
'DEPENDENCIES',
|
22
|
+
indent(generate_dependencies(dependencies)),
|
23
|
+
''
|
24
|
+
].flatten.join("\n")
|
25
|
+
)
|
26
|
+
end
|
20
27
|
end
|
21
28
|
|
22
29
|
def generate_formula(dependencies)
|
@@ -51,5 +58,9 @@ class Velcro
|
|
51
58
|
" #{line}"
|
52
59
|
end
|
53
60
|
end
|
61
|
+
|
62
|
+
def lockfile_in(directory)
|
63
|
+
File.join(directory, 'Brewfile.lock')
|
64
|
+
end
|
54
65
|
end
|
55
66
|
end
|
data/lib/velcro/version.rb
CHANGED
data/lib/velcro.rb
CHANGED
@@ -6,10 +6,10 @@ require 'velcro/lockfile'
|
|
6
6
|
class Velcro
|
7
7
|
attr_accessor :homebrew, :brewfile, :lockfile
|
8
8
|
|
9
|
-
def initialize
|
9
|
+
def initialize
|
10
10
|
self.homebrew = Homebrew.new
|
11
|
-
self.brewfile = Brewfile.new
|
12
|
-
self.lockfile = Lockfile.new
|
11
|
+
self.brewfile = Brewfile.new
|
12
|
+
self.lockfile = Lockfile.new
|
13
13
|
end
|
14
14
|
|
15
15
|
def install
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'velcro/file_helpers'
|
2
|
+
|
3
|
+
describe Velcro::FileHelpers do
|
4
|
+
subject { Class.new.extend(described_class) }
|
5
|
+
|
6
|
+
describe '#location' do
|
7
|
+
let(:velcro_brewfile) { stub }
|
8
|
+
|
9
|
+
it 'returns the brewfile location specified in the environment variable' do
|
10
|
+
ENV.stub(:[]).with('VELCRO_BREWFILE') { velcro_brewfile }
|
11
|
+
subject.location.should == velcro_brewfile
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'recursively searches for the Brewfile if not specified' do
|
15
|
+
subject.stub(:recursive_search) { nil }
|
16
|
+
subject.should_receive(:recursive_search)
|
17
|
+
|
18
|
+
subject.location
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -1,28 +1,30 @@
|
|
1
1
|
require 'velcro/lockfile'
|
2
|
+
require 'tempfile'
|
2
3
|
|
3
4
|
describe Velcro::Lockfile do
|
4
|
-
subject { described_class.new
|
5
|
+
subject { described_class.new }
|
5
6
|
|
6
7
|
let(:postgresql) { OpenStruct.new(name: 'postgresql', version: nil) }
|
7
|
-
let(:redis)
|
8
|
+
let(:redis) { OpenStruct.new(name: 'redis', version: '2.4.16') }
|
9
|
+
let(:ossp_uuid) { OpenStruct.new(name: 'ossp-uuid', version: '1.6.2') }
|
10
|
+
let(:readline) { OpenStruct.new(name: 'readline', version: '6.2.4') }
|
11
|
+
|
8
12
|
let(:dependencies) { [postgresql, redis] }
|
13
|
+
let(:child_dependencies) { [ossp_uuid, readline] }
|
14
|
+
|
15
|
+
let(:lockfile) { Tempfile.new('lockfile') }
|
9
16
|
|
10
17
|
before do
|
11
|
-
subject.homebrew.stub(:
|
12
|
-
subject.homebrew.stub(:child_dependencies).with(postgresql) {
|
13
|
-
[
|
14
|
-
OpenStruct.new(name: 'ossp-uuid', version: '1.6.2'),
|
15
|
-
OpenStruct.new(name: 'readline', version: '6.2.4')
|
16
|
-
]
|
17
|
-
}
|
18
|
+
subject.homebrew.stub(:child_dependencies).with(postgresql) { child_dependencies }
|
18
19
|
subject.homebrew.stub(:child_dependencies).with(redis) { [] }
|
19
20
|
subject.homebrew.stub(:versions).with(postgresql) { '9.1.4' }
|
20
|
-
subject.
|
21
|
+
subject.stub(:lockfile_in) { lockfile }
|
21
22
|
end
|
22
23
|
|
23
24
|
describe '#generate' do
|
24
25
|
it 'creates a Brewfile.lock for the installed dependencies' do
|
25
|
-
subject.generate(dependencies)
|
26
|
+
subject.generate(dependencies)
|
27
|
+
File.read(lockfile).should == <<-END.gsub(/^ {8}/, '')
|
26
28
|
FORMULA
|
27
29
|
postgresql (9.1.4)
|
28
30
|
ossp-uuid (1.6.2)
|
data/spec/velcro_spec.rb
CHANGED
data/velcro.gemspec
CHANGED
@@ -15,6 +15,8 @@ Gem::Specification.new do |gem|
|
|
15
15
|
gem.test_files = `git ls-files -- spec/*`.split
|
16
16
|
gem.require_paths = ['lib']
|
17
17
|
|
18
|
+
gem.add_dependency 'thor' , '~> 0.16.0'
|
19
|
+
|
18
20
|
gem.add_development_dependency 'rspec', '~> 2.11.0'
|
19
21
|
gem.add_development_dependency 'pry'
|
20
22
|
gem.add_development_dependency 'rake'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: velcro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,8 +10,24 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-08-
|
13
|
+
date: 2012-08-21 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: thor
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ~>
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.16.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ~>
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: 0.16.0
|
15
31
|
- !ruby/object:Gem::Dependency
|
16
32
|
name: rspec
|
17
33
|
requirement: !ruby/object:Gem::Requirement
|
@@ -64,7 +80,8 @@ description: Manage your dependencies with homebrew like you manage your gems wi
|
|
64
80
|
bundler
|
65
81
|
email:
|
66
82
|
- vanstee@highgroove.com
|
67
|
-
executables:
|
83
|
+
executables:
|
84
|
+
- velcro
|
68
85
|
extensions: []
|
69
86
|
extra_rdoc_files: []
|
70
87
|
files:
|
@@ -75,12 +92,17 @@ files:
|
|
75
92
|
- LICENSE.txt
|
76
93
|
- README.md
|
77
94
|
- Rakefile
|
95
|
+
- bin/velcro
|
78
96
|
- lib/velcro.rb
|
79
97
|
- lib/velcro/brewfile.rb
|
98
|
+
- lib/velcro/errors.rb
|
99
|
+
- lib/velcro/executable.rb
|
100
|
+
- lib/velcro/file_helpers.rb
|
80
101
|
- lib/velcro/homebrew.rb
|
81
102
|
- lib/velcro/lockfile.rb
|
82
103
|
- lib/velcro/version.rb
|
83
104
|
- spec/velcro/brewfile_spec.rb
|
105
|
+
- spec/velcro/file_helpers_spec.rb
|
84
106
|
- spec/velcro/homebrew_spec.rb
|
85
107
|
- spec/velcro/lockfile_spec.rb
|
86
108
|
- spec/velcro_spec.rb
|
@@ -99,7 +121,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
99
121
|
version: '0'
|
100
122
|
segments:
|
101
123
|
- 0
|
102
|
-
hash:
|
124
|
+
hash: 555263360612235969
|
103
125
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
126
|
none: false
|
105
127
|
requirements:
|
@@ -108,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
108
130
|
version: '0'
|
109
131
|
segments:
|
110
132
|
- 0
|
111
|
-
hash:
|
133
|
+
hash: 555263360612235969
|
112
134
|
requirements: []
|
113
135
|
rubyforge_project:
|
114
136
|
rubygems_version: 1.8.23
|
@@ -117,6 +139,7 @@ specification_version: 3
|
|
117
139
|
summary: Manage your dependencies with homebrew like you manage your gems with bundler
|
118
140
|
test_files:
|
119
141
|
- spec/velcro/brewfile_spec.rb
|
142
|
+
- spec/velcro/file_helpers_spec.rb
|
120
143
|
- spec/velcro/homebrew_spec.rb
|
121
144
|
- spec/velcro/lockfile_spec.rb
|
122
145
|
- spec/velcro_spec.rb
|