toastyapps-gembox 1.3.3 → 1.3.4

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/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