auser-suitcase 0.0.6 → 0.0.7
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/VERSION.yml +2 -2
- data/lib/suitcase/zipper.rb +73 -25
- data/test/suitcase_test.rb +12 -6
- data/test/test_dir/gems/famoseagle-carrot-0.6.0.gem +0 -0
- metadata +5 -3
data/VERSION.yml
CHANGED
data/lib/suitcase/zipper.rb
CHANGED
@@ -61,37 +61,37 @@ module Suitcase
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
end
|
64
|
-
|
65
|
-
|
64
|
+
|
65
|
+
# TODO: MOVE
|
66
|
+
def self.gems(gem_list, o={})
|
66
67
|
require 'rubygems/dependency_installer'
|
67
68
|
gem_list = [gem_list] unless gem_list.is_a?(Array)
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
69
|
+
|
70
|
+
gem_list.each do |g|
|
71
|
+
add find_gem(g, o), "gems"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# Find the gem named named
|
76
|
+
# First, search in the :search_paths passed in via the options
|
77
|
+
# If it's not found there, then search in the locally installed gems
|
78
|
+
# and finally search online if the gem isn't available
|
79
|
+
def self.find_gem(named, o={})
|
80
|
+
require 'rubygems/dependency_installer'
|
72
81
|
|
73
|
-
|
82
|
+
# Look for the gem in a path passed
|
83
|
+
found_path = search_path_for_gem_in_paths(named, o[:search_paths]) if o[:search_paths]
|
84
|
+
return found_path if found_path
|
74
85
|
|
75
|
-
|
76
|
-
|
86
|
+
found_path = find_gem_in_locally_installed_gems(named)
|
87
|
+
return found_path if found_path
|
77
88
|
|
78
|
-
|
79
|
-
|
80
|
-
spec = Gem::SourceIndex.from_installed_gems.find_name(spec).last#.sort_by {|a,b| a.version <=> b.version }.last
|
81
|
-
f = Dir[File.join(Gem.dir, 'cache', "#{spec.full_name}.gem")].first
|
82
|
-
add(f, "gems")
|
83
|
-
end
|
89
|
+
gem_location = o[:temp_path] || "/tmp/gems"
|
90
|
+
ensure_location_exists(gem_location)
|
84
91
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
f = begin
|
89
|
-
Gem::RemoteFetcher.fetcher.download spec, "http://gems.github.com", gem_location
|
90
|
-
rescue Exception => e
|
91
|
-
Gem::RemoteFetcher.fetcher.download spec, url, gem_location
|
92
|
-
end
|
93
|
-
add(f, "gems")
|
94
|
-
end
|
92
|
+
found_path = find_gem_remotely_by_name_and_download_to(named, gem_location)
|
93
|
+
return found_path if found_path
|
94
|
+
nil
|
95
95
|
end
|
96
96
|
|
97
97
|
def self.packages(package_list, package_location="#{Dir.pwd}/packages")
|
@@ -114,6 +114,54 @@ module Suitcase
|
|
114
114
|
def self.add_content_as(content="", filename="", namespace="files")
|
115
115
|
items.merge!({"__p__string#{filename}_#{namespace}".to_sym => {:name => ::File.basename(filename), :content => content, :namespace => namespace}})
|
116
116
|
end
|
117
|
+
|
118
|
+
def self.reset!
|
119
|
+
@items = nil
|
120
|
+
end
|
121
|
+
|
122
|
+
private
|
123
|
+
# Search for the gem in a given path
|
124
|
+
def self.search_path_for_gem_in_paths(named, dirs)
|
125
|
+
fi = dirs.map do |d|
|
126
|
+
q = Dir["#{d}/*"].entries.detect {|fi|fi =~ /#{named}/}
|
127
|
+
q ? q : nil
|
128
|
+
end.compact.first
|
129
|
+
end
|
130
|
+
|
131
|
+
# Search in the locally installed gems
|
132
|
+
def self.find_gem_in_locally_installed_gems(named)
|
133
|
+
locally_installed_gems_list = locally_installed_gems.map {|n,s| s.name }
|
134
|
+
|
135
|
+
locally_installed_gems_list.detect do |g|
|
136
|
+
if g == named
|
137
|
+
spec = locally_installed_gems.find_name(g).last
|
138
|
+
if f = Dir[File.join(Gem.dir, 'cache', "#{spec.full_name}.gem")].first
|
139
|
+
return f
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
nil
|
144
|
+
end
|
145
|
+
|
146
|
+
def self.locally_installed_gems
|
147
|
+
@locally_installed_gems ||= Gem::SourceIndex.from_installed_gems
|
148
|
+
end
|
149
|
+
|
150
|
+
# Find the gem from online, first trying gems.github.com
|
151
|
+
# and then from rubyforge
|
152
|
+
def self.find_gem_remotely_by_name_and_download_to(named, to, o={})
|
153
|
+
# Look for the gems from remote
|
154
|
+
di = Gem::DependencyInstaller.new
|
155
|
+
spec, url = di.find_spec_by_name_and_version(named).first
|
156
|
+
f = begin
|
157
|
+
Gem::RemoteFetcher.fetcher.download spec, "http://gems.github.com", to
|
158
|
+
rescue Exception => e
|
159
|
+
Gem::RemoteFetcher.fetcher.download spec, url, to
|
160
|
+
end
|
161
|
+
return f if f
|
162
|
+
nil
|
163
|
+
end
|
164
|
+
|
117
165
|
|
118
166
|
end
|
119
167
|
end
|
data/test/suitcase_test.rb
CHANGED
@@ -23,15 +23,16 @@ class DependenciesTest < Test::Unit::TestCase
|
|
23
23
|
end
|
24
24
|
should "be able to add directories to the suitcase" do
|
25
25
|
Suitcase::Zipper.add("#{::File.dirname(__FILE__)}/test_dir")
|
26
|
-
assert_equal Suitcase::Zipper.items.size,
|
26
|
+
assert_equal Suitcase::Zipper.items.size, 3
|
27
27
|
assert Suitcase::Zipper.items["test_dir/box.rb"] =~ /test_dir\/box\.rb/
|
28
28
|
end
|
29
29
|
should "be able to add_content_as" do
|
30
30
|
Suitcase::Zipper.add_content_as("hello world", "hello.txt", "files")
|
31
31
|
assert_equal Suitcase::Zipper.items.size, 1
|
32
|
-
|
33
|
-
assert
|
34
|
-
assert
|
32
|
+
fitem = Suitcase::Zipper.items[:"__p__stringhello.txt_files"]
|
33
|
+
assert fitem[:name] == "hello.txt"
|
34
|
+
assert fitem[:content] == "hello world"
|
35
|
+
assert fitem[:namespace] == "files"
|
35
36
|
end
|
36
37
|
should "add the content as a file when build_dir!" do
|
37
38
|
Suitcase::Zipper.add_content_as("hello world", "hello.txt", "files")
|
@@ -45,12 +46,17 @@ class DependenciesTest < Test::Unit::TestCase
|
|
45
46
|
end
|
46
47
|
# UNCOMMENT THESE TO LIVE-TEST THE USAGE
|
47
48
|
should "be able to add gems to the suitcase" do
|
48
|
-
Suitcase::Zipper.gems("rake", Dir.pwd)
|
49
|
+
Suitcase::Zipper.gems("rake", :temp_path => Dir.pwd)
|
49
50
|
Suitcase::Zipper.build_dir! "#{Dir.pwd}/cache"
|
50
51
|
assert ::File.file?(::File.expand_path("#{Dir.pwd}/cache/gems/rake-0.8.4.gem"))
|
51
52
|
end
|
53
|
+
should "be able to add gems to the suitcase with a direct search path" do
|
54
|
+
Suitcase::Zipper.gems("carrot", :temp_path => Dir.pwd, :search_paths => ["#{File.dirname(__FILE__)}/test_dir/gems"])
|
55
|
+
Suitcase::Zipper.build_dir! "#{Dir.pwd}/cache"
|
56
|
+
assert ::File.file?(::File.expand_path("#{Dir.pwd}/cache/gems/famoseagle-carrot-0.6.0.gem"))
|
57
|
+
end
|
52
58
|
should "find the gem online if it is not locally installed" do
|
53
|
-
Suitcase::Zipper.gems("aaronp-meow", Dir.pwd)
|
59
|
+
Suitcase::Zipper.gems("aaronp-meow", :temp_path => Dir.pwd)
|
54
60
|
assert ::File.file?(::File.expand_path("#{Dir.pwd}/cache/aaronp-meow-1.1.0.gem"))
|
55
61
|
end
|
56
62
|
# should "be able to add packages to the suitcase" do
|
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: auser-suitcase
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ari Lerner
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-06-15 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -41,6 +41,8 @@ files:
|
|
41
41
|
- test/suitcase_test.rb
|
42
42
|
- test/test_dir
|
43
43
|
- test/test_dir/box.rb
|
44
|
+
- test/test_dir/gems
|
45
|
+
- test/test_dir/gems/famoseagle-carrot-0.6.0.gem
|
44
46
|
- test/test_dir/test.txt
|
45
47
|
- test/test_helper.rb
|
46
48
|
- LICENSE
|
@@ -69,7 +71,7 @@ requirements: []
|
|
69
71
|
rubyforge_project:
|
70
72
|
rubygems_version: 1.2.0
|
71
73
|
signing_key:
|
72
|
-
specification_version:
|
74
|
+
specification_version: 3
|
73
75
|
summary: TODO
|
74
76
|
test_files: []
|
75
77
|
|