ratch 0.1 → 0.2.1

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.
File without changes
data/README ADDED
@@ -0,0 +1,37 @@
1
+ = Ratch
2
+
3
+ == Welcome to Ratch
4
+
5
+ Ratch is a Ruby-based Batch file system. It provides a Ruby-based DSL
6
+ for creating utility/task scripts. It is similar in function to build tools,
7
+ like Make, Ant, Maven, Rake, et al. But unlike these it stears clear
8
+ of monolithic ? and instead more closely follows the "UNIX-way".
9
+
10
+
11
+ == Installation
12
+
13
+ $ gem install ratch
14
+
15
+ Or download the tar.gz and install manually,
16
+
17
+ $ tar -xvzf ratch-x.y.z.tar.gz
18
+ $ cd ratch-x.y.z
19
+ $ sudo task/setup
20
+
21
+ For Windows users the last line will be:
22
+
23
+ $ ruby task/setup
24
+
25
+
26
+ == Usage
27
+
28
+ Basic usage simply entails writing a script that utilizes Ratch's syntax.
29
+
30
+
31
+ == License
32
+
33
+ Copyright (c) 2007 Thomas Sawyer (Trans)
34
+
35
+ GPL 3 ???
36
+
37
+
data/bin/lt CHANGED
@@ -1,4 +1,56 @@
1
- #! /usr/bin/ruby
1
+ #! /usr/bin/ruby1.8
2
2
 
3
- load 'ratch/cli/lt.rb'
3
+ # scan task scripts for descriptions
4
4
 
