mineshaft 0.1.0 → 0.3.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3d712869ecc7565150cf6e63b4529308b2fd8a5a
4
- data.tar.gz: 5bd72dfb92dedb9e7f957502a138222de40f7cfa
3
+ metadata.gz: e11df319043122c74bab2d8148dc30a48811f614
4
+ data.tar.gz: 7636c96c94070bc76b7289a67da21d275d428450
5
5
  SHA512:
6
- metadata.gz: edb9a8a9725ee71ad054a9780f0570f5e203082b406b96283e7b58a0dbef77017ad984e468420f7b3bc61a8f5fdeaffe8d66247efb2cbdc71f8af83e56b91e07
7
- data.tar.gz: 0202eea20a9f32f1525b46b74f64cd2d48d4b9fe903aa8c37ae1f80899aa8e9ae0b28bf50bbfea5bdc694b2cdea01f0f1471e651c68d1a035f6882cee02c8859
6
+ metadata.gz: e6931e961db2057c40a64bcef81feee98392ad819c9998f462156850acf2c9ab11622859a7bfce7ae852265aa5ef798da6233c1de19eddec11231c1b5c2f43bc
7
+ data.tar.gz: 653d7e2dbbfe6d6553f8abc15f51aa748ee28bc08dd6d59d5ae1e595b4e9fc42ce6fb47b2bcce5d0af5953e636749ac19a87f8c9616c80d6a2c993d76a0cfff8
data/bin/mineshaft CHANGED
@@ -10,18 +10,19 @@
10
10
 
11
11
  require "mineshaft"
12
12
  require "optparse"
13
+ require "yaml"
13
14
 
14
15
  options = {}
15
16
 
16
17
  parser = OptionParser.new do |opts|
17
18
  opts.banner = "usage: minecart [options] environment"
18
19
 
19
- opts.on("v", "--version", "displays the current version of minecart") do
20
- puts Mineshaft::VERSION[:name] + " " + Mineshaft::VERSION[:number]
20
+ opts.on("-v", "--version", "displays the current version of minecart") do
21
+ puts "#{Mineshaft::VERSION[:name]} v#{Mineshaft::VERSION[:number]}"
21
22
  exit
22
23
  end
23
24
 
