toastyapps-gembox 1.3.3 → 1.3.4

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,4 +1,4 @@
1
- === 1.0.0 / 2009-03-19
1
+ === 0.0.1 / 2009-03-19
2
2
 
3
3
  * 1 major enhancement
4
4
 
data/bin/gembox CHANGED
@@ -5,5 +5,5 @@ require 'gembox'
5
5
  if ARGV.length > 0
6
6
  args = ARGV
7
7
  command = args.shift
8
- Gembox.send(command, args)
8
+ Gembox.new.send(command, args)
9
9
  end
data/lib/gembox.rb CHANGED
@@ -3,7 +3,7 @@ require 'yaml'
3
3
  require 'erb'
4
4
 
5
5
  class Gembox
6
- VERSION = '1.3.3'
6
+ VERSION = '1.3.4'
7
7
  attr_accessor :dir, :cfg, :box_name
8
8
 
9
9
  def initialize
@@ -11,22 +11,22 @@ class Gembox
11
11
  load_config
12
12
  end
13
13
 
14
- def self.help
15
- puts File.read("../README.txt")
14
+
15
+ def help(args)
16
+ puts File.read("../README.textile")
16
17
  end
17
-
18
- def self.create(args)
18
+
19
+ def create(args)
19
20
  args.each do |box_name|
20
21
  @box_name = box_name
21
22
  @dir = "#{ENV['HOME']}/.gembox/#{box_name}"
22
-
23
+
23
24
  if File.exists?(@dir)
24
25
  puts "Box #{box_name} already exists"
25
26
  else
26
27
  FileUtils.mkdir_p @dir # make gembox folder
27
28
  FileUtils.mkdir_p "#{@dir}/usr/bin"
28
- FileUtils.mkdir_p "#{@dir}/gems"
29
-
29
+
30
30
  File.open("#{@dir}/.gemrc", 'w') { |f| f.puts ERB.new(File.open(File.dirname(__FILE__)+"/templates/gemrc").read).result(binding) } unless File.exists?("#{@dir}/.gemrc")
31
31
  File.open("#{@dir}/.bashrc", "w") { |f| f.puts ERB.new(File.open(File.dirname(__FILE__)+"/templates/bashrc").read).result(binding) } unless File.exists?("#{@dir}/.bashrc")
32
32
  File.open("#{@dir}/shell.bash", "w") {|f| f.puts ERB.new(File.open(File.dirname(__FILE__)+"/templates/shell.bash").read).result(binding) } unless File.exists?("#{@dir}/shell.bash")
@@ -35,19 +35,15 @@ class Gembox
35
35
  end
36
36
  end
37
37
  end
38
-
39
- def self.list(args)
38
+
39
+ def list(args)
40
40
  puts "Current Boxes:\n"
41
41
  Dir.foreach("#{ENV['HOME']}/.gembox") do |file|
42
- puts " #{file}" if file !~ /^\./
42
+ puts " #{file}" if file !~ /^\./ && File.directory?("#{ENV['HOME']}/.gembox/#{file}")
43
43
  end
44
44
  end
45
-
46
- def self.del(args)
47
- delete(args)
48
- end
49
-
50
- def self.delete(args)
45
+
46
+ def delete(args)
51
47
  args.each do |box_name|
52
48
  @dir = "#{ENV['HOME']}/.gembox/#{box_name}"
53
49
  if File.exists?(@dir)
@@ -58,12 +54,8 @@ class Gembox
58
54
  end
59
55
  end
60
56
  end
61
-
62
- def self.sh(args)
63
- shell(args)
64
- end
65
-
66
- def self.shell(args)
57
+
58
+ def shell(args)
67
59
  box_name = args.shift
68
60
  @dir = "#{ENV['HOME']}/.gembox/#{box_name}"
69
61
  if File.exists?(@dir)
@@ -73,10 +65,10 @@ class Gembox
73
65
  puts "Box #{box_name} does not exist"
74
66
  end
75
67
  end
76
-
68
+
77
69
  private
78
-
79
- def self.generate_gems_yaml(file)
70
+
71
+ def generate_gems_yaml(file)
80
72
  data = `gem query -d`.split("\n")
81
73
  gemdata = {}
82
74
  index = 'NULL'
@@ -108,9 +100,37 @@ class Gembox
108
100
  def load_config
109
101
  @cfg = load_yaml(@cfg_path)
110
102
  end
111
-
103
+
112
104
  def load_yaml path
113
105
  File.exists?(path) ? YAML.load(File.open(path)) : nil
114
106
  end
115
107
 
