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.
@@ -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
-