approvals 0.0.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.
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: []