108
+ def method_missing(method, args)
109
+ if method.to_s =~ /^--/
110
+ new_args = [method.to_s]
111
+ args.each do |arg|
112
+ if arg =~ /^--/
113
+ new_args << arg
114
+ else
115
+ method = arg
116
+ end
117
+ end
118
+ args = new_args
119
+ end
120
+ if !self.respond_to?(method)
121
+ @dir = "#{ENV['HOME']}/.gembox/#{method}"
122
+ if args.include?("--create")
123
+ create([method] << args.delete("--create"))
124
+ end
125
+ if File.exists?(@dir)
126
+ shell([method] << args)
127
+ end
128
+ else
129
+ self.send(method, args)
130
+ end
131
+ end
132
+
133
+ alias_method :sh, :shell
134
+ alias_method :rm, :delete
135
+ alias_method :ls, :list
116
136
  end
data/lib/templates/bashrc CHANGED
@@ -1,7 +1,7 @@
1
1
  PS1="gembox-<%= @box_name %>:\w> "
2
2
  export PATH=<%= @dir %>/usr/bin:$PATH
3
3
  alias gem='ruby <%= @dir %>/dispatch.rb'
4
- export GEM_PATH=<%= @dir %>/gems
5
- export GEM_HOME=<%= @dir %>/gems
4
+ export GEM_PATH=<%= @dir %>
5
+ export GEM_HOME=<%= @dir %>
6
6
 
7
7
  ruby <%= @dir %>/dispatch.rb load_config
@@ -2,62 +2,115 @@
2
2
  require 'rubygems'
3
3
  require 'yaml'
4
4
  require 'fileutils'
5
- args=ARGV
6
- command=args.shift
7
- case command
8
- when 'install'
9
- system("gem --config-file <%= @dir %>/.gemrc #{command} --bindir <%= @dir %>/usr/bin #{ARGV.join(' ')}")
10
- when 'load_config'
11
- cfg_path = "#{ENV['HOME']}/.gembox/config.yml"
12
- if File.exists?(cfg_path)
13
- data = YAML.load(File.open(cfg_path).read)
14
- if data['symlink']
15
- data['symlink'].each do |symlink|
16
- if `gem query -i -n #{symlink}`.chomp == 'false'
17
- system("ruby <%= @dir %>/dispatch.rb symlink #{symlink}")
5
+
6
+ class Dispatch
7
+
8
+ DIR = "<%= @dir %>"
9
+
10
+ class << self
11
+ def install(args)
12
+ system("gem --config-file #{DIR}/.gemrc install --bindir #{DIR}/usr/bin #{ARGV.join(' ')}")
13
+ end
14
+
15
+ def load_config(args)
16
+ cfg_path = "#{ENV['HOME']}/.gembox/config.yml"
17
+ if File.exists?(cfg_path)
18
+ data = YAML.load(File.open(cfg_path).read)
19
+ if data['symlink']
20
+ data['symlink'].each do |symlink|
21
+ if `gem query -i -n #{symlink}`.chomp == 'false'
22
+ system("ruby #{DIR}/dispatch.rb symlink #{symlink}")
23
+ end
24
+ end
18
25
  end
19
26
  end
20
27
  end
21
- end
22
- when 'symlink'
23
- data = YAML.load(File.open('<%= @dir %>/gems.yaml').read)
24
- args.each do |gem_name|
25
- if data[gem_name] && data[gem_name].keys.length > 0
26
- FileUtils.mkdir_p('<%= @dir %>/gems/gems/')
27
- FileUtils.mkdir_p('<%= @dir %>/gems/specifications/')
28
+
29
+ def unsymlink(args)
30
+ gem_name = args.shift
31
+ data = `gem query -d -n #{gem_name}`.strip.split("\n")
28
32
  versions = []
29
- if data[gem_name].keys.length == 1
30
- versions << data[gem_name].keys[0]
31
- elsif data[gem_name].keys.length > 1
32
- puts 'Select gem to symlink:'
33
- index = 1
34
- data[gem_name].keys.each do |key|
35
- puts " #{index}. #{gem_name}-#{key}"
36
- index += 1
33
+ data.each do |line|
34
+ if line =~ /^[a-z]/i
35
+ versions << line.match(/\((.*?)\)/).captures[0]
37
36
  end
38
- puts " #{index}. All versions"
39
- print "> "
40
- choice = gets
41
- if choice == index
42
- versions = data[gem_name].keys
37
+ end
38
+ if versions.length == 1
39
+ version = versions[0]
40
+ if `ls -la #{DIR}/gems/ | grep #{gem_name}-#{version}` =~ /^l/
41
+ `rm #{DIR}/gems/#{gem_name}-#{version} && rm #{DIR}/specifications/#{gem_name}-#{version}.gemspec`
42
+ puts "Gem #{gem_name} is been unsymlinked"
43
43
  else
44
- versions << data[gem_name].keys[choice.to_i - 1]
44
+ puts "Gem #{gem_name} is installed, but not symlinked"
45
45
  end
46
+ elsif versions.length > 1
47
+ puts "more"
48
+ else
49
+ puts "Gem #{gem_name} is not installed"
46
50
  end
