appbundler 0.2.0 → 0.3.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.
- checksums.yaml +4 -4
- data/lib/appbundler/app.rb +36 -4
- data/lib/appbundler/version.rb +1 -1
- data/spec/appbundler/app_spec.rb +22 -3
- data/spec/fixtures/example-app/bin/exclude-me +2 -0
- data/spec/fixtures/example-app/example-app.gemspec +2 -2
- data/spec/spec_helper.rb +5 -0
- metadata +18 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8a1fd7bc87996da30552d62721509d3a484bae9a
|
4
|
+
data.tar.gz: baa24d302fe668c28c6effde641deefb15bd7d4c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 18bf2d0045537e2470b3e207bf8d440735fdeb1d3d176365b70d8c177b366b33aa9f652830da18e45777c014f42c4142ba668cfd9110fdd21ca9ef68e488013a
|
7
|
+
data.tar.gz: bdf6397f23af82894d6abab6a01728ee484b11a4c394f2bcaac88cf7c42767cfd18db858cb6cd9b625f21ada3145e02abefbd6f139935f270a6e77b46e44c030
|
data/lib/appbundler/app.rb
CHANGED
@@ -107,18 +107,50 @@ E
|
|
107
107
|
activate_code = ""
|
108
108
|
activate_code << env_sanitizer << "\n"
|
109
109
|
activate_code << statements.join("\n") << "\n"
|
110
|
-
activate_code << %Q|$:.unshift
|
110
|
+
activate_code << %Q|$:.unshift(File.expand_path("#{relative_app_lib_dir}", File.dirname(__FILE__)))\n|
|
111
111
|
activate_code
|
112
112
|
end
|
113
113
|
end
|
114
114
|
|
115
115
|
def binstub(bin_file)
|
116
|
-
shebang + file_format_comment + runtime_activate +
|
116
|
+
shebang + file_format_comment + runtime_activate + load_statement_for(bin_file)
|
117
|
+
end
|
118
|
+
|
119
|
+
def load_statement_for(bin_file)
|
120
|
+
"Kernel.load(File.expand_path('#{relative_bin_file(bin_file)}', File.dirname(__FILE__)))\n"
|
121
|
+
end
|
122
|
+
|
123
|
+
def relative_bin_file(bin_file)
|
124
|
+
bin_file_pathname = Pathname.new(bin_file)
|
125
|
+
bindir_pathname = Pathname.new(target_bin_dir)
|
126
|
+
bin_file_pathname.relative_path_from(bindir_pathname).to_s
|
117
127
|
end
|
118
128
|
|
119
129
|
def executables
|
120
|
-
|
121
|
-
|
130
|
+
spec_path = ["#{app_root}/#{name}-#{RUBY_PLATFORM}.gemspec",
|
131
|
+
"#{app_root}/#{name}.gemspec"].detect do |f|
|
132
|
+
File.exists?(f)
|
133
|
+
end
|
134
|
+
|
135
|
+
if spec_path
|
136
|
+
spec = nil
|
137
|
+
Dir.chdir(app_root) do
|
138
|
+
spec = Gem::Specification::load(spec_path)
|
139
|
+
end
|
140
|
+
spec.executables.map do |e|
|
141
|
+
File.join(app_root, spec.bindir, e)
|
142
|
+
end
|
143
|
+
else
|
144
|
+
bin_dir_glob = File.join(app_root, "bin", "*")
|
145
|
+
Dir[bin_dir_glob]
|
146
|
+
end
|
147
|
+
|
148
|
+
end
|
149
|
+
|
150
|
+
def relative_app_lib_dir
|
151
|
+
lib_dir_pathname = Pathname.new(app_lib_dir)
|
152
|
+
bindir_pathname = Pathname.new(target_bin_dir)
|
153
|
+
lib_dir_pathname.relative_path_from(bindir_pathname).to_s
|
122
154
|
end
|
123
155
|
|
124
156
|
def app_lib_dir
|
data/lib/appbundler/version.rb
CHANGED
data/spec/appbundler/app_spec.rb
CHANGED
@@ -93,7 +93,16 @@ describe Appbundler do
|
|
93
93
|
end
|
94
94
|
|
95
95
|
it "adds the app code to the load path" do
|
96
|
-
|
96
|
+
# Our test setup makes an executable that needs to load a path in the
|
97
|
+
# fictitious /opt/app/embedded/apps/app/lib path, so the relative path
|
98
|
+
# will traverse all the way to the root and then back up. Therefore, the
|
99
|
+
# expected output is dependent on how many directories deep this source
|
100
|
+
# clone is from the root:
|
101
|
+
relpath_to_root = Pathname.new("/").relative_path_from(Pathname.new(File.dirname(__FILE__))).to_s
|
102
|
+
|
103
|
+
expected_code_path =
|
104
|
+
%Q[$:.unshift(File.expand_path("#{relpath_to_root}/../opt/app/embedded/apps/app/lib", File.dirname(__FILE__)))]
|
105
|
+
expect(app.runtime_activate).to include(expected_code_path)
|
97
106
|
end
|
98
107
|
|
99
108
|
it "generates code to override GEM_HOME and GEM_PATH (e.g., rvm)" do
|
@@ -198,10 +207,14 @@ gem "puma", "= 1.6.3"
|
|
198
207
|
gem "rest-client", "= 1.6.7"
|
199
208
|
E
|
200
209
|
expect(app.runtime_activate).to include(expected_gem_activates)
|
201
|
-
expected_load_path =
|
210
|
+
expected_load_path = %q[$:.unshift(File.expand_path("../../fixtures/example-app/lib", File.dirname(__FILE__)))]
|
202
211
|
expect(app.runtime_activate).to include(expected_load_path)
|
203
212
|
end
|
204
213
|
|
214
|
+
it "should not contain exclude-me as a binary" do
|
215
|
+
expect(app.executables).not_to include(File.join(app_root, "/bin", "exclude-me"))
|
216
|
+
end
|
217
|
+
|
205
218
|
it "lists the app's executables" do
|
206
219
|
expected_executables = %w[app-binary-1 app-binary-2].map do |basename|
|
207
220
|
File.join(app_root, "/bin", basename)
|
@@ -220,15 +233,20 @@ E
|
|
220
233
|
expect(executable_content).to include(app.runtime_activate)
|
221
234
|
|
222
235
|
load_binary = executable_content.lines.to_a.last
|
223
|
-
|
236
|
+
|
237
|
+
expected_load_path = %Q[Kernel.load(File.expand_path('../../fixtures/example-app/bin/app-binary-1', File.dirname(__FILE__)))\n]
|
238
|
+
|
239
|
+
expect(load_binary).to eq(expected_load_path)
|
224
240
|
end
|
225
241
|
|
226
242
|
it "generates executable stubs for all executables in the app" do
|
227
243
|
app.write_executable_stubs
|
228
244
|
binary_1 = File.join(target_bindir, "app-binary-1")
|
229
245
|
binary_2 = File.join(target_bindir, "app-binary-2")
|
246
|
+
excluded_binary = File.join(target_bindir, "exclude-me")
|
230
247
|
expect(File.exist?(binary_1)).to be_true
|
231
248
|
expect(File.exist?(binary_2)).to be_true
|
249
|
+
expect(File.exist?(excluded_binary)).to be_false
|
232
250
|
expect(File.executable?(binary_1)).to be_true
|
233
251
|
expect(File.executable?(binary_1)).to be_true
|
234
252
|
expect(shellout!(binary_1).stdout).to eq("binary 1 ran\n")
|
@@ -261,6 +279,7 @@ E
|
|
261
279
|
expect(IO.read(binary_1)).to eq(expected_batch_code)
|
262
280
|
expect(IO.read(binary_2)).to eq(expected_batch_code)
|
263
281
|
end
|
282
|
+
|
264
283
|
end
|
265
284
|
|
266
285
|
end
|
@@ -10,8 +10,8 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.homepage = ""
|
11
11
|
spec.license = "Apache2"
|
12
12
|
|
13
|
-
spec.files = Dir.glob("{
|
14
|
-
spec.executables =
|
13
|
+
spec.files = Dir.glob("{lib,spec}/**/*").reject {|f| File.directory?(f) }
|
14
|
+
spec.executables = %w(app-binary-1 app-binary-2)
|
15
15
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
16
16
|
spec.require_paths = ["lib"]
|
17
17
|
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,69 +1,69 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: appbundler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- danielsdeleo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-11-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rspec
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '2.13'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '2.13'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: pry
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: mixlib-shellout
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - ~>
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '1.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
68
|
version: '1.0'
|
69
69
|
description: Extracts a dependency solution from bundler's Gemfile.lock to speed gem
|
@@ -75,9 +75,9 @@ executables:
|
|
75
75
|
extensions: []
|
76
76
|
extra_rdoc_files: []
|
77
77
|
files:
|
78
|
-
- .gitignore
|
79
|
-
- .rspec
|
80
|
-
- .travis.yml
|
78
|
+
- ".gitignore"
|
79
|
+
- ".rspec"
|
80
|
+
- ".travis.yml"
|
81
81
|
- Gemfile
|
82
82
|
- LICENSE.txt
|
83
83
|
- README.md
|
@@ -94,6 +94,7 @@ files:
|
|
94
94
|
- spec/fixtures/example-app/README.md
|
95
95
|
- spec/fixtures/example-app/bin/app-binary-1
|
96
96
|
- spec/fixtures/example-app/bin/app-binary-2
|
97
|
+
- spec/fixtures/example-app/bin/exclude-me
|
97
98
|
- spec/fixtures/example-app/example-app.gemspec
|
98
99
|
- spec/fixtures/example-app/lib/example_app.rb
|
99
100
|
- spec/spec_helper.rb
|
@@ -107,17 +108,17 @@ require_paths:
|
|
107
108
|
- lib
|
108
109
|
required_ruby_version: !ruby/object:Gem::Requirement
|
109
110
|
requirements:
|
110
|
-
- -
|
111
|
+
- - ">="
|
111
112
|
- !ruby/object:Gem::Version
|
112
113
|
version: '0'
|
113
114
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
115
|
requirements:
|
115
|
-
- -
|
116
|
+
- - ">="
|
116
117
|
- !ruby/object:Gem::Version
|
117
118
|
version: '0'
|
118
119
|
requirements: []
|
119
120
|
rubyforge_project:
|
120
|
-
rubygems_version: 2.
|
121
|
+
rubygems_version: 2.2.2
|
121
122
|
signing_key:
|
122
123
|
specification_version: 4
|
123
124
|
summary: Extracts a dependency solution from bundler's Gemfile.lock to speed gem activation
|
@@ -128,6 +129,7 @@ test_files:
|
|
128
129
|
- spec/fixtures/example-app/README.md
|
129
130
|
- spec/fixtures/example-app/bin/app-binary-1
|
130
131
|
- spec/fixtures/example-app/bin/app-binary-2
|
132
|
+
- spec/fixtures/example-app/bin/exclude-me
|
131
133
|
- spec/fixtures/example-app/example-app.gemspec
|
132
134
|
- spec/fixtures/example-app/lib/example_app.rb
|
133
135
|
- spec/spec_helper.rb
|