pik 0.2.7 → 0.2.8

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.
@@ -3,7 +3,6 @@ module Pik
3
3
  class Config < Command
4
4
 
5
5
  it "Adds/modifies configuration options."
6
- include BatchFileEditor
7
6
  include ConfigFileEditor
8
7
 
9
8
  attr_accessor :global
@@ -7,15 +7,15 @@ module Pik
7
7
 
8
8
  attr_accessor :verbose
9
9
 
10
- include BatchFileEditor
10
+ include ScriptFileEditor
11
11
 
12
12
  def execute
13
13
  sys = WindowsEnv.system
14
14
  usr = WindowsEnv.user
15
15
  new_path = [sys['PATH'],usr['PATH']].compact.join(';')
16
- @batch.set('PATH' => new_path )
17
- @batch.set('GEM_PATH' => usr['GEM_PATH'] || sys['GEM_PATH'] )
18
- @batch.set('GEM_HOME' => usr['GEM_HOME'] || sys['GEM_HOME'] )
16
+ @script.set('PATH' => SearchPath.new(new_path) )
17
+ @script.set('GEM_PATH' => usr['GEM_PATH'] || sys['GEM_PATH'] )
18
+ @script.set('GEM_HOME' => usr['GEM_HOME'] || sys['GEM_HOME'] )
19
19
  echo_ruby_version(Which::Ruby.find(new_path)) if verbose
20
20
  end
21
21
 
@@ -27,7 +27,7 @@ module Pik
27
27
  end
28
28
 
29
29
  def write_make(path)
30
- BatchFile.new(path + 'make.bat') do |b|
30
+ Pik::BatchFile.new(path + 'make.bat') do |b|
31
31
  b.file_data << 'setlocal'
32
32
  b.set(:DEVKIT => config.global[:devkit])
33
33
  b.set(:PATH => "%DEVKIT%\\gcc\\3.4.5\\bin;%DEVKIT%\\msys\\1.0.11\\bin")
@@ -37,7 +37,7 @@ module Pik
37
37
  end
38
38
 
39
39
  def write_sh(path)
40
- BatchFile.new(path + 'sh.bat') do |b|
40
+ Pik::BatchFile.new(path + 'sh.bat') do |b|
41
41
  b.file_data << 'setlocal'
42
42
  b.set(:DEVKIT => config.global[:devkit])
43
43
  b.set(:PATH => "%DEVKIT%\\gcc\\3.4.5\\bin;%DEVKIT%\\msys\\1.0.11\\bin")
@@ -47,7 +47,7 @@ module Pik
47
47
  end
48
48
 
49
49
  def write_gcc(path)
50
- BatchFile.new(path + 'sh.bat') do |b|
50
+ Pik::BatchFile.new(path + 'gcc.bat') do |b|
51
51
  b.file_data << 'setlocal'
52
52
  b.set(:DEVKIT => config.global[:devkit])
53
53
  b.set(:PATH => "%DEVKIT%\\gcc\\3.4.5\\bin;%PATH%")
@@ -14,7 +14,7 @@ module Pik
14
14
  def initialize(args=ARGV, config_=nil)
15
15
  super
16
16
  @download_dir = config.global[:download_dir] || PIK_HOME + 'downloads'
17
- @install_root = config.global[:install_dir] || PIK_BATCH.dirname + 'pik'
17
+ @install_root = config.global[:install_dir] || PIK_HOME + 'rubies'
18
18
  FileUtils.mkdir_p @download_dir.to_s
19
19
  end
20
20
 
@@ -79,7 +79,7 @@ SEP
79
79
  if @hl.agree(question){|answer| answer.default = 'yes' }
80
80
  uri = 'http://downloads.sourceforge.net/sevenzip/7za465.zip'
81
81
  file = download(uri)
82
- Zip.fake_unzip(file.to_s, /\.exe|\.dll$/, PIK_BATCH.dirname.to_s)
82
+ Zip.fake_unzip(file.to_s, /\.exe|\.dll$/, PIK_SCRIPT.dirname.to_s)
83
83
  else
84
84
  raise QuitError
85
85
  end
@@ -1,24 +1,18 @@
1
1
  module Pik
2
2
 
3
- module BatchFileEditor
3
+ module ScriptFileEditor
4
4
 
5
- attr_reader :batch
5
+ attr_reader :script
6
6
 
7
7
  def initialize(args=ARGV,config=nil)
8
8
  super
