s4t-utils 1.0.2 → 1.0.3

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.
@@ -1,3 +1,11 @@
1
+ Version 1.0.3
2
+ * Added with_stdin and capturing_stdout
3
+ * Added set_test_paths and set_script_lib_path
4
+ * pi can take symbols as captions.
5
+ * Added without_pretty_indentation and has_exact_prefix?
6
+ The names were chosen to be so bad there'd be little
7
+ chance of name clashes.
8
+
1
9
  Version 1.0.2
2
10
  * Added user_denies as an alias for user_disputes.
3
11
 
@@ -16,6 +16,7 @@ data/make-s4t-project/setup.rb
16
16
  data/make-s4t-project/sub-lib-skeleton
17
17
  data/make-s4t-project/test-skeleton
18
18
  data/make-s4t-project/version-skeleton
19
+ homepage/index.html
19
20
  lib/s4t-utils.rb
20
21
  lib/s4t-utils/capturing-globals.rb
21
22
  lib/s4t-utils/claims.rb
@@ -28,6 +29,7 @@ lib/s4t-utils/more-assertions.rb
28
29
  lib/s4t-utils/os.rb
29
30
  lib/s4t-utils/rake-task-helpers.rb
30
31
  lib/s4t-utils/rakefile-common.rb
32
+ lib/s4t-utils/ruby-extensions.rb
31
33
  lib/s4t-utils/svn-file-movement.rb
32
34
  lib/s4t-utils/test-util.rb
33
35
  lib/s4t-utils/version.rb
@@ -20,3 +20,14 @@ Hoe.new("s4t-utils", S4tUtils::Version) do |p|
20
20
  p.url = "http://s4t-utils.rubyforge.org"
21
21
  p.remote_rdoc_dir = 'rdoc'
22
22
  end
23
+
24
+ desc "Tag release with current version."
25
+ task 'tag_release' do
26
+ root = "svn+ssh://marick@rubyforge.org/var/svn/s4t-utils"
27
+ from = "#{root}/trunk"
28
+ to = "#{root}/tags/rel-#{S4tUtils::Version}"
29
+ message = "Release #{S4tUtils::Version}"
30
+ exec = "svn copy -m '#{message}' #{from} #{to}"
31
+ puts exec
32
+ system(exec)
33
+ end
@@ -0,0 +1,16 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <head>
4
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8">
5
+ <title>s4t-utils</title>
6
+
7
+ </head>
8
+ <body>
9
+ <h1><i>Everyday Scripting with Ruby</i> Utilities</h1>
10
+ <a href="http://www.pragmaticprogrammer.com/titles/bmsft/"><img src="http://www.testing.com/blog/images/bookcover-small.png" style="float: left; border: 0; margin-right: 0.5in"/></a>
11
+ <p>This is the most recent version of the utilities used in <a href="http://www.exampler.com/blog/" title="Exploration Through Example">Brian Marick</a>'s <i><a href="http://www.pragmaticprogrammer.com/titles/bmsft/">Everyday Scripting with Ruby</a></i>.</p>
12
+ <p><a href="http://s4t-utils.rubyforge.org/rdoc/" title="s4t-utils's Documentation">Documentation</a> (rdoc)</p>
13
+ <p><a href="http://rubyforge.org/frs/?group_id=4026" title="RubyForge: Everyday Scripting Utilities: Project Filelist">Download</a></p>
14
+
15
+
16
+ </body>
@@ -9,6 +9,7 @@ require 's4t-utils/hacks'
9
9
  require 's4t-utils/command-line'
10
10
  require 's4t-utils/test-util'
11
11
  require 's4t-utils/os'
12
+ require 's4t-utils/ruby-extensions'
12
13
 
13
14
  require 'pp'
14
15
 
@@ -17,6 +17,23 @@ module S4tUtils
17
17
  end
18
18
  new_stderr.string
19
19
  end
20
+
21
+ # Run the block, capturing output to $stdout in a string.
22
+ # That string is the method's return value.
23
+ #
24
+ # Note: this assigns to $stdout, which is deprecated in
25
+ # favor of $stdout.reopen. However, reopen can't take a
26
+ # StringIO as an argument.
27
+ def capturing_stdout
28
+ new_stdout = StringIO.new
29
+ $stdout = new_stdout
30
+ begin
31
+ yield
32
+ ensure
33
+ $stdout = STDOUT
34
+ end
35
+ new_stdout.string
36
+ end
20
37
 
21
38
  # Run the block, replacing the values of environment variables
22
39
  # with the values given in the hash _settings_. The environment
@@ -44,7 +61,7 @@ module S4tUtils
44
61
  ENV['HOME'] = '.'
45
62
  yield
46
63
  ensure
