toastyapps-gembox 1.1.2 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/gembox.rb +17 -4
- data/lib/templates/dispatch.rb +30 -9
- data/test/test_gembox.rb +25 -6
- metadata +1 -1
data/lib/gembox.rb
CHANGED
@@ -3,8 +3,15 @@ require 'yaml'
|
|
3
3
|
require 'erb'
|
4
4
|
|
5
5
|
class Gembox
|
6
|
-
VERSION = '1.
|
7
|
-
attr_accessor :dir
|
6
|
+
VERSION = '1.2.0'
|
7
|
+
attr_accessor :dir, :cfg
|
8
|
+
attr_accessor :cfg
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@cfg_path = `cd ~/ && pwd`.chomp + "/.gemboxrc"
|
12
|
+
load_config
|
13
|
+
end
|
14
|
+
|
8
15
|
def self.create(args)
|
9
16
|
|
10
17
|
dir = Dir.new(Dir.pwd+"/"+args.shift).path
|
@@ -23,13 +30,12 @@ class Gembox
|
|
23
30
|
|
24
31
|
def self.shell(args)
|
25
32
|
generate_gems_yaml
|
26
|
-
|
27
33
|
system("sh shell.bash")
|
28
34
|
end
|
29
35
|
|
30
36
|
private
|
31
37
|
|
32
|
-
def generate_gems_yaml
|
38
|
+
def self.generate_gems_yaml
|
33
39
|
data = `gem query -d`.split("\n")
|
34
40
|
gemdata = {}
|
35
41
|
index = 'NULL'
|
@@ -56,6 +62,13 @@ class Gembox
|
|
56
62
|
end
|
57
63
|
end
|
58
64
|
File.open("gems.yaml", "w") { |f| f.puts gemdata.to_yaml }
|
65
|
+
|
66
|
+
def load_config
|
67
|
+
@cfg = load_yaml(@cfg_path)
|
68
|
+
end
|
69
|
+
|
70
|
+
def load_yaml path
|
71
|
+
File.exists?(path) ? YAML.load(File.open(path)) : nil
|
59
72
|
end
|
60
73
|
|
61
74
|
end
|
data/lib/templates/dispatch.rb
CHANGED
@@ -13,17 +13,38 @@ when 'query'
|
|
13
13
|
when 'symlink'
|
14
14
|
data = YAML.load(File.open('<%= @dir %>/gems.yaml').read)
|
15
15
|
gem_name = args.shift
|
16
|
-
if data[gem_name].keys.length
|
16
|
+
if data[gem_name] && data[gem_name].keys.length > 0
|
17
17
|
FileUtils.mkdir_p('<%= @dir %>/gems/gems/')
|
18
18
|
FileUtils.mkdir_p('<%= @dir %>/gems/specifications/')
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
19
|
+
versions = []
|
20
|
+
if data[gem_name].keys.length == 1
|
21
|
+
versions << data[gem_name].keys[0]
|
22
|
+
elsif data[gem_name].keys.length > 1
|
23
|
+
puts 'Select gem to symlink:'
|
24
|
+
index = 1
|
25
|
+
data[gem_name].keys.each do |key|
|
26
|
+
puts " #{index}. #{gem_name}-#{key}"
|
27
|
+
index += 1
|
28
|
+
end
|
29
|
+
puts " #{index}. All versions"
|
30
|
+
print "> "
|
31
|
+
choice = gets
|
32
|
+
if choice == index
|
33
|
+
versions = data[gem_name].keys
|
34
|
+
else
|
35
|
+
versions << data[gem_name].keys[choice.to_i - 1]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
versions.each do |version|
|
40
|
+
gemdir = data[gem_name][version]
|
41
|
+
gemname = gem_name+'-'+version
|
42
|
+
gem_file = gemdir + '/gems/' + gemname
|
43
|
+
spec_file = gemdir + '/specifications/' + gemname + '.gemspec'
|
44
|
+
`ln -s #{gem_file} <%= @dir %>/gems/gems/#{gemname} && ln -s #{spec_file} <%= @dir %>/gems/specifications/#{gemname}.gemspec`
|
45
|
+
puts "Successfully symlinked #{gemname}"
|
46
|
+
end
|
47
|
+
|
27
48
|
else
|
28
49
|
puts "Could not find gem #{gem_name}"
|
29
50
|
end
|
data/test/test_gembox.rb
CHANGED
@@ -1,8 +1,27 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'rubygems'
|
2
|
+
require 'spec'
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + "/../lib/gembox")
|
3
4
|
|
4
|
-
|
5
|
-
|
6
|
-
|
5
|
+
describe Gembox do
|
6
|
+
before(:each) do
|
7
|
+
@gb = Gembox.new
|
8
|
+
@cfg_file_path = File.expand_path(File.dirname(__FILE__)) + '/sample.gemboxrc.yml'
|
7
9
|
end
|
8
|
-
|
10
|
+
|
11
|
+
it "should load the current users config file" do
|
12
|
+
cfg = @gb.load_yaml @cfg_file_path
|
13
|
+
cfg.should_not be_nil
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should skip config file if not found" do
|
17
|
+
cfg = @gb.load_yaml "~/some/random/path"
|
18
|
+
cfg.should be_nil
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should find .gemboxrc" do
|
22
|
+
home = `cd ~/ && pwd`.chomp
|
23
|
+
cfg = @gb.load_yaml "#{home}/.gemboxrc"
|
24
|
+
cfg.should_not be_nil
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|