gemper 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/bin/gemper +1 -1
  2. data/lib/gemper.rb +26 -15
  3. metadata +1 -1
data/bin/gemper CHANGED
@@ -4,4 +4,4 @@ require 'gemper'
4
4
  recursive = ARGV.delete('-r')
5
5
  abort 'Usage: gemper [-r] file|directory' if ARGV.size == 0
6
6
 
7
- Gemper.install(ARGV, recursive)
7
+ Gemper.install_gems(ARGV, recursive)
@@ -1,4 +1,20 @@
1
1
  module Gemper
2
+
3
+ @@gems = []
4
+
5
+ def self.install_gems(paths, recursive)
6
+ @@gems = paths.flat_map{ |path| not_installed_gems_in(path, recursive) }.uniq
7
+
8
+ if @@gems.empty?
9
+ puts 'All the gems are already installed.'
10
+ else
11
+ `gem install #{@@gems.join(' ')}` if installation_approved?
12
+ end
13
+ end
14
+
15
+
16
+ private
17
+
2
18
  def self.installed?(gem_name)
3
19
  require gem_name
4
20
  true
@@ -6,33 +22,28 @@ module Gemper
6
22
  false
7
23
  end
8
24
 
9
- def self.required_gems(file_name)
25
+ def self.required_in(file_name)
10
26
  File.readlines(file_name).map { |line|
11
27
  line.match(/^require.*(?=['"](.+)['"])(?:"\1"|'\1')/)
12
28
  }.compact.map { |e| e[1] }
13
29
  end
14
30
 
15
- def self.gems_in_path(path, recursive = false)
31
+ def self.not_installed_gems_in(path, recursive = false)
16
32
  if File.file? path
17
- required_gems path
33
+ required_in path
18
34
  elsif File.directory? path
19
35
  Dir.chdir path
20
- Dir["#{recursive ? '**/' : ''}*.{rb,ru}"].flat_map{ |file_name| required_gems(file_name) }
36
+ Dir["#{recursive ? '**/' : ''}*.{rb,ru}"].flat_map{ |file_name| required_in(file_name) }
21
37
  else
22
38
  abort "\e[31mFile not found: #{path}\e[0m"
23
39
  end.reject { |e| installed? e }
24
40
  end
25
41
 
26
- def self.install(paths, recursive)
27
- gems = paths.flat_map{ |path| gems_in_path(path, recursive) }.uniq
28
- if gems.size == 0
29
- puts 'All the gems are already installed.'
30
- else
31
- puts "The following gem" + (gems.size > 1 ? 's' : '') + ' need to be installed:'
32
- gems.each { |e| puts e }
33
- print 'Install? [Y/n]: '
34
- install = ['', 'y', 'yes'].include? STDIN.gets.chomp.downcase
35
- `gem install #{gems.join(' ')}` if install
36
- end
42
+ def self.installation_approved?
43
+ puts 'The following gem' + (@@gems.size > 1 ? 's' : '') + ' need' + (@@gems.size == 1 ? 's' : '') + ' to be installed:'
44
+ @@gems.each { |e| puts e }
45
+ print 'Install? [Y/n]: '
46
+ ['', 'y', 'yes'].include? STDIN.gets.chomp.downcase
37
47
  end
48
+
38
49
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gemper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: