mortar 0.9.2 → 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -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
- def self.install_bundle
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
- bundle_def = Bundler.definition({})
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
- Dir.chdir(path) do
147
- Mortar::Plugin.without_bundler_env do
148
- ENV["BUNDLE_GEMFILE"] = File.expand_path("Gemfile", path)
149
- if File.exists? ENV["BUNDLE_GEMFILE"]
150
- unless Mortar::Plugin.install_bundle
151
- FileUtils.rm_rf path
152
- raise Mortar::Plugin::ErrorInstallingDependencies, <<-ERROR
153
- Unable to install dependencies for #{name}.
154
- Error logs stored to #{Plugin.directory}/plugin_install.log
155
- Refer to the documentation for this plugin for help.
156
- ERROR
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
 
@@ -16,5 +16,5 @@
16
16
 
17
17
  module Mortar
18
18
  # see http://semver.org/
19
- VERSION = "0.9.2"
19
+ VERSION = "0.9.3"
20
20
  end
@@ -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
- hash: 63
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
- date: 2013-07-16 00:00:00 Z
19
- dependencies:
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
- prerelease: false
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
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
40
25
  none: false
41
- requirements:
26
+ requirements:
42
27
  - - ~>
43
- - !ruby/object:Gem::Version
44
- hash: 5
45
- segments:
46
- - 0
47
- - 7
48
- version: "0.7"
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
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
55
41
  none: false
56
- requirements:
42
+ requirements:
57
43
  - - ~>
58
- - !ruby/object:Gem::Version
59
- hash: 1
60
- segments:
61
- - 2
62
- - 1
63
- version: "2.1"
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
- requirement: &id004 !ruby/object:Gem::Requirement
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
- hash: 21
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
- requirement: &id005 !ruby/object:Gem::Requirement
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
- requirement: &id006 !ruby/object:Gem::Requirement
88
+ version_requirements: !ruby/object:Gem::Requirement
101
89
  none: false
102
- requirements:
103
- - - ">="
104
- - !ruby/object:Gem::Version
105
- hash: 3
106
- segments:
107
- - 0
108
- version: "0"
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
- requirement: &id007 !ruby/object:Gem::Requirement
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
- hash: 3
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
- requirement: &id008 !ruby/object:Gem::Requirement
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
- hash: 3
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
- requirement: &id009 !ruby/object:Gem::Requirement
136
+ version_requirements: !ruby/object:Gem::Requirement
143
137
  none: false
144
- requirements:
145
- - - ">="
146
- - !ruby/object:Gem::Version
147
- hash: 3
148
- segments:
149
- - 0
150
- version: "0"
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
- version_requirements: *id009
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
- hash: 3
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.25
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
-