approvals 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. data/.gitignore +7 -0
  2. data/.travis.yml +4 -0
  3. data/Gemfile +4 -0
  4. data/License.txt +22 -0
  5. data/README.md +133 -0
  6. data/Rakefile +1 -0
  7. data/TODO +2 -0
  8. data/approvals.gemspec +23 -0
  9. data/bin/approvals +9 -0
  10. data/lib/approvals.rb +24 -0
  11. data/lib/approvals/approval.rb +97 -0
  12. data/lib/approvals/configuration.rb +24 -0
  13. data/lib/approvals/dsl.rb +7 -0
  14. data/lib/approvals/error.rb +5 -0
  15. data/lib/approvals/extensions/rspec.rb +11 -0
  16. data/lib/approvals/extensions/rspec/dsl.rb +9 -0
  17. data/lib/approvals/extensions/rspec/example.rb +17 -0
  18. data/lib/approvals/extensions/rspec/example_group.rb +15 -0
  19. data/lib/approvals/namers/default_namer.rb +20 -0
  20. data/lib/approvals/namers/rspec_namer.rb +27 -0
  21. data/lib/approvals/reporters.rb +3 -0
  22. data/lib/approvals/reporters/first_working_reporter.rb +21 -0
  23. data/lib/approvals/reporters/image_reporter.rb +16 -0
  24. data/lib/approvals/reporters/image_reporter/html_image_reporter.rb +35 -0
  25. data/lib/approvals/reporters/image_reporter/image_magick_reporter.rb +20 -0
  26. data/lib/approvals/utilities.rb +4 -0
  27. data/lib/approvals/utilities/cli.rb +28 -0
  28. data/lib/approvals/utilities/dotfile.rb +38 -0
  29. data/lib/approvals/utilities/executable.rb +14 -0
  30. data/lib/approvals/utilities/scrubber.rb +43 -0
  31. data/lib/approvals/utilities/system_command.rb +13 -0
  32. data/lib/approvals/writer.rb +26 -0
  33. data/lib/approvals/writers.rb +5 -0
  34. data/lib/approvals/writers/array_writer.rb +15 -0
  35. data/lib/approvals/writers/html_writer.rb +15 -0
  36. data/lib/approvals/writers/json_writer.rb +17 -0
  37. data/lib/approvals/writers/text_writer.rb +22 -0
  38. data/lib/approvals/writers/xml_writer.rb +15 -0
  39. data/spec/approvals_spec.rb +64 -0
  40. data/spec/configuration_spec.rb +27 -0
  41. data/spec/extensions/rspec_approvals_spec.rb +49 -0
  42. data/spec/fixtures/approvals/approvals_verifies_a_complex_object.approved.txt +1 -0
  43. data/spec/fixtures/approvals/approvals_verifies_a_string.approved.txt +1 -0
  44. data/spec/fixtures/approvals/approvals_verifies_an_array.approved.txt +4 -0
  45. data/spec/fixtures/approvals/approvals_verifies_an_executable.approved.txt +1 -0
  46. data/spec/fixtures/approvals/approvals_verifies_html.approved.html +11 -0
  47. data/spec/fixtures/approvals/approvals_verifies_json.approved.json +7 -0
  48. data/spec/fixtures/approvals/approvals_verifies_xml.approved.xml +9 -0
  49. data/spec/fixtures/approvals/verifications_a_string.approved.txt +1 -0
  50. data/spec/fixtures/approvals/verifies_a_complex_object.approved.txt +1 -0
  51. data/spec/fixtures/approvals/verifies_a_string.approved.txt +1 -0
  52. data/spec/fixtures/approvals/verifies_an_array.approved.txt +4 -0
  53. data/spec/fixtures/approvals/verifies_an_executable.approved.txt +1 -0
  54. data/spec/fixtures/approvals/verifies_html.approved.html +11 -0
  55. data/spec/fixtures/approvals/verifies_json.approved.json +7 -0
  56. data/spec/fixtures/approvals/verifies_xml.approved.xml +9 -0
  57. data/spec/fixtures/one.png +0 -0
  58. data/spec/fixtures/two.png +0 -0
  59. data/spec/namers/default_namer_spec.rb +35 -0
  60. data/spec/namers/rspec_namer_spec.rb +31 -0
  61. data/spec/namers_spec.rb +16 -0
  62. data/spec/reporters/first_working_reporter_spec.rb +29 -0
  63. data/spec/reporters/html_image_reporter_spec.rb +22 -0
  64. data/spec/reporters/image_magick_reporter_spec.rb +16 -0
  65. data/spec/utilities/dotfile_spec.rb +22 -0
  66. data/spec/utilities/executable_spec.rb +15 -0
  67. data/spec/utilities/scrubber_spec.rb +24 -0
  68. data/spec/utilities/system_command_spec.rb +13 -0
  69. metadata +147 -0