47
- ENV['HOME'] = @old_home
64
+ ENV['HOME'] = old_home
48
65
  end
49
66
  end
50
67
 
@@ -89,5 +106,15 @@ module S4tUtils
89
106
  ARGV.replace(old_argv)
90
107
  end
91
108
  end
109
+
110
+ def with_stdin(string)
111
+ old_stdin = $stdin
112
+ $stdin = StringIO.new(string)
113
+ yield
114
+ ensure
115
+ $stdin = old_stdin
116
+ end
117
+
118
+
92
119
 
93
120
  end
@@ -21,13 +21,14 @@ module S4tUtils
21
21
  # pi [1, 2, 3], 'input' # => 'input: [1, 2, 3]
22
22
  #
23
23
  # The _arg_ is printed using +inspect+. If _leader_ isn't given,
24
- # nothing is printed before _arg_.
24
+ # nothing is printed before _arg_. _leader_ can be a string or symbol.
25
25
  #
26
26
  # pi returns its _arg_, which is occasionally useful for sticking
27
27
  # debugging into the middle of complicated expressions.
28
28
  def pi(arg, leader=nil)
29
- leader = (leader == nil) ? '' : leader + ': '
30
- prog1(arg) { puts leader + arg.inspect }
29
+ leader = leader.to_s if leader
30
+ leader = (leader == nil) ? '' : leader + ': '
31
+ prog1(arg) { puts leader + arg.inspect }
31
32
  end
32
33
 
33
34
 
@@ -23,6 +23,35 @@ module S4tUtils
23
23
  end
24
24
  end
25
25
  end
26
+
27
+ # Find and set the paths a test needs to run, given the normal
28
+ # Ruby directory structure. _given_ is something below the test directory.
29
+ # PACKAGE_ROOT becomes the root of
30
+ # the structure. PACKAGE_ROOT/lib and PACKAGE_ROOT itself are
31
+ # put on the front of the path (the latter is so that
32
+ # tests can require 'test/something'.
33
+ def set_test_paths(given)
34
+ return if S4tUtils.const_defined?("PACKAGE_ROOT")
26
35
 
36
+ path = File.expand_path(given)
37
+ i = path.index("/test/")
38
+ S4tUtils.const_set("PACKAGE_ROOT", path[0...i])
39
+ $:.unshift("#{PACKAGE_ROOT}/lib")
40
+ $:.unshift("#{PACKAGE_ROOT}")
41
+ end
42
+ module_function :set_test_paths
43
+
44
+ # If the _given_ file lives as a script inside a typical Ruby development
45
+ # structure, put ../lib at the front of the path. That includes files
46
+ # from there in preference to old gems lying around.
47
+ def set_script_lib_path(given)
48
+ path = File.expand_path(given)
49
+ p = lambda { | x | File.join(File.dirname(path), '..', x) }
50
+ l = p['lib']
51
+ t = p['test']
52
+ s = p['setup.rb']
53
+ $:.unshift(l) if File.exists?(l) && File.exists?(t) && File.exists?(s)
54
+ end
55
+ module_function :set_script_lib_path
27
56
 
28
57
  end
@@ -0,0 +1,67 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Created by Brian Marick on 2007-09-27.
4
+ # Copyright (c) 2007. All rights reserved.
5
+
6
+ # After some time trying to write libraries that used facets or extensions
7
+ # and didn't conflict with other libraries that used (for example) active_support,
8
+ # I give up. I'm going to copy the methods I need, rename them to something so
9
+ # bad there'll never be a conflict, and see if that's more painful.
10
+ class String
11
+ # What everyone calls starts_with?
12
+ def has_exact_prefix?(prefix)
13
+ index(prefix) == 0
14
+ end
15
+
16
+ # Copied from the extensions library (http://extensions.rubyforge.org)
17
+ #
18
+ # Trims a string:
19
+ # - removes one initial blank line
20
+ # - removes trailing spaces on each line
21
+ # - if +margin+ is given, removes initial spaces up to and including
22
+ # the margin on each line, plus one space
23
+ #
24
+ # This is designed specifically for working with inline documents.
25
+ # Here-documents are great, except they tend to go against the indentation
26
+ # of your code. This method allows a convenient way of using %{}-style
27
+ # documents. For instance:
28
+ #
29
+ # USAGE = %{
30
+ # | usage: prog [-o dir] -h file...
31
+ # | where
32
+ # | -o dir outputs to DIR
33
+ # | -h prints this message
34
+ # }.without_pretty_indentation("|")
35
+ #
36
+ # # USAGE == "usage: prog [-o dir] -h file...\n where"...
37
+ # # (note single space to right of margin is deleted)
38
+ #
39
+ # Note carefully that if no margin string is given, then there is no
40
+ # clipping at the beginning of each line and your string will remain
41
+ # indented.
42
+ def without_pretty_indentation(margin=nil)
43
+ s = self.dup
44
+ # Remove initial blank line.
45
+ s.sub!(/\A[ \t]*\n/, "")
46
+ # Get rid of the margin, if it's specified.
47
+ unless margin.nil?
48
+ margin_re = Regexp.escape(margin || "")
49
+ margin_re = /^[ \t]*#{margin_re} ?/
50
+ s.gsub!(margin_re, "")
51
+ end
52
+ # Remove trailing whitespace on each line
53
+ s.gsub!(/[ \t]+$/, "")
54
+ s
55
+ end
56
+
57
+ #
58
+ # Indents the string +n+ spaces.
59
+ # Taken from extensions (extensions.rubyforge.org), except that this
60
+ # version doesn't take a negative argument.
61
+ #
62
+ def indent_by(n)
63
+ n = n.to_int
64
+ gsub(/^/, " "*n)
65
+ end
66
+
67
+ end
@@ -1,3 +1,3 @@
1
1
  module S4tUtils