9
- batch_file = File.join(PIK_HOME, "#{File.basename($0)}_#{$$}.bat")
10
- @batch = BatchFile.new( batch_file )
11
- editors << @batch
12
- end
13
-
14
- def close
15
- update_gem_batch
16
- super
9
+ @script = SCRIPT_FILE
10
+ editors << @script
17
11
  end
18
12
 
19
13
  def set(items)
20
14
  items.each do |k, v|
21
- @batch.set(k => v)
15
+ @script.set(k => v)
22
16
  WindowsEnv.user.set(k => v) if global
23
17
  end
24
18
  end
@@ -34,33 +28,20 @@ module Pik
34
28
 
35
29
  # if the new version has a GEM_HOME, add it's bin dir to the path
36
30
  new_path.add(Pathname.new(other[:gem_home]) + 'bin') if other[:gem_home]
37
-
38
- @batch.set('PATH' => new_path.join )
31
+ @script.set('PATH' => new_path )
39
32
  end
40
33
 
41
34
  def switch_gem_home_to(gem_home)
42
35
  gem_home = Pathname(gem_home).to_windows rescue nil
43
- @batch.set('GEM_PATH' => gem_home )
44
- @batch.set('GEM_HOME' => gem_home )
36
+ @script.set('GEM_PATH' => gem_home )
37
+ @script.set('GEM_HOME' => gem_home )
45
38
  end
46
39
 
47
40
  def echo_ruby_version(path, verb='')
48
41
  rb = Which::Ruby.exe(path).basename
49
- @batch.file_data << "for /f \"delims=\" %%a in ('#{rb} -v') do @echo #{verb} %%a "
42
+ @script.call "#{rb} -v"
50
43
  end
51
-
52
- def echo_running_with_ruby_version(path)
53
- echo_ruby_version('Running with')
54
- end
55
-
56
- def update_gem_batch
57
- BatchFile.open(PIK_BATCH) do |gem_bat|
58
- # call new .pik/pik batch
59
- gem_bat.call(%Q("#{@batch.path.to_windows}")) if @batch
60
- gem_bat.write
61
- end
62
- end
63
-
44
+
64
45
  end
65
46
 
66
47
  end
@@ -4,11 +4,11 @@ module Pik
4
4
 
5
5
  aka :up
6
6
  it "updates pik."
7
- include BatchFileEditor
7
+ include ScriptFileEditor
8
8
 
9
9
  def execute
10
10
  sh "#{Which::Gem.exe} install pik"
11
- @batch.call("pik_install #{PIK_BATCH.dirname}")
11
+ @script.call("pik_install #{PIK_SCRIPT.dirname}")
12
12
  end
13
13
 
14
14
  end
@@ -1,10 +1,10 @@
1
1
  module Pik
2
2
 
3
- class Switch < Command
3
+ class Use < Command
4
4
 
5
- aka :sw, :use
5
+ aka :switch, :sw
6
6
  it "Switches ruby versions based on patterns."
7
- include BatchFileEditor
7
+ include ScriptFileEditor
8
8
 
9
9
  attr_accessor :global
10
10
  attr_accessor :gem_home
@@ -2,12 +2,16 @@
2
2
  class Pathname
3
3
 
4
4
  def to_s
5
- @path.tr('/','\\').sub(/^.:/){|s| s.upcase }
5
+ @path.tr('/','\\').sub(/^(.):/){|s| s.upcase }
6
6
  end
7
7
  alias to_windows to_s
8
8
 
9
9
  def to_ruby
10
- @path.tr('\\','/').sub(/^.:/){|s| s.upcase }
10
+ @path.tr('\\','/').sub(/^(.):/){|s| s.upcase }
11
+ end
12
+
13
+ def to_bash
14
+ @path.tr('\\','/').sub(/^(.):/){|s| "/#{s[0,1].downcase}"}
11
15
  end
12
16
 
13
17
  def ruby
