boca-golf 0.0.1 → 0.0.2

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.
data/README.rdoc ADDED
@@ -0,0 +1,88 @@
1
+ == Boca Golf
2
+
3
+ A simple command line utility for playing ruby golf with problems defined via RSpec examples.
4
+
5
+ In ruby golf, you need to write a function that passes the provided specs in the fewest characters you can.
6
+
7
+ == Install
8
+
9
+ gem install boca-golf
10
+
11
+ == Get Some Problems
12
+
13
+ git clone git://github.com/flipstone/boca-golf-problems.git
14
+
15
+ == Write a File
16
+
17
+ in my_solution.rb:
18
+
19
+ def sanitize(word, string)
20
+ ... your implementation ...
21
+ end
22
+
23
+ then:
24
+
25
+ boca-golf my_solution.rb boca-golf-problems/sanitize/spec.rb
26
+
27
+
28
+ and see:
29
+
30
+ Testing my_solution.rb against specs:
31
+ - boca-golf-problems/sanitize/spec.rb
32
+
33
+ ...
34
+
35
+ Finished in 0.0007 seconds
36
+ 3 examples, 0 failures
37
+
38
+ Code:
39
+ def sanitize(word, string)
40
+ ... your implementation ...
41
+ end
42
+
43
+ Score:
44
+ <# of characters in your solution>
45
+
46
+
47
+ == Upload your answer
48
+
49
+ Go to https://gist.github.com and create a gist with your solution
50
+
51
+ then someone can run it with:
52
+
53
+ boca-golf <your gist url> boca-golf-problems/sanitize/spec.rb
54
+
55
+ == Create your own problems!
56
+
57
+ Simply create an rspec examples file, decide on what coders should
58
+ name the method, and call it!
59
+
60
+ in my_spec.rb:
61
+
62
+ describe "reverse" do
63
+ it "reverses the string" do
64
+ reverse("foo").should == "oof"
65
+ end
66
+ end
67
+
68
+ then:
69
+
70
+ boca-golf solution.rb my_spec.rb
71
+
72
+ And send your problems in and we'll give you credit in the boca-golf-problems
73
+ repo!
74
+
75
+ Happy Golfing!
76
+
77
+ == Security
78
+
79
+ boca-golf runs all code from potential solutions at $SAFE = 4, so you
80
+ don't need to worry about someone's gist wrecking your system. That
81
+ being said, we are not liable for any damage caused to your system by
82
+ untrusted code. Always run untrusted code at your own risk.
83
+
84
+ Problem definitions, on the other hand, are run at $SAFE = 0, so you
85
+ can access any part of ruby you want within the RSpec examples you
86
+ write for your problems. That also means you should be sure you trust
87
+ whomever is defining the problems you're running with boca-golf.
88
+
data/boca-golf.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
10
10
  s.email = ["david@flipstone.com"]
11
11
  s.homepage = "https://github.com/flipstone/boca-golf"
12
12
  s.summary = %q{A simple rspec-based engine for playing ruby golf coding problems}
13
- s.description = %q{boca-golf with securely load and run from the filesystem or a gist url,
13
+ s.description = %q{boca-golf securely loads and runs code from the filesystem or a gist url,
14
14
  execute a user-specified set of rspec examples against it, and also print of the score
15
15
  (# number of charaters - lower == better!). It was built for playing ruby golf at the
16
16
  Boca Ruby Meetup sessions.
@@ -3,6 +3,14 @@ class BocaGolf
3
3
  def run(args, stdout, stderr)
4
4
  ::Rspec::Core::Runner.disable_autorun!
5
5
 
6
+ if args.size > 1
7
+ run_with_checked_args args, stdout, stderr
8
+ else
9
+ show_usage stdout, stderr
10
+ end
11
+ end
12
+
13
+ def run_with_checked_args(args, stdout, stderr)
6
14
  gist_location, *specs = *args
7
15
  stdout.puts "Testing #{gist_location} against specs:"
8
16
  specs.each do |spec|
@@ -16,6 +24,12 @@ class BocaGolf
16
24
  stdout.puts result.gist.code
17
25
  stdout.puts "\nScore:"
18
26
  stdout.puts result.score
27
+ rescue => e
28
+ stderr.puts e.message
29
+ end
30
+
31
+ def show_usage(stdout, stderr)
32
+ stderr.puts "Usage: boca-golf file_or_gist_url spec_file ..."
19
33
  end
20
34
  end
21
35
  end
@@ -1,3 +1,3 @@
1
1
  class BocaGolf
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -24,4 +24,22 @@ def reverse\(a\) a.reverse; end
24
24
  Score:
25
25
  29|
26
26
  end
27
+
28
+ it "prints usage when not enough arguments are supplied" do
29
+ stdout, stderr = StringIO.new, StringIO.new
30
+ sandboxed do
31
+ BocaGolf::CommandLine.new.run([], stdout, stderr)
32
+ end
33
+
34
+ stderr.string.should =~ %r{Usage: boca-golf file_or_gist_url spec_file \.\.\.}
35
+ end
36
+
37
+ it "prints useful error when file does not exist" do
38
+ stdout, stderr = StringIO.new, StringIO.new
39
+ sandboxed do
40
+ BocaGolf::CommandLine.new.run(["boca-golf-foobar.rb", "spec/infrastructure/reverse_specs/spec.rb"], stdout, stderr)
41
+ end
42
+
43
+ stderr.string.should =~ %r{No such file or directory - boca-golf-foobar.rb}
44
+ end
27
45
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 1
9
- version: 0.0.1
8
+ - 2
9
+ version: 0.0.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - David Vollbracht
@@ -14,11 +14,11 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-01-06 00:00:00 -05:00
17
+ date: 2011-01-08 00:00:00 -05:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
21
- description: "boca-golf with securely load and run from the filesystem or a gist url,\n\
21
+ description: "boca-golf securely loads and runs code from the filesystem or a gist url,\n\
22
22
  execute a user-specified set of rspec examples against it, and also print of the score\n\
23
23
  (# number of charaters - lower == better!). It was built for playing ruby golf at the\n\
24
24
  Boca Ruby Meetup sessions.\n "
@@ -34,6 +34,7 @@ files:
34
34
  - .gitignore
35
35
  - Gemfile
36
36
  - Gemfile.lock
37
+ - README.rdoc
37
38
  - Rakefile
38
39
  - bin/boca-golf
39
40
  - boca-golf.gemspec