51
+ end
52
+
53
+ def symlink(args)
54
+ data = YAML.load(File.open("#{DIR}/gems.yaml").read)
55
+ args.each do |gem_name|
56
+ if data[gem_name] && data[gem_name].keys.length > 0
57
+ FileUtils.mkdir_p("#{DIR}/gems/")
58
+ FileUtils.mkdir_p("#{DIR}/specifications/")
59
+ versions = []
60
+ if data[gem_name].keys.length == 1
61
+ versions << data[gem_name].keys[0]
62
+ elsif data[gem_name].keys.length > 1
63
+ puts 'Select gem to symlink:'
64
+ index = 1
65
+ data[gem_name].keys.each do |key|
66
+ puts " #{index}. #{gem_name}-#{key}"
67
+ index += 1
68
+ end
69
+ puts " #{index}. All versions"
70
+ print "> "
71
+ choice = gets
72
+ if choice == index
73
+ versions = data[gem_name].keys
74
+ else
75
+ versions << data[gem_name].keys[choice.to_i - 1]
76
+ end
77
+ end
47
78
 
48
- versions.each do |version|
49
- gemdir = data[gem_name][version]
50
- gemname = gem_name+'-'+version
51
- gem_file = gemdir + '/gems/' + gemname
52
- spec_file = gemdir + '/specifications/' + gemname + '.gemspec'
53
- `ln -s #{gem_file} <%= @dir %>/gems/gems/#{gemname} && ln -s #{spec_file} <%= @dir %>/gems/specifications/#{gemname}.gemspec`
54
- puts "Successfully symlinked #{gemname}"
79
+ versions.each do |version|
80
+ gemdir = data[gem_name][version]
81
+ gemname = gem_name+'-'+version
82
+ gem_file = gemdir + '/gems/' + gemname
83
+ spec_file = gemdir + '/specifications/' + gemname + '.gemspec'
84
+ unless File.exists?("#{DIR}/gems/#{gemname}")
85
+ `ln -s #{gem_file} #{DIR}/gems/#{gemname} && ln -s #{spec_file} #{DIR}/specifications/#{gemname}.gemspec`
86
+ puts "Successfully symlinked #{gemname}"
87
+ else
88
+ puts "#{gemname} already exists"
89
+ end
90
+
91
+ # check dependencies
92
+ data = `gem dependency #{gem_name} -v #{version}`.chomp.split("\n")
93
+ data.shift
94
+ data.each do |dependency|
95
+ name = dependency.match(/\s+(.*?)\s\(/).captures[0]
96
+ if `gem query -i -n #{name}`.strip != 'true'
97
+ symlink([name])
98
+ end
99
+ end
100
+ end
101
+ else
102
+ puts "Could not find gem #{gem_name}"
103
+ end
55
104
  end
56
-
57
- else
58
- puts "Could not find gem #{gem_name}"
105
+ end
106
+
107
+ def method_missing(method, *args)
108
+ # must be a gem commands
109
+ system("gem --config-file #{DIR}/.gemrc #{method} #{args.join(' ')}")
59
110
  end
60
111
  end
61
- else
62
- system("gem --config-file <%= @dir %>/.gemrc #{command} #{ARGV.join(' ')}")
63
- end
112
+ end
113
+
114
+ args=ARGV
115
+ command=args.shift
116
+ Dispatch.send(command, args)
data/lib/templates/gemrc CHANGED
@@ -1,6 +1,8 @@
1
1
  gempath:
2
- - <%= @dir %>/gems
3
- gem: --no-rdoc --no-ri
4
- :sources:
2
+ - <%= @dir %>
3
+ <% unless @cfg['nodoc'] == false %>gem: --no-rdoc --no-ri<% end %>
4
+ sources:
5
5
  - http://gems.rubyforge.org
6
6
  - http://gems.github.com
7
+ <% (@cfg['sources'] || []).each do |source| %>- <%= source %>
8
+ <% end %>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: toastyapps-gembox
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.3
4
+ version: 1.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Mongeau
@@ -12,7 +12,7 @@ cert_chain: []
12
12
  date: 2009-03-18 21:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
- description: Gembox allows you to create a sandbox for installing and using gems using an interactive shell. Simple run "gembox create ." and then "gembox shell"
15
+ description: Gembox allows you to create a sandbox for installing and using gems by way of an interactive shell.
16
16
  email:
17
17
  - halogenandtoast@gmail.com
18
18
  executables:
@@ -61,6 +61,6 @@ rubyforge_project: gembox
61
61
  rubygems_version: 1.2.0
62
62
  signing_key:
63
63
  specification_version: 2
64
- summary: Gembox allows you to create a sandbox for installing and using gems using an interactive shell
64
+ summary: Gembox allows you to create a sandbox for installing and using gems by way of an interactive shell.
65
65
  test_files:
66
66
  - test/test_gembox.rb