@@ -0,0 +1,36 @@
1
+ module Pik
2
+
3
+ class BashFile < ScriptFile
4
+
5
+ attr_accessor :file_data, :file_name, :ruby_dir
6
+
7
+ def extname
8
+ ".sh"
9
+ end
10
+
11
+ def header
12
+ string = "#!/bin/sh\n"
13
+ string << "# This bash script generated by Pik, the\n"
14
+ string << "# Ruby Manager for Windows\n"
15
+ end
16
+
17
+ def call(exe)
18
+ @file_data << "#{exe}\n"
19
+ self
20
+ end
21
+
22
+ def set(items)
23
+ items.each{|k,v|
24
+ v = v.to_bash if v.respond_to? 'to_bash'
25
+ @file_data << "export #{k}='#{v}'" }
26
+ self
27
+ end
28
+
29
+ def unset(items)
30
+ items.each{|k| @file_data << "export #{k}=" }
31
+ self
32
+ end
33
+
34
+ end
35
+
36
+ end
@@ -0,0 +1,32 @@
1
+ module Pik
2
+
3
+ class BatchFile < ScriptFile
4
+
5
+ def extname
6
+ ".bat"
7
+ end
8
+
9
+ def header
10
+ string = "@ECHO OFF\n\n"
11
+ string << ":: This batch file generated by Pik, the\n"
12
+ string << ":: Ruby Manager for Windows\n"
13
+ end
14
+
15
+ def call(bat)
16
+ @file_data << "CALL #{bat}\n"
17
+ self
18
+ end
19
+
20
+ def set(items)
21
+ items.each{|k,v| @file_data << "SET #{k}=#{v}" }
22
+ self
23
+ end
24
+
25
+ def unset(*items)
26
+ items.flatten.each{|k| @file_data << "SET #{k}=" }
27
+ self
28
+ end
29
+
30
+ end
31
+
32
+ end
@@ -0,0 +1,33 @@
1
+ module Pik
2
+
3
+ class PsFile < ScriptFile
4
+
5
+ attr_accessor :file_data, :file_name, :ruby_dir
6
+
7
+ def extname
8
+ ".ps1"
9
+ end
10
+
11
+ def header
12
+ string = "# This powshell script generated by Pik, the\n"
13
+ string << "# Ruby Manager for Windows\n"
14
+ end
15
+
16
+ def call(exe)
17
+ @file_data << "#{exe}\n"
18
+ self
19
+ end
20
+
21
+ def set(items)
22
+ items.each{|k,v| @file_data << "$ENV:#{k}=\"#{v}\"" }
23
+ self
24
+ end
25
+
26
+ def unset(items)
27
+ items.each{|k| @file_data << "Remove-Item ENV:#{k}" }
28
+ self
29
+ end
30
+
31
+ end
32
+
33
+ end
@@ -0,0 +1,45 @@
1
+ module Pik
2
+
3
+ class ScriptFile
4
+
5
+ attr_accessor :file_data, :file_name, :ruby_dir
6
+
7
+ def initialize(file) #, mode=:new)
8
+ @file = Pathname.new(file.to_s + extname)
9
+ @file_data = [header]
10
+ yield self if block_given?
11
+ end
12
+
13
+ def path
14
+ @file
15
+ end
16
+
17
+ def extname
18
+ raise
19
+ end
20
+
21
+ def echo(string='.')
22
+ string = ' ' + string unless string == '.'
23
+ @file_data << "ECHO#{string}"
24
+ self
25
+ end
26
+
27
+ def remove_line(re)
28
+ @file_data.reject!{ |i| i =~ re }
29
+ end
30
+
31
+ def to_s
32
+ @file_data.join("\n")
33
+ end
34
+
35
+ def write
36
+ File.open(@file, 'w+'){|f| f.puts self.to_s }
37
+ end
38
+
39
+ def << (cmd)
40
+ @file_data << cmd
41
+ end
42
+
43
+ end
44
+
45
+ end
@@ -57,6 +57,10 @@ class SearchPath
57
57
  end
58
58
  alias :to_s :join
59
59
 
60
+ def to_bash
61
+ @path.map{|i| Pathname.new(i).to_bash }.join(':')
62
+ end
63
+
60
64
  def regex(string)
61
65
  Regexp.new(Regexp.escape(string.to_s), true)
62
66
  end
@@ -1,8 +1,8 @@
1
1
 
2
- describe BatchFile do
2
+ describe Pik::BatchFile do
3
3
 
4
4
  before do
5
- @bf = BatchFile.new('pik.bat')
5
+ @bf = Pik::BatchFile.new('pik.bat')
6
6
  end
7
7
 
8
8
  it "should have a header" do
@@ -35,4 +35,11 @@ describe Pathname do
35
35
  end
36
36
  end
37
37
 
38
+ describe 'to_bash' do
39
+ it 'should change the file and disk separator' do
40
+ path = Pathname("z:\\This\\is\\to\\test\\separators")
41
+ result = '/z/This/is/to/test/separators'
42
+ path.to_bash.should eql(result)
43
+ end
44
+ end
38
45
  end
@@ -117,16 +117,37 @@ describe SearchPath do
117
117
  @path.replace_or_add('C:/xray/yankee/alpha', path)
118
118
  @path.join.should == new_path
119
119
  end
120
+ end
120
121
 
