unit_validator 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,233 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe CF::InputValidator do
4
+
5
+ it "should validate the csv file rows against the rules provided by FormFactory gem" do
6
+ rules = [{:field_id => "field_1", :label => "company name", :field_type => "text_data",
7
+ :value => "Sprout", :required => true, :validation_format => "general"
8
+ },
9
+ {:field_id => "field_2", :label => "email", :field_type => "text_data",
10
+ :value => "spt@lala.com", :required => false, :validation_format => "email"
11
+ }]
12
+ inputs = "company name,email\nSprout,info@sproutify.com"
13
+ output = [["Sprout","info@sproutify.com"]]
14
+
15
+ cloud_validator = CF::InputValidator.new(rules)
16
+ val = cloud_validator.parse_and_validate(inputs)
17
+ val[:valid_units].should == output
18
+ end
19
+
20
+ it "should not validate the csv file with extra headers" do
21
+ rules = [{:field_id => "field_1", :label => "company name", :field_type => "text_data",
22
+ :value => "Sprout", :required => true, :validation_format => "general"
23
+ }]
24
+ inputs = "company name,email\nSprout,info@sproutify.com"
25
+ output = [["Sprout","info@sproutify.com"]]
26
+
27
+ cloud_validator = CF::InputValidator.new(rules)
28
+ cloud_validator.parse_and_validate(inputs)[:valid_units].should_not == output
29
+ cloud_validator.errors.should include("Headers doesnot match the column counts")
30
+ end
31
+
32
+ it "should not validate the csv file with invalid headers as per rules" do
33
+ rules = [{:field_id => "field_1", :label => "company name", :field_type => "text_data",
34
+ :value => "Sprout", :required => true, :validation_format => "general"
35
+ },
36
+ {:field_id => "field_2", :label => "email", :field_type => "text_data",
37
+ :value => "spt@lala.com", :required => false, :validation_format => "email"
38
+ }]
39
+ inputs = "company name\nSprout,info@sproutify.com"
40
+ output = [["Sprout","info@sproutify.com"]]
41
+
42
+ cloud_validator = CF::InputValidator.new(rules)
43
+ cloud_validator.parse_and_validate(inputs).should_not == output
44
+ cloud_validator.errors.should include("Headers doesnot match the column counts")
45
+ end
46
+
47
+ it "should validate the input email by format rules" do
48
+ rules = [{:field_id => "field_1", :label => "company name", :field_type => "text_data",
49
+ :value => "Sprout", :required => true, :validation_format => "general"
50
+ },
51
+ {:field_id => "field_2", :label => "email", :field_type => "text_data",
52
+ :value => "spt@lala.com", :required => false, :validation_format => "email"
53
+ }]
54
+ inputs = "company name,email\nSprout,info@sproutify.com\nApple,ram@apple.co.uk\nPatan,ram.gmail@apple.co.in"
55
+ output = [["Sprout","info@sproutify.com"], ["Apple","ram@apple.co.uk"], ["Patan","ram.gmail@apple.co.in"]]
56
+
57
+ cloud_validator = CF::InputValidator.new(rules)
58
+ cloud_validator.parse_and_validate(inputs)[:valid_units].should == output
59
+ end
60
+
61
+ it "should check valid & invalid email by format rules" do
62
+ rules = [{:field_id => "field_1", :label => "company name", :field_type => "text_data",
63
+ :value => "Sprout", :required => true, :validation_format => "general"
64
+ },
65
+ {:field_id => "field_2", :label => "email", :field_type => "text_data",
66
+ :value => "spt@lala.com", :required => false, :validation_format => "email"
67
+ }]
68
+ inputs = "company name,email\nSprout,info@sproutify.com\nApple,ram@apple\nPatan,ram.gmail@ap ple.co.in\nGmail,@gmail.com\nEmail,email@"
69
+ valid_output = [["Sprout","info@sproutify.com"]]
70
+ invalid_output = [["Apple", "ram@apple"], ["Patan", "ram.gmail@ap ple.co.in"], ["Gmail", "@gmail.com"], ["Email","email@"]]
71
+
72
+ cloud_validator = CF::InputValidator.new(rules)
73
+ cloud_validator.parse_and_validate(inputs)[:invalid_units].should == invalid_output
74
+ cloud_validator.parse_and_validate(inputs)[:valid_units].should == valid_output
75
+ end
76
+
77
+ it "should validate url" do
78
+ rules = [{:field_id => "field_1", :label => "website", :field_type => "text_data",
79
+ :value => "http:\\www.yahoo.com", :required => true, :validation_format => "url"
80
+ }]
81
+ inputs = "website\nhttp://www.google.com\nabc"
82
+ valid_output = [["http://www.google.com"]]
83
+ invalid_output = [["abc"]]
84
+
85
+ cloud_validator = CF::InputValidator.new(rules)
86
+ cloud_validator.parse_and_validate(inputs)[:valid_units].should == valid_output
87
+ cloud_validator.parse_and_validate(inputs)[:invalid_units].should == invalid_output
88
+ end
89
+
90
+ it "should validate number" do
91
+ rules = [{:field_id => "field_1", :label => "Age", :field_type => "text_data",
92
+ :value => "http:\\www.yahoo.com", :required => true, :validation_format => "number"
93
+ }]
94
+ inputs = "Age\n32\n@1"
95
+ valid_output = [["32"]]
96
+ invalid_output = [["@1"]]
97
+
98
+ cloud_validator = CF::InputValidator.new(rules)
99
+ cloud_validator.parse_and_validate(inputs)[:valid_units].should == valid_output
100
+ cloud_validator.parse_and_validate(inputs)[:invalid_units].should == invalid_output
101
+ end
102
+
103
+ # dd.mm.yyyy
104
+ it "should validate date" do
105
+ rules = [{:field_id => "field_1", :label => "Date of Birth", :field_type => "text_data",
106
+ :value => "01-01-2002", :required => true, :validation_format => "date"
107
+ }]
108
+ inputs = "Date of Birth\n15.12.2009\n1990-01-02"
109
+ valid_output = [["15.12.2009"]]
110
+ invalid_output = [["1990-01-02"]]
111
+
112
+ cloud_validator = CF::InputValidator.new(rules)
113
+ cloud_validator.parse_and_validate(inputs)[:valid_units].should == valid_output
114
+ cloud_validator.parse_and_validate(inputs)[:invalid_units].should == invalid_output
115
+ end
116
+
117
+ it "should validate time" do
118
+ rules = [{:field_id => "field_1", :label => "Now Time", :field_type => "text_data",
119
+ :value => "12:24", :required => true, :validation_format => "time"
120
+ }]
121
+ inputs = "Now Time\n01:21\n23:12\n24:12"
122
+ valid_output = [["01:21"],["23:12"]]
123
+ invalid_output = [["24:12"]]
124
+
125
+ cloud_validator = CF::InputValidator.new(rules)
126
+ cloud_validator.parse_and_validate(inputs)[:valid_units].should == valid_output
127
+ cloud_validator.parse_and_validate(inputs)[:invalid_units].should == invalid_output
128
+ end
129
+
130
+ it "should validate datetime" do
131
+ rules = [{:field_id => "field_1", :label => "Meeting On", :field_type => "text_data",
132
+ :value => "mm/dd/yyyy+hh:mm:ss", :required => true, :validation_format => "datetime"
133
+ }]
134
+ inputs = "Meeting On\n12/31/2003 12:12:12\n12:12:121990-01-02"
135
+ valid_output = [["12/31/2003 12:12:12"]]
136
+ invalid_output = [["12:12:121990-01-02"]]
137
+
138
+ cloud_validator = CF::InputValidator.new(rules)
139
+ cloud_validator.parse_and_validate(inputs)[:valid_units].should == valid_output
140
+ cloud_validator.parse_and_validate(inputs)[:invalid_units].should == invalid_output
141
+ end
142
+
143
+ it "should not validate unsupported validation_format" do
144
+ rules = [{:field_id => "field_1", :label => "Meeting On", :field_type => "text_data",
145
+ :value => "mm/dd/yyyy+hh:mm:ss", :required => true, :validation_format => "scroll"
146
+ }]
147
+ inputs = "Meeting On\n12/31/2003 12:12:12"
148
+ valid_output = [["12/31/2003 12:12:12"]]
149
+ err = "Validation format not supported:: scroll"
150
+
151
+ cloud_validator = CF::InputValidator.new(rules)
152
+ cloud_validator.parse_and_validate(inputs)[:valid_units].should_not == valid_output
153
+ cloud_validator.parse_and_validate(inputs)[:invalid_units].should == valid_output
154
+ cloud_validator.errors.should include(err)
155
+ end
156
+
157
+ it "should validate supported validation_format" do
158
+ rules = [{:field_id => "field_1", :label => "saroj", :field_type => "text_data",
159
+ :value => "mm/dd/yyyy+hh:mm:ss", :required => false, :validation_format => "datetime"
160
+ }]
161
+ inputs = "saroj\n\n"
162
+ valid_output = [["12/31/2003 12:12:12"]]
163
+
164
+ cloud_validator = CF::InputValidator.new(rules)
165
+ cloud_validator.parse_and_validate(inputs)[:valid_units].should_not == valid_output
166
+ cloud_validator.errors.should be_empty
167
+ end
168
+
169
+ it "should validate currency (USD)" do
170
+ rules = [{:field_id => "field_1", :label => "Amount", :field_type => "text_data",
171
+ :value => "$1,113,000.00", :required => true, :validation_format => "currency"
172
+ }]
173
+ inputs = "Amount\n\"$1,113,000.00\"\n\"$3.99\"\n\"$5,000\"\n\"$1.0\"\n\"$22,222,222,222,222,222\"\n\"$74387498372947387483978934758744329.00\"\n1\n-9\n+555\n$50*100"
174
+ valid_output = [["$1,113,000.00"], ["$3.99"], ["$5,000"], ["$1.0"], ["$22,222,222,222,222,222"], ["$74387498372947387483978934758744329.00"], ["1"]]
175
+ invalid_output = [["-9"], ["+555"], ["$50*100"]]
176
+
177
+ cloud_validator = CF::InputValidator.new(rules)
178
+ cloud_validator.parse_and_validate(inputs)[:valid_units].should == valid_output
179
+ cloud_validator.parse_and_validate(inputs)[:invalid_units].should == invalid_output
180
+ end
181
+
182
+ it "should check the file type and reject with error if its of the unsupported format" do
183
+ file_location = "fixtures/gdoc.xlsx"
184
+ CF::InputValidator.check_extension(file_location)[:check].should == true
185
+
186
+ file_location = "fixtures/gdoc.xlsxsfdsf"
187
+ CF::InputValidator.check_extension(file_location)[:check].should == false
188
+ CF::InputValidator.check_extension(file_location)[:error].should include("Invalid file! The specified format is not supported.")
189
+ end
190
+
191
+ it "should parse the input from .ods, .xlsx or .xls files" do
192
+
193
+ file_location = "fixtures/gdoc.xlsx"
194
+ inputs = Excelx.new(file_location).to_csv
195
+
196
+ output = <<STR
197
+ "company name","email"
198
+ "Apple",
199
+ "sprout","info@sproutify.com"
200
+ ,
201
+ ,"inf o@ab c.com"
202
+ ,
203
+ "DEF"," info@def.com "
204
+ "GHI",
205
+ ,
206
+ ,
207
+ ,
208
+ " "," "
209
+ STR
210
+ inputs.should == output
211
+
212
+ inputs = Excel.new("fixtures/gdoc.xls").to_csv
213
+ inputs.should == output
214
+
215
+ inputs = Openoffice.new("fixtures/gdoc.ods").to_csv
216
+ output = <<STR
217
+ "company name","email"
218
+ "Apple",
219
+ "sprout","info@sproutify.com"
220
+ ,
221
+ ,"inf o@ab c.com"
222
+ ,
223
+ "DEF"," info@def.com "
224
+ "GHI",
225
+ ,
226
+ ,
227
+ ,
228
+ ,
229
+ STR
230
+ inputs.should == output
231
+ end
232
+
233
+ end
@@ -0,0 +1,76 @@
1
+ require 'spec_helper'
2
+
3
+ describe CF::ResultValidator do
4
+
5
+ it "should return a true boolean value (.valid?) if the rules match with result" do
6
+ rules = [{:field_id => "field_1", :label => "company name", :field_type => "text_data",
7
+ :value => "Sprout", :required => true, :validation_format => "general"
8
+ },
9
+ {:field_id => "field_2", :label => "website", :field_type => "text_data",
10
+ :value => "http:\\www.yahoo.com", :required => true, :validation_format => "url"
11
+ }]
12
+
13
+ # TODO
14
+ # params = {:name => "Saroj", :site => "saroj.com"} which we've to convert to the following format
15
+ result = "company name,website\nzorasinc,http://zorasinc.blogspot.com"
16
+
17
+ @result_validator = CF::ResultValidator.new
18
+ @result_validator.valid?(rules, result).should be_true
19
+ @result_validator.errors.should be_empty
20
+ end
21
+
22
+ it "should return a false boolean value (.valid?) if the rules don't match with result and give particular error" do
23
+ rules = [{:field_id => "field_1", :label => "company name", :field_type => "text_data",
24
+ :value => "Sprout", :required => true, :validation_format => "general"
25
+ },
26
+ {:field_id => "field_2", :label => "website", :field_type => "text_data",
27
+ :value => "http:\\www.yahoo.com", :required => true, :validation_format => "url"
28
+ }]
29
+
30
+ result = "company name\nsaroz"
31
+
32
+ @result_validator = CF::ResultValidator.new
33
+ @result_validator.valid?(rules, result).should be_false
34
+ @result_validator.errors.should_not be_empty
35
+ @result_validator.errors.should include("website is/are required")
36
+
37
+ end
38
+
39
+ it "should give xtra headers provided error and return a false boolean value (.valid?) if the rules don't match with result" do
40
+ rules = [{:field_id => "field_1", :label => "company name", :field_type => "text_data",
41
+ :value => "Sprout", :required => true, :validation_format => "general"
42
+ },
43
+ {:field_id => "field_2", :label => "website", :field_type => "text_data",
44
+ :value => "http:\\www.yahoo.com", :required => true, :validation_format => "url"
45
+ }]
46
+
47
+ result = "company name, website, email\nsaroz"
48
+
49
+ @result_validator = CF::ResultValidator.new
50
+ @result_validator.valid?(rules, result).should be_false
51
+ @result_validator.errors.should_not be_empty
52
+ @result_validator.errors.should include("cannot process as the input data consists extra headers")
53
+
54
+ end
55
+
56
+ it "should give errors when validation fails" do
57
+ rules = [{:field_id => "field_1", :label => "company name", :field_type => "text_data",
58
+ :value => "Sprout", :required => true, :validation_format => "general"
59
+ },
60
+ {:field_id => "field_2", :label => "website", :field_type => "text_data",
61
+ :value => "http:\\www.yahoo.com", :required => true, :validation_format => "url"
62
+ }]
63
+
64
+ result = "company name, website\nsaroz, saroj@maharjan\nsprout, bttn://abc.com\nktm,"
65
+
66
+ @result_validator = CF::ResultValidator.new
67
+ @result_validator.valid?(rules, result).should be_false
68
+ @result_validator.errors.should_not be_empty
69
+ @result_validator.errors[0].should include("saroj@maharjan is not valid")
70
+ @result_validator.errors[1].should include("bttn://abc.com is not valid")
71
+ @result_validator.errors.should include("bttn://abc.com is not valid")
72
+ @result_validator.errors.should include("website is required")
73
+ @result_validator.errors.should include("saroj@maharjan is not valid","bttn://abc.com is not valid")
74
+ end
75
+
76
+ end
@@ -0,0 +1,23 @@
1
+ require 'bundler'
2
+ begin
3
+ Bundler.setup(:default, :development)
4
+ rescue Bundler::BundlerError => e
5
+ $stderr.puts e.message
6
+ $stderr.puts "Run `bundle install` to install missing gems"
7
+ exit e.status_code
8
+ end
9
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
10
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
11
+
12
+ require 'cf/input_validator'
13
+ require 'cf/result_validator'
14
+ require 'rspec'
15
+
16
+ # Requires supporting files with custom matchers and macros, etc,
17
+ # in ./support/ and its subdirectories.
18
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
19
+
20
+ RSpec.configure do |config|
21
+ require 'rspec/expectations'
22
+ config.include Rspec::Matchers
23
+ end
@@ -0,0 +1,139 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{unit_validator}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["millisami", "zoras"]
12
+ s.date = %q{2010-10-22}
13
+ s.description = %q{Takes the Instruction Input as Rule, parse the CSV files and applies the validation and returns valid and invalid units}
14
+ s.email = %q{saroj@sprout-technology.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.md"
18
+ ]
19
+ s.files = [
20
+ ".autotest",
21
+ ".gitignore",
22
+ "Gemfile",
23
+ "Gemfile.lock",
24
+ "LICENSE",
25
+ "README.md",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "autotest/discover.rb",
29
+ "fixtures/gdoc.csv",
30
+ "fixtures/gdoc.ods",
31
+ "fixtures/gdoc.xls",
32
+ "fixtures/gdoc.xlsx",
33
+ "lib/cf/input_validator.rb",
34
+ "lib/cf/result_validator.rb",
35
+ "lib/generic_spreadsheet.rb",
36
+ "lib/tasks/rcov_custom.rb",
37
+ "lib/validator_helpers.rb",
38
+ "spec/.rspec",
39
+ "spec/cf_input_validator_spec.rb",
40
+ "spec/cf_result_validator_spec.rb",
41
+ "spec/spec_helper.rb",
42
+ "unit_validator.gemspec"
43
+ ]
44
+ s.homepage = %q{http://github.com/sprout/unit_validator}
45
+ s.require_paths = ["lib"]
46
+ s.rubygems_version = %q{1.3.7}
47
+ s.summary = %q{Takes the Instruction Input as Rule, parse the CSV files and does the validation}
48
+ s.test_files = [
49
+ "spec/cf_input_validator_spec.rb",
50
+ "spec/cf_result_validator_spec.rb",
51
+ "spec/spec_helper.rb"
52
+ ]
53
+
54
+ if s.respond_to? :specification_version then
55
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
56
+ s.specification_version = 3
57
+
58
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
59
+ s.add_development_dependency(%q<roo>, [">= 0"])
60
+ s.add_development_dependency(%q<zip>, [">= 0"])
61
+ s.add_development_dependency(%q<spreadsheet>, [">= 0"])
62
+ s.add_development_dependency(%q<nokogiri>, [">= 0"])
63
+ s.add_development_dependency(%q<google-spreadsheet-ruby>, [">= 0"])
64
+ s.add_development_dependency(%q<activesupport>, [">= 0"])
65
+ s.add_development_dependency(%q<fastercsv>, [">= 0"])
66
+ s.add_development_dependency(%q<autotest-fsevent>, [">= 0.2.2"])
67
+ s.add_development_dependency(%q<autotest-growl>, [">= 0.2.4"])
68
+ s.add_development_dependency(%q<builder>, [">= 0"])
69
+ s.add_development_dependency(%q<rspec>, [">= 2.0.0.rc"])
70
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
71
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5.0.pre3"])
72
+ s.add_development_dependency(%q<rcov>, [">= 0"])
73
+ s.add_runtime_dependency(%q<roo>, [">= 0"])
74
+ s.add_runtime_dependency(%q<zip>, [">= 0"])
75
+ s.add_runtime_dependency(%q<spreadsheet>, [">= 0"])
76
+ s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
77
+ s.add_runtime_dependency(%q<google-spreadsheet-ruby>, [">= 0"])
78
+ s.add_runtime_dependency(%q<activesupport>, [">= 0"])
79
+ s.add_runtime_dependency(%q<builder>, [">= 0"])
80
+ s.add_development_dependency(%q<rspec>, [">= 2.0.0.rc"])
81
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
82
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5.0.pre3"])
83
+ s.add_development_dependency(%q<rcov>, [">= 0"])
84
+ else
85
+ s.add_dependency(%q<roo>, [">= 0"])
86
+ s.add_dependency(%q<zip>, [">= 0"])
87
+ s.add_dependency(%q<spreadsheet>, [">= 0"])
88
+ s.add_dependency(%q<nokogiri>, [">= 0"])
89
+ s.add_dependency(%q<google-spreadsheet-ruby>, [">= 0"])
90
+ s.add_dependency(%q<activesupport>, [">= 0"])
91
+ s.add_dependency(%q<fastercsv>, [">= 0"])
92
+ s.add_dependency(%q<autotest-fsevent>, [">= 0.2.2"])
93
+ s.add_dependency(%q<autotest-growl>, [">= 0.2.4"])
94
+ s.add_dependency(%q<builder>, [">= 0"])
95
+ s.add_dependency(%q<rspec>, [">= 2.0.0.rc"])
96
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
97
+ s.add_dependency(%q<jeweler>, ["~> 1.5.0.pre3"])
98
+ s.add_dependency(%q<rcov>, [">= 0"])
99
+ s.add_dependency(%q<roo>, [">= 0"])
100
+ s.add_dependency(%q<zip>, [">= 0"])
101
+ s.add_dependency(%q<spreadsheet>, [">= 0"])
102
+ s.add_dependency(%q<nokogiri>, [">= 0"])
103
+ s.add_dependency(%q<google-spreadsheet-ruby>, [">= 0"])
104
+ s.add_dependency(%q<activesupport>, [">= 0"])
105
+ s.add_dependency(%q<builder>, [">= 0"])
106
+ s.add_dependency(%q<rspec>, [">= 2.0.0.rc"])
107
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
108
+ s.add_dependency(%q<jeweler>, ["~> 1.5.0.pre3"])
109
+ s.add_dependency(%q<rcov>, [">= 0"])
110
+ end
111
+ else
112
+ s.add_dependency(%q<roo>, [">= 0"])
113
+ s.add_dependency(%q<zip>, [">= 0"])
114
+ s.add_dependency(%q<spreadsheet>, [">= 0"])
115
+ s.add_dependency(%q<nokogiri>, [">= 0"])
116
+ s.add_dependency(%q<google-spreadsheet-ruby>, [">= 0"])
117
+ s.add_dependency(%q<activesupport>, [">= 0"])
118
+ s.add_dependency(%q<fastercsv>, [">= 0"])
119
+ s.add_dependency(%q<autotest-fsevent>, [">= 0.2.2"])
120
+ s.add_dependency(%q<autotest-growl>, [">= 0.2.4"])
121
+ s.add_dependency(%q<builder>, [">= 0"])
122
+ s.add_dependency(%q<rspec>, [">= 2.0.0.rc"])
123
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
124
+ s.add_dependency(%q<jeweler>, ["~> 1.5.0.pre3"])
125
+ s.add_dependency(%q<rcov>, [">= 0"])
126
+ s.add_dependency(%q<roo>, [">= 0"])
127
+ s.add_dependency(%q<zip>, [">= 0"])
128
+ s.add_dependency(%q<spreadsheet>, [">= 0"])
129
+ s.add_dependency(%q<nokogiri>, [">= 0"])
130
+ s.add_dependency(%q<google-spreadsheet-ruby>, [">= 0"])
131
+ s.add_dependency(%q<activesupport>, [">= 0"])
132
+ s.add_dependency(%q<builder>, [">= 0"])
133
+ s.add_dependency(%q<rspec>, [">= 2.0.0.rc"])
134
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
135
+ s.add_dependency(%q<jeweler>, ["~> 1.5.0.pre3"])
136
+ s.add_dependency(%q<rcov>, [">= 0"])
137
+ end
138
+ end
139
+