unit_validator 0.1.0

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.
@@ -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
+