@@ -0,0 +1,27 @@
1
+ require 'approvals/configuration'
2
+
3
+ describe Approvals::Configuration do
4
+
5
+ it "defaults to 'approvals/'" do
6
+ Approvals.configuration.approvals_path.should eq('approvals/')
7
+ end
8
+
9
+ describe "when set" do
10
+ before(:each) do
11
+ Approvals.configure do |c|
12
+ c.approvals_path = 'output/dir/'
13
+ end
14
+ end
15
+
16
+ after(:each) do
17
+ Approvals.configure do |c|
18
+ c.approvals_path = nil
19
+ end
20
+ end
21
+
22
+ it "overrides the output directory" do
23
+ Approvals.configuration.approvals_path.should eq('output/dir/')
24
+ end
25
+ end
26
+
27
+ end
@@ -0,0 +1,49 @@
1
+ require 'approvals'
2
+
3
+ describe "Verifies" do
4
+ verify "a string" do
5
+ "We have, I fear, confused power with greatness."
6
+ end
7
+
8
+ verify "an array" do
9
+ array = [
10
+ "abc",
11
+ 123,
12
+ :zomg_fooooood,
13
+ %w(cheese burger ribs steak bacon)
14
+ ]
15
+ end
16
+
17
+ verify "a complex object" do
18
+ hello = Object.new
19
+ def hello.to_s
20
+ "Hello, World!"
21
+ end
22
+
23
+ def hello.inspect
24
+ "#<The World Says: Hello!>"
25
+ end
26
+
27
+ hello
28
+ end
29
+
30
+ verify "html", :format => :html do
31
+ html = <<-HTML
32
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"><html><head><title>Approval</title></head><body><h1>An Approval</h1><p>It has a paragraph</p></body></html>
33
+ HTML
34
+ end
35
+
36
+ verify "xml", :format => :xml do
37
+ xml = "<xml char=\"kiddo\"><node><content name='beatrice' /></node><node aliases='5'><content /></node></xml>"
38
+ end
39
+
40
+ verify "json", :format => :json do
41
+ json = '{"pet":{"species":"turtle","color":"green","name":"Anthony"}}'
42
+ end
43
+
44
+ verify "an executable" do
45
+ executable('SELECT 1') do |command|
46
+ puts "your slip is showing (#{command})"
47
+ end
48
+ end
49
+ end
@@ -0,0 +1 @@
1
+ #<The World Says: Hello!>
@@ -0,0 +1 @@
1
+ "We have, I fear, confused power with greatness."
@@ -0,0 +1,4 @@
1
+ [0] "abc"
2
+ [1] 123
3
+ [2] :zomg_fooooood
4
+ [3] ["cheese", "burger", "ribs", "steak", "bacon"]
@@ -0,0 +1,11 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
5
+ <title>Approval</title>
6
+ </head>
7
+ <body>
8
+ <h1>An Approval</h1>
9
+ <p>It has a paragraph</p>
10
+ </body>
11
+ </html>
@@ -0,0 +1,7 @@
1
+ {
2
+ "pet": {
3
+ "species": "turtle",
4
+ "color": "green",
5
+ "name": "Anthony"
6
+ }
7
+ }
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xml char="kiddo">
3
+ <node>
4
+ <content name="beatrice"/>
5
+ </node>
6
+ <node aliases="5">
7
+ <content/>
8
+ </node>
9
+ </xml>
@@ -0,0 +1 @@
1
+ "We have, I fear, confused power with greatness."
@@ -0,0 +1 @@
1
+ #<The World Says: Hello!>
@@ -0,0 +1 @@
1
+ "We have, I fear, confused power with greatness."
@@ -0,0 +1,4 @@
1
+ [0] "abc"
2
+ [1] 123
3
+ [2] :zomg_fooooood
4
+ [3] ["cheese", "burger", "ribs", "steak", "bacon"]
@@ -0,0 +1,11 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
5
+ <title>Approval</title>
6
+ </head>
7
+ <body>
8
+ <h1>An Approval</h1>
9
+ <p>It has a paragraph</p>
10
+ </body>
11
+ </html>
@@ -0,0 +1,7 @@
1
+ {
2
+ "pet": {
3
+ "species": "turtle",
4
+ "color": "green",
5
+ "name": "Anthony"
6
+ }
7
+ }
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xml char="kiddo">
3
+ <node>
4
+ <content name="beatrice"/>
5
+ </node>
6
+ <node aliases="5">
7
+ <content/>
8
+ </node>
9
+ </xml>
Binary file
Binary file
@@ -0,0 +1,35 @@
1
+ require 'approvals/configuration'
2
+ require 'approvals/namers/default_namer'
3
+
4
+ describe Approvals::Namers::DefaultNamer do
5
+ include Approvals::Namers
6
+
7
+ subject { DefaultNamer.new("a f!$^%&*(unky name") }
8
+
9
+ it "normalizes the name" do
10
+ subject.name.should eq("a_funky_name")
11
+ end
12
+
13
+ context "when configured" do
14
+ before :each do
15
+ Approvals.configure do |c|
16
+ c.approvals_path = 'path/to/files/'
17
+ end
18
+ end
19
+
20
+ after :each do
21
+ Approvals.configure do |c|
22
+ c.approvals_path = nil
23
+ end
24
+ end
25
+
26
+ it "uses the approvals output dir" do
27
+ subject.output_dir.should eq('path/to/files/')
28
+ end
29
+ end
30
+
31
+ it "must have a name" do
32
+ ->{ DefaultNamer.new(nil) }.should raise_error(ArgumentError)
33
+ end
34
+
35
+ end
@@ -0,0 +1,31 @@
1
+ require 'approvals'
2
+
3
+ describe Approvals::Namers::RSpecNamer do
4
+ include Approvals::Namers
5
+
6
+ it "uses non-$%^&*funky example description" do
7
+ RSpecNamer.new(self.example).name.should eq("approvals_namers_rspecnamer_uses_non_funky_example_description")
8
+ end
9
+
10
+ it "has a decent default" do
11
+ RSpecNamer.new(self.example).output_dir.should eq('spec/fixtures/approvals/')
12
+ end
13
+
14
+ context "when RSpec is configured" do
15
+ before :each do
16
+ RSpec.configure do |c|
17
+ c.approvals_path = 'spec/output/dir/'
18
+ end
19
+ end
20
+
21
+ after :each do
22
+ RSpec.configure do |c|
23
+ c.approvals_path = nil
24
+ end
25
+ end
26
+
27
+ it "uses the rspec config option" do
28
+ RSpecNamer.new(self.example).output_dir.should eq('spec/output/dir/')
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,16 @@
1
+ require 'approvals'
2
+
3
+ describe Approvals::Namers do
4
+ include Approvals::Namers
5
+
6
+ it "uses the RSpecNamer" do
7
+ approval = Approvals::Approval.new("naming with rspec namer", :namer => RSpecNamer.new(self.example))
8
+ approval.name.should eq("approvals_namers_uses_the_rspecnamer")
9
+ end
10
+
11
+ it "uses the DefaultNamer" do
12
+ approval = Approvals::Approval.new("naming with default namer", :name => "a name")
13
+ approval.name.should eq("a_name")
14
+ end
15
+
16
+ end
@@ -0,0 +1,29 @@
1
+ require 'approvals/reporters/first_working_reporter'
2
+
3
+ describe Approvals::Reporters::FirstWorkingReporter do
4
+ include Approvals::Reporters
5
+
6
+ let(:no) { stub(:working_in_this_environment? => false) }
7
+ let(:yes) { stub(:working_in_this_environment? => true) }
8
+ let(:yes_too) { stub(:working_in_this_environment? => true) }
9
+
10
+ context "when at least one reporter works" do
11
+ subject { FirstWorkingReporter.new(no, yes) }
12
+ its(:working_in_this_environment?) { should be_true }
13
+ end
14
+
15
+ context "when no reporters work" do
16
+ subject { FirstWorkingReporter.new(no, no) }
17
+ its(:working_in_this_environment?) { should be_false }
18
+ end
19
+
20
+ it "calls the first working reporter" do
21
+ working = FirstWorkingReporter.new(no, yes, yes_too)
22
+
23
+ no.should_not_receive(:report)
24
+ yes.should_receive(:report)
25
+ yes_too.should_not_receive(:report)
26
+
27
+ working.report("r", "a")
28
+ end
29
+ end
@@ -0,0 +1,22 @@
1
+ require 'approvals/reporters'
2
+ require 'approvals/utilities/scrubber'
3
+
4
+ describe Approvals::Reporters::HtmlImageReporter do
5
+ include Approvals
6
+
7
+ subject { Reporters::HtmlImageReporter.instance }
8
+
9
+ it "creates the template" do
10
+ scrubber = Scrubber.new(subject.html("spec/fixtures/one.png", "spec/fixtures/two.png"))
11
+ scrubber.to_s.should eq('<html><head><title>Approval</title></head><body><center><table style="text-align: center;" border="1"><tr><td><img src="file://{{current_dir}}/spec/fixtures/one.png"></td><td><img src="file://{{current_dir}}/spec/fixtures/two.png"></td></tr><tr><td>received</td><td>approved</td></tr></table></center></body></html>')
12
+ end
13
+
14
+ # verify "creates the appropriate command", :format => :html do
15
+ # reporter = Reporters::HtmlImageReporter.instance
16
+ # scrubber = Scrubber.new(reporter.html("spec/fixtures/one.png", "spec/fixtures/two.png"))
17
+ # scrubber.to_executable do |html|
18
+ # reporter.display(html)
19
+ # end
20
+ # end
21
+
22
+ end
@@ -0,0 +1,16 @@
1
+ require 'approvals/reporters'
2
+
3
+ describe Approvals::Reporters::ImageMagickReporter do
4
+ include Approvals::Reporters
5
+ subject { ImageMagickReporter.instance }
6
+
7
+ it "creates the appropriate command" do
8
+ result = subject.create_command_line("spec/fixtures/one.png", "spec/fixtures/two.png")
9
+ expected = "compare spec/fixtures/one.png spec/fixtures/two.png -compose Src x:"
10
+ if result != expected
11
+ system(result)
12
+ system(expected)
13
+ end
14
+ result.should eq(expected)
15
+ end
16
+ end
@@ -0,0 +1,22 @@
1
+ require 'approvals/utilities/dotfile'
2
+
3
+ describe Approvals::Dotfile do
4
+ include Approvals
5
+ let(:dotfile) { '/tmp/.approvals' }
6
+
7
+ before(:each) do
8
+ Dotfile.stub(:path => dotfile)
9
+ Dotfile.reset
10
+ end
11
+
12
+ it "appends the text" do
13
+ Dotfile.append('text')
14
+ File.readlines(dotfile).map(&:chomp).should eq(['text'])
15
+ end
16
+
17
+ it "appends the text exactly once" do
18
+ Dotfile.append('text')
19
+ Dotfile.append('text')
20
+ File.readlines(dotfile).map(&:chomp).should eq(['text'])
21
+ end
22
+ end
@@ -0,0 +1,15 @@
1
+ require 'approvals/utilities/executable'
2
+
3
+ describe Approvals::Executable do
4
+ include Approvals
5
+
6
+ subject { Executable.new('SELECT 1') }
7
+ its(:inspect) { should eq('SELECT 1') }
8
+
9
+ it "takes a block" do
10
+ executable = Executable.new('SELECT 1') do |command|
11
+ "execute query: #{command}"
12
+ end
13
+ executable.on_failure.call('SELECT 1').should eq('execute query: SELECT 1')
14
+ end
15
+ end
@@ -0,0 +1,24 @@
1
+ require 'approvals/utilities/scrubber'
2
+
3
+ describe Approvals::Scrubber do
4
+ include Approvals
5
+
6
+ describe "defaults" do
7
+ let(:path) { File.expand_path('.') }
8
+ subject { Scrubber.new("I am currently at #{path}") }
9
+
10
+ its(:to_s) { should eq("I am currently at {{current_dir}}") }
11
+
12
+ it "unscrubs" do
13
+ subject.unscrub.should eq("I am currently at #{path}")
14
+ end
15
+
16
+ it "unscrubs any old string" do
17
+ subject.unscrub("Hoy, where's {{current_dir}}?").should eq("Hoy, where's #{path}?")
18
+ end
19
+ end
20
+
21
+ it "overrides default hash" do
22
+ Scrubber.new("oh, my GAWD", {"deity" => "GAWD"}).to_s.should eq('oh, my {{deity}}')
23
+ end
24
+ end
@@ -0,0 +1,13 @@
1
+ require 'approvals/utilities/system_command'
2
+
3
+ describe Approvals::SystemCommand, "#exists?" do
4
+ include Approvals
5
+
6
+ it "does" do
7
+ SystemCommand.exists?("ls").should be_true
8
+ end
9
+
10
+ it "does not" do
11
+ SystemCommand.exists?("absolutelydoesnotexistonyoursystem").should be_false
12
+ end
13
+ end
metadata ADDED
@@ -0,0 +1,147 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: approvals
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Katrina Owen
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-02-19 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: &70351267248460 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '2.7'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70351267248460
25
+ - !ruby/object:Gem::Dependency
26
+ name: thor
27
+ requirement: &70351267246520 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70351267246520
36
+ - !ruby/object:Gem::Dependency
37
+ name: nokogiri
38
+ requirement: &70351267200860 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70351267200860
47
+ description: Approval Tests for Ruby
48
+ email:
49
+ - katrina.owen@gmail.com
50
+ executables:
51
+ - approvals
52
+ extensions: []
53
+ extra_rdoc_files: []
54
+ files:
55
+ - .gitignore
56
+ - .travis.yml
57
+ - Gemfile
58
+ - License.txt
59
+ - README.md
60
+ - Rakefile
61
+ - TODO
62
+ - approvals.gemspec
63
+ - bin/approvals
64
+ - lib/approvals.rb
65
+ - lib/approvals/approval.rb
66
+ - lib/approvals/configuration.rb
67
+ - lib/approvals/dsl.rb
68
+ - lib/approvals/error.rb
69
+ - lib/approvals/extensions/rspec.rb
70
+ - lib/approvals/extensions/rspec/dsl.rb
71
+ - lib/approvals/extensions/rspec/example.rb
72
+ - lib/approvals/extensions/rspec/example_group.rb
73
+ - lib/approvals/namers/default_namer.rb
74
+ - lib/approvals/namers/rspec_namer.rb
75
+ - lib/approvals/reporters.rb
76
+ - lib/approvals/reporters/first_working_reporter.rb
77
+ - lib/approvals/reporters/image_reporter.rb
78
+ - lib/approvals/reporters/image_reporter/html_image_reporter.rb
79
+ - lib/approvals/reporters/image_reporter/image_magick_reporter.rb
80
+ - lib/approvals/utilities.rb
81
+ - lib/approvals/utilities/cli.rb
82
+ - lib/approvals/utilities/dotfile.rb
83
+ - lib/approvals/utilities/executable.rb
84
+ - lib/approvals/utilities/scrubber.rb
85
+ - lib/approvals/utilities/system_command.rb
86
+ - lib/approvals/writer.rb
87
+ - lib/approvals/writers.rb
88
+ - lib/approvals/writers/array_writer.rb
89
+ - lib/approvals/writers/html_writer.rb
90
+ - lib/approvals/writers/json_writer.rb
91
+ - lib/approvals/writers/text_writer.rb
92
+ - lib/approvals/writers/xml_writer.rb
93
+ - spec/approvals_spec.rb
94
+ - spec/configuration_spec.rb
95
+ - spec/extensions/rspec_approvals_spec.rb
96
+ - spec/fixtures/approvals/approvals_verifies_a_complex_object.approved.txt
97
+ - spec/fixtures/approvals/approvals_verifies_a_string.approved.txt
98
+ - spec/fixtures/approvals/approvals_verifies_an_array.approved.txt
99
+ - spec/fixtures/approvals/approvals_verifies_an_executable.approved.txt
100
+ - spec/fixtures/approvals/approvals_verifies_html.approved.html
101
+ - spec/fixtures/approvals/approvals_verifies_json.approved.json
102
+ - spec/fixtures/approvals/approvals_verifies_xml.approved.xml
103
+ - spec/fixtures/approvals/verifications_a_string.approved.txt
104
+ - spec/fixtures/approvals/verifies_a_complex_object.approved.txt
105
+ - spec/fixtures/approvals/verifies_a_string.approved.txt
106
+ - spec/fixtures/approvals/verifies_an_array.approved.txt
107
+ - spec/fixtures/approvals/verifies_an_executable.approved.txt
108
+ - spec/fixtures/approvals/verifies_html.approved.html
109
+ - spec/fixtures/approvals/verifies_json.approved.json
110
+ - spec/fixtures/approvals/verifies_xml.approved.xml
111
+ - spec/fixtures/one.png
112
+ - spec/fixtures/two.png
113
+ - spec/namers/default_namer_spec.rb
114
+ - spec/namers/rspec_namer_spec.rb
115
+ - spec/namers_spec.rb
116
+ - spec/reporters/first_working_reporter_spec.rb
117
+ - spec/reporters/html_image_reporter_spec.rb
118
+ - spec/reporters/image_magick_reporter_spec.rb
119
+ - spec/utilities/dotfile_spec.rb
120
+ - spec/utilities/executable_spec.rb
121
+ - spec/utilities/scrubber_spec.rb
122
+ - spec/utilities/system_command_spec.rb
123
+ homepage: ''
124
+ licenses: []
125
+ post_install_message:
126
+ rdoc_options: []
127
+ require_paths:
128
+ - lib
129
+ required_ruby_version: !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ! '>='
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ none: false
137
+ requirements:
138
+ - - ! '>='
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ requirements: []
142
+ rubyforge_project: approvals
143
+ rubygems_version: 1.8.10
144
+ signing_key:
145
+ specification_version: 3
146
+ summary: Approval Tests for Ruby
147
+ test_files: []