isolate 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ require "autotest/restart"
2
+
3
+ Autotest.add_hook :initialize do |at|
4
+ at.testlib = "minitest/autorun"
5
+ end
@@ -0,0 +1,3 @@
1
+ === 1.0.0 / 2009-09-21
2
+
3
+ * Birthday!
@@ -0,0 +1,10 @@
1
+ .autotest
2
+ CHANGELOG.rdoc
3
+ Manifest.txt
4
+ README.rdoc
5
+ Rakefile
6
+ lib/isolate.rb
7
+ test/fixtures/with-hoe/specifications/hoe-2.3.3.gemspec
8
+ test/fixtures/with-hoe/specifications/rake-0.8.7.gemspec
9
+ test/fixtures/with-hoe/specifications/rubyforge-1.0.4.gemspec
10
+ test/test_isolate.rb
@@ -0,0 +1,162 @@
1
+ = Isolate
2
+
3
+ * http://github.com/jbarnette/isolate
4
+
5
+ == Description
6
+
7
+ Isolate is a very simple RubyGems sandbox. It restricts GEM_PATH and
8
+ GEM_HOME, and provides a DSL for expressing your code's runtime Gem
9
+ dependencies.
10
+
11
+ While Isolate doesn't make any assumptions about what sort of code
12
+ you're writing, it was extracted from a few Rails apps, so it's
13
+ naturally going to be most useful with stuff like Rails, Merb, or
14
+ Sinatra.
15
+
16
+ Isolate is very, very, very stupid simple. For a much more
17
+ full-featured Gem bundler, check out Yehuda Katz and Carl Lerche's
18
+ Bundler[http://github.com/wycats/bundler]: It does a lot of fancy AOT
19
+ dependency resolution, supports non-gem resources, and is probably a
20
+ better fit for you. For a widely used Gem manager and installer, check
21
+ out Chad Wooley's GemInstaller[http://geminstaller.rubyforge.org].
22
+
23
+ YMMV, but I haven't tried Isolate with anything older than RubyGems
24
+ 1.3.5.
25
+
26
+ == Examples
27
+
28
+ === Defining Your Isolated Environment
29
+
30
+ The DSL's pretty easy: <tt>gem</tt> is similar to RubyGems'
31
+ identically-named method. Version specifiers are optional, and any
32
+ hash args tacked on to the end are passed through to
33
+ Gem::DependencyInstaller as flags.
34
+
35
+ require "isolate"
36
+
37
+ Isolate.gems "vendor/isolated" do
38
+ gem "johnson", "~> 1.1" # or maybe...
39
+ gem "jbarnette-johnson", :source => "http://gems.github.com"
40
+ end
41
+
42
+ At the end of the <tt>Isolate.gems</tt> block, you're completely
43
+ isolated. <tt>GEM_PATH</tt> and <tt>GEM_HOME</tt> are set, and all
44
+ your specified gems have been activated.
45
+
46
+ === Conditionals
47
+
48
+ Sometimes different sets of gems are appropriate at different
49
+ times. Isolate allows you to restrict gems by 'environment' (which is
50
+ really just a string passed in when things are activated).
51
+
52
+ Isolate.gems "vendor/isolated" do
53
+ gem "intercession"
54
+
55
+ environment :test, :cucumber do
56
+ gem "mocha"
57
+ end
58
+ end
59
+
60
+ Unsurprisingly, the <tt>mocha</tt> gem will only be activated in the
61
+ <tt>test</tt> and <tt>cucumber</tt> environments. See the Rails
62
+ example below for an example of how to use <tt>RAILS_ENV</tt> to set
63
+ your environment.
64
+
65
+ === Installing Isolated Gems
66
+
67
+ Isolate.gems "vendor/isolated", :install => true, :verbose => true do
68
+ gem "intercession"
69
+ end
70
+
71
+ Isolate can install your gems automatically. Just pass an
72
+ <tt>:install</tt> option to <tt>Isolate.gems</tt>. Pass
73
+ <tt>:verbose</tt> if you want to see what's going on.
74
+
75
+ === A Rails Example
76
+
77
+ Here's a quick example (extracted from a real project) of how to use
78
+ Isolate with Rails. This project doesn't use vendored Rails, and
79
+ doesn't want to depend on any system gems (except isolate, of course).
80
+
81
+ Gem dependencies are defined in <tt>config/preinitializer.rb</tt>. If
82
+ you want, you could just as easily put them in
83
+ <tt>config/{gems,deps,whatever}.rb</tt>, just make sure it's loaded in
84
+ the preinitializer:
85
+
86
+ require "isolate"
87
+
88
+ Isolate.gems "vendor/isolated", :install => true, :verbose => true do
89
+ gem "rails", "= 2.2.2"
90
+
91
+ # async emails!
92
+ gem "ar_mailer", "~> 1.3", '>= 1.3.3'
93
+
94
+ # Facebook integration
95
+ gem "facebooker", ">= 1.0.31"
96
+
97
+ # Google contacts integration
98
+ gem "gmail_contacts", "~> 1.7"
99
+
100
+ # View templates
101
+ gem "haml", "~> 2.0"
102
+
103
+ # Session as model
104
+ gem "intercession", "~> 1.0"
105
+
106
+ # XML/HTML parsing in Facebooker and tests
107
+ gem "nokogiri", ">= 1.2.3"
108
+
109
+ # Twitter authentication
110
+ gem "oauth", "~> 0.3"
111
+
112
+ environment :development, :test do
113
+ gem "modelizer" # easy model factories
114
+ gem "sqlite3-ruby" # database support
115
+ gem "vlad" # deployment
116
+ gem "webrat" # integration tests
117
+ end
118
+
119
+ environment :cucumber do
120
+ gem "cucumber" # stories!
121
+ end
122
+ end
123
+
124
+ Since this is in the preinitializer, Isolate will install and activate
125
+ the fundamental gems before Rails loads.
126
+
127
+ This is early enough in Rails' lifecycle that <tt>RAILS_ENV</tt> isn't
128
+ set, so we need a way to activate gems for the current
129
+ environment. Let's add one line to <tt>config/environment.rb</tt>,
130
+ right below where <tt>boot.rb</tt> is required:
131
+
132
+ require File.join(File.dirname(__FILE__), 'boot')
133
+ Isolate.activate RAILS_ENV
134
+
135
+ Pow. Isolated!
136
+
137
+ == Installation
138
+
139
+ $ gem install isolate
140
+
141
+ == License
142
+
143
+ Copyright 2009 John Barnette (jbarnette@rubyforge.org)
144
+
145
+ Permission is hereby granted, free of charge, to any person obtaining
146
+ a copy of this software and associated documentation files (the
147
+ 'Software'), to deal in the Software without restriction, including
148
+ without limitation the rights to use, copy, modify, merge, publish,
149
+ distribute, sublicense, and/or sell copies of the Software, and to
150
+ permit persons to whom the Software is furnished to do so, subject to
151
+ the following conditions:
152
+
153
+ The above copyright notice and this permission notice shall be
154
+ included in all copies or substantial portions of the Software.
155
+
156
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
157
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
158
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
159
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
160
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
161
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
162
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,13 @@
1
+ require "rubygems"
2
+ require "hoe"
3
+
4
+ Hoe.plugin :doofus, :git
5
+
6
+ Hoe.spec "isolate" do
7
+ developer "John Barnette", "jbarnette@rubyforge.org"
8
+
9
+ self.extra_rdoc_files = Dir["*.rdoc"]
10
+ self.history_file = "CHANGELOG.rdoc"
11
+ self.readme_file = "README.rdoc"
12
+ self.testlib = :minitest
13
+ end
@@ -0,0 +1,190 @@
1
+ require "rubygems/dependency_installer"
2
+ require "rubygems/requirement"
3
+
4
+ # Restricts +GEM_PATH+ and +GEM_HOME+ and provides a DSL for
5
+ # expressing your code's runtime Gem dependencies. See README.rdoc for
6
+ # rationale, limitations, and examples.
7
+
8
+ class Isolate
9
+ Entry = Struct.new :name, :requirement, :environments, :options # :nodoc:
10
+ VERSION = "1.0.0" # :nodoc:
11
+
12
+ attr_reader :entries # :nodoc:
13
+
14
+ attr_reader :path # :nodoc:
15
+
16
+ # Activate (and possibly install) gems for a specific
17
+ # +environment+. This allows two-stage isolation, which is necessary
18
+ # for stuff like Rails. See README.rdoc for a detailed example.
19
+
20
+ def self.activate environment
21
+ instance.activate environment
22
+ end
23
+
24
+ # Declare an isolated RubyGems environment, installed in +path+. The
25
+ # block given will be <tt>instance_eval</tt>ed, see Isolate#gem and
26
+ # Isolate#environment for the sort of stuff you can do.
27
+ #
28
+ # Option defaults:
29
+ #
30
+ # { :install => false, :verbose => false }
31
+
32
+ def self.gems path, options = {}, &block
33
+ @@instance = new path, options, &block
34
+ @@instance.activate
35
+ end
36
+
37
+ @@instance = nil
38
+
39
+ def self.instance # :nodoc:
40
+ @@instance
41
+ end
42
+
43
+ # Poke RubyGems, we've probably monkeyed with a bunch of paths and
44
+ # suchlike. Clears paths, loaded specs, and source indexes.
45
+
46
+ def self.refresh # :nodoc:
47
+ Gem.loaded_specs.clear
48
+ Gem.clear_paths
49
+ Gem.source_index.refresh!
50
+ end
51
+
52
+ # Create a new Isolate instance. See Isolate.gems for the public
53
+ # API. Don't use this constructor directly.
54
+
55
+ def initialize path, options = {}, &block
56
+ @enabled = false
57
+ @entries = []
58
+ @environments = []
59
+ @install = options[:install]
60
+ @path = path
61
+ @verbose = options[:verbose]
62
+
63
+ instance_eval(&block) if block_given?
64
+ end
65
+
66
+ def activate environment = nil # :nodoc:
67
+ enable unless enabled?
68
+
69
+ env = environment.to_s if environment
70
+ install environment if install?
71
+
72
+ entries.each do |e|
73
+ if e.environments.empty? || e.environments.include?(env)
74
+ Gem.activate e.name, *e.requirement.as_list
75
+ end
76
+ end
77
+
78
+ self
79
+ end
80
+
81
+ def disable # :nodoc:
82
+ return self unless enabled?
83
+
84
+ ENV["GEM_PATH"] = @old_gem_path
85
+ ENV["GEM_HOME"] = @old_gem_home
86
+ ENV["RUBYOPT"] = @old_ruby_opt
87
+
88
+ $LOAD_PATH.replace @old_load_path
89
+
90
+ @enabled = false
91
+
92
+ self.class.refresh
93
+ self
94
+ end
95
+
96
+ def enable &block # :nodoc:
97
+ return self if enabled?
98
+
99
+ @old_gem_path = ENV["GEM_PATH"]
100
+ @old_gem_home = ENV["GEM_HOME"]
101
+ @old_ruby_opt = ENV["RUBYOPT"]
102
+ @old_load_path = $LOAD_PATH.dup
103
+
104
+ $LOAD_PATH.reject! { |p| Gem.path.any? { |gp| p.include?(gp) } }
105
+
106
+ # HACK: Gotta keep isolate explicitly in the LOAD_PATH in
107
+ # subshells, and the only way I can think of to do that is by
108
+ # abusing RUBYOPT.
109
+
110
+ ENV["RUBYOPT"] = "#{ENV['RUBYOPT']} -I#{File.dirname(__FILE__)}"
111
+ ENV["GEM_PATH"] = ENV["GEM_HOME"] = path
112
+
113
+ self.class.refresh
114
+
115
+ @enabled = true
116
+ begin; yield; ensure disable end if block_given?
117
+ self
118
+ end
119
+
120
+ def enabled? # :nodoc:
121
+ @enabled
122
+ end
123
+
124
+ # Restricts +gem+ calls inside +block+ to a set of +environments+.
125
+
126
+ def environment *environments, &block
127
+ old = @environments.dup
128
+ @environments.concat environments.map { |e| e.to_s }
129
+
130
+ begin
131
+ yield
132
+ ensure
133
+ @environments = old
134
+ end
135
+ end
136
+
137
+ # Express a gem dependency. Works pretty much like RubyGems' +gem+
138
+ # method, but respects +environment+ and doesn't activate 'til
139
+ # later.
140
+
141
+ def gem name, *requirements
142
+ options = Hash === requirements.last ? requirements.pop : {}
143
+
144
+ requirement = requirements.empty? ?
145
+ Gem::Requirement.default :
146
+ Gem::Requirement.new(requirements)
147
+
148
+ entry = Entry.new name, requirement, @environments.dup, options
149
+
150
+ @entries << entry
151
+ entry
152
+ end
153
+
154
+ def install environment = nil # :nodoc:
155
+ env = environment.to_s if environment
156
+
157
+ installable = entries.select do |e|
158
+ !Gem.available?(e.name, *e.requirement.as_list) &&
159
+ (env.nil? || e.environments.include?(env))
160
+ end
161
+
162
+ installable.each_with_index do |e, i|
163
+ if verbose?
164
+ padding = installable.size.to_s.size
165
+ progress = "[%0#{padding}d/%s]" % [i + 1, installable.size]
166
+ warn "#{progress} Isolating #{e.name} (#{e.requirement})."
167
+ end
168
+
169
+ old = Gem.sources.dup
170
+ source = e.options.delete :source
171
+ Gem.sources = Array(source) if source
172
+ options = e.options.merge :install_dir => path
173
+ installer = Gem::DependencyInstaller.new options
174
+
175
+ installer.install e.name, e.requirement
176
+ Gem.sources = old
177
+ end
178
+
179
+ Gem.source_index.refresh!
180
+ self
181
+ end
182
+
183
+ def install? # :nodoc:
184
+ @install
185
+ end
186
+
187
+ def verbose? # :nodoc:
188
+ @verbose
189
+ end
190
+ end
@@ -0,0 +1,58 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{hoe}
5
+ s.version = "2.3.3"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.3.1") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Ryan Davis"]
9
+ s.date = %q{2009-08-07}
10
+ s.default_executable = %q{sow}
11
+ s.description = %q{Hoe is a rake/rubygems helper for project Rakefiles. It helps generate
12
+ rubygems and includes a dynamic plug-in system allowing for easy
13
+ extensibility. Hoe ships with plug-ins for all your usual project
14
+ tasks including rdoc generation, testing, packaging, and deployment.
15
+
16
+ Plug-ins Provided:
17
+
18
+ * Hoe::Clean
19
+ * Hoe::Debug
20
+ * Hoe::Deps
21
+ * Hoe::Flay
22
+ * Hoe::Flog
23
+ * Hoe::Inline
24
+ * Hoe::Package
25
+ * Hoe::Publish
26
+ * Hoe::RCov
27
+ * Hoe::Signing
28
+ * Hoe::Test
29
+
30
+ See class rdoc for help. Hint: ri Hoe}
31
+ s.email = ["ryand-ruby@zenspider.com"]
32
+ s.executables = ["sow"]
33
+ s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.txt"]
34
+ s.files = ["History.txt", "Manifest.txt", "README.txt", "Rakefile", "bin/sow", "lib/hoe.rb", "lib/hoe/clean.rb", "lib/hoe/debug.rb", "lib/hoe/deps.rb", "lib/hoe/flay.rb", "lib/hoe/flog.rb", "lib/hoe/inline.rb", "lib/hoe/package.rb", "lib/hoe/publish.rb", "lib/hoe/rake.rb", "lib/hoe/rcov.rb", "lib/hoe/signing.rb", "lib/hoe/test.rb", "template/.autotest.erb", "template/History.txt.erb", "template/Manifest.txt.erb", "template/README.txt.erb", "template/Rakefile.erb", "template/bin/file_name.erb", "template/lib/file_name.rb.erb", "template/test/test_file_name.rb.erb", "test/test_hoe.rb"]
35
+ s.homepage = %q{http://rubyforge.org/projects/seattlerb/}
36
+ s.rdoc_options = ["--main", "README.txt"]
37
+ s.require_paths = ["lib"]
38
+ s.rubyforge_project = %q{seattlerb}
39
+ s.rubygems_version = %q{1.3.5}
40
+ s.summary = %q{Hoe is a rake/rubygems helper for project Rakefiles}
41
+ s.test_files = ["test/test_hoe.rb"]
42
+
43
+ if s.respond_to? :specification_version then
44
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
45
+ s.specification_version = 3
46
+
47
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
48
+ s.add_runtime_dependency(%q<rubyforge>, [">= 1.0.4"])
49
+ s.add_runtime_dependency(%q<rake>, [">= 0.8.7"])
50
+ else
51
+ s.add_dependency(%q<rubyforge>, [">= 1.0.4"])
52
+ s.add_dependency(%q<rake>, [">= 0.8.7"])
53
+ end
54
+ else
55
+ s.add_dependency(%q<rubyforge>, [">= 1.0.4"])
56
+ s.add_dependency(%q<rake>, [">= 0.8.7"])
57
+ end
58
+ end
@@ -0,0 +1,32 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{rake}
5
+ s.version = "0.8.7"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Jim Weirich"]
9
+ s.date = %q{2009-05-14}
10
+ s.default_executable = %q{rake}
11
+ s.description = %q{Rake is a Make-like program implemented in Ruby. Tasks and dependencies are specified in standard Ruby syntax.}
12
+ s.email = %q{jim@weirichhouse.org}
13
+ s.executables = ["rake"]
14
+ s.extra_rdoc_files = ["README", "MIT-LICENSE", "TODO", "CHANGES", "doc/command_line_usage.rdoc", "doc/glossary.rdoc", "doc/proto_rake.rdoc", "doc/rakefile.rdoc", "doc/rational.rdoc", "doc/release_notes/rake-0.4.14.rdoc", "doc/release_notes/rake-0.4.15.rdoc", "doc/release_notes/rake-0.5.0.rdoc", "doc/release_notes/rake-0.5.3.rdoc", "doc/release_notes/rake-0.5.4.rdoc", "doc/release_notes/rake-0.6.0.rdoc", "doc/release_notes/rake-0.7.0.rdoc", "doc/release_notes/rake-0.7.1.rdoc", "doc/release_notes/rake-0.7.2.rdoc", "doc/release_notes/rake-0.7.3.rdoc", "doc/release_notes/rake-0.8.0.rdoc", "doc/release_notes/rake-0.8.2.rdoc", "doc/release_notes/rake-0.8.3.rdoc", "doc/release_notes/rake-0.8.4.rdoc", "doc/release_notes/rake-0.8.5.rdoc", "doc/release_notes/rake-0.8.6.rdoc", "doc/release_notes/rake-0.8.7.rdoc"]
15
+ s.files = ["install.rb", "CHANGES", "MIT-LICENSE", "Rakefile", "README", "TODO", "bin/rake", "lib/rake/alt_system.rb", "lib/rake/classic_namespace.rb", "lib/rake/clean.rb", "lib/rake/contrib/compositepublisher.rb", "lib/rake/contrib/ftptools.rb", "lib/rake/contrib/publisher.rb", "lib/rake/contrib/rubyforgepublisher.rb", "lib/rake/contrib/sshpublisher.rb", "lib/rake/contrib/sys.rb", "lib/rake/gempackagetask.rb", "lib/rake/loaders/makefile.rb", "lib/rake/packagetask.rb", "lib/rake/rake_test_loader.rb", "lib/rake/rdoctask.rb", "lib/rake/ruby182_test_unit_fix.rb", "lib/rake/runtest.rb", "lib/rake/tasklib.rb", "lib/rake/testtask.rb", "lib/rake/win32.rb", "lib/rake.rb", "test/capture_stdout.rb", "test/check_expansion.rb", "test/check_no_expansion.rb", "test/contrib/test_sys.rb", "test/data/rakelib/test1.rb", "test/data/rbext/rakefile.rb", "test/filecreation.rb", "test/functional.rb", "test/in_environment.rb", "test/rake_test_setup.rb", "test/reqfile.rb", "test/reqfile2.rb", "test/session_functional.rb", "test/shellcommand.rb", "test/test_application.rb", "test/test_clean.rb", "test/test_definitions.rb", "test/test_earlytime.rb", "test/test_extension.rb", "test/test_file_creation_task.rb", "test/test_file_task.rb", "test/test_filelist.rb", "test/test_fileutils.rb", "test/test_ftp.rb", "test/test_invocation_chain.rb", "test/test_makefile_loader.rb", "test/test_multitask.rb", "test/test_namespace.rb", "test/test_package_task.rb", "test/test_pathmap.rb", "test/test_pseudo_status.rb", "test/test_rake.rb", "test/test_rdoc_task.rb", "test/test_require.rb", "test/test_rules.rb", "test/test_task_arguments.rb", "test/test_task_manager.rb", "test/test_tasklib.rb", "test/test_tasks.rb", "test/test_test_task.rb", "test/test_top_level_functions.rb", "test/test_win32.rb", "test/data/imports/deps.mf", "test/data/sample.mf", "test/data/chains/Rakefile", "test/data/default/Rakefile", "test/data/dryrun/Rakefile", "test/data/file_creation_task/Rakefile", "test/data/imports/Rakefile", "test/data/multidesc/Rakefile", "test/data/namespace/Rakefile", "test/data/statusreturn/Rakefile", "test/data/unittest/Rakefile", "test/data/unittest/subdir", "doc/command_line_usage.rdoc", "doc/example", "doc/example/a.c", "doc/example/b.c", "doc/example/main.c", "doc/example/Rakefile1", "doc/example/Rakefile2", "doc/glossary.rdoc", "doc/jamis.rb", "doc/proto_rake.rdoc", "doc/rake.1.gz", "doc/rakefile.rdoc", "doc/rational.rdoc", "doc/release_notes", "doc/release_notes/rake-0.4.14.rdoc", "doc/release_notes/rake-0.4.15.rdoc", "doc/release_notes/rake-0.5.0.rdoc", "doc/release_notes/rake-0.5.3.rdoc", "doc/release_notes/rake-0.5.4.rdoc", "doc/release_notes/rake-0.6.0.rdoc", "doc/release_notes/rake-0.7.0.rdoc", "doc/release_notes/rake-0.7.1.rdoc", "doc/release_notes/rake-0.7.2.rdoc", "doc/release_notes/rake-0.7.3.rdoc", "doc/release_notes/rake-0.8.0.rdoc", "doc/release_notes/rake-0.8.2.rdoc", "doc/release_notes/rake-0.8.3.rdoc", "doc/release_notes/rake-0.8.4.rdoc", "doc/release_notes/rake-0.8.5.rdoc", "doc/release_notes/rake-0.8.6.rdoc", "doc/release_notes/rake-0.8.7.rdoc"]
16
+ s.homepage = %q{http://rake.rubyforge.org}
17
+ s.rdoc_options = ["--line-numbers", "--main", "README", "--title", "Rake -- Ruby Make"]
18
+ s.require_paths = ["lib"]
19
+ s.rubyforge_project = %q{rake}
20
+ s.rubygems_version = %q{1.3.3}
21
+ s.summary = %q{Ruby based make-like utility.}
22
+
23
+ if s.respond_to? :specification_version then
24
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
25
+ s.specification_version = 2
26
+
27
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
28
+ else
29
+ end
30
+ else
31
+ end
32
+ end
@@ -0,0 +1,44 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{rubyforge}
5
+ s.version = "1.0.4"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Ryan Davis", "Eric Hodel", "Ara T Howard"]
9
+ s.date = %q{2009-07-21}
10
+ s.default_executable = %q{rubyforge}
11
+ s.description = %q{A script which automates a limited set of rubyforge operations.
12
+
13
+ * Run 'rubyforge help' for complete usage.
14
+ * Setup: For first time users AND upgrades to 0.4.0:
15
+ * rubyforge setup (deletes your username and password, so run sparingly!)
16
+ * edit ~/.rubyforge/user-config.yml
17
+ * rubyforge config
18
+ * For all rubyforge upgrades, run 'rubyforge config' to ensure you have latest.
19
+ * Don't forget to login! logging in will store a cookie in your
20
+ .rubyforge directory which expires after a time. always run the
21
+ login command before any operation that requires authentication,
22
+ such as uploading a package.}
23
+ s.email = ["ryand-ruby@zenspider.com", "drbrain@segment7.net", "ara.t.howard@gmail.com"]
24
+ s.executables = ["rubyforge"]
25
+ s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.txt"]
26
+ s.files = ["History.txt", "Manifest.txt", "README.txt", "Rakefile", "bin/rubyforge", "lib/rubyforge.rb", "lib/rubyforge/client.rb", "lib/rubyforge/cookie_manager.rb", "test/test_rubyforge.rb", "test/test_rubyforge_client.rb", "test/test_rubyforge_cookie_manager.rb"]
27
+ s.homepage = %q{http://codeforpeople.rubyforge.org/rubyforge/}
28
+ s.rdoc_options = ["--main", "README.txt"]
29
+ s.require_paths = ["lib"]
30
+ s.rubyforge_project = %q{codeforpeople}
31
+ s.rubygems_version = %q{1.3.5}
32
+ s.summary = %q{A script which automates a limited set of rubyforge operations}
33
+ s.test_files = ["test/test_rubyforge.rb", "test/test_rubyforge_client.rb", "test/test_rubyforge_cookie_manager.rb"]
34
+
35
+ if s.respond_to? :specification_version then
36
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
37
+ s.specification_version = 3
38
+
39
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
40
+ else
41
+ end
42
+ else
43
+ end
44
+ end
@@ -0,0 +1,197 @@
1
+ require "minitest/autorun"
2
+ require "rubygems/dependency_installer"
3
+ require "rubygems/requirement"
4
+ require "isolate"
5
+
6
+ class TestIsolate < MiniTest::Unit::TestCase
7
+ def setup
8
+ @isolate = Isolate.new "tmp/gems"
9
+ end
10
+
11
+ def teardown
12
+ @isolate.disable
13
+ Isolate.instance.disable if Isolate.instance
14
+ FileUtils.rm_rf "tmp/gems"
15
+ end
16
+
17
+ def test_self_gems
18
+ assert_nil Isolate.instance
19
+
20
+ Isolate.gems "test/fixtures/with-hoe" do
21
+ gem "hoe"
22
+ end
23
+
24
+ refute_nil Isolate.instance
25
+ assert_equal "test/fixtures/with-hoe", Isolate.instance.path
26
+ assert_equal "hoe", Isolate.instance.entries.first.name
27
+ end
28
+
29
+ def test_activate
30
+ @isolate = Isolate.new "test/fixtures/with-hoe"
31
+
32
+ assert_nil Gem.loaded_specs["hoe"]
33
+
34
+ @isolate.gem "hoe"
35
+ @isolate.activate
36
+
37
+ refute_nil Gem.loaded_specs["hoe"]
38
+ end
39
+
40
+ def test_activate_environment
41
+ @isolate = Isolate.new "test/fixtures/with-hoe"
42
+ @isolate.gem "rubyforge"
43
+
44
+ @isolate.environment "borg" do
45
+ @isolate.gem "hoe"
46
+ end
47
+
48
+ @isolate.activate
49
+ assert_nil Gem.loaded_specs["hoe"]
50
+ refute_nil Gem.loaded_specs["rubyforge"]
51
+ end
52
+
53
+ def test_activate_environment_explicit
54
+ @isolate = Isolate.new "test/fixtures/with-hoe"
55
+
56
+ @isolate.gem "rubyforge"
57
+
58
+ @isolate.environment "borg" do
59
+ @isolate.gem "hoe"
60
+ end
61
+
62
+ @isolate.activate "borg"
63
+ refute_nil Gem.loaded_specs["hoe"]
64
+ refute_nil Gem.loaded_specs["rubyforge"]
65
+ end
66
+
67
+ def test_activate_install
68
+ @isolate = Isolate.new "tmp/gems", :install => true
69
+
70
+ @isolate.gem "foo"
71
+
72
+ # rescuing because activate, well, actually tries to activate
73
+ begin; @isolate.activate; rescue Gem::LoadError; end
74
+
75
+ assert_equal ["foo", Gem::Requirement.default],
76
+ Gem::DependencyInstaller.last_install
77
+ end
78
+
79
+ def test_activate_ret
80
+ assert_equal @isolate, @isolate.activate
81
+ end
82
+
83
+ def test_disable
84
+ home, path = ENV.values_at "GEM_HOME", "GEM_PATH"
85
+ load_path = $LOAD_PATH.dup
86
+
87
+ @isolate.enable
88
+
89
+ refute_equal home, ENV["GEM_HOME"]
90
+ refute_equal path, ENV["GEM_PATH"]
91
+ refute_equal load_path, $LOAD_PATH
92
+
93
+ @isolate.disable
94
+
95
+ assert_equal home, ENV["GEM_HOME"]
96
+ assert_equal path, ENV["GEM_PATH"]
97
+ assert_equal load_path, $LOAD_PATH
98
+ end
99
+
100
+ def test_disable_ret
101
+ assert_equal @isolate, @isolate.disable
102
+ end
103
+
104
+ def test_enable
105
+ assert !Gem.find_files("minitest/unit.rb").empty?,
106
+ "There's a minitest/unit in the current env, since we're running it."
107
+
108
+ @isolate.enable
109
+
110
+ assert_equal @isolate.path, ENV["GEM_PATH"]
111
+ assert_equal @isolate.path, ENV["GEM_HOME"]
112
+
113
+ assert_equal [], Gem.find_files("minitest/unit.rb"),
114
+ "Can't find minitest/unit now, 'cause we're activated!"
115
+
116
+ assert Gem.loaded_specs.empty?
117
+ assert_equal [@isolate.path], Gem.path
118
+ end
119
+
120
+ def test_enable_block
121
+ path = Gem.path.dup
122
+ refute_equal [@isolate.path], Gem.path
123
+
124
+ @isolate.enable do
125
+ assert_equal [@isolate.path], Gem.path
126
+ end
127
+
128
+ assert_equal path, Gem.path
129
+ end
130
+
131
+ def test_enable_ret
132
+ assert_equal @isolate, @isolate.enable
133
+ end
134
+
135
+ def test_environment
136
+ @isolate.gem "none"
137
+
138
+ @isolate.environment "test", "ci" do
139
+ @isolate.gem "test-ci"
140
+
141
+ @isolate.environment "production" do
142
+ @isolate.gem "test-ci-production"
143
+ end
144
+ end
145
+
146
+ none, test_ci, test_ci_production = @isolate.entries
147
+
148
+ assert_equal [], none.environments
149
+ assert_equal %w(test ci), test_ci.environments
150
+ assert_equal %w(test ci production), test_ci_production.environments
151
+ end
152
+
153
+ def test_gem
154
+ g = @isolate.gem "foo"
155
+ assert @isolate.entries.include?(g)
156
+
157
+ assert_equal "foo", g.name
158
+ assert_equal Gem::Requirement.create(">= 0"), g.requirement
159
+ end
160
+
161
+ def test_gem_multi_requirements
162
+ g = @isolate.gem "foo", "= 1.0", "< 2.0"
163
+ assert_equal Gem::Requirement.create(["= 1.0", "< 2.0"]), g.requirement
164
+ end
165
+
166
+ def test_gem_options
167
+ g = @isolate.gem "foo", :source => "somewhere"
168
+ assert_equal "somewhere", g.options[:source]
169
+ end
170
+
171
+ def test_initialize
172
+ i = Isolate.new "foo/gems"
173
+ assert_equal "foo/gems", i.path
174
+ end
175
+
176
+ def test_initialize_options
177
+ refute @isolate.install?
178
+ refute @isolate.verbose?
179
+
180
+ i = Isolate.new "foo/gems", :install => true, :verbose => true
181
+ assert i.install?
182
+ assert i.verbose?
183
+ end
184
+ end
185
+
186
+ # Gem::DependencyInstaller#install is brutally stubbed.
187
+
188
+ class Gem::DependencyInstaller
189
+ @@last_install = nil
190
+ def self.last_install; @@last_install end
191
+
192
+ alias old_install install
193
+
194
+ def install name, requirement
195
+ @@last_install = [name, requirement]
196
+ end
197
+ end
metadata ADDED
@@ -0,0 +1,95 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: isolate
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - John Barnette
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-09-21 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: hoe
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 2.3.3
24
+ version:
25
+ description: |-
26
+ Isolate is a very simple RubyGems sandbox. It restricts GEM_PATH and
27
+ GEM_HOME, and provides a DSL for expressing your code's runtime Gem
28
+ dependencies.
29
+
30
+ While Isolate doesn't make any assumptions about what sort of code
31
+ you're writing, it was extracted from a few Rails apps, so it's
32
+ naturally going to be most useful with stuff like Rails, Merb, or
33
+ Sinatra.
34
+
35
+ Isolate is very, very, very stupid simple. For a much more
36
+ full-featured Gem bundler, check out Yehuda Katz and Carl Lerche's
37
+ Bundler[http://github.com/wycats/bundler]: It does a lot of fancy AOT
38
+ dependency resolution, supports non-gem resources, and is probably a
39
+ better fit for you. For a widely used Gem manager and installer, check
40
+ out Chad Wooley's GemInstaller[http://geminstaller.rubyforge.org].
41
+
42
+ YMMV, but I haven't tried Isolate with anything older than RubyGems
43
+ 1.3.5.
44
+ email:
45
+ - jbarnette@rubyforge.org
46
+ executables: []
47
+
48
+ extensions: []
49
+
50
+ extra_rdoc_files:
51
+ - Manifest.txt
52
+ - CHANGELOG.rdoc
53
+ - README.rdoc
54
+ files:
55
+ - .autotest
56
+ - CHANGELOG.rdoc
57
+ - Manifest.txt
58
+ - README.rdoc
59
+ - Rakefile
60
+ - lib/isolate.rb
61
+ - test/fixtures/with-hoe/specifications/hoe-2.3.3.gemspec
62
+ - test/fixtures/with-hoe/specifications/rake-0.8.7.gemspec
63
+ - test/fixtures/with-hoe/specifications/rubyforge-1.0.4.gemspec
64
+ - test/test_isolate.rb
65
+ has_rdoc: true
66
+ homepage: http://github.com/jbarnette/isolate
67
+ licenses: []
68
+
69
+ post_install_message:
70
+ rdoc_options:
71
+ - --main
72
+ - README.rdoc
73
+ require_paths:
74
+ - lib
75
+ required_ruby_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: "0"
80
+ version:
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: "0"
86
+ version:
87
+ requirements: []
88
+
89
+ rubyforge_project: isolate
90
+ rubygems_version: 1.3.5
91
+ signing_key:
92
+ specification_version: 3
93
+ summary: Isolate is a very simple RubyGems sandbox
94
+ test_files:
95
+ - test/test_isolate.rb