thief 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8ebb8b8844efcf3a58b4b534b6bea44a6956f6bf
4
- data.tar.gz: 580ad1901222f0e74dcd8f3bd80855e36db599b9
3
+ metadata.gz: 61f31c07596c41f10ef2cd0f8f6f1ea6b71d07a0
4
+ data.tar.gz: a79e94030488d115ffe078176cb8f36c36199ee2
5
5
  SHA512:
6
- metadata.gz: 083f6ea3be53ebe855ed53e56b7f667c9c337a524a8260a1da37adcd962c6fb5c39de6df10fb5ade5c7da9c26612094eab5b54e64bf7a4b7500531e88471ec5d
7
- data.tar.gz: b69ce5f7cab7961647beeb9b9bf16421d17cb0b7be45391e0e6b4d7f42038f213ad520b9dbec993f024f7f2b98f0190a42cfcc9832214f8fe0415b6fb9a6671d
6
+ metadata.gz: 08b9e9810ed5a4a8052f4b15c479e8ec8ff8afa38fe5911e9ba9e0a3e996e67b5fcf5b94109c693dc372b70c5a7172692a9e15d5a715c40f8d571fa33f55f20c
7
+ data.tar.gz: 3c234c22141fc847eb983f7f7acb2d7ba5975f345e2ea5a2cb108a9b092666ab5f558d79c7814d927761e3e3b8cf47ca9f5b038bee55ddfbd65dbe60456e1fa0
data/bin/thief CHANGED
@@ -1,3 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'thief'
4
+
5
+ Thief.install
data/lib/thief/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Thief
2
- VERSION = "0.0.1"
2
+ VERSION = '0.0.2'
3
3
  end
data/lib/thief.rb CHANGED
@@ -1,5 +1,95 @@
1
- require "thief/version"
1
+ require 'thief/version'
2
+ require 'parallel'
3
+ require 'ruby-progressbar'
2
4
 
3
5
  module Thief
4
- # Your code goes here...
6
+ class << self
7
+ def install
8
+ gemfile = resolve_gemfile
9
+ gems = parse_gemfile(gemfile)
10
+ Parallel.map(gems, in_processes: cpu_count, progress: 'Getting gems') do |gem|
11
+ install_gem(gem)
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def install_gem(gem)
18
+ cmd = "gem install #{gem[:gem]}"
19
+ cmd << " -v '#{gem[:version]}'" if gem[:version]
20
+ cmd << ' --no-verbose -q --no-rdoc --no-ri --conservative --minimal-deps'
21
+ system cmd
22
+ end
23
+
24
+ def parse_gemfile(gemfile)
25
+ result = []
26
+ line_num = 0
27
+ File.open(gemfile).each do |line|
28
+ line_num += 1
29
+ parse_line(result, line, line_num)
30
+ end
31
+ result
32
+ end
33
+
34
+ def parse_line(result, line, num)
35
+ line = line.strip
36
+ if line.include?(':path =>') || line.include?('path: ')
37
+ puts "WARNING: Skipping local: #{line}"
38
+ return
39
+ end
40
+ if line.include?('#')
41
+ line, _ = line.split('#')
42
+ end
43
+ if line.start_with?('gem')
44
+ gem, version = line.gsub(/['"]/, '').split(',')
45
+ gem_def = { gem: gem.gsub(/^gem\s+/, '').strip }
46
+ if version && version.include?('require')
47
+ version.gsub!(/:?require.+/, '').strip
48
+ end
49
+ if version && version.strip.length > 0
50
+ gem_def[:version] = version.strip
51
+ end
52
+ result << gem_def
53
+ end
54
+ rescue => e
55
+ puts "WARNING: Could not parse line: #{num}: #{line}: #{e}"
56
+ end
57
+
58
+ def resolve_gemfile
59
+ gemfile_path = ARGV[0] || 'Gemfile'
60
+ if gemfile_path.start_with?('~') || gemfile_path.start_with?('/')
61
+ gemfile = File.expand_path(gemfile_path)
62
+ else
63
+ gemfile = File.join(Dir.pwd, gemfile_path)
64
+ end
65
+ puts "Running thief install for: #{gemfile}"
66
+ check_gemfile(gemfile)
67
+ gemfile
68
+ end
69
+
70
+ def check_gemfile(gemfile)
71
+ unless File.exist?(gemfile)
72
+ puts 'Run thief in a directory that contains a Gemfile'
73
+ exit 1
74
+ end
75
+ end
76
+
77
+ def cpu_count
78
+ case RbConfig::CONFIG['host_os']
79
+ when /darwin9/
80
+ `hwprefs cpu_count`.to_i
81
+ when /darwin/
82
+ ((`which hwprefs` != '') ? `hwprefs thread_count` : `sysctl -n hw.ncpu`).to_i
83
+ when /linux/
84
+ `cat /proc/cpuinfo | grep processor | wc -l`.to_i
85
+ when /freebsd/
86
+ `sysctl -n hw.ncpu`.to_i
87
+ when /mswin|mingw/
88
+ require 'win32ole'
89
+ wmi = WIN32OLE.connect('winmgmts://')
90
+ cpu = wmi.ExecQuery('select NumberOfCores from Win32_Processor')
91
+ cpu.to_enum.first.NumberOfCores
92
+ end
93
+ end
94
+ end
5
95
  end
data/thief.gemspec CHANGED
@@ -14,10 +14,12 @@ Gem::Specification.new do |spec|
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
17
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.executables = ['thief']
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
+ spec.add_runtime_dependency 'parallel'
22
+ spec.add_runtime_dependency 'ruby-progressbar'
21
23
  spec.add_development_dependency "bundler", "~> 1.6"
22
24
  spec.add_development_dependency "rake", "~> 10.0"
23
25
  spec.add_development_dependency "rspec"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thief
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomas Varaneckas
@@ -10,6 +10,34 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2014-08-31 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: parallel
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
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: ruby-progressbar
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: bundler
15
43
  requirement: !ruby/object:Gem::Requirement