launchy 2.4.3 → 2.5.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CONTRIBUTING.md +5 -3
- data/HISTORY.md +32 -20
- data/LICENSE +2 -2
- data/README.md +45 -15
- data/Rakefile +13 -11
- data/lib/launchy/application.rb +1 -1
- data/lib/launchy/applications/browser.rb +2 -2
- data/lib/launchy/detect/nix_desktop_environment.rb +4 -3
- data/lib/launchy/detect/runner.rb +2 -2
- data/lib/launchy/version.rb +1 -1
- data/lib/launchy.rb +12 -1
- data/spec/application_spec.rb +7 -7
- data/spec/applications/browser_spec.rb +27 -22
- data/spec/cli_spec.rb +13 -13
- data/spec/detect/host_os_family_spec.rb +6 -4
- data/spec/detect/host_os_spec.rb +3 -3
- data/spec/detect/nix_desktop_environment_spec.rb +4 -13
- data/spec/detect/ruby_engine_spec.rb +4 -4
- data/spec/detect/runner_spec.rb +14 -14
- data/spec/launchy_spec.rb +26 -17
- data/spec/version_spec.rb +3 -3
- data/tasks/default.rake +28 -58
- data/tasks/this.rb +19 -20
- metadata +36 -19
@@ -10,27 +10,18 @@ describe Launchy::Detect::NixDesktopEnvironment do
|
|
10
10
|
Launchy.reset_global_options
|
11
11
|
end
|
12
12
|
|
13
|
-
it "can detect the desktop environment of a KDE machine using ENV['KDE_FULL_SESSION']" do
|
14
|
-
ENV.delete( "KDE_FULL_SESSION" )
|
15
|
-
ENV["KDE_FULL_SESSION"] = "launchy-test"
|
16
|
-
kde = Launchy::Detect::NixDesktopEnvironment::Kde
|
17
|
-
nix_env = Launchy::Detect::NixDesktopEnvironment.detect
|
18
|
-
nix_env.must_equal( kde )
|
19
|
-
nix_env.browser.must_equal( kde.browser )
|
20
|
-
ENV.delete( 'KDE_FULL_SESSION' )
|
21
|
-
end
|
22
|
-
|
23
13
|
it "returns false for XFCE if xprop is not found" do
|
24
14
|
Launchy.host_os = "linux"
|
25
|
-
Launchy::Detect::NixDesktopEnvironment::Xfce.is_current_desktop_environment
|
15
|
+
_(Launchy::Detect::NixDesktopEnvironment::Xfce.is_current_desktop_environment?).must_equal( false )
|
26
16
|
end
|
27
17
|
|
28
18
|
it "returns NotFound if it cannot determine the *nix desktop environment" do
|
29
19
|
Launchy.host_os = "linux"
|
30
20
|
ENV.delete( "KDE_FULL_SESSION" )
|
31
21
|
ENV.delete( "GNOME_DESKTOP_SESSION_ID" )
|
22
|
+
Launchy.path = %w[ / /tmp ].join(File::PATH_SEPARATOR)
|
32
23
|
not_found = Launchy::Detect::NixDesktopEnvironment.detect
|
33
|
-
not_found.must_equal( Launchy::Detect::NixDesktopEnvironment::NotFound )
|
34
|
-
not_found.browser.must_equal( Launchy::Argv.new )
|
24
|
+
_(not_found).must_equal( Launchy::Detect::NixDesktopEnvironment::NotFound )
|
25
|
+
_(not_found.browser).must_equal( Launchy::Argv.new )
|
35
26
|
end
|
36
27
|
end
|
@@ -12,18 +12,18 @@ describe Launchy::Detect::RubyEngine do
|
|
12
12
|
|
13
13
|
%w[ ruby jruby rbx macruby ].each do |ruby|
|
14
14
|
it "detects the #{ruby} RUBY_ENGINE" do
|
15
|
-
Launchy::Detect::RubyEngine.detect( ruby ).ancestors.must_include Launchy::Detect::RubyEngine
|
15
|
+
_(Launchy::Detect::RubyEngine.detect( ruby ).ancestors).must_include Launchy::Detect::RubyEngine
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
19
|
it "uses the global ruby_engine overrides" do
|
20
20
|
ENV['LAUNCHY_RUBY_ENGINE'] = "rbx"
|
21
|
-
Launchy::Detect::RubyEngine.detect.must_equal Launchy::Detect::RubyEngine::Rbx
|
21
|
+
_(Launchy::Detect::RubyEngine.detect).must_equal Launchy::Detect::RubyEngine::Rbx
|
22
22
|
ENV.delete('LAUNCHY_RUBY_ENGINE')
|
23
23
|
end
|
24
24
|
|
25
25
|
it "does not find a ruby engine of 'foo'" do
|
26
|
-
lambda { Launchy::Detect::RubyEngine.detect( 'foo' ) }.must_raise Launchy::Detect::RubyEngine::NotFoundError
|
26
|
+
_(lambda { Launchy::Detect::RubyEngine.detect( 'foo' ) }).must_raise Launchy::Detect::RubyEngine::NotFoundError
|
27
27
|
end
|
28
28
|
|
29
29
|
{ 'rbx' => :rbx?,
|
@@ -31,7 +31,7 @@ describe Launchy::Detect::RubyEngine do
|
|
31
31
|
'macruby' => :macruby?,
|
32
32
|
'jruby' => :jruby? }.each_pair do |engine, method|
|
33
33
|
it "#{method} returns true for #{engine} " do
|
34
|
-
Launchy::Detect::RubyEngine.detect( engine ).send( method ).must_equal true
|
34
|
+
_(Launchy::Detect::RubyEngine.detect( engine ).send( method )).must_equal true
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
data/spec/detect/runner_spec.rb
CHANGED
@@ -13,17 +13,17 @@ describe Launchy::Detect::Runner do
|
|
13
13
|
|
14
14
|
it "raises an error when there is an unknown host os" do
|
15
15
|
Launchy.host_os = "foo"
|
16
|
-
lambda{ Launchy::Detect::Runner.detect }.must_raise Launchy::Detect::HostOsFamily::NotFoundError
|
16
|
+
_(lambda{ Launchy::Detect::Runner.detect }).must_raise Launchy::Detect::HostOsFamily::NotFoundError
|
17
17
|
end
|
18
18
|
|
19
19
|
it "raises an error when there is an unknown ruby engine" do
|
20
20
|
Launchy.ruby_engine = "wibble"
|
21
|
-
lambda{ Launchy::Detect::Runner.detect }.must_raise Launchy::Detect::RubyEngine::NotFoundError
|
21
|
+
_(lambda{ Launchy::Detect::Runner.detect }).must_raise Launchy::Detect::RubyEngine::NotFoundError
|
22
22
|
end
|
23
23
|
|
24
24
|
it "raises and error when there is no command found" do
|
25
25
|
runner = Launchy::Detect::Runner.detect
|
26
|
-
lambda{ runner.run( nil, *%w[ arg1 arg2 arg 3] ) }.must_raise Launchy::CommandNotFoundError
|
26
|
+
_(lambda{ runner.run( nil, *%w[ arg1 arg2 arg 3] ) }).must_raise Launchy::CommandNotFoundError
|
27
27
|
end
|
28
28
|
|
29
29
|
# On anything that has fork, use Forkable
|
@@ -33,7 +33,7 @@ describe Launchy::Detect::Runner do
|
|
33
33
|
Launchy.host_os = host_os
|
34
34
|
Launchy.ruby_engine = engine_name
|
35
35
|
engine = Launchy::Detect::Runner.detect
|
36
|
-
engine.must_be_instance_of Launchy::Detect::Runner::Forkable
|
36
|
+
_(engine).must_be_instance_of Launchy::Detect::Runner::Forkable
|
37
37
|
end
|
38
38
|
end
|
39
39
|
end
|
@@ -48,7 +48,7 @@ describe Launchy::Detect::Runner do
|
|
48
48
|
Launchy.host_os = host_os
|
49
49
|
Launchy.ruby_engine = 'jruby'
|
50
50
|
engine = Launchy::Detect::Runner.detect
|
51
|
-
engine.must_be_instance_of runner
|
51
|
+
_(engine).must_be_instance_of runner
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
@@ -58,14 +58,14 @@ describe Launchy::Detect::Runner do
|
|
58
58
|
Launchy.host_os = "mingw"
|
59
59
|
Launchy.ruby_engine = engine_name
|
60
60
|
e = Launchy::Detect::Runner.detect
|
61
|
-
e.must_be_instance_of Launchy::Detect::Runner::Windows
|
61
|
+
_(e).must_be_instance_of Launchy::Detect::Runner::Windows
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
65
|
it "Windows launches use the 'cmd' command" do
|
66
66
|
win = Launchy::Detect::Runner::Windows.new
|
67
67
|
cmd = win.dry_run( "not-really", [ "http://example.com" ] )
|
68
|
-
cmd.must_equal 'cmd /c not-really http://example.com'
|
68
|
+
_(cmd).must_equal 'cmd /c not-really http://example.com'
|
69
69
|
end
|
70
70
|
|
71
71
|
%w[ & | ( ) < > ^ ].each do |reserved_char|
|
@@ -75,29 +75,29 @@ describe Launchy::Detect::Runner do
|
|
75
75
|
url = parts.join( reserved_char )
|
76
76
|
output_url = parts.join( "^#{reserved_char}" )
|
77
77
|
|
78
|
-
win.all_args( "not-really", [ url ] ).must_equal [ 'cmd', '/c', 'not-really', output_url ]
|
78
|
+
_(win.all_args( "not-really", [ url ] )).must_equal [ 'cmd', '/c', 'not-really', output_url ]
|
79
79
|
|
80
80
|
cmd = win.dry_run( "not-really", [ url ] )
|
81
|
-
cmd.must_equal "cmd /c not-really #{output_url}"
|
81
|
+
_(cmd).must_equal "cmd /c not-really #{output_url}"
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
85
|
it "Jruby doesnot escapes '&' in urls" do
|
86
86
|
jruby = Launchy::Detect::Runner::Jruby.new
|
87
87
|
cmd = jruby.dry_run( "not-really", [ @test_url ])
|
88
|
-
cmd.must_equal 'not-really http://example.com/?foo=bar&baz=wibble'
|
88
|
+
_(cmd).must_equal 'not-really http://example.com/?foo=bar&baz=wibble'
|
89
89
|
end
|
90
90
|
|
91
91
|
it "does not escape %38 items in urls" do
|
92
92
|
l = Launchy::Detect::Runner::Forkable.new
|
93
|
-
cmd = l.dry_run( "not-really", [ "
|
94
|
-
cmd.must_equal( 'not-really
|
93
|
+
cmd = l.dry_run( "not-really", [ "https://ja.wikipedia.org/wiki/%E3%81%82" ] )
|
94
|
+
_(cmd).must_equal( 'not-really https://ja.wikipedia.org/wiki/%E3%81%82' )
|
95
95
|
end
|
96
96
|
|
97
97
|
it "can launch a utf8 url" do
|
98
|
-
url = "
|
98
|
+
url = "https://ja.wikipedia.org/wiki/あ"
|
99
99
|
l = Launchy::Detect::Runner::Forkable.new
|
100
100
|
cmd = l.dry_run( "not-really", [ url ] )
|
101
|
-
cmd.must_equal( "not-really #{url}" )
|
101
|
+
_(cmd).must_equal( "not-really #{url}" )
|
102
102
|
end
|
103
103
|
end
|
data/spec/launchy_spec.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'pathname'
|
2
3
|
|
3
4
|
describe Launchy do
|
4
5
|
|
@@ -22,7 +23,7 @@ describe Launchy do
|
|
22
23
|
old_stderr = $stderr
|
23
24
|
$stderr = StringIO.new
|
24
25
|
Launchy.log "This is a test log message"
|
25
|
-
$stderr.string.strip.must_equal "LAUNCHY_DEBUG: This is a test log message"
|
26
|
+
_($stderr.string.strip).must_equal "LAUNCHY_DEBUG: This is a test log message"
|
26
27
|
$stderr = old_stderr
|
27
28
|
ENV["LAUNCHY_DEBUG"] = nil
|
28
29
|
end
|
@@ -30,81 +31,89 @@ describe Launchy do
|
|
30
31
|
it "sets the global option :dry_run to true if LAUNCHY_DRY_RUN environment variable is 'true'" do
|
31
32
|
ENV['LAUNCHY_DRY_RUN'] = 'true'
|
32
33
|
Launchy.extract_global_options({})
|
33
|
-
Launchy.dry_run
|
34
|
+
_(Launchy.dry_run?).must_equal true
|
34
35
|
ENV['LAUNCHY_DRY_RUN'] = nil
|
35
36
|
end
|
36
37
|
|
37
38
|
it "sets the global option :debug to true if LAUNCHY_DEBUG environment variable is 'true'" do
|
38
39
|
ENV['LAUNCHY_DEBUG'] = 'true'
|
39
40
|
Launchy.extract_global_options({})
|
40
|
-
Launchy.debug
|
41
|
+
_(Launchy.debug?).must_equal true
|
41
42
|
ENV['LAUNCHY_DEBUG'] = nil
|
42
43
|
end
|
43
44
|
|
44
45
|
it "has the global option :debug" do
|
45
46
|
Launchy.extract_global_options( { :debug => 'true' } )
|
46
|
-
Launchy.debug
|
47
|
+
_(Launchy.debug?).must_equal true
|
47
48
|
Launchy.extract_global_options( { :debug => true } )
|
48
|
-
Launchy.debug
|
49
|
+
_(Launchy.debug?).must_equal true
|
49
50
|
end
|
50
51
|
|
51
52
|
it "has the global option :dry_run" do
|
52
53
|
Launchy.extract_global_options( { :dry_run => 'true' } )
|
53
|
-
Launchy.dry_run
|
54
|
+
_(Launchy.dry_run?).must_equal true
|
54
55
|
Launchy.extract_global_options( { :dry_run => true } )
|
55
|
-
Launchy.dry_run
|
56
|
+
_(Launchy.dry_run?).must_equal true
|
56
57
|
end
|
57
58
|
|
58
59
|
it "has the global option :application" do
|
59
60
|
Launchy.extract_global_options( { :application => "wibble" } )
|
60
|
-
Launchy.application.must_equal 'wibble'
|
61
|
+
_(Launchy.application).must_equal 'wibble'
|
61
62
|
end
|
62
63
|
|
63
64
|
it "has the global option :host_os" do
|
64
65
|
Launchy.extract_global_options( { :host_os => "my-special-os-v2" } )
|
65
|
-
Launchy.host_os.must_equal 'my-special-os-v2'
|
66
|
+
_(Launchy.host_os).must_equal 'my-special-os-v2'
|
66
67
|
end
|
67
68
|
|
68
69
|
it "has the global option :ruby_engine" do
|
69
70
|
Launchy.extract_global_options( { :ruby_engine => "myruby" } )
|
70
|
-
Launchy.ruby_engine.must_equal 'myruby'
|
71
|
+
_(Launchy.ruby_engine).must_equal 'myruby'
|
71
72
|
end
|
72
73
|
|
73
74
|
it "raises an exception if no scheme is found for the given uri" do
|
74
|
-
lambda { Launchy.open( @invalid_url ) }.must_raise Launchy::ApplicationNotFoundError
|
75
|
+
_(lambda { Launchy.open( @invalid_url ) }).must_raise Launchy::ApplicationNotFoundError
|
75
76
|
end
|
76
77
|
|
77
78
|
it "asssumes we open a local file if we have an exception if we have an invalid scheme and a valid path" do
|
78
79
|
uri = "blah://example.com/#{__FILE__}"
|
79
80
|
Launchy.open( uri , :dry_run => true )
|
80
|
-
$stdout.string.strip.
|
81
|
+
parts = $stdout.string.strip.split
|
82
|
+
_(parts.size).must_be :>, 1
|
83
|
+
_(parts.last).must_equal uri
|
81
84
|
end
|
82
85
|
|
83
86
|
it "opens a local file if we have a drive letter and a valid path on windows" do
|
84
87
|
uri = "C:#{__FILE__}"
|
85
88
|
Launchy.open( uri, :dry_run => true, :host_os => 'windows' )
|
86
|
-
$stdout.string.strip.must_equal 'cmd /c start "launchy" /b ' + uri
|
89
|
+
_($stdout.string.strip).must_equal 'cmd /c start "launchy" /b ' + uri
|
87
90
|
end
|
88
91
|
|
89
92
|
it "calls the block if instead of raising an exception if there is an error" do
|
90
93
|
Launchy.open( @invalid_url ) { $stderr.puts "oops had an error opening #{@invalid_url}" }
|
91
|
-
$stderr.string.strip.must_equal "oops had an error opening #{@invalid_url}"
|
94
|
+
_($stderr.string.strip).must_equal "oops had an error opening #{@invalid_url}"
|
92
95
|
end
|
93
96
|
|
94
97
|
it "calls the block with the values passed to launchy and the error" do
|
95
98
|
options = { :dry_run => true }
|
96
99
|
Launchy.open( @invalid_url, :dry_run => true ) { |e| $stderr.puts "had an error opening #{@invalid_url} with options #{options}: #{e}" }
|
97
|
-
$stderr.string.strip.must_equal "had an error opening #{@invalid_url} with options #{options}: No application found to handle '#{@invalid_url}'"
|
100
|
+
_($stderr.string.strip).must_equal "had an error opening #{@invalid_url} with options #{options}: No application found to handle '#{@invalid_url}'"
|
98
101
|
end
|
99
102
|
|
100
103
|
it "raises the error in the called block" do
|
101
|
-
lambda { Launchy.open( @invalid_url ) { raise StandardError, "KABOOM!" } }.must_raise StandardError
|
104
|
+
_(lambda { Launchy.open( @invalid_url ) { raise StandardError, "KABOOM!" } }).must_raise StandardError
|
102
105
|
end
|
103
106
|
|
104
107
|
[ 'www.example.com', 'www.example.com/foo/bar', "C:#{__FILE__}" ].each do |x|
|
105
108
|
it "picks a Browser for #{x}" do
|
106
109
|
app = Launchy.app_for_uri_string( x )
|
107
|
-
app.must_equal( Launchy::Application::Browser )
|
110
|
+
_(app).must_equal( Launchy::Application::Browser )
|
108
111
|
end
|
109
112
|
end
|
113
|
+
|
114
|
+
it "can use a Pathname as the URI" do
|
115
|
+
path = Pathname.new( Dir.pwd )
|
116
|
+
app = Launchy.app_for_uri_string( path )
|
117
|
+
_(app).must_equal( Launchy::Application::Browser )
|
118
|
+
end
|
110
119
|
end
|
data/spec/version_spec.rb
CHANGED
@@ -2,10 +2,10 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe 'Launchy::VERSION' do
|
4
4
|
it "should have a #.#.# format" do
|
5
|
-
Launchy::VERSION.must_match( /\d+\.\d+\.\d+/ )
|
6
|
-
Launchy::Version.to_s.must_match( /\d+\.\d+\.\d+/ )
|
5
|
+
_(Launchy::VERSION).must_match( /\d+\.\d+\.\d+/ )
|
6
|
+
_(Launchy::Version.to_s).must_match( /\d+\.\d+\.\d+/ )
|
7
7
|
Launchy::Version.to_a.each do |n|
|
8
|
-
n.to_i.must_be :>=, 0
|
8
|
+
_(n.to_i).must_be :>=, 0
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
data/tasks/default.rake
CHANGED
@@ -10,41 +10,26 @@ namespace :develop do
|
|
10
10
|
|
11
11
|
# Install all the development and runtime dependencies of this gem using the
|
12
12
|
# gemspec.
|
13
|
-
task :default do
|
13
|
+
task :default => 'Gemfile' do
|
14
14
|
require 'rubygems/dependency_installer'
|
15
15
|
installer = ::Gem::DependencyInstaller.new
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
puts "Installing gem depedencies needed for development"
|
20
|
-
This.platform_gemspec.dependencies.each do |dep|
|
21
|
-
if dep.matching_specs.empty? then
|
22
|
-
puts "Installing : #{dep}"
|
23
|
-
installer.install dep
|
24
|
-
else
|
25
|
-
puts "Skipping : #{dep} -> already installed #{dep.matching_specs.first.full_name}"
|
26
|
-
end
|
27
|
-
end
|
16
|
+
puts "Installing bundler..."
|
17
|
+
installer.install 'bundler'
|
18
|
+
sh 'bundle install'
|
28
19
|
puts "\n\nNow run 'rake test'"
|
29
20
|
end
|
30
21
|
|
31
22
|
# Create a Gemfile that just references the gemspec
|
32
23
|
file 'Gemfile' => :gemspec do
|
33
24
|
File.open( "Gemfile", "w+" ) do |f|
|
34
|
-
f.puts
|
25
|
+
f.puts "# DO NOT EDIT - This file is automatically generated"
|
26
|
+
f.puts "# Make changes to Manifest.txt and/or Rakefile and regenerate"
|
27
|
+
f.puts 'source "https://rubygems.org"'
|
35
28
|
f.puts 'gemspec'
|
36
29
|
end
|
37
30
|
end
|
38
|
-
|
39
|
-
desc "Create a bundler Gemfile"
|
40
|
-
task :using_bundler => 'Gemfile' do
|
41
|
-
puts "Now you can 'bundle'"
|
42
|
-
end
|
43
|
-
|
44
|
-
# Gemfiles are build artifacts
|
45
|
-
CLOBBER << FileList['Gemfile*']
|
46
31
|
end
|
47
|
-
desc "
|
32
|
+
desc "Bootstrap development"
|
48
33
|
task :develop => "develop:default"
|
49
34
|
|
50
35
|
#------------------------------------------------------------------------------
|
@@ -53,7 +38,7 @@ task :develop => "develop:default"
|
|
53
38
|
begin
|
54
39
|
require 'rake/testtask'
|
55
40
|
Rake::TestTask.new( :test ) do |t|
|
56
|
-
t.ruby_opts = %w[ -w
|
41
|
+
t.ruby_opts = %w[ -w ]
|
57
42
|
t.libs = %w[ lib spec test ]
|
58
43
|
t.pattern = "{test,spec}/**/{test_*,*_spec}.rb"
|
59
44
|
end
|
@@ -88,31 +73,16 @@ end
|
|
88
73
|
# Coverage - optional code coverage, rcov for 1.8 and simplecov for 1.9, so
|
89
74
|
# for the moment only rcov is listed.
|
90
75
|
#------------------------------------------------------------------------------
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
t.verbose = true
|
98
|
-
t.rcov_opts << "-x ^/" # remove all the global files
|
99
|
-
t.rcov_opts << "--sort coverage" # so we see the worst files at the top
|
100
|
-
end
|
101
|
-
rescue LoadError
|
102
|
-
This.task_warning( 'rcov' )
|
103
|
-
end
|
104
|
-
else
|
105
|
-
begin
|
106
|
-
require 'simplecov'
|
107
|
-
desc 'Run tests with code coverage'
|
108
|
-
task :coverage do
|
109
|
-
ENV['COVERAGE'] = 'true'
|
110
|
-
Rake::Task[:test].execute
|
111
|
-
end
|
112
|
-
CLOBBER << FileList["coverage"]
|
113
|
-
rescue LoadError
|
114
|
-
This.task_warning( 'simplecov' )
|
76
|
+
begin
|
77
|
+
require 'simplecov'
|
78
|
+
desc 'Run tests with code coverage'
|
79
|
+
task :coverage do
|
80
|
+
ENV['COVERAGE'] = 'true'
|
81
|
+
Rake::Task[:test].execute
|
115
82
|
end
|
83
|
+
CLOBBER << 'coverage' if File.directory?( 'coverage' )
|
84
|
+
rescue LoadError
|
85
|
+
This.task_warning( 'simplecov' )
|
116
86
|
end
|
117
87
|
|
118
88
|
#------------------------------------------------------------------------------
|
@@ -177,9 +147,10 @@ namespace :fixme do
|
|
177
147
|
end
|
178
148
|
|
179
149
|
def outdated_fixme_files
|
180
|
-
local_fixme_files.
|
150
|
+
local_fixme_files.select do |local|
|
181
151
|
upstream = fixme_project_path( local )
|
182
|
-
|
152
|
+
upstream.exist? &&
|
153
|
+
( Digest::SHA256.file( local ) != Digest::SHA256.file( upstream ) )
|
183
154
|
end
|
184
155
|
end
|
185
156
|
|
@@ -223,13 +194,12 @@ task :fixme => "fixme:default"
|
|
223
194
|
desc "Build the #{This.name}.gemspec file"
|
224
195
|
task :gemspec do
|
225
196
|
File.open( This.gemspec_file, "wb+" ) do |f|
|
197
|
+
f.puts "# DO NOT EDIT - This file is automatically generated"
|
198
|
+
f.puts "# Make changes to Manifest.txt and/or Rakefile and regenerate"
|
226
199
|
f.write This.platform_gemspec.to_ruby
|
227
200
|
end
|
228
201
|
end
|
229
202
|
|
230
|
-
# the gemspec is also a dev artifact and should not be kept around.
|
231
|
-
CLOBBER << This.gemspec_file.to_s
|
232
|
-
|
233
203
|
# .rbc files from ruby 2.0
|
234
204
|
CLOBBER << FileList["**/*.rbc"]
|
235
205
|
|
@@ -243,19 +213,19 @@ end
|
|
243
213
|
# Release - the steps we go through to do a final release, this is pulled from
|
244
214
|
# a compbination of mojombo's rakegem, hoe and hoe-git
|
245
215
|
#
|
246
|
-
# 1) make sure we are on the
|
216
|
+
# 1) make sure we are on the main branch
|
247
217
|
# 2) make sure there are no uncommitted items
|
248
218
|
# 3) check the manifest and make sure all looks good
|
249
219
|
# 4) build the gem
|
250
220
|
# 5) do an empty commit to have the commit message of the version
|
251
221
|
# 6) tag that commit as the version
|
252
|
-
# 7) push
|
222
|
+
# 7) push main
|
253
223
|
# 8) push the tag
|
254
224
|
# 7) pus the gem
|
255
225
|
#------------------------------------------------------------------------------
|
256
226
|
task :release_check do
|
257
|
-
unless `git branch` =~ /^\*
|
258
|
-
abort "You must be on the
|
227
|
+
unless `git branch` =~ /^\* main$/
|
228
|
+
abort "You must be on the main branch to release!"
|
259
229
|
end
|
260
230
|
unless `git status` =~ /^nothing to commit/m
|
261
231
|
abort "Nope, sorry, you have unfinished business"
|
@@ -266,7 +236,7 @@ desc "Create tag v#{This.version}, build and push #{This.platform_gemspec.full_n
|
|
266
236
|
task :release => [ :release_check, 'manifest:check', :gem ] do
|
267
237
|
sh "git commit --allow-empty -a -m 'Release #{This.version}'"
|
268
238
|
sh "git tag -a -m 'v#{This.version}' v#{This.version}"
|
269
|
-
sh "git push origin
|
239
|
+
sh "git push origin main"
|
270
240
|
sh "git push origin v#{This.version}"
|
271
241
|
sh "gem push pkg/#{This.platform_gemspec.full_name}.gem"
|
272
242
|
end
|
data/tasks/this.rb
CHANGED
@@ -13,7 +13,7 @@ class ThisProject
|
|
13
13
|
attr_accessor :email
|
14
14
|
|
15
15
|
# The homepage of this project
|
16
|
-
attr_accessor :homepage
|
16
|
+
attr_accessor :homepage
|
17
17
|
|
18
18
|
# The regex of files to exclude from the manifest
|
19
19
|
attr_accessor :exclude_from_manifest
|
@@ -25,7 +25,11 @@ class ThisProject
|
|
25
25
|
#
|
26
26
|
# Yields self
|
27
27
|
def initialize(&block)
|
28
|
-
@exclude_from_manifest =
|
28
|
+
@exclude_from_manifest = Regexp.union(/\.(git|DS_Store)/,
|
29
|
+
/^(doc|coverage|pkg|tmp|Gemfile(\.lock)?)/,
|
30
|
+
/^[^\/]+\.gemspec/,
|
31
|
+
/\.(swp|jar|bundle|so|rvmrc|travis.yml|byebug_history)$/,
|
32
|
+
/~$/)
|
29
33
|
@gemspecs = Hash.new
|
30
34
|
yield self if block_given?
|
31
35
|
end
|
@@ -119,7 +123,7 @@ class ThisProject
|
|
119
123
|
|
120
124
|
# Internal: Returns the gemspace associated with the current ruby platform
|
121
125
|
def platform_gemspec
|
122
|
-
gemspecs
|
126
|
+
gemspecs.fetch(platform) { This.ruby_gemspec }
|
123
127
|
end
|
124
128
|
|
125
129
|
def core_gemspec
|
@@ -132,6 +136,7 @@ class ThisProject
|
|
132
136
|
|
133
137
|
spec.summary = summary
|
134
138
|
spec.description = description
|
139
|
+
spec.license = license
|
135
140
|
|
136
141
|
spec.files = manifest
|
137
142
|
spec.executables = spec.files.grep(/^bin/) { |f| File.basename(f) }
|
@@ -140,6 +145,8 @@ class ThisProject
|
|
140
145
|
spec.extra_rdoc_files += spec.files.grep(/(txt|rdoc|md)$/)
|
141
146
|
spec.rdoc_options = [ "--main" , 'README.md',
|
142
147
|
"--markup", "tomdoc" ]
|
148
|
+
|
149
|
+
spec.required_ruby_version = '>= 2.3.0'
|
143
150
|
end
|
144
151
|
end
|
145
152
|
|
@@ -166,20 +173,6 @@ class ThisProject
|
|
166
173
|
return spec
|
167
174
|
end
|
168
175
|
|
169
|
-
# Internal: Set the recovery gem development dependency
|
170
|
-
#
|
171
|
-
# These are dynamically set since they cannot be hard coded as there is
|
172
|
-
# no way to ship them correctly in the gemspec
|
173
|
-
#
|
174
|
-
# Returns nothing.
|
175
|
-
def set_coverage_gem
|
176
|
-
if RUBY_VERSION < "1.9.0"
|
177
|
-
platform_gemspec.add_development_dependency( 'rcov', '~> 1.0.0' )
|
178
|
-
else
|
179
|
-
platform_gemspec.add_development_dependency( 'simplecov', '~> 0.8' )
|
180
|
-
end
|
181
|
-
end
|
182
|
-
|
183
176
|
# Internal: Return the platform of ThisProject at the current moment in time.
|
184
177
|
def platform
|
185
178
|
(RUBY_PLATFORM == "java") ? 'java' : Gem::Platform::RUBY
|
@@ -189,17 +182,23 @@ class ThisProject
|
|
189
182
|
def description_section
|
190
183
|
section_of( 'README.md', 'DESCRIPTION')
|
191
184
|
end
|
192
|
-
|
193
|
-
|
185
|
+
|
186
|
+
# Internal: Return the summary text from the README
|
194
187
|
def summary
|
195
188
|
description_section.first
|
196
189
|
end
|
197
190
|
|
198
|
-
# Internal: Return the full description text from the
|
191
|
+
# Internal: Return the full description text from the README
|
199
192
|
def description
|
200
193
|
description_section.join(" ").tr("\n", ' ').gsub(/[{}]/,'').gsub(/\[[^\]]+\]/,'') # strip rdoc
|
201
194
|
end
|
202
195
|
|
196
|
+
def license
|
197
|
+
license_file = project_path("LICENSE")
|
198
|
+
line = license_file.readlines.first
|
199
|
+
line.split(/\s+/).first
|
200
|
+
end
|
201
|
+
|
203
202
|
# Internal: The path to the gemspec file
|
204
203
|
def gemspec_file
|
205
204
|
project_path( "#{ name }.gemspec" )
|