gemper 0.0.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 +7 -0
  2. data/lib/gemper.rb +38 -0
  3. metadata +47 -0
data/bin/gemper ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ require 'gemper'
3
+
4
+ recursive = ARGV.delete('-r')
5
+ abort 'Usage: gemper [-r] file|directory' if ARGV.size == 0
6
+
7
+ Gemper.install(ARGV[0], recursive)
data/lib/gemper.rb ADDED
@@ -0,0 +1,38 @@
1
+ module Gemper
2
+ def self.installed?(gem_name)
3
+ require gem_name
4
+ true
5
+ rescue LoadError
6
+ false
7
+ end
8
+
9
+ def self.required_gems(file_name)
10
+ File.readlines(file_name).map { |line|
11
+ line.match(/^require.*(?=['"](.+)['"])(?:"\1"|'\1')/)
12
+ }.compact.map { |e| e[1] }.uniq
13
+ end
14
+
15
+ def self.gems_in_path(path, recursive = false)
16
+ if File.file? path
17
+ required_gems path
18
+ elsif File.directory? path
19
+ Dir.chdir path
20
+ Dir["#{recursive ? '**/' : ''}*.{rb,ru}"].map{ |file_name| required_gems(file_name) }.flatten.uniq
21
+ else
22
+ abort "\e[31mFile not found: #{path}\e[0m"
23
+ end.reject { |e| installed? e }
24
+ end
25
+
26
+ def self.install(path, recursive)
27
+ gems = gems_in_path(path, recursive)
28
+ if gems.size == 0
29
+ puts 'All the gems are already installed.'
30
+ else
31
+ puts "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
37
+ end
38
+ end
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gemper
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Volodymyr Shatsky
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-03-31 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Automatically installs all the gems required in a specified file or directory
15
+ email: shockone89@gmail.com
16
+ executables:
17
+ - gemper
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - lib/gemper.rb
22
+ - bin/gemper
23
+ homepage: http://rubygems.org/gems/gemper
24
+ licenses: []
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ none: false
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubyforge_project:
43
+ rubygems_version: 1.8.23
44
+ signing_key:
45
+ specification_version: 3
46
+ summary: Scans files and installs required gems
47
+ test_files: []