121
- describe "find" do
122
- it "should return the first path where block is not false" do
123
- path = SearchPath.new(ENV['PATH'])
124
- dir = path.find{|i| !!Dir[ File.join(i.gsub('\\','/'), '{ruby.exe, ir.exe}') ].first }
125
- dir.should_not be_nil
126
- dir.should be_a(String)
127
- end
122
+ describe "#find" do
123
+ it "should return the first path where block is not false" do
124
+ path = SearchPath.new(ENV['PATH'])
125
+ dir = path.find{|i| !!Dir[ File.join(i.gsub('\\','/'), '{ruby.exe, ir.exe}') ].first }
126
+ dir.should_not be_nil
127
+ dir.should be_a(String)
128
128
  end
129
-
130
129
  end
131
130
 
131
+ describe '#to_bash' do
132
+ it 'should change the file and disk separator' do
133
+ new_path = 'C:\xray\yankee\zebra;'
134
+ new_path << 'C:\Program Files\Common Files\Shoes\0.r1134\..;'
135
+ new_path << 'C:\bin;'
136
+ new_path << 'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;'
137
+ new_path << 'C:\Program Files\Common Files\Shoes\0.r395\..;'
138
+ new_path << 'C:\windows\system32'
139
+
140
+ bash_path = '/c/xray/yankee/zebra:'
141
+ bash_path << '/c/Program Files/Common Files/Shoes/0.r1134/..:'
142
+ bash_path << '/c/bin:'
143
+ bash_path << '/c/WINDOWS/Microsoft.NET/Framework/v2.0.50727:'
144
+ bash_path << '/c/Program Files/Common Files/Shoes/0.r395/..:'
145
+ bash_path << '/c/windows/system32'
146
+
147
+ path = SearchPath.new(new_path)
148
+ path.should be_a SearchPath
149
+ path.to_bash.should eql(bash_path)
150
+ end
151
+ end
152
+
132
153
  end
@@ -1,26 +1,26 @@
1
1
  require 'pathname'
2
2
 
3
- describe Pik::Switch do
3
+ describe Pik::Use do
4
4
 
5
5
  it "should have a summary" do
6
- Pik::Switch.summary.should eql("Switches ruby versions based on patterns.")
6
+ Pik::Use.summary.should eql("Switches ruby versions based on patterns.")
7
7
  end
8
8
 
9
9
  it "should have an alias of sw" do
10
- Pik::Switch.names.should include(:sw)
10
+ Pik::Use.names.should include(:sw)
11
11
  end
12
12
 
13
13
  it "should have an alias of use" do
14
- Pik::Switch.names.should include(:use)
14
+ Pik::Use.names.should include(:use)
15
15
  end
16
16
 
17
17
  it "should have a global option" #do
18
- # sw = Pik::Switch.new(['-g'])
18
+ # sw = Pik::Use.new(['-g'])
19
19
  # sw.global.should be_true
20
20
  # end
21
21
 
22
22
  it "should have a gem_home option" # do
23
- # sw = Pik::Switch.new(['-m', 'test'])
23
+ # sw = Pik::Use.new(['-m', 'test'])
24
24
  # sw.gem_home.should eql("test")
25
25
  # end
26
26
 
@@ -29,9 +29,9 @@ describe Pik::Switch do
29
29
  'spec ' => {:path => Pathname('C:/ruby/bin')},
30
30
  'real ' => {:path => Pathname.new(::RbConfig::CONFIG['bindir'] )}
31
31
  }
32
- cmd = Pik::Switch.new(['spec'], conf)
32
+ cmd = Pik::Use.new(['spec'], conf)
33
33
  cmd.execute
34
- batch = cmd.instance_variable_get('@batch').file_data
34
+ batch = cmd.instance_variable_get('@script').file_data
35
35
  batch.should include("SET GEM_PATH=")
36
36
  batch.should include("SET GEM_HOME=")
37
37
  set_path = batch.grep(/set/i).first
@@ -46,9 +46,9 @@ describe Pik::Switch do
46
46
  },
47
47
  'real ' => {:path => Pathname.new(::RbConfig::CONFIG['bindir'] )}
48
48
  }
49
- cmd = Pik::Switch.new(['spec'], conf)
49
+ cmd = Pik::Use.new(['spec'], conf)
50
50
  cmd.execute
51
- batch = cmd.instance_variable_get('@batch').file_data
51
+ batch = cmd.instance_variable_get('@script').file_data
52
52
  batch.should include("SET GEM_PATH=C:\\Users\\martin_blanke\\.gems")
53
53
  batch.should include("SET GEM_HOME=C:\\Users\\martin_blanke\\.gems")
54
54
  end