5
+ def script_desc( dir )
6
+ help = {}
7
+ files = Dir.glob( File.join( dir, '*' ) )
8
+ files.each do |fname|
9
+ next if FileTest.directory?( fname )
10
+ next unless FileTest.executable?( fname )
11
+ desc = ''
12
+ File.open(fname) do |f|
13
+ line = ''
14
+ until f.eof?
15
+ line = f.gets
16
+ case line
17
+ when /^(#!|\s*$)/
18
+ next
19
+ when /^\s*#(.*)/
20
+ desc = $1.strip; break
21
+ else
22
+ desc = nil; break
23
+ end
24
+ end
25
+ end
26
+ help[File.basename(fname)] = desc
27
+ end
28
+ help
29
+ end
30
+
31
+ def show( dir )
32
+ tasks = script_desc( dir )
33
+ max = tasks.keys.max{ |a,b| a.size <=> b.size }.size
34
+ if dir == ''
35
+ max += 4 + 2
36
+ else
37
+ max += dir.size + 2
38
+ end
39
+ tasks.each do |name, sum|
40
+ #sum = Sake.help_summary( type )
41
+ if dir == ''
42
+ cmd = "sake #{name}"
43
+ else
44
+ cmd = File.join( dir.chomp('/'), name )
45
+ end
46
+ puts "%-#{max}s # %s" % [cmd, sum]
47
+ end
48
+ end
49
+
50
+ dir = ARGV[0] || '.'
51
+
52
+ if File.directory?( dir )
53
+ show( dir )
54
+ else
55
+ puts "#{dir} is not a directory"
56
+ end
data/bin/ludo CHANGED
@@ -1,4 +1,14 @@
1
- #! /usr/bin/ruby
1
+ #! /usr/bin/ruby1.8
2
2
 
3
- load 'ratch/cli/ludo.rb'
3
+ require 'facets/filetest'
4
4
 
5
+ name = ARGV[0]
6
+
7
+ if name
8
+ Dir.chdir '..' until FileTest.executable?(name) or FileTest.root?(Dir.pwd)
9
+ if FileTest.executable?( name )
10
+ system name
11
+ end
12
+ else
13
+ puts "Script #{name} not found."
14
+ end
data/bin/ratch CHANGED
@@ -1,6 +1,52 @@
1
- #! /usr/bin/ruby
1
+ #! /usr/bin/ruby1.8
2
2
 
3
- require 'ratch/cli/ratch'
3
+ #require 'shellwords'
4
+ require 'rbconfig' # replace with facets/rbsystem in future ?
5
+ require 'ratch/batch'
6
+
7
+ module Ratch
8
+
9
+ class RatchCommand
10
+
11
+ # Quick start.
12
+
13
+ def self.start(file)
14
+ new.run(file)
15
+ end
16
+
17
+ # Run task.
18
+
19
+ def run(file)
20
+ if file
21
+ BatchFile.new(file).call
22
+ else
23
+ help
24
+ end
25
+ end
26
+
27
+ # Dispaly help.
28
+
29
+ def help
30
+ help = <<-END
31
+ USAGE:
32
+
33
+ ratch [options] <taskfile>
34
+
35
+ OPTIONS:
36
+
37
+ --dryrun --nohram
38
+
39
+ --trace
40
+
41
+ --debug
42
+ END
43
+ puts help.gsub(/^\s+/, '')
44
+ end
45
+
46
+ end
47
+
48
+
49
+ end
4
50
 
5
51
  #load($0 = ARGV.shift)
6
52
 
File without changes
@@ -0,0 +1,129 @@
1
+ #!/usr/bin/env ratch
2
+
3
+ # Extract embedded tests.
4
+
5
+ # Extract unit tests. This task scans every package script
6
+ # looking for sections of the form:
7
+ #
8
+ # =begin test
9
+ # ...
10
+ # =end
11
+ #
12
+ # With appropriate headers, it copies these sections to files
13
+ # in your project's test/ dir, which then can be run using the
14
+ # Ratchet test task. The exact directory layout of the files to
15
+ # be tested is reflected in the test directory. You can then
16
+ # use project.rb's test task to run the tests.
17
+ #
18
+ # files Files to extract ['lib/**/*.rb']
19
+ # output Test directory ['test/']
20
+
21
+ main :extest do
22
+ extract_tests # Deal with arg once rathc has better support fot it.
23
+ end
24
+
25
+ # Extract tests for scripts.
26
+
27
+ def extract_tests(files=nil)
28
+ output = 'test/embedded' # Don't think output should be setable.
29
+
30
+ files = files || 'lib/**/*.rb'
31
+ files = 'lib/**/*.rb' if TrueClass == files
32
+ files = [files].flatten.compact
33
+
34
+ filelist = files.collect{ |f| Dir.glob(f) }
35
+ filelist.flatten!
36
+ if filelist.empty?
37
+ puts "No scripts found from which to extract tests."
38
+ return
39
+ end
40
+
41
+ mkdir_p(output) unless directory?(output)
42
+
43
+ #vrunner = VerbosityRunner.new("Extracting", verbosity?)
44
+ #vrunner.setup(filelist.size)
45
+
46
+ filelist.each do |file|
47
+ #vrunner.prepare(file)
48
+
49
+ testing = extract_test_from_file( file )
50
+ if testing.strip.empty?
51
+ status = "[NONE]"
52
+ else
53
+ complete_test = create_test(testing, file)
54
+ libpath = File.dirname(file)
55
+ testfile = "test_" + File.basename(file)
56
+ fp = File.join(output, libpath, testfile)
57
+ unless directory?( File.dirname(fp))
58
+ mkdir_p(File.dirname(fp))
59
+ end
60
+ if dryrun?
61
+ puts "write #{fp}"
62
+ else
63
+ File.open(fp, "w"){ |fw| fw << complete_test }
64
+ end
65
+ status = "[TEST]"
66
+ end
67
+
68
+ #vrunner.complete(file, status)
69
+ end
70
+
71
+ #vrunner.finish(
72
+ # :normal => "#{filelist.size} files had tests extracted.",
73
+ # :check => false
74
+ #)
75
+ end
76
+
77
+ private
78
+
79
+ # Extract test from a file's testing comments.
80
+
81
+ def extract_test_from_file( file )
82
+ return nil if ! File.file?( file )
83
+ tests = ""; inside = false
84
+ fstr = File.read( file )
85
+ fstr.split(/\n/).each do |l|
86
+ if l =~ /^=begin[ ]*test/i
87
+ tests << "\n"
88
+ inside = true
89
+ next
90
+ elsif inside and l =~ /^=[ ]*end/
91
+ inside = false
92
+ next
93
+ end
94
+ if inside
95
+ tests << l << "\n"
96
+ end
97
+ end
98
+ tests
99
+ end
100
+
101
+ # Generate the test.
102
+
103
+ def create_test( testing, file )
104
+ fp = file.split(/[\/]/)
105
+ if fp[0] == 'lib'
106
+ reqf = "require '#{fp[1..-1].join('/')}'"
107
+ else
108
+ reqf = ''
109
+ end
110
+ str = []
111
+ str << " # _____ _"
112
+ str << " # |_ _|__ ___| |_"
113
+ str << " # | |/ _ \\/ __| __|"
114
+ str << " # | | __/\\__ \\ |"
115
+ str << " # |_|\\___||___/\\__|"
116
+ str << " #"
117
+ str << " # for #{file}"
118
+ str << " #"
119
+ str << " # Extracted #{Time.now}"
120
+ str << " # w/ Test Extraction Ratchet"
121
+ str << " #"
122
+ str << ""
123
+ str << " #{reqf}"
124
+ str << ""
125
+ str << testing
126
+ str << "\n"
127
+ str = str.join("\n")
128
+ str
129
+ end
File without changes
@@ -0,0 +1,63 @@
1
+ #!/usr/bin/env ratch
2
+
3
+ # install package to site_ruby
4
+
5
+ # This tool installs the package to site_ruby
6
+ # using Ruby's defualt configuration settings.
7
+ # If you want to change these you can can supply
8
+ # config settings for 'prefix' and/or 'sitedir'.
9
+
10
+ main :install do
11
+
12
+ system_prefix = Config::CONFIG['prefix']
13
+ system_libdir = Config::CONFIG['sitelibdir']
14
+
15
+ config = config_load('install')
16
+
17
+ prefix = config['prefix'] || system_prefix
18
+ libdir = config['libdir']
19
+
20
+ unless libdir
21
+ if (prefix == system_prefix) then
22
+ libdir = system_libdir
23
+ else
24
+ libdir = File.join(prefix, system_libdir[system_prefix.size..-1])
25
+ end
26
+ end
27
+
28
+ # TODO Probably should get files from manifest, if it exists.
29
+ # files = projectinfo.filelist
30
+ files = Dir.glob("{lib,ext,bin}/**/*").select{ |f| File.file?(f) }
31
+
32
+ lib_files = files.grep(/^(lib|ext)/)
33
+ bin_files = files.grep(/^bin/)
34
+
35
+ # Copy files to proper locations.
36
+
37
+ lib_files.each do |file|
38
+ dest = File.dirname(file).sub('lib/', '')
39
+ dest = File.join(libdir, dest)
40
+ #dest.sub!(/(core|more)\//, '') # SPECIAL FOR FACETS !!!!!
41
+ if noharm?
42
+ puts "mkdir -p #{dest}"
43
+ puts "install -m 0444 #{file} #{dest}"
44
+ else
45
+ mkdir_p dest unless File.directory?(dest)
46
+ install file, dest, :mode => 0444
47
+ end
48
+ end
49
+
50
+ bin_files.each do |file|
51
+ dest = File.dirname(file)
52
+ dest = File.join(prefix, dest)
53
+ if noharm?
54
+ puts "mkdir -p #{dest}"
55
+ puts "install -m 0555 #{file} #{dest}"
56
+ else
57
+ mkdir_p dest unless File.directory?(dest)
58
+ install file, dest, :mode => 0555
59
+ end
60
+ end
61
+
62
+ end
63
+
@@ -0,0 +1,74 @@
1
+ #!/usr/bin/env ratch
2
+
3
+ # Install package to site_ruby.
4
+ #
5
+ # This script installs Facets to site_ruby location
6
+ # using Ruby's defualt configuration settings.
7
+ # If you want to change these, you can supply
8
+ # configuration settings for 'prefix' and/or 'sitedir'.
9
+
10
+ main :install do
11
+
12
+ system_prefix = Config::CONFIG['prefix']
13
+ system_libdir = Config::CONFIG['sitelibdir']
14
+
15
+ config = configuration['install'] || {}
16
+
17
+ prefix = config['prefix'] || system_prefix
18
+ libdir = config['libdir']
19
+
20
+ unless libdir
21
+ if (prefix == system_prefix) then
22
+ libdir = system_libdir
23
+ else
24
+ libdir = File.join(prefix, system_libdir[system_prefix.size..-1])
25
+ end
26
+ end
27
+
28
+ libpaths = configuration('meta/project.yaml')['libpaths']
29
+
30
+ # We need to copy them into site_ruby in the opposite order they
31
+ # would be searched for by require.
32
+
33
+ libpaths.reverse!
34
+
35
+ # Copy lib files to site_ruby location, in proper order!
36
+
37
+ lib_files = Dir.glob("lib/**/*").select{ |f| File.file?(f) }
38
+
39
+ #['core', 'fore', 'more' ]
40
+ libpaths.each do |loc|
41
+ files = lib_files.grep(/^#{loc}/)
42
+ files.each do |file|
43
+ dest = File.dirname(file)
44
+ #dest.sub!('lib/', '')
45
+ #dest.sub!(loc, '')
46
+ dest.sub!(loc, '')
47
+ dest = File.join(libdir, dest)
48
+ if noharm?
49
+ puts "mkdir -p #{dest}" unless File.directory?(dest)
50
+ puts "install -m 0444 #{file} #{dest}"
51
+ else
52
+ mkdir_p dest unless File.directory?(dest)
53
+ install file, dest, :mode => 0444
54
+ end
55
+ end
56
+ lib_files -= files # speed things up be removing what we've already covered.
57
+ end
58
+
59
+ # Copy bin files to site_ruby location.
60
+
61
+ bin_files = Dir.glob("bin/*").select{ |f| File.file?(f) }
62
+ bin_files.each do |file|
63
+ dest = File.dirname(file)
64
+ dest = File.join(prefix, dest)
65
+ if noharm?
66
+ puts "mkdir -p #{dest}" unless File.directory?(dest)
67
+ puts "install -m 0555 #{file} #{dest}"
68
+ else
69
+ mkdir_p dest unless File.directory?(dest)
70
+ install file, dest, :mode => 0555
71
+ end
72
+ end
73
+
74
+ end