appbundler 0.9.0 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +2 -4
- data/Gemfile +1 -1
- data/README.md +46 -36
- data/appbundler.gemspec +9 -7
- data/bin/appbundler +2 -3
- data/lib/appbundler.rb +0 -1
- data/lib/appbundler/app.rb +16 -14
- data/lib/appbundler/cli.rb +7 -7
- data/lib/appbundler/version.rb +1 -1
- data/spec/appbundler/app_spec.rb +33 -22
- data/spec/fixtures/appbundler-example-app/appbundler-example-app.gemspec +2 -3
- metadata +10 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b6d3790061544bed9cee8bd44d5c94bcd235b46b
|
4
|
+
data.tar.gz: 050a352e5d29f64ad1dd512abeef8759f9a17dfd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 46f7c7536c8090ba2ebd83b4678041e89965344cacc40d3d455897884beea826c258080f5add78a1d2387ba397e986863d95abaf4393aad1741e88fbb9d9a37e
|
7
|
+
data.tar.gz: 4b2a888810f9199e41f17ffda7d4be4043d6569be893e46cbb7f9239793a6ad60ca837949d5774b552c2c1308822657e152c161d5647073bf7024058b3520836
|
data/.travis.yml
CHANGED
@@ -3,9 +3,8 @@ before_install:
|
|
3
3
|
- gem install bundler
|
4
4
|
|
5
5
|
rvm:
|
6
|
-
- 2.
|
7
|
-
- 2.
|
8
|
-
- 2.2
|
6
|
+
- 2.2.5
|
7
|
+
- 2.3.1
|
9
8
|
|
10
9
|
branches:
|
11
10
|
only:
|
@@ -13,4 +12,3 @@ branches:
|
|
13
12
|
|
14
13
|
# The integration tests need to see installed gems.
|
15
14
|
script: rspec --color --format progress
|
16
|
-
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,70 +1,80 @@
|
|
1
1
|
# Appbundler
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
to the versions selected by bundler. This code is used in binstubs for
|
6
|
-
the application so that running (e.g.) `chef-client` on the command line
|
7
|
-
activates the locked dependencies for `chef` before running the command.
|
3
|
+
[![Build Status Master](https://travis-ci.org/chef/appbundler.svg?branch=master)](https://travis-ci.org/chef/appbundler) [![Gem Version](https://badge.fury.io/rb/appbundler.svg)](https://badge.fury.io/rb/appbundler)
|
4
|
+
|
5
|
+
Appbundler reads a Gemfile.lock and generates code with `gem "some-dep", "= VERSION"` statements to lock the app's dependencies to the versions selected by bundler. This code is used in binstubs for the application so that running (e.g.) `chef-client` on the command line activates the locked dependencies for `chef` before running the command.
|
8
6
|
|
9
7
|
This provides the following benefits:
|
10
|
-
* The application loads faster because rubygems is not resolving
|
11
|
-
dependency constraints at runtime.
|
12
|
-
* The application runs with the same dependencies that it would if
|
13
|
-
bundler was used, so we can test applications (that will be installed
|
14
|
-
in an omnibus package) using the default bundler workflow.
|
15
|
-
* There's no need to `bundle exec` or patch the bundler runtime into the
|
16
|
-
app.
|
17
|
-
* The app can load gems not included in the Gemfile/gemspec. Our use
|
18
|
-
case for this is to load plugins (e.g., for knife and test kitchen).
|
19
|
-
* A user can use rvm and still use the application (see below).
|
20
|
-
* The application is protected from installation of incompatible
|
21
|
-
dependencies.
|
22
|
-
|
23
|
-
# Usage
|
24
|
-
|
25
|
-
Install via rubygems: `gem install appbundler` or clone this project and
|
26
|
-
bundle install:
|
27
8
|
|
28
|
-
|
29
|
-
|
9
|
+
- The application loads faster because rubygems is not resolving dependency constraints at runtime.
|
10
|
+
- The application runs with the same dependencies that it would if bundler was used, so we can test applications (that will be installed in an omnibus package) using the default bundler workflow.
|
11
|
+
- There's no need to `bundle exec` or patch the bundler runtime into the app.
|
12
|
+
- The app can load gems not included in the Gemfile/gemspec. Our use case for this is to load plugins (e.g., for knife and test kitchen).
|
13
|
+
- A user can use rvm and still use the application (see below).
|
14
|
+
- The application is protected from installation of incompatible dependencies.
|
15
|
+
|
16
|
+
## Usage
|
17
|
+
|
18
|
+
Install via rubygems: `gem install appbundler` or clone this project and bundle install:
|
19
|
+
|
20
|
+
```shell
|
21
|
+
git clone https://github.com/chef/appbundler.git
|
30
22
|
cd appbundler
|
31
23
|
bundle install
|
32
24
|
```
|
33
25
|
|
34
|
-
Clone whatever project you want to appbundle somewhere else, and bundle
|
35
|
-
install it:
|
26
|
+
Clone whatever project you want to appbundle somewhere else, and bundle install it:
|
36
27
|
|
37
|
-
```
|
28
|
+
```shell
|
38
29
|
mkdir ~/oc
|
39
30
|
cd ~/oc
|
40
|
-
git clone https://github.com/
|
31
|
+
git clone https://github.com/chef/chef.git
|
41
32
|
cd chef
|
42
33
|
bundle install
|
43
34
|
```
|
44
35
|
|
45
36
|
Create a bin directory where your bundled binstubs will live:
|
46
37
|
|
47
|
-
```
|
38
|
+
```shell
|
48
39
|
mkdir ~/appbundle-bin
|
49
40
|
# Add to your PATH if you like
|
50
41
|
```
|
51
42
|
|
52
43
|
Now you can app bundle your project (chef in our example):
|
53
44
|
|
54
|
-
```
|
45
|
+
```shell
|
55
46
|
bin/appbundler ~/oc/chef ~/appbundler-bin
|
56
47
|
```
|
57
48
|
|
58
49
|
Now you can run all of the app's executables with locked down deps:
|
59
50
|
|
60
|
-
```
|
51
|
+
```shell
|
61
52
|
~/appbunlder-bin/chef-client -v
|
62
53
|
```
|
63
54
|
|
55
|
+
## RVM
|
56
|
+
|
57
|
+
The generated binstubs explicitly disable rvm, so the above won't work if you're using rvm. This is intentional, because our use case is for omnibus applications where rvm's environment variables can break the embedded application by making ruby look for gems in rvm's gem repo.
|
58
|
+
|
59
|
+
## Contributing
|
60
|
+
|
61
|
+
For information on contributing to this project see <https://github.com/chef/chef/blob/master/CONTRIBUTING.md>
|
64
62
|
|
65
|
-
|
63
|
+
## License
|
66
64
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
65
|
+
- Copyright:: Copyright (c) 2014-2016 Chef Software, Inc.
|
66
|
+
- License:: Apache License, Version 2.0
|
67
|
+
|
68
|
+
```text
|
69
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
70
|
+
you may not use this file except in compliance with the License.
|
71
|
+
You may obtain a copy of the License at
|
72
|
+
|
73
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
74
|
+
|
75
|
+
Unless required by applicable law or agreed to in writing, software
|
76
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
77
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
78
|
+
See the License for the specific language governing permissions and
|
79
|
+
limitations under the License.
|
80
|
+
```
|
data/appbundler.gemspec
CHANGED
@@ -1,27 +1,29 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
lib = File.expand_path(
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require
|
4
|
+
require "appbundler/version"
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "appbundler"
|
8
8
|
spec.version = Appbundler::VERSION
|
9
|
-
spec.authors = ["
|
10
|
-
spec.email = ["dan@
|
9
|
+
spec.authors = ["Dan DeLeo"]
|
10
|
+
spec.email = ["dan@chef.io"]
|
11
11
|
spec.description = %q{Extracts a dependency solution from bundler's Gemfile.lock to speed gem activation}
|
12
12
|
spec.summary = spec.description
|
13
|
-
spec.homepage = ""
|
14
|
-
spec.license = "
|
13
|
+
spec.homepage = "https://github.com/chef/appbundler"
|
14
|
+
spec.license = "Apache-2.0"
|
15
15
|
|
16
16
|
spec.files = `git ls-files`.split($/)
|
17
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
+
spec.required_ruby_version = ">= 2.2.0"
|
22
|
+
|
21
23
|
spec.add_development_dependency "rake"
|
22
24
|
spec.add_development_dependency "rspec", "~> 3.0"
|
23
25
|
spec.add_development_dependency "pry"
|
24
|
-
spec.add_development_dependency "mixlib-shellout", "~>
|
26
|
+
spec.add_development_dependency "mixlib-shellout", "~> 2.0"
|
25
27
|
|
26
28
|
spec.add_dependency "mixlib-cli", "~> 1.4"
|
27
29
|
end
|
data/bin/appbundler
CHANGED
@@ -3,11 +3,10 @@
|
|
3
3
|
Kernel.trap(:INT) { exit 1 }
|
4
4
|
|
5
5
|
begin
|
6
|
-
require
|
6
|
+
require "appbundler/cli"
|
7
7
|
rescue LoadError
|
8
8
|
$:.unshift File.expand_path("../../lib", __FILE__)
|
9
|
-
require
|
9
|
+
require "appbundler/cli"
|
10
10
|
end
|
11
11
|
|
12
12
|
Appbundler::CLI.run(ARGV)
|
13
|
-
|
data/lib/appbundler.rb
CHANGED
data/lib/appbundler/app.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
|
1
|
+
require "bundler"
|
2
|
+
require "fileutils"
|
3
|
+
require "pp"
|
5
4
|
|
6
5
|
module Appbundler
|
7
6
|
|
@@ -11,7 +10,7 @@ module Appbundler
|
|
11
10
|
|
12
11
|
class App
|
13
12
|
|
14
|
-
BINSTUB_FILE_VERSION=1
|
13
|
+
BINSTUB_FILE_VERSION = 1
|
15
14
|
|
16
15
|
attr_reader :bundle_path
|
17
16
|
attr_reader :target_bin_dir
|
@@ -71,7 +70,7 @@ module Appbundler
|
|
71
70
|
end
|
72
71
|
|
73
72
|
def batchfile_stub
|
74
|
-
ruby_relpath_windows = ruby_relative_path.
|
73
|
+
ruby_relpath_windows = ruby_relative_path.tr("/", '\\')
|
75
74
|
<<-E
|
76
75
|
@ECHO OFF
|
77
76
|
"%~dp0\\#{ruby_relpath_windows}" "%~dpn0" %*
|
@@ -89,7 +88,7 @@ E
|
|
89
88
|
end
|
90
89
|
|
91
90
|
def shebang
|
92
|
-
"#!#{ruby}\n"
|
91
|
+
"#!#{ruby} --disable-gems\n"
|
93
92
|
end
|
94
93
|
|
95
94
|
# A specially formatted comment that documents the format version of the
|
@@ -113,13 +112,16 @@ E
|
|
113
112
|
# APPBUNDLER_ALLOW_RVM environment variable to "true". This feature
|
114
113
|
# exists to make tests run correctly on travis.ci (which uses rvm).
|
115
114
|
def env_sanitizer
|
116
|
-
|
115
|
+
<<-EOS
|
116
|
+
ENV["GEM_HOME"] = ENV["GEM_PATH"] = nil unless ENV["APPBUNDLER_ALLOW_RVM"] == "true"
|
117
|
+
require "rubygems"
|
118
|
+
::Gem.clear_paths
|
119
|
+
EOS
|
117
120
|
end
|
118
121
|
|
119
122
|
def runtime_activate
|
120
|
-
|
121
123
|
@runtime_activate ||= begin
|
122
|
-
statements = runtime_dep_specs.map {|s| %Q
|
124
|
+
statements = runtime_dep_specs.map { |s| %Q{gem "#{s.name}", "= #{s.version}"} }
|
123
125
|
activate_code = ""
|
124
126
|
activate_code << env_sanitizer << "\n"
|
125
127
|
activate_code << statements.join("\n") << "\n"
|
@@ -146,7 +148,7 @@ E
|
|
146
148
|
|
147
149
|
def executables
|
148
150
|
spec = app_gemspec
|
149
|
-
spec.executables.map {|e| spec.bin_file(e)}
|
151
|
+
spec.executables.map { |e| spec.bin_file(e) }
|
150
152
|
end
|
151
153
|
|
152
154
|
def runtime_dep_specs
|
@@ -236,9 +238,9 @@ MESSAGE
|
|
236
238
|
false
|
237
239
|
end
|
238
240
|
|
239
|
-
def add_dependencies_from(spec, collected_deps=[])
|
241
|
+
def add_dependencies_from(spec, collected_deps = [])
|
240
242
|
spec.dependencies.each do |dep|
|
241
|
-
next if collected_deps.any? {|s| s.name == dep.name }
|
243
|
+
next if collected_deps.any? { |s| s.name == dep.name }
|
242
244
|
# a bundler dep will not get pinned in Gemfile.lock
|
243
245
|
next if dep.name == "bundler"
|
244
246
|
next_spec = spec_for(dep.name)
|
@@ -249,7 +251,7 @@ MESSAGE
|
|
249
251
|
end
|
250
252
|
|
251
253
|
def spec_for(dep_name)
|
252
|
-
gemfile_lock_specs.find {|s| s.name == dep_name }
|
254
|
+
gemfile_lock_specs.find { |s| s.name == dep_name } || raise("No spec #{dep_name}")
|
253
255
|
end
|
254
256
|
end
|
255
257
|
end
|
data/lib/appbundler/cli.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require "appbundler/version"
|
2
|
+
require "appbundler/app"
|
3
|
+
require "mixlib/cli"
|
4
4
|
|
5
5
|
module Appbundler
|
6
6
|
class CLI
|
@@ -21,11 +21,11 @@ will point to the gem, not your working copy.
|
|
21
21
|
BANNER
|
22
22
|
|
23
23
|
option :version,
|
24
|
-
:short =>
|
25
|
-
:long =>
|
26
|
-
:description =>
|
24
|
+
:short => "-v",
|
25
|
+
:long => "--version",
|
26
|
+
:description => "Show appbundler version",
|
27
27
|
:boolean => true,
|
28
|
-
:proc => lambda {|v| $stdout.puts("Appbundler Version: #{::Appbundler::VERSION}")},
|
28
|
+
:proc => lambda { |v| $stdout.puts("Appbundler Version: #{::Appbundler::VERSION}") },
|
29
29
|
:exit => 0
|
30
30
|
|
31
31
|
option :help,
|
data/lib/appbundler/version.rb
CHANGED
data/spec/appbundler/app_spec.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
1
|
+
require "spec_helper"
|
2
|
+
require "tmpdir"
|
3
|
+
require "fileutils"
|
4
|
+
require "mixlib/shellout"
|
5
|
+
require "appbundler/app"
|
6
6
|
|
7
7
|
describe Appbundler do
|
8
8
|
|
@@ -11,7 +11,7 @@ describe Appbundler do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def double_spec(name, version, dep_names)
|
14
|
-
deps = dep_names.map {|n| double("Bundler::Dependency #{n}", :name => n.to_s) }
|
14
|
+
deps = dep_names.map { |n| double("Bundler::Dependency #{n}", :name => n.to_s) }
|
15
15
|
source = double("Bundler::Source::Rubygems")
|
16
16
|
spec = double("Bundler::LazySpecification '#{name}'", :name => name.to_s, :version => version, :dependencies => deps, :source => source)
|
17
17
|
all_specs << spec
|
@@ -19,7 +19,7 @@ describe Appbundler do
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def shellout!(cmd)
|
22
|
-
s = Mixlib::ShellOut.new(cmd, :env => {"RUBYOPT" => nil, "BUNDLE_GEMFILE" => nil,
|
22
|
+
s = Mixlib::ShellOut.new(cmd, :env => { "RUBYOPT" => nil, "BUNDLE_GEMFILE" => nil, "APPBUNDLER_ALLOW_RVM" => "true" })
|
23
23
|
s.run_command
|
24
24
|
s.error!
|
25
25
|
s
|
@@ -83,7 +83,7 @@ describe Appbundler do
|
|
83
83
|
expect(app.runtime_dep_specs).to include(second_level_dep_a_a)
|
84
84
|
expect(app.runtime_dep_specs).to include(second_level_dep_b_a)
|
85
85
|
expect(app.runtime_dep_specs).to include(second_level_dep_shared)
|
86
|
-
expect(app.runtime_dep_specs.select {|s| s == second_level_dep_shared}.size).to eq(1)
|
86
|
+
expect(app.runtime_dep_specs.select { |s| s == second_level_dep_shared }.size).to eq(1)
|
87
87
|
end
|
88
88
|
|
89
89
|
it "generates gem activation code for the app" do
|
@@ -111,7 +111,12 @@ CODE
|
|
111
111
|
end
|
112
112
|
|
113
113
|
it "generates code to override GEM_HOME and GEM_PATH (e.g., rvm)" do
|
114
|
-
expected =
|
114
|
+
expected = <<-EOS
|
115
|
+
ENV["GEM_HOME"] = ENV["GEM_PATH"] = nil unless ENV["APPBUNDLER_ALLOW_RVM"] == "true"
|
116
|
+
require "rubygems"
|
117
|
+
::Gem.clear_paths
|
118
|
+
EOS
|
119
|
+
|
115
120
|
expect(app.env_sanitizer).to eq(expected)
|
116
121
|
expect(app.runtime_activate).to include(expected)
|
117
122
|
end
|
@@ -129,7 +134,7 @@ CODE
|
|
129
134
|
end
|
130
135
|
|
131
136
|
it "generates batchfile stub code" do
|
132
|
-
expected_batch_code
|
137
|
+
expected_batch_code = <<-E
|
133
138
|
@ECHO OFF
|
134
139
|
"%~dp0\\..\\embedded\\bin\\ruby.exe" "%~dpn0" %*
|
135
140
|
E
|
@@ -183,7 +188,7 @@ E
|
|
183
188
|
end
|
184
189
|
|
185
190
|
context "when created with the example application" do
|
186
|
-
FIXTURES_PATH =
|
191
|
+
FIXTURES_PATH = File.expand_path("../../fixtures/", __FILE__).freeze
|
187
192
|
|
188
193
|
APP_ROOT = File.join(FIXTURES_PATH, "appbundler-example-app").freeze
|
189
194
|
|
@@ -232,9 +237,12 @@ E
|
|
232
237
|
end
|
233
238
|
|
234
239
|
it "generates runtime activation code for the app" do
|
235
|
-
expected_gem_activates= if windows?
|
236
|
-
|
240
|
+
expected_gem_activates = if windows?
|
241
|
+
<<-E
|
237
242
|
ENV["GEM_HOME"] = ENV["GEM_PATH"] = nil unless ENV["APPBUNDLER_ALLOW_RVM"] == "true"
|
243
|
+
require "rubygems"
|
244
|
+
::Gem.clear_paths
|
245
|
+
|
238
246
|
gem "chef", "= 12.4.1"
|
239
247
|
gem "chef-config", "= 12.4.1"
|
240
248
|
gem "mixlib-config", "= 2.2.1"
|
@@ -294,9 +302,12 @@ gem "win32-service", "= 0.8.6"
|
|
294
302
|
gem "windows-api", "= 0.4.4"
|
295
303
|
gem "windows-pr", "= 1.2.4"
|
296
304
|
E
|
297
|
-
|
298
|
-
|
305
|
+
else
|
306
|
+
<<-E
|
299
307
|
ENV["GEM_HOME"] = ENV["GEM_PATH"] = nil unless ENV["APPBUNDLER_ALLOW_RVM"] == "true"
|
308
|
+
require "rubygems"
|
309
|
+
::Gem.clear_paths
|
310
|
+
|
300
311
|
gem "chef", "= 12.4.1"
|
301
312
|
gem "chef-config", "= 12.4.1"
|
302
313
|
gem "mixlib-config", "= 2.2.1"
|
@@ -344,13 +355,13 @@ gem "net-telnet", "= 0.1.1"
|
|
344
355
|
gem "sfl", "= 2.2"
|
345
356
|
gem "syslog-logger", "= 1.6.8"
|
346
357
|
E
|
347
|
-
|
358
|
+
end
|
348
359
|
expect(app.runtime_activate).to include(expected_gem_activates)
|
349
360
|
end
|
350
361
|
|
351
362
|
it "lists the app's executables" do
|
352
363
|
spec = Gem::Specification.find_by_name("appbundler-example-app", "= 1.0.0")
|
353
|
-
expected_executables = %w
|
364
|
+
expected_executables = %w{app-binary-1 app-binary-2}.map do |basename|
|
354
365
|
File.join(spec.gem_dir, "/bin", basename)
|
355
366
|
end
|
356
367
|
expect(app.executables).to match_array(expected_executables)
|
@@ -368,7 +379,7 @@ E
|
|
368
379
|
|
369
380
|
load_binary = executable_content.lines.to_a.last
|
370
381
|
|
371
|
-
expected_load_path = %Q
|
382
|
+
expected_load_path = %Q{Kernel.load(bin_file)\n}
|
372
383
|
|
373
384
|
expect(load_binary).to eq(expected_load_path)
|
374
385
|
end
|
@@ -390,15 +401,15 @@ E
|
|
390
401
|
spec = Gem::Specification.find_by_name("appbundler-example-app", "= 1.0.0")
|
391
402
|
gem_path = spec.gem_dir
|
392
403
|
app.copy_bundler_env
|
393
|
-
expect(File.exists?(File.join(gem_path,
|
404
|
+
expect(File.exists?(File.join(gem_path, "Gemfile.lock"))).to be(true)
|
394
405
|
end
|
395
406
|
|
396
407
|
it "copies over .bundler to the gem directory" do
|
397
408
|
spec = Gem::Specification.find_by_name("appbundler-example-app", "= 1.0.0")
|
398
409
|
gem_path = spec.gem_dir
|
399
410
|
app.copy_bundler_env
|
400
|
-
expect(File.directory?(File.join(gem_path,
|
401
|
-
expect(File.exists?(File.join(gem_path,
|
411
|
+
expect(File.directory?(File.join(gem_path, ".bundle"))).to be(true)
|
412
|
+
expect(File.exists?(File.join(gem_path, ".bundle/config"))).to be(true)
|
402
413
|
end
|
403
414
|
context "and the executable is symlinked to a different directory", :not_supported_on_windows do
|
404
415
|
|
@@ -434,7 +445,7 @@ E
|
|
434
445
|
context "on windows" do
|
435
446
|
|
436
447
|
let(:expected_ruby_relpath) do
|
437
|
-
app.ruby_relative_path.
|
448
|
+
app.ruby_relative_path.tr("/", '\\')
|
438
449
|
end
|
439
450
|
|
440
451
|
let(:expected_batch_code) do
|
@@ -4,13 +4,13 @@ Gem::Specification.new do |spec|
|
|
4
4
|
spec.name = "appbundler-example-app"
|
5
5
|
spec.version = "1.0.0"
|
6
6
|
spec.authors = ["danielsdeleo"]
|
7
|
-
spec.email = ["dan@
|
7
|
+
spec.email = ["dan@chef.io"]
|
8
8
|
spec.description = %q{test fixture app}
|
9
9
|
spec.summary = spec.description
|
10
10
|
spec.homepage = ""
|
11
11
|
spec.license = "Apache2"
|
12
12
|
|
13
|
-
spec.files = Dir.glob("{bin,lib,spec}/**/*").reject {|f| File.directory?(f) }
|
13
|
+
spec.files = Dir.glob("{bin,lib,spec}/**/*").reject { |f| File.directory?(f) }
|
14
14
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
15
15
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
16
16
|
spec.require_paths = ["lib"]
|
@@ -19,4 +19,3 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.add_development_dependency "rake"
|
20
20
|
spec.add_development_dependency "pry"
|
21
21
|
end
|
22
|
-
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: appbundler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- Dan DeLeo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-11-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '2.0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '2.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: mixlib-cli
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,7 +83,7 @@ dependencies:
|
|
83
83
|
description: Extracts a dependency solution from bundler's Gemfile.lock to speed gem
|
84
84
|
activation
|
85
85
|
email:
|
86
|
-
- dan@
|
86
|
+
- dan@chef.io
|
87
87
|
executables:
|
88
88
|
- appbundler
|
89
89
|
extensions: []
|
@@ -113,9 +113,9 @@ files:
|
|
113
113
|
- spec/fixtures/appbundler-example-app/bin/app-binary-2
|
114
114
|
- spec/fixtures/appbundler-example-app/lib/example_app.rb
|
115
115
|
- spec/spec_helper.rb
|
116
|
-
homepage:
|
116
|
+
homepage: https://github.com/chef/appbundler
|
117
117
|
licenses:
|
118
|
-
-
|
118
|
+
- Apache-2.0
|
119
119
|
metadata: {}
|
120
120
|
post_install_message:
|
121
121
|
rdoc_options: []
|
@@ -125,7 +125,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
125
125
|
requirements:
|
126
126
|
- - ">="
|
127
127
|
- !ruby/object:Gem::Version
|
128
|
-
version:
|
128
|
+
version: 2.2.0
|
129
129
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
130
130
|
requirements:
|
131
131
|
- - ">="
|
@@ -133,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
133
133
|
version: '0'
|
134
134
|
requirements: []
|
135
135
|
rubyforge_project:
|
136
|
-
rubygems_version: 2.6.
|
136
|
+
rubygems_version: 2.6.8
|
137
137
|
signing_key:
|
138
138
|
specification_version: 4
|
139
139
|
summary: Extracts a dependency solution from bundler's Gemfile.lock to speed gem activation
|
@@ -149,4 +149,3 @@ test_files:
|
|
149
149
|
- spec/fixtures/appbundler-example-app/bin/app-binary-2
|
150
150
|
- spec/fixtures/appbundler-example-app/lib/example_app.rb
|
151
151
|
- spec/spec_helper.rb
|
152
|
-
has_rdoc:
|