gemper 0.0.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 +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: []