mortar 0.9.2 → 0.9.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/lib/monkey_patch/bundler/bundler.rb +14 -0
- data/lib/mortar/plugin.rb +46 -15
- data/lib/mortar/version.rb +1 -1
- data/spec/mortar/plugin_spec.rb +10 -0
- metadata +130 -138
@@ -0,0 +1,14 @@
|
|
1
|
+
# This is a monkey patch
|
2
|
+
#
|
3
|
+
# we need a method to reset the global configuration of Bundler. If bundler is already loaded,
|
4
|
+
# in the case that mortar is run itself through bundler, then we need to reset to allow us to properly
|
5
|
+
# install the bundle in the correct location.
|
6
|
+
module Bundler
|
7
|
+
class << self
|
8
|
+
def nuke_configuration
|
9
|
+
[:@bundle_path, :@settings].each { |var|
|
10
|
+
self.instance_variable_set var, nil
|
11
|
+
}
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/mortar/plugin.rb
CHANGED
@@ -33,22 +33,31 @@ module Mortar
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def self.without_bundler_env
|
36
|
+
# Raises error on failure
|
37
|
+
Mortar::Plugin.ensure_bundler_installed
|
38
|
+
|
36
39
|
original_env = ENV.to_hash
|
37
40
|
ENV.delete("BUNDLE_GEMFILE")
|
38
41
|
ENV.delete("BUNDLE_PATH")
|
39
42
|
ENV.delete("BUNDLE_BIN_PATH")
|
40
43
|
ENV.delete("RUBYOPT")
|
44
|
+
|
45
|
+
# Use monkey patched method to remove existing bundler configuration.
|
46
|
+
Bundler.nuke_configuration
|
47
|
+
|
41
48
|
yield
|
42
49
|
ensure
|
43
50
|
ENV.replace(original_env.to_hash)
|
44
51
|
end
|
45
52
|
|
46
|
-
|
53
|
+
# Internal: Ensures bundler is installed, if it isn't it'll raise an error
|
54
|
+
def self.ensure_bundler_installed
|
47
55
|
# TODO: Deal with the bundler as a runtime dependency issue
|
48
56
|
# before moving these require statements to the top.
|
49
57
|
begin
|
50
58
|
require 'bundler/cli'
|
51
59
|
require 'bundler/friendly_errors'
|
60
|
+
require 'monkey_patch/bundler/bundler'
|
52
61
|
rescue LoadError => e
|
53
62
|
raise <<-ERROR
|
54
63
|
Unable to install this plugin. Make sure you have bundler installed:
|
@@ -57,19 +66,36 @@ $ gem install bundler
|
|
57
66
|
|
58
67
|
ERROR
|
59
68
|
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.install_bundle
|
60
72
|
|
61
73
|
out = StringIO.new
|
62
74
|
$stdout = out
|
63
75
|
begin
|
64
|
-
|
65
|
-
Bundler.ui = Bundler::UI::Shell.new({})
|
66
|
-
Bundler.ui.level = "silent"
|
76
|
+
# WARNING! These 4 lines are a monkey patch.
|
67
77
|
Bundler.settings[:path] = "bundle"
|
78
|
+
Bundler.settings[:disable_shared_gems] = '1'
|
79
|
+
Bundler.bundle_path = nil
|
80
|
+
Bundler.send(:configure_gem_home_and_path)
|
81
|
+
|
82
|
+
bundle_def = Bundler.definition({})
|
83
|
+
|
84
|
+
if Gem::Version.new(Bundler::VERSION) < Gem::Version.new("1.3.0")
|
85
|
+
Bundler.ui = Bundler::UI::Shell.new(Thor::Base.shell.new)
|
86
|
+
else
|
87
|
+
Bundler.ui = Bundler::UI::Shell.new({})
|
88
|
+
Bundler.ui.level = "silent"
|
89
|
+
end
|
90
|
+
|
68
91
|
Bundler::Installer.install(Bundler.root, bundle_def, {
|
69
92
|
:standalone => [],
|
93
|
+
:disabled_shared_gems => '1'
|
70
94
|
})
|
71
95
|
result = true
|
72
96
|
rescue StandardError => e
|
97
|
+
puts e.message
|
98
|
+
puts e.backtrace
|
73
99
|
out.write e.message
|
74
100
|
result = false
|
75
101
|
end
|
@@ -143,20 +169,25 @@ ERROR
|
|
143
169
|
end
|
144
170
|
|
145
171
|
def install_dependencies
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
172
|
+
begin
|
173
|
+
Dir.chdir(path) do
|
174
|
+
Mortar::Plugin.without_bundler_env do
|
175
|
+
ENV["BUNDLE_GEMFILE"] = File.expand_path("Gemfile", path)
|
176
|
+
if File.exists? ENV["BUNDLE_GEMFILE"]
|
177
|
+
unless Mortar::Plugin.install_bundle
|
178
|
+
FileUtils.rm_rf path
|
179
|
+
raise Mortar::Plugin::ErrorInstallingDependencies, <<-ERROR
|
180
|
+
Unable to install dependencies for #{name}.
|
181
|
+
Error logs stored to #{Plugin.directory}/plugin_install.log
|
182
|
+
Refer to the documentation for this plugin for help.
|
183
|
+
ERROR
|
184
|
+
end
|
157
185
|
end
|
158
186
|
end
|
159
187
|
end
|
188
|
+
rescue StandardError => e
|
189
|
+
FileUtils.rm_rf path
|
190
|
+
raise e
|
160
191
|
end
|
161
192
|
end
|
162
193
|
|
data/lib/mortar/version.rb
CHANGED
data/spec/mortar/plugin_spec.rb
CHANGED
@@ -143,6 +143,16 @@ EOS
|
|
143
143
|
lambda { Plugin.new(plugin_folder).install }.should raise_error Mortar::Plugin::ErrorInstallingDependencies
|
144
144
|
File.exists?("#{Plugin.directory}/plugin_install.log").should be_true
|
145
145
|
end
|
146
|
+
|
147
|
+
it "should clean plugin if bundler isn't installed" do
|
148
|
+
mock(Plugin).ensure_bundler_installed { raise "Bundler not installed! Whoops!" }
|
149
|
+
plugin_folder = "/tmp/mortar_plugin"
|
150
|
+
FileUtils.mkdir_p(plugin_folder)
|
151
|
+
File.open(plugin_folder + '/Gemfile', 'w') { |f| f.write "# dummy content" }
|
152
|
+
`cd #{plugin_folder} && git init && echo 'test' > README && git add . && git commit -m 'my plugin'`
|
153
|
+
lambda { Plugin.new(plugin_folder).install }.should raise_error StandardError
|
154
|
+
File.exist?("#{@sandbox}/mortar_plugin").should be_false
|
155
|
+
end
|
146
156
|
end
|
147
157
|
|
148
158
|
describe "when there are plugin load errors" do
|
metadata
CHANGED
@@ -1,164 +1,167 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: mortar
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.3
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 9
|
9
|
-
- 2
|
10
|
-
version: 0.9.2
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Mortar Data
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2013-07-23 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: mortar-api-ruby
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
18
|
+
requirements:
|
26
19
|
- - ~>
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: 1
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
- 6
|
32
|
-
- 3
|
20
|
+
- !ruby/object:Gem::Version
|
33
21
|
version: 0.6.3
|
34
22
|
type: :runtime
|
35
|
-
version_requirements: *id001
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: netrc
|
38
23
|
prerelease: false
|
39
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
25
|
none: false
|
41
|
-
requirements:
|
26
|
+
requirements:
|
42
27
|
- - ~>
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.6.3
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: netrc
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0.7'
|
49
38
|
type: :runtime
|
50
|
-
version_requirements: *id002
|
51
|
-
- !ruby/object:Gem::Dependency
|
52
|
-
name: launchy
|
53
39
|
prerelease: false
|
54
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
55
41
|
none: false
|
56
|
-
requirements:
|
42
|
+
requirements:
|
57
43
|
- - ~>
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0.7'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: launchy
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '2.1'
|
64
54
|
type: :runtime
|
65
|
-
version_requirements: *id003
|
66
|
-
- !ruby/object:Gem::Dependency
|
67
|
-
name: excon
|
68
55
|
prerelease: false
|
69
|
-
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.1'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: excon
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
70
65
|
none: false
|
71
|
-
requirements:
|
66
|
+
requirements:
|
72
67
|
- - ~>
|
73
|
-
- !ruby/object:Gem::Version
|
74
|
-
|
75
|
-
segments:
|
76
|
-
- 0
|
77
|
-
- 15
|
78
|
-
version: "0.15"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0.15'
|
79
70
|
type: :development
|
80
|
-
version_requirements: *id004
|
81
|
-
- !ruby/object:Gem::Dependency
|
82
|
-
name: fakefs
|
83
71
|
prerelease: false
|
84
|
-
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0.15'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: fakefs
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
85
81
|
none: false
|
86
|
-
requirements:
|
82
|
+
requirements:
|
87
83
|
- - ~>
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
hash: 11
|
90
|
-
segments:
|
91
|
-
- 0
|
92
|
-
- 4
|
93
|
-
- 2
|
84
|
+
- !ruby/object:Gem::Version
|
94
85
|
version: 0.4.2
|
95
86
|
type: :development
|
96
|
-
version_requirements: *id005
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: gem-release
|
99
87
|
prerelease: false
|
100
|
-
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
101
89
|
none: false
|
102
|
-
requirements:
|
103
|
-
- -
|
104
|
-
- !ruby/object:Gem::Version
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 0.4.2
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: gem-release
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
109
102
|
type: :development
|
110
|
-
version_requirements: *id006
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: rake
|
113
103
|
prerelease: false
|
114
|
-
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: rake
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
115
113
|
none: false
|
116
|
-
requirements:
|
117
|
-
- -
|
118
|
-
- !ruby/object:Gem::Version
|
119
|
-
|
120
|
-
segments:
|
121
|
-
- 0
|
122
|
-
version: "0"
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
123
118
|
type: :development
|
124
|
-
version_requirements: *id007
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: rr
|
127
119
|
prerelease: false
|
128
|
-
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: rr
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
129
|
none: false
|
130
|
-
requirements:
|
131
|
-
- -
|
132
|
-
- !ruby/object:Gem::Version
|
133
|
-
|
134
|
-
segments:
|
135
|
-
- 0
|
136
|
-
version: "0"
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
137
134
|
type: :development
|
138
|
-
version_requirements: *id008
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: rspec
|
141
135
|
prerelease: false
|
142
|
-
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
143
137
|
none: false
|
144
|
-
requirements:
|
145
|
-
- -
|
146
|
-
- !ruby/object:Gem::Version
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: rspec
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ! '>='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
151
150
|
type: :development
|
152
|
-
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
153
158
|
description: Client library and command-line tool to interact with the Mortar service.
|
154
159
|
email: support@mortardata.com
|
155
|
-
executables:
|
160
|
+
executables:
|
156
161
|
- mortar
|
157
162
|
extensions: []
|
158
|
-
|
159
163
|
extra_rdoc_files: []
|
160
|
-
|
161
|
-
files:
|
164
|
+
files:
|
162
165
|
- README.md
|
163
166
|
- bin/mortar
|
164
167
|
- css/illustrate.css
|
@@ -168,6 +171,7 @@ files:
|
|
168
171
|
- js/jquery.transit.js
|
169
172
|
- js/mortar-table.js
|
170
173
|
- js/zero_clipboard.js
|
174
|
+
- lib/monkey_patch/bundler/bundler.rb
|
171
175
|
- lib/mortar.rb
|
172
176
|
- lib/mortar/auth.rb
|
173
177
|
- lib/mortar/cli.rb
|
@@ -264,38 +268,26 @@ files:
|
|
264
268
|
- spec/support/display_message_matcher.rb
|
265
269
|
homepage: http://mortardata.com/
|
266
270
|
licenses: []
|
267
|
-
|
268
271
|
post_install_message:
|
269
272
|
rdoc_options: []
|
270
|
-
|
271
|
-
require_paths:
|
273
|
+
require_paths:
|
272
274
|
- lib
|
273
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
275
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
274
276
|
none: false
|
275
|
-
requirements:
|
276
|
-
- -
|
277
|
-
- !ruby/object:Gem::Version
|
278
|
-
hash: 57
|
279
|
-
segments:
|
280
|
-
- 1
|
281
|
-
- 8
|
282
|
-
- 7
|
277
|
+
requirements:
|
278
|
+
- - ! '>='
|
279
|
+
- !ruby/object:Gem::Version
|
283
280
|
version: 1.8.7
|
284
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
281
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
285
282
|
none: false
|
286
|
-
requirements:
|
287
|
-
- -
|
288
|
-
- !ruby/object:Gem::Version
|
289
|
-
|
290
|
-
segments:
|
291
|
-
- 0
|
292
|
-
version: "0"
|
283
|
+
requirements:
|
284
|
+
- - ! '>='
|
285
|
+
- !ruby/object:Gem::Version
|
286
|
+
version: '0'
|
293
287
|
requirements: []
|
294
|
-
|
295
288
|
rubyforge_project:
|
296
|
-
rubygems_version: 1.8.
|
289
|
+
rubygems_version: 1.8.23
|
297
290
|
signing_key:
|
298
291
|
specification_version: 3
|
299
292
|
summary: Client library and CLI to interact with the Mortar service.
|
300
293
|
test_files: []
|
301
|
-
|