wtnabe-shlauncher 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -11,7 +11,7 @@ require 'rake/contrib/rubyforgepublisher'
11
11
  require 'rake/contrib/sshpublisher'
12
12
  require 'fileutils'
13
13
  require 'lib/tractor'
14
- require 'template/lib/shlauncher'
14
+ require 'templates/lib/shlauncher'
15
15
  include FileUtils
16
16
 
17
17
  NAME = "shlauncher"
data/lib/tractor.rb CHANGED
@@ -5,7 +5,7 @@ require 'fileutils'
5
5
  require 'erb'
6
6
 
7
7
  class Shlauncher_Tractor
8
- VERSION = "0.0.2"
8
+ VERSION = "0.0.3"
9
9
 
10
10
  include FileUtils::Verbose
11
11
 
@@ -33,7 +33,7 @@ class Shlauncher_Tractor
33
33
  end
34
34
 
35
35
  def deploy_template
36
- cp_r( File.expand_path( File.dirname( __FILE__ ) + '/../template/' ),
36
+ cp_r( File.expand_path( File.dirname( __FILE__ ) + '/../templates/' ),
37
37
  launcher_dir )
38
38
  Dir.chdir( launcher_dir ) {
39
39
  mkdir( 'script' )
@@ -0,0 +1,4 @@
1
+ == 0.0.1 / <%=Time.now.strftime( "%Y-%m-%d" )%>
2
+
3
+ * initial release
4
+
data/templates/README ADDED
@@ -0,0 +1,30 @@
1
+
2
+ = <%=launcher%>
3
+
4
+
5
+ == Description
6
+
7
+ <%=description%>
8
+
9
+ == Installation
10
+
11
+ === Archive Installation
12
+
13
+ rake install
14
+
15
+ === Gem Installation
16
+
17
+ gem install <%=launcher%>
18
+
19
+
20
+ == Features/Problems
21
+
22
+
23
+ == Synopsis
24
+
25
+
26
+ == Copyright
27
+
28
+ Author:: <%=author%> <<%=email%>>
29
+ Copyright:: Copyright (c) <%=Time.now.strftime("%Y")%> <%=author%>
30
+ License::
@@ -0,0 +1,77 @@
1
+ # -*- mode: ruby -*-
2
+
3
+ require 'rubygems'
4
+ require 'rake'
5
+ require 'rake/clean'
6
+ require 'rake/packagetask'
7
+ require 'rake/gempackagetask'
8
+ require 'fileutils'
9
+ require 'lib/shlauncher'
10
+ include FileUtils
11
+
12
+ NAME = "<%=launcher%>"
13
+ AUTHOR = "<%=author%>"
14
+ EMAIL = "<%=email%>"
15
+ DESCRIPTION = "<%=description%>"
16
+ BIN_FILES = %w( <%=launcher%> )
17
+
18
+ VERS = '0.0.1'
19
+ REV = File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil
20
+ CLEAN.include ['**/.*.sw?', '*.gem', '.config']
21
+
22
+ task :default do
23
+ app = Rake.application
24
+ app.options.show_task_pattern = Regexp.new('')
25
+ app.display_tasks_and_comments
26
+ end
27
+
28
+ task :package => [:clean]
29
+
30
+ spec = Gem::Specification.new do |s|
31
+ s.name = NAME
32
+ s.version = VERS
33
+ s.platform = Gem::Platform::RUBY
34
+ s.has_rdoc = false
35
+ s.summary = DESCRIPTION
36
+ s.description = DESCRIPTION
37
+ s.author = AUTHOR
38
+ s.email = EMAIL
39
+ s.executables = BIN_FILES
40
+ s.bindir = "bin"
41
+ s.require_path = "lib"
42
+ s.homepage = ""
43
+ s.rubyforge_project = ""
44
+ #s.autorequire = ""
45
+
46
+ s.add_dependency('rake', '>= 0')
47
+ #s.required_ruby_version = '>= 1.8.2'
48
+
49
+ s.files = %w(README ChangeLog Rakefile) +
50
+ Dir.glob("{bin,doc,etc,lib,script}/**/*")
51
+
52
+ end
53
+
54
+ Rake::GemPackageTask.new(spec) do |p|
55
+ p.need_tar = true
56
+ p.gem_spec = spec
57
+ end
58
+
59
+ task :install do
60
+ name = "#{NAME}-#{VERS}.gem"
61
+ sh %{rake package}
62
+ sh %{sudo gem install pkg/#{name}}
63
+ end
64
+
65
+ task :uninstall => [:clean] do
66
+ sh %{sudo gem uninstall #{NAME}}
67
+ end
68
+
69
+ desc 'Show information about the gem.'
70
+ task :debug_gem do
71
+ puts spec.to_ruby
72
+ end
73
+
74
+ desc 'Update gem spec'
75
+ task :gemspec do
76
+ open("#{NAME}.gemspec", 'w').write spec.to_ruby
77
+ end
@@ -0,0 +1,20 @@
1
+ #! /usr/bin/env rake -f
2
+ # -*- mode: ruby; coding: utf-8 -*-
3
+
4
+ require File.dirname( __FILE__ ) + '/../lib/shlauncher'
5
+
6
+ launcher = Shlauncher.new( File.dirname( __FILE__ ) + '/../script' )
7
+
8
+ launcher.tasks.each { |t|
9
+ desc launcher.desc( t )
10
+ task t do
11
+ launcher.launch( t )
12
+ end
13
+ }
14
+
15
+ task :default do
16
+ app = Rake.application
17
+ app.name = File.basename( __FILE__ )
18
+ app.options.show_task_pattern = Regexp.new('')
19
+ app.display_tasks_and_comments
20
+ end
@@ -0,0 +1,127 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ class Shlauncher
4
+ VERSION = '0.0.1'
5
+
6
+ LINEBREAK = /(?:\r\n|[\r\n])/
7
+ IGNORE_PATTERNS = %w( *~ *.bak CVS .svn )
8
+
9
+ def initialize( script_path = nil )
10
+ if ( script_path and File.directory?( script_path ) )
11
+ @script_path = File.expand_path( script_path )
12
+ end
13
+ end
14
+
15
+ def launch( task )
16
+ command = File.join( script_path, command_path( task ) )
17
+ if ( File.directory?( command ) )
18
+ tasks( command_path( task ) ).each { |t|
19
+ launch( t )
20
+ }
21
+ else
22
+ system( command )
23
+ end
24
+ end
25
+
26
+ def commands_ignored( path = nil )
27
+ base = ( path ) ? File.join( script_path, path ) : script_path
28
+
29
+ cmds = []
30
+ IGNORE_PATTERNS.each { |p|
31
+ Dir.chdir( base ) {
32
+ a = Dir.glob( p )
33
+ cmds += a if a.is_a?( Array )
34
+ }
35
+ }
36
+
37
+ return cmds.uniq
38
+ end
39
+
40
+ def tasks( path = nil )
41
+ base = ( path ) ? File.join( script_path, path ) : script_path
42
+
43
+ tasks = nil
44
+ Dir.chdir( base ) {
45
+ tasks = Dir.glob( '*' ).map { |f|
46
+ if ( File.directory?( f ) )
47
+ [f, tasks( (( path ) ? File.join( path, f ) : f) )]
48
+ elsif ( File.executable?( f ) and
49
+ !commands_ignored( path ).include?( f ) )
50
+ ( path ) ? task( File.join( path, f ) ) : f
51
+ else
52
+ nil
53
+ end
54
+ }.compact.flatten.sort
55
+ }
56
+
57
+ return tasks
58
+ end
59
+
60
+ #
61
+ # extract first comment block
62
+ #
63
+ # * read only #-style comment
64
+ # * ignore shebang and local vars defining lines
65
+ # * ignore all after body started ( even #-style comment )
66
+ #
67
+ def desc( task )
68
+ command = command_path( task )
69
+ file = File.join( script_path, command )
70
+ if ( File.exist?( file ) and File.readable?( file ) )
71
+ if ( File.directory?( file ) )
72
+ "exec all tasks in scope `#{task}'"
73
+ else
74
+ body_started = false
75
+ File.open( file ).read.split( LINEBREAK ).map { |line|
76
+ if ( shebang_or_localvar_line?( line ) or empty_line?( line ) or
77
+ body_started )
78
+ nil
79
+ else
80
+ if ( not_comment_line?( line ) )
81
+ body_started = true
82
+ nil
83
+ else
84
+ line.sub( /\A#\s*/, '' )
85
+ end
86
+ end
87
+ }.compact.map { |e|
88
+ ( e.size > 0 ) ? e : nil
89
+ }.compact.join( ", " )
90
+ end
91
+ end
92
+ end
93
+
94
+ def command_path( task )
95
+ return task.gsub( /:/, '/' )
96
+ end
97
+
98
+ def task( command_path )
99
+ return command_path.gsub( /\//, ':' )
100
+ end
101
+
102
+ def script_path
103
+ if ( !@script_path )
104
+ @script_path = File.expand_path( File.dirname( __FILE__ ) + '/../script' )
105
+ end
106
+
107
+ return @script_path
108
+ end
109
+
110
+ def shebang_or_localvar_line?( line )
111
+ return ( /\A#!/ =~ line or /\A#\s*(-\*-.+:.+-\*-|vim:)/ =~ line )
112
+ end
113
+
114
+ def empty_line?( line )
115
+ return ( /[^\s]/ !~ line )
116
+ end
117
+
118
+ def not_comment_line?( line )
119
+ return ( /\A\s*#/ !~ line )
120
+ end
121
+ end
122
+
123
+ module Rake
124
+ class Application
125
+ attr_accessor :name
126
+ end
127
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wtnabe-shlauncher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - wtnabe
@@ -49,8 +49,16 @@ files:
49
49
  - test/shlauncher_test.rb
50
50
  - test/tractor_test.rb
51
51
  - lib/tractor.rb
52
- has_rdoc: false
52
+ - templates/bin
53
+ - templates/bin/shlauncher
54
+ - templates/ChangeLog
55
+ - templates/lib
56
+ - templates/lib/shlauncher.rb
57
+ - templates/Rakefile
58
+ - templates/README
59
+ has_rdoc: true
53
60
  homepage: ""
61
+ licenses:
54
62
  post_install_message:
55
63
  rdoc_options:
56
64
  - --title
@@ -82,9 +90,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
82
90
  requirements: []
83
91
 
84
92
  rubyforge_project: ""
85
- rubygems_version: 1.2.0
93
+ rubygems_version: 1.3.5
86
94
  signing_key:
87
- specification_version: 3
95
+ specification_version: 2
88
96
  summary: Scaffold your custom launcher. Launch from your shell script ( and also Ruby script ) collection.
89
97
  test_files:
90
98
  - test/shlauncher_test.rb