2
- Version = '1.0.2'
2
+ Version = '1.0.3'
3
3
  end
@@ -38,5 +38,22 @@ class CapturingGlobalsTests < Test::Unit::TestCase
38
38
  assert_equal('steak', ARGV[1])
39
39
  }
40
40
  end
41
+
42
+ def test_with_stdin
43
+ with_stdin("line1\nline2") do
44
+ assert_equal("line1\n", readline)
45
+ assert_equal("line2", readline)
46
+ end
47
+ end
48
+
49
+ def test_with_nested_stdin
50
+ with_stdin("line1\nline2") do
51
+ assert_equal("line1\n", readline)
52
+ with_stdin("intermediate") do
53
+ assert_equal("intermediate", readline)
54
+ end
55
+ assert_equal("line2", readline)
56
+ end
57
+ end
41
58
 
42
59
  end
@@ -38,5 +38,35 @@ class ClaimsTests < Test::Unit::TestCase
38
38
  forwarder.values_at
39
39
  assert_equal(["one", "two", "three"], forwarder.values_at(3))
40
40
  end
41
+
42
+ def test_pi_prints_to_standard_output_using_inspect
43
+ result = capturing_stdout do
44
+ pi [1, 2, 3], "caption"
45
+ end
46
+ assert_equal("caption: [1, 2, 3]\n", result)
47
+ end
48
+
49
+ def test_pi_does_not_need_a_caption
50
+ result = capturing_stdout do
51
+ pi [1, 2, 3]
52
+ end
53
+ assert_equal("[1, 2, 3]\n", result)
54
+ end
55
+
56
+ def test_pi_can_take_a_symbol_as_a_caption
57
+ result = capturing_stdout do
58
+ pi [1, 2, 3], :caption
59
+ end
60
+ assert_equal("caption: [1, 2, 3]\n", result)
61
+ end
62
+
63
+ def test_pi_returns_a_useful_value
64
+ result = capturing_stdout do
65
+ val = pi([1, 2, 3], 'val')
66
+ assert_equal([1, 2, 3], val)
67
+ end
68
+ assert_equal("val: [1, 2, 3]\n", result)
69
+ end
70
+
41
71
 
42
72
  end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: s4t-utils
5
5
  version: !ruby/object:Gem::Version
6
- version: 1.0.2
7
- date: 2007-07-27 00:00:00 -05:00
6
+ version: 1.0.3
7
+ date: 2007-09-27 00:00:00 -05:00
8
8
  summary: _Everyday Scripting with Ruby_ utilities.
9
9
  require_paths:
10
10
  - lib
@@ -47,6 +47,7 @@ files:
47
47
  - data/make-s4t-project/sub-lib-skeleton
48
48
  - data/make-s4t-project/test-skeleton
49
49
  - data/make-s4t-project/version-skeleton
50
+ - homepage/index.html
50
51
  - lib/s4t-utils.rb
51
52
  - lib/s4t-utils/capturing-globals.rb
52
53
  - lib/s4t-utils/claims.rb
@@ -59,6 +60,7 @@ files:
59
60
  - lib/s4t-utils/os.rb
60
61
  - lib/s4t-utils/rake-task-helpers.rb
61
62
  - lib/s4t-utils/rakefile-common.rb
63
+ - lib/s4t-utils/ruby-extensions.rb
62
64
  - lib/s4t-utils/svn-file-movement.rb
63
65
  - lib/s4t-utils/test-util.rb
64
66
  - lib/s4t-utils/version.rb
@@ -114,5 +116,5 @@ dependencies:
114
116
  requirements:
115
117
  - - ">="
116
118
  - !ruby/object:Gem::Version
117
- version: 1.2.2
119
+ version: 1.3.0
118
120
  version: