gemper 0.2.0 → 0.2.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.
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: