gem-wrappers 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bd77331a83cc2f7bc061d5bec0bfa1b7fa525db4
4
- data.tar.gz: c9b5fd6eec8cf8b5eaefe7aadf0eb79c32419093
3
+ metadata.gz: 13e6186794897ef3db5b1820064e22eb240457ea
4
+ data.tar.gz: 1138077c42d8823938ad6721e2f58e6bddff3e59
5
5
  SHA512:
6
- metadata.gz: 7f98a163cb25c960acaa7165b6eb462f218c2b72a80c28de45cb778c3fa51069694b23c7c07820e5950bf537c72928af774acee7ea17fc1a357622bfb3278211
7
- data.tar.gz: 3b9ecc914ebdb1406e2de70d14a1d933586f88c445e3fc4ad69388f599b0c884d928617896703237cd3eb0de8fc9a7ecb43cae8b6e869f3d644e196d0120ffb7
6
+ metadata.gz: 145a27ac7bfac5918801818cce182d93bd79193aad0b76f47fde58f4414dd50e1555fbe4ca1ae853006289fe2f1c8c3cd552c3f612c9e1966bf378b70256dbc9
7
+ data.tar.gz: 077e28899433286c391babbaae5b82184134aeeee8f440010405947a0b9a214fe6d6c2e6b1f207931f3c31bf3839a56313d8d8f09d0f17bdb7dc6ef815f4260e
@@ -0,0 +1,17 @@
1
+ # Changelog
2
+
3
+ ## 1.2.0
4
+ date: 2013-12-20
5
+
6
+ - Add support for generating scripts wrappers
7
+ - Improved gems searching and tests
8
+
9
+ ## 1.1.0
10
+ date: 2013-12-20
11
+
12
+ - Add functionality to uninstall wrappers when gem is uninstalled
13
+
14
+ ## 1.0.0
15
+ date: 2013-12-19
16
+
17
+ - Stable version released
data/README.md CHANGED
@@ -31,6 +31,18 @@ to rerun the process for all gems in `GEM_HOME` use:
31
31
  gem wrappers regenerate
32
32
  ```
33
33
 
34
+ wrappers will be generated in `$GEM_HOME/wrappers/`.
35
+
36
+ ## Generating scripts wrappers
37
+
38
+ It is possible to generate wrappers for custom scripts:
39
+
40
+ ```bash
41
+ gem wrappers /path/to/script
42
+ ```
43
+
44
+ a wrapper `$GEM_HOME/wrappers/script` will be generated.
45
+
34
46
  ## Showing current configuration
35
47
 
36
48
  To see paths that are used by gem run:
@@ -2,6 +2,7 @@ require 'rubygems/command_manager'
2
2
  require 'rubygems/installer'
3
3
  require 'rubygems/version'
4
4
  require 'gem-wrappers'
5
+ require 'gem-wrappers/specification'
5
6
 
6
7
  class WrappersCommand < Gem::Command
7
8
  def initialize
@@ -33,6 +34,8 @@ DOC
33
34
  execute_show
34
35
  when 'regenerate'
35
36
  execute_regenerate
37
+ when FileExist
38
+ execute_regenerate([File.expand_path(subcommand)]) # TODO: File.expand_path not tested!
36
39
  else
37
40
  execute_unknown subcommand
38
41
  end
@@ -50,22 +53,16 @@ DOC
50
53
  false
51
54
  end
52
55
 
53
- def execute_regenerate
54
- GemWrappers.install(executables)
56
+ def execute_regenerate(list = executables)
57
+ GemWrappers.install(list)
55
58
  end
56
59
 
57
60
  private
58
61
 
59
62
  def executables
60
63
  # do not use map(&:...) - for ruby 1.8.6 compatibility
61
- @executables ||= installed_gems.map{|gem| gem.executables }.inject{|sum, n| sum + n } || []
62
- end
63
-
64
- def installed_gems
65
- if Gem::VERSION > '1.8' then
66
- Gem::Specification.to_a
67
- else
68
- Gem.source_index.map{|name,spec| spec}
69
- end
64
+ @executables ||= GemWrappers::Specification.installed_gems.map{|gem| gem.executables }.inject{|sum, n| sum + n } || []
70
65
  end
71
66
  end
67
+
68
+ require 'gem-wrappers/command/file_exist'
@@ -0,0 +1,7 @@
1
+ class WrappersCommand
2
+ class FileExist
3
+ def self.===(file)
4
+ File.exist?(file)
5
+ end
6
+ end
7
+ end
@@ -30,14 +30,22 @@ module GemWrappers
30
30
 
31
31
  def install(executable)
32
32
  raise "Missing environment file for initialize!" unless @environment_file
33
+ @executable = executable
33
34
  content = ERB.new(template).result(binding)
34
- file_name = File.join(wrappers_path, executable)
35
+ file_name = File.join(wrappers_path, File.basename(executable))
35
36
  File.open(file_name, 'w') do |file|
36
37
  file.write(content)
37
38
  end
38
39
  File.chmod(0755, file_name)
39
40
  end
40
41
 
42
+ def executable_expanded
43
+ if File.extname(@executable) == ".rb"
44
+ then "ruby #{@executable}"
45
+ else @executable
46
+ end
47
+ end
48
+
41
49
  def template
42
50
  @template ||= <<-TEMPLATE
43
51
  #!/usr/bin/env bash
@@ -46,7 +54,7 @@ if
46
54
  [[ -s "<%= environment_file %>" ]]
47
55
  then
48
56
  source "<%= environment_file %>"
49
- exec <%= executable %> "$@"
57
+ exec <%= executable_expanded %> "$@"
50
58
  else
51
59
  echo "ERROR: Missing RVM environment file: '<%= environment_file %>'" >&2
52
60
  exit 1
@@ -1,15 +1,17 @@
1
1
  module GemWrappers
2
2
  module Specification
3
- def self.find
4
- @gem_wrappers_spec ||=
5
- if Gem::Specification.respond_to?(:find_by_name)
6
- Gem::Specification.find_by_name("gem-wrappers")
7
- else
8
- Gem.source_index.find_name("gem-wrappers").last
9
- end
10
- rescue Gem::LoadError
11
- nil
3
+ def self.installed_gems
4
+ if Gem::VERSION > '1.8' then
5
+ Gem::Specification.to_a
6
+ else
7
+ Gem.source_index.map{|name,spec| spec}
8
+ end
12
9
  end
10
+
11
+ def self.find(name = "gem-wrappers")
12
+ @gem_wrappers_spec ||= installed_gems.find{|spec| spec.name == name }
13
+ end
14
+
13
15
  def self.version
14
16
  find ? find.version.to_s : nil
15
17
  end
@@ -1,3 +1,3 @@
1
1
  module GemWrappers
2
- VERSION = "1.1.0"
2
+ VERSION = "1.2.0"
3
3
  end
@@ -83,6 +83,28 @@ EXPECTED
83
83
  $stderr.string.must_equal("")
84
84
  $stdout.string.must_equal("")
85
85
  end
86
+
87
+ it "generates script wrapper" do
88
+ FileUtils.mkdir_p(@test_path)
89
+ test_file = File.join(@test_path, "test_file.sh")
90
+ File.open(test_file, "w") do |file|
91
+ file.puts "echo test"
92
+ end
93
+ Gem.configuration[:wrappers_environment_file] = File.join(@test_path, "environment")
94
+ Gem.configuration[:wrappers_path] = File.join(@test_path, "wrappers")
95
+
96
+ subject.options[:args] = [test_file]
97
+ subject.execute
98
+
99
+ Gem.configuration[:wrappers_environment_file] = nil
100
+ Gem.configuration[:wrappers_path] = nil
101
+
102
+ File.exist?(File.join(@test_path, "environment")).must_equal(true)
103
+ File.exist?(File.join(@test_path, "wrappers", "test_file.sh")).must_equal(true)
104
+
105
+ $stderr.string.must_equal("")
106
+ $stdout.string.must_equal("")
107
+ end
86
108
  end
87
109
 
88
110
  it "finds gem executables" do
@@ -33,6 +33,16 @@ describe GemWrappers::Installer do
33
33
  FileUtils.rm_rf(@test_path)
34
34
  end
35
35
 
36
+ it "doe not prefix for .sh scripts" do
37
+ subject.instance_variable_set(:@executable, "/path/to/test.sh")
38
+ subject.executable_expanded.must_equal("/path/to/test.sh")
39
+ end
40
+
41
+ it "adds ruby prefix for .rb scripts" do
42
+ subject.instance_variable_set(:@executable, "/path/to/test.rb")
43
+ subject.executable_expanded.must_equal("ruby /path/to/test.rb")
44
+ end
45
+
36
46
  it "does create target dir" do
37
47
  subject.instance_variable_set(:@wrappers_path, @test_path)
38
48
  File.exist?(subject.wrappers_path).must_equal(false)
@@ -63,6 +73,62 @@ EXPECTED
63
73
  end
64
74
  end
65
75
 
76
+ it "creates shell script wrapper" do
77
+ subject.instance_variable_set(:@wrappers_path, @test_path)
78
+ script_path = File.join(subject.wrappers_path, "example", "test.sh")
79
+ FileUtils.mkdir_p(File.join(subject.wrappers_path, "example"))
80
+ File.open(script_path, "w") do |file|
81
+ file.write("echo test")
82
+ end
83
+ full_path = File.join(subject.wrappers_path, "test.sh")
84
+ File.exist?(full_path).must_equal(false)
85
+ subject.ensure
86
+ subject.install(script_path)
87
+ File.open(full_path, "r") do |file|
88
+ file.read.must_equal(<<-EXPECTED)
89
+ #!/usr/bin/env bash
90
+
91
+ if
92
+ [[ -s "/path/to/environment" ]]
93
+ then
94
+ source "/path/to/environment"
95
+ exec #{script_path} "$@"
96
+ else
97
+ echo "ERROR: Missing RVM environment file: '/path/to/environment'" >&2
98
+ exit 1
99
+ fi
100
+ EXPECTED
101
+ end
102
+ end
103
+
104
+ it "creates ruby script wrapper" do
105
+ subject.instance_variable_set(:@wrappers_path, @test_path)
106
+ script_path = File.join(subject.wrappers_path, "example", "test.rb")
107
+ FileUtils.mkdir_p(File.join(subject.wrappers_path, "example"))
108
+ File.open(script_path, "w") do |file|
109
+ file.write("puts :test")
110
+ end
111
+ full_path = File.join(subject.wrappers_path, "test.rb")
112
+ File.exist?(full_path).must_equal(false)
113
+ subject.ensure
114
+ subject.install(script_path)
115
+ File.open(full_path, "r") do |file|
116
+ file.read.must_equal(<<-EXPECTED)
117
+ #!/usr/bin/env bash
118
+
119
+ if
120
+ [[ -s "/path/to/environment" ]]
121
+ then
122
+ source "/path/to/environment"
123
+ exec ruby #{script_path} "$@"
124
+ else
125
+ echo "ERROR: Missing RVM environment file: '/path/to/environment'" >&2
126
+ exit 1
127
+ fi
128
+ EXPECTED
129
+ end
130
+ end
131
+
66
132
  it "removes wrapper" do
67
133
  subject.instance_variable_set(:@wrappers_path, @test_path)
68
134
  full_path = File.join(subject.wrappers_path, "rake")
@@ -4,6 +4,10 @@ require 'gem-wrappers/version'
4
4
 
5
5
  describe GemWrappers::Specification do
6
6
 
7
+ before do
8
+ GemWrappers::Specification.instance_variable_set(:@gem_wrappers_spec, nil)
9
+ end
10
+
7
11
  it "finds specification" do
8
12
  GemWrappers::Specification.find.name.must_equal("gem-wrappers")
9
13
  end
@@ -12,4 +16,8 @@ describe GemWrappers::Specification do
12
16
  GemWrappers::Specification.version.must_equal(GemWrappers::VERSION)
13
17
  end
14
18
 
19
+ it "does not find imaginary gems" do
20
+ GemWrappers::Specification.find("imaginary-gem").must_equal(nil)
21
+ end
22
+
15
23
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gem-wrappers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michal Papis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-20 00:00:00.000000000 Z
11
+ date: 2013-12-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -48,6 +48,7 @@ extra_rdoc_files: []
48
48
  files:
49
49
  - .gitignore
50
50
  - .travis.yml
51
+ - Changelog.md
51
52
  - Gemfile
52
53
  - LICENSE
53
54
  - README.md
@@ -56,6 +57,7 @@ files:
56
57
  - gem-wrappers.gemspec
57
58
  - lib/gem-wrappers.rb
58
59
  - lib/gem-wrappers/command.rb
60
+ - lib/gem-wrappers/command/file_exist.rb
59
61
  - lib/gem-wrappers/environment.rb
60
62
  - lib/gem-wrappers/installer.rb
61
63
  - lib/gem-wrappers/specification.rb
@@ -87,7 +89,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
87
89
  version: '0'
88
90
  requirements: []
89
91
  rubyforge_project:
90
- rubygems_version: 2.0.14
92
+ rubygems_version: 2.1.11
91
93
  signing_key:
92
94
  specification_version: 4
93
95
  summary: Create gem wrappers for easy use of gems in cron and other system locations.