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.
- data/lib/gemper.rb +16 -4
- data/test/test_gemper.rb +31 -0
- metadata +4 -2
data/lib/gemper.rb
CHANGED
@@ -2,8 +2,8 @@ module Gemper
|
|
2
2
|
|
3
3
|
@@gems = []
|
4
4
|
|
5
|
-
def self.install_gems(paths, recursive)
|
6
|
-
@@gems = paths
|
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(
|
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
|
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
|
data/test/test_gemper.rb
ADDED
@@ -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.
|
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
|