toastyapps-gembox 0.0.1 → 1.0.1

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/Manifest.txt CHANGED
@@ -4,8 +4,4 @@ README.txt
4
4
  Rakefile
5
5
  bin/gembox
6
6
  lib/gembox.rb
7
- lib/templates/dispatch.rb
8
- lib/templates/bashrc
9
- lib/templates/gemrc
10
- lib/templates/shell.bash
11
- test/test_gembox.rb
7
+ test/test_gembox.rb
data/README.txt CHANGED
@@ -22,8 +22,6 @@ gembox create . && gembox shell
22
22
 
23
23
  * sudo gem install toastyapps-gembox --source http://gems.github.com
24
24
 
25
- == USAGE
26
-
27
25
  == LICENSE:
28
26
 
29
27
  (The MIT License)
data/lib/gembox.rb CHANGED
@@ -1,115 +1,36 @@
1
- require 'rubygems'
2
- require 'yaml'
3
- require 'erb'
4
-
5
1
  class Gembox
6
- VERSION = '0.0.1'
7
- attr_accessor :dir, :cfg, :box_name
8
-
9
- def initialize
10
- @cfg_path = "#{ENV['HOME']}/.gembox/config.yml"
11
- load_config
12
- end
13
-
14
- class << self
15
- def help(args)
16
- puts File.read("../README.txt")
17
- end
18
-
19
- def create(args)
20
- args.each do |box_name|
21
- @box_name = box_name
22
- @dir = "#{ENV['HOME']}/.gembox/#{box_name}"
23
-
24
- if File.exists?(@dir)
25
- puts "Box #{box_name} already exists"
26
- else
27
- FileUtils.mkdir_p @dir # make gembox folder
28
- FileUtils.mkdir_p "#{@dir}/usr/bin"
29
- FileUtils.mkdir_p "#{@dir}/gems"
30
-
31
- 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")
32
- 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")
33
- 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")
34
- File.open("#{@dir}/dispatch.rb", "w") { |f| f.puts ERB.new(File.open(File.dirname(__FILE__)+"/templates/dispatch.rb").read).result(binding) } unless File.exists?("#{@dir}/dispatch.rb")
35
- puts "Box #{box_name} has been created"
36
- end
37
- end
38
- end
39
-
40
- def list(args)
41
- puts "Current Boxes:\n"
42
- Dir.foreach("#{ENV['HOME']}/.gembox") do |file|
43
- puts " #{file}" if file !~ /^\./ && File.directory?("#{ENV['HOME']}/.gembox/#{file}")
44
- end
45
- end
46
-
47
- def delete(args)
48
- args.each do |box_name|
49
- @dir = "#{ENV['HOME']}/.gembox/#{box_name}"
50
- if File.exists?(@dir)
51
- FileUtils.rm_r(@dir)
52
- puts "Box #{box_name} has been deleted"
53
- else
54
- puts "Box #{box_name} does not exists"
55
- end
56
- end
57
- end
58
-
59
- def shell(args)
60
- box_name = args.shift
61
- @dir = "#{ENV['HOME']}/.gembox/#{box_name}"
62
- if File.exists?(@dir)
63
- generate_gems_yaml("#{@dir}/gems.yaml")
64
- system("sh #{@dir}/shell.bash")
65
- else
66
- puts "Box #{box_name} does not exist"
67
- end
68
- end
69
-
70
- private
71
-
72
- def generate_gems_yaml(file)
73
- data = `gem query -d`.split("\n")
74
- gemdata = {}
75
- index = 'NULL'
76
- in_installed_at = false
77
- data.each do |line|
78
- if line =~ /^[a-z]/i
79
- index = line.split(' ')[0]
80
- versions = line.match(/\((.*?)\)/).captures[0].split(', ')
81
- gemdata[index] = {}
82
- versions.each do |version|
83
- gemdata[index][version] = ''
84
- end
85
- elsif line =~ /Installed at/ || in_installed_at
86
- if line.match(/\((.*?)\):\s(.*)/)
87
- in_installed_at = true
88
- version, dir = line.match(/\((.*?)\):\s(.*)/).captures
89
- gemdata[index][version] = dir
90
- elsif line =~ /Installed at/
91
- dir = line.match(/:\s(.*)/).captures[0]
92
- gemdata[index][gemdata[index].keys[0]] = dir
93
- else
94
- in_installed_at = false
95
- end
96
- end
97
- end
98
- File.open(file, "w") { |f| f.puts gemdata.to_yaml }
99
- end
100
-
101
- def load_config
102
- @cfg = load_yaml(@cfg_path)
2
+ VERSION = '1.0.0'
3
+
4
+ def self.create(args)
5
+ dir = Dir.new(Dir.pwd+"/"+args.shift).path
6
+ Dir.chdir(dir)
7
+ dir = Dir.pwd
8
+ FileUtils.mkdir_p "#{dir}/usr/bin"
9
+ FileUtils.mkdir_p "#{dir}/gems"
10
+ File.open("#{dir}/.gemrc", 'w') do |f|
11
+ f.puts "gempath:"
12
+ f.puts " - #{dir}/gems"
13
+ f.puts "gemhome: #{dir}/usr/bin"
14
+ end
15
+ File.open("#{dir}/.bashrc", "w") do |f|
16
+ f.puts "PS1=\"gembox:\\w> \""
17
+ f.puts "export PATH=#{dir}/usr/bin:\$PATH"
18
+ f.puts "alias gem='ruby #{dir}/dispatch.rb'"
19
+ f.puts "export GEM_PATH=#{dir}/gems"
20
+ f.puts "export GEM_HOME=#{dir}/gems"
21
+ end
22
+ File.open("#{dir}/shell.bash", "w") do |f|
23
+ f.puts "/usr/bin/env bash --rcfile #{dir}/.bashrc"
24
+ end
25
+ File.open("#{dir}/dispatch.rb", "w") do |f|
26
+ f.puts "#!/usr/bin/ruby"
27
+ f.puts "args=ARGV"
28
+ f.puts "command=args.shift"
29
+ f.puts "system(\"gem --config-file #{dir}/.gemrc #\{command\} #\{ARGV.join(' ')\}\")"
103
30
  end
