gemper 0.2.1 → 0.2.2

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/lib/gemper.rb +16 -4
  2. data/test/test_gemper.rb +31 -0
  3. metadata +4 -2
@@ -2,8 +2,8 @@ module Gemper
2
2
 
3
3
  @@gems = []
4
4
 
5
- def self.install_gems(paths, recursive)
6
- @@gems = paths.flat_map{ |path| not_installed_gems_in(path, recursive) }.uniq
5
+ def self.install_gems(paths, recursive = false)
6
+ @@gems = get_gems(paths, recursive)
7
7
 
8
8
  if @@gems.empty?
9
9
  puts 'All the gems are already installed.'
@@ -12,6 +12,18 @@ module Gemper
12
12
  end
13
13
  end
14
14
 
15
+ # Returns all the not installed gems in a given path or an array of paths
16
+ #
17
+ # Gemper.get_gems('~/Desktop')
18
+ # # => ['nokogiri', 'mechanize']
19
+ def self.get_gems(paths, recursive = false)
20
+ case paths
21
+ when Array
22
+ paths.flat_map{ |path| get_gems(path, recursive) }
23
+ when String
24
+ not_installed_gems_in(paths, recursive)
25
+ end.uniq
26
+ end
15
27
 
16
28
  private
17
29
 
@@ -24,11 +36,11 @@ module Gemper
24
36
 
25
37
  def self.required_in(file_name)
26
38
  File.readlines(file_name).map { |line|
27
- line.match(/^require.*(?=['"](.+)['"])(?:"\1"|'\1')/)
39
+ line.match(/^\s*require.*(?=['"](.+)['"])(?:"\1"|'\1')/)
28
40
  }.compact.map { |e| e[1] }
29
41
  end
30
42
 
31
- def self.not_installed_gems_in(path, recursive = false)
43
+ def self.not_installed_gems_in(path, recursive)
32
44
  if File.file? path
33
45
  required_in path
34
46
  elsif File.directory? path
@@ -0,0 +1,31 @@
1
+ require 'test/unit'
2
+ require 'gemper'
3
+
4
+ $first = %w(something non-existing)
5
+ $second = %w(blablabla)
6
+ $third = %w(third-file-gem)
7
+ $forth = %w(qwertyui)
8
+
9
+ $path = File.join(File.expand_path(File.dirname(__FILE__)), 'data')
10
+
11
+ class GemperTest < Test::Unit::TestCase
12
+
13
+ def test_single_file
14
+ assert_equal Gemper.get_gems(File.join($path, 'first.rb')), $first
15
+ end
16
+
17
+ def test_folder
18
+ assert_equal Gemper.get_gems($path).sort,
19
+ ($first + $second).sort
20
+ end
21
+
22
+ def test_recursive
23
+ assert_equal Gemper.get_gems($path, true).sort,
24
+ ($first + $second + $third + $forth).sort
25
+ end
26
+
27
+ def test_two_files
28
+ assert_equal Gemper.get_gems([File.join($path, 'first.rb'), File.join($path, 'subdir', 'third.rb')]).sort,
29
+ ($first + $third).sort
30
+ end
31
+ 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.1
4
+ version: 0.2.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -20,6 +20,7 @@ extra_rdoc_files: []
20
20
  files:
21
21
  - lib/gemper.rb
22
22
  - bin/gemper
23
+ - test/test_gemper.rb
23
24
  homepage: http://rubygems.org/gems/gemper
24
25
  licenses: []
25
26
  post_install_message:
@@ -44,4 +45,5 @@ rubygems_version: 1.8.23
44
45
  signing_key:
45
46
  specification_version: 3
46
47
  summary: Scans files and installs required gems
47
- test_files: []
48
+ test_files:
49
+ - test/test_gemper.rb