24
- opts.on("-V",
25
+ opts.on("-r",
25
26
  "--ruby-version VERSION",
26
27
  "specify the version of Ruby to install"
27
28
  ) do |version|
@@ -31,17 +32,7 @@ end
31
32
 
32
33
  parser.parse!
33
34
 
34
- unless ARGV.last.nil?
35
- environment = Mineshaft::Environment.new(ARGV.last)
36
- environment.create
37
-
38
- versions = JSON.parse(File.read('versions/versions.json'))
39
-
40
- versions.each do |number, url|
41
- @url = url if number == options[:version]
42
- end
43
-
44
- ruby_install = Mineshaft::Install.new
45
- ruby_install.download(@url, environment.dir)
46
- ruby_install.build(environment.dir)
35
+ if ARGV.include?("new")
36
+ dir_name = ARGV[ARGV.index("new") + 1]
37
+ Mineshaft::Environment.new(dir_name, options).create
47
38
  end
data/lib/mineshaft.rb CHANGED
@@ -6,6 +6,6 @@
6
6
  #
7
7
  # Copyright (c) 2017 Cameron Testerman
8
8
 
9
- require_relative "./mineshaft/environment"
10
- require_relative "./mineshaft/install"
11
- require_relative "./mineshaft/version"
9
+ require "mineshaft/environment"
10
+ require "mineshaft/installer"
11
+ require "mineshaft/version"
@@ -12,12 +12,21 @@ module Mineshaft
12
12
  class Environment
13
13
  attr_reader :dir
14
14
 
15
- def initialize(dir)
16
- @dir= dir
15
+ def initialize(dir, options)
16
+ @dir = dir
17
+ @options = options
17
18
  end
18
19
 
19
20
  def create
20
21
  FileUtils::mkdir_p(@dir)
22
+ versions = YAML.load_file(File.join(File.dirname(File.expand_path(__FILE__)), '../../versions/versions.yaml'))
23
+ version = @options[:version] ? @options[:version] : Mineshaft::Installer.get_latest_stable
24
+ installer = Mineshaft::Installer.new do |config|
25
+ config.url = versions[version]
26
+ config.directory = @dir
27
+ config.version = version
28
+ end
29
+ installer.run
21
30
  end
22
31
  end
23
32
  end
@@ -0,0 +1,99 @@
1
+ # mineshaft
2
+ #
3
+ # author:: Cameron Testerman
4
+ # email:: cameronbtesterman@gmail.com
5
+ # created:: 2017-04-14 1:19PM
6
+ #
7
+ # Copyright (c) 2017 Cameron Testerman
8
+
9
+ require 'fileutils'
10
+ require 'net/http'
11
+ require 'rubygems/package'
12
+ require 'zlib'
13
+ require 'mineshaft/shell'
14
+
15
+ module Mineshaft
16
+ class Installer
17
+ attr_accessor :url, :directory, :version
18
+
19
+ include Mineshaft::Shell
20
+
21
+ def initialize
22
+ @ruby_archive = "ruby.tar.gz"
23
+ yield self
24
+ end
25
+
26
+ def self.get_latest_stable
27
+ "2.4.2"
28
+ end
29
+
30
+ def find_slash_indices(url)
31
+ slash_array = []
32
+ url = url.split("")
33
+ i = 0
34
+
35
+ url.each do |l|
36
+ break if slash_array.length == 3
37
+ slash_array.push(i) if l == "/"
38
+ i += 1
39
+ end
40
+
41
+ @slash_array = slash_array
42
+ end
43
+
44
+ def split_url(url)
45
+ find_slash_indices(url)
46
+ beg = @slash_array[1] + 1
47
+ fin = @slash_array[2] - 1
48
+ site = url[beg..fin]
49
+ fin += 1
50
+ tar = url[fin..url.length]
51
+
52
+ yield site, tar
53
+ end
54
+
55
+ def download(url, download_dir)
56
+ puts "Downloading #{url}"
57
+ split_url(url) do |site, file|
58
+ Net::HTTP.start(site) do |http|
59
+ response = http.get(file)
60
+ open("#{download_dir}/#@ruby_archive", "w") do |f|
61
+ f.write(response.body)
62
+ end
63
+ end
64
+ end
65
+ end
66
+
67
+ def unzip(dir)
68
+ FileUtils::mkdir_p("#{dir}/ruby-#@version")
69
+ tar_extract = Gem::Package::TarReader.new(Zlib::GzipReader.open("#{dir}/#@ruby_archive"))
70
+ tar_extract.rewind
71
+ tar_extract.each do |entry|
72
+ puts entry.full_name
73
+ if entry.directory?
74
+ FileUtils::mkdir_p("#{dir}/#{entry.full_name}")
75
+ elsif entry.file?
76
+ File.open("#{dir}/#{entry.full_name}", 'w') {|file| file.write(entry.read)}
77
+ end
78
+ end
79
+ tar_extract.close
80
+ end
81
+
82
+ def run
83
+ download(@url, @directory)
84
+ unzip(@directory)
85
+ build(@directory)
86
+ end
87
+
88
+ def build(prefix)
89
+ dir = "#{Dir.pwd}/#{prefix}/ruby-#@version"
90
+ commands = [
91
+ "sudo chmod +x configure tool/ifchange",
92
+ "sudo ./configure --prefix #{Dir.pwd}/#{prefix}",
93
+ "sudo make",
94
+ "sudo make install"
95
+ ]
96
+ commands.each { |command| shell(dir, command) }
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,16 @@
1
+ # mineshaft
2
+ #
3
+ # author:: Cameron Testerman
4
+ # email:: cameronbtesterman@gmail.com
5
+ # created:: 2017-10-23 7:01PM
6
+ #
7
+ # Copyright (c) 2017 Cameron Testerman
8
+
9
+ module Mineshaft
10
+ module Shell
11
+ def shell(dir, cmd)
12
+ puts "Running #{cmd} in #{dir}"
13
+ %x{ cd #{dir} && #{cmd} }
14
+ end
15
+ end
16
+ end
@@ -9,6 +9,6 @@
9
9
  module Mineshaft
10
10
  VERSION = {
11
11
  name: "mineshaft",
12
- number: "0.1.0"
12
+ number: "0.3.0"
13
13
  }
14
14
  end
@@ -0,0 +1,3 @@
1
+ ---
2
+ 2.4.2: https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.2.tar.gz
3
+ 2.3.5: https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.5.tar.gz
metadata CHANGED
@@ -1,57 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mineshaft
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cameron Testerman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-20 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: rspec
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: json
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: optparse
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
11
+ date: 2017-10-23 00:00:00.000000000 Z
12
+ dependencies: []
55
13
  description:
56
14
  email: cameronbtesterman@gmail.com
57
15
  executables:
@@ -62,9 +20,10 @@ files:
62
20
  - bin/mineshaft
63
21
  - lib/mineshaft.rb
64
22
  - lib/mineshaft/environment.rb
65
- - lib/mineshaft/install.rb
23
+ - lib/mineshaft/installer.rb
24
+ - lib/mineshaft/shell.rb
66
25
  - lib/mineshaft/version.rb
67
- - versions/versions.json
26
+ - versions/versions.yaml
68
27
  homepage: https://github.com/camerontesterman/mineshaft
69
28
  licenses:
70
29
  - MIT
@@ -85,7 +44,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
44
  version: '0'
86
45
  requirements: []
87
46
  rubyforge_project:
88
- rubygems_version: 2.6.13
47
+ rubygems_version: 2.6.11
89
48
  signing_key:
90
49
  specification_version: 4
91
50
  summary: Ruby virtual environment manager
@@ -1,61 +0,0 @@
1
- # mineshaft
2
- #
3
- # author:: Cameron Testerman
4
- # email:: cameronbtesterman@gmail.com
5
- # created:: 2017-04-14 1:19PM
6
- #
7
- # Copyright (c) 2017 Cameron Testerman
8
-
9
- require 'json'
10
- require 'net/http'
11
-
12
- module Mineshaft
13
- class Install
14
- def get_latest_stable
15
- "2.3.0"
16
- end
17
-
18
- def find_slash_indices(url)
19
- slash_array = []
20
- url = url.split("")
21
- i = 0
22
-
23
- url.each do |l|
24
- break if slash_array.length == 3
25
- slash_array.push(i) if l == "/"
26
- i += 1
27
- end
28
-
29
- @slash_array = slash_array
30
- end
31
-
32
- def split_url(url)
33
- find_slash_indices(url)
34
- beg = @slash_array[1] + 1
35
- fin = @slash_array[2] - 1
36
- site = url[beg..fin]
37
- fin += 1
38
- tar = url[fin..url.length]
39
-
40
- yield site, tar
41
- end
42
-
43
- def download(url, download_dir)
44
- split_url(url) do |site, file|
45
- Net::HTTP.start(site) do |http|
46
- response = http.get(file)
47
- open("#{download_dir}/ruby.tar.bz2", "w") do |f|
48
- f.write(response.body)
49
- end
50
- end
51
- end
52
- end
53
-
54
- def unzip
55
- end
56
-
57
- def build(prefix)
58
- %x(./configure --prefix #{prefix}; make; sudo make install)
59
- end
60
- end
61
- end
@@ -1,4 +0,0 @@
1
- {
2
- "2.1.0": "https://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.0.tar.bz2",
3
- "2.3.0": "https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.0.tar.bz2"
4
- }