31
+ end
104
32
 
105
- def load_yaml path
106
- File.exists?(path) ? YAML.load(File.open(path)) : nil
107
- end
108
-
109
- alias_method :sh, :shell
110
- alias_method :del, :delete
111
- alias_method :rm, :delete
112
- alias_method :ls, :list
113
-
33
+ def self.shell(args)
34
+ system("sh shell.bash")
114
35
  end
115
- end
36
+ 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: 0.0.1
4
+ version: 1.0.1
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: Create an interactive shell to use as a sandbox for managing gems
16
16
  email:
17
17
  - halogenandtoast@gmail.com
18
18
  executables:
@@ -30,13 +30,8 @@ files:
30
30
  - Rakefile
31
31
  - bin/gembox
32
32
  - lib/gembox.rb
33
- - lib/templates/dispatch.rb
34
- - lib/templates/bashrc
35
- - lib/templates/gemrc
36
- - lib/templates/shell.bash
37
- - test/test_gembox.rb
38
33
  has_rdoc: true
39
- homepage: http://www.halogenandtoast.com
34
+ homepage: http://halogenandtast.com
40
35
  post_install_message:
41
36
  rdoc_options:
42
37
  - --main
@@ -61,6 +56,5 @@ rubyforge_project: gembox
61
56
  rubygems_version: 1.2.0
62
57
  signing_key:
63
58
  specification_version: 2
64
- summary: Gembox allows you to create a sandbox for installing and using gems using an interactive shell
59
+ summary: Create an interactive shell to use as a sandbox for managing gems
65
60
  test_files:
66
- - test/test_gembox.rb
data/lib/templates/bashrc DELETED
@@ -1,7 +0,0 @@
1
- PS1="gembox-<%= @box_name %>:\w> "
2
- export PATH=<%= @dir %>/usr/bin:$PATH
3
- alias gem='ruby <%= @dir %>/dispatch.rb'
4
- export GEM_PATH=<%= @dir %>/gems
5
- export GEM_HOME=<%= @dir %>/gems
6
-
7
- ruby <%= @dir %>/dispatch.rb load_config
@@ -1,114 +0,0 @@
1
- #!/usr/bin/ruby
2
- require 'rubygems'
3
- require 'yaml'
4
- require 'fileutils'
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
25
- end
26
- end
27
- end
28
-
29
- def unsymlink(args)
30
- gem_name = args.shift
31
- data = `gem query -d -n #{gem_name}`.strip.split("\n")
32
- versions = []
33
- data.each do |line|
34
- if line =~ /^[a-z]/i
35
- versions << line.match(/\((.*?)\)/).captures[0]
36
- end
37
- end
38
- if versions.length == 1
39
- version = versions[0]
40
- if `ls -la #{DIR}/gems/gems/ | grep #{gem_name}-#{version}` =~ /^l/
41
- `rm #{DIR}/gems/gems/#{gem_name}-#{version} && rm #{DIR}/gems/specifications/#{gem_name}-#{version}.gemspec`
42
- puts "Gem #{gem_name} is been unsymlinked"
43
- else
44
- puts "Gem #{gem_name} is installed, but not symlinked"
45
- end
46
- elsif versions.length > 1
47
- puts "more"
48
- else
49
- puts "Gem #{gem_name} is not installed"
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/gems/")
58
- FileUtils.mkdir_p("#{DIR}/gems/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
78
-
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/gems/#{gemname}")
85
- `ln -s #{gem_file} #{DIR}/gems/gems/#{gemname} && ln -s #{spec_file} #{DIR}/gems/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
- symlink([name])
97
- end
98
- end
99
- else
100
- puts "Could not find gem #{gem_name}"
101
- end
102
- end
103
- end
104
-
105
- def method_missing(method, *args)
106
- # must be a gem commands
107
- system("gem --config-file #{DIR}/.gemrc #{method} #{args.join(' ')}")
108
- end
109
- end
110
- end
111
-
112
- args=ARGV
113
- command=args.shift
114
- Dispatch.send(command, args)
data/lib/templates/gemrc DELETED
@@ -1,6 +0,0 @@
1
- gempath:
2
- - <%= @dir %>/gems
3
- gem: --no-rdoc --no-ri
4
- :sources:
5
- - http://gems.rubyforge.org
6
- - http://gems.github.com
@@ -1 +0,0 @@
1
- /usr/bin/env bash --rcfile <%= @dir %>/.bashrc
data/test/test_gembox.rb DELETED
@@ -1,27 +0,0 @@
1
- require 'rubygems'
2
- require 'spec'
3
- require File.expand_path(File.dirname(__FILE__) + "/../lib/gembox")
4
-
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'
9
- end
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