csv_schema 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.0.3
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{csv_schema}
8
- s.version = "0.0.2"
8
+ s.version = "0.0.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["jconley"]
@@ -27,11 +27,11 @@ class CSVSchema
27
27
  @current_row = 1
28
28
  FasterCSV.foreach(@file) do |row|
29
29
  if @current_row == 1
30
- @headers = row
31
- index_field_requirements_by_column_number
32
- validate_duplicate_headers(row, @headers_transform) unless @allow_duplicate_headers
33
- validate_blank_headers(row) unless @allow_blank_headers
34
- validate_required_headers(row) if @required_headers
30
+ headers = transform(row)
31
+ index_field_requirements_by_column_number(headers)
32
+ validate_duplicate_headers(headers) unless @allow_duplicate_headers
33
+ validate_blank_headers(headers) unless @allow_blank_headers
34
+ validate_required_headers(headers) if @required_headers
35
35
  else
36
36
  validate_blank_rows(row) unless @allow_blank_rows
37
37
  validate_restrict_value_fields(row) if !@restrict_value_fields.empty?
@@ -45,9 +45,9 @@ class CSVSchema
45
45
  end
46
46
 
47
47
  private
48
- def index_field_requirements_by_column_number
48
+ def index_field_requirements_by_column_number(headers)
49
49
  headers_to_column_number = Hash.new { |hash, key| raise "The specified column '#{key}' does not exist" }
50
- @headers.each_with_index do |header, column_number|
50
+ headers.each_with_index do |header, column_number|
51
51
  headers_to_column_number[header] = column_number
52
52
  end
53
53
  @indexed_headers = headers_to_column_number.invert
@@ -71,20 +71,19 @@ private
71
71
  @unique_fields = u
72
72
  end
73
73
 
74
- def validate_duplicate_headers(row, transform = nil)
75
- headers = transform ? row.map{ |header| transform.call(header)} : row
74
+ def validate_duplicate_headers(headers)
76
75
  dups = headers.inject(Hash.new(0)) { |h, v| h[v] += 1; h }.reject { |k, v| v==1 }.keys #http://snippets.dzone.com/posts/show/3838
77
76
  if dups.length > 0
78
77
  raise "Duplicate headers exist: #{dups.inspect}"
79
78
  end
80
79
  end
81
80
 
82
- def validate_blank_headers(row)
83
- raise "There are illegal blank headers. If this is allowed, set :allow_blank_headers => true" if row.any?{|h| (h == '') || (h == nil)}
81
+ def validate_blank_headers(headers)
82
+ raise "There are illegal blank headers. If this is allowed, set :allow_blank_headers => true" if headers.any?{|h| (h == '') || (h == nil)}
84
83
  end
85
84
 
86
- def validate_required_headers(row)
87
- missing = @required_headers - row
85
+ def validate_required_headers(headers)
86
+ missing = @required_headers - headers
88
87
  raise "#{File.basename(@file)} is missing headers: #{missing.inspect}" unless missing.empty?
89
88
  end
90
89
 
@@ -130,4 +129,8 @@ private
130
129
  def header_name(col_num)
131
130
  @indexed_headers[col_num]
132
131
  end
132
+
133
+ def transform(header_row)
134
+ @headers_transform ? header_row.map { |header| @headers_transform.call(header) } : header_row
135
+ end
133
136
  end
@@ -96,6 +96,18 @@ describe CSVSchema do
96
96
  lambda { CSVSchema.new(@lenient_options.merge(:file => generate_csv_file.path, :required_headers => ['header_1'])).validate }.should_not raise_error
97
97
  end
98
98
 
99
+ it "should NOT raise when the transformed headers do exist" do
100
+ @headers = ['HEADER 1']
101
+ transform = FasterCSV::HeaderConverters[:symbol]
102
+ lambda { CSVSchema.new(@lenient_options.merge(:file => generate_csv_file.path, :required_headers => [:header_1], :headers_transform => transform)).validate }.should_not raise_error()
103
+ end
104
+
105
+ it "should raise when the transformed headers do NOT exist" do
106
+ @headers = ['HEADER 1']
107
+ transform = FasterCSV::HeaderConverters[:symbol]
108
+ lambda { CSVSchema.new(@lenient_options.merge(:file => generate_csv_file.path, :required_headers => @headers, :headers_transform => transform)).validate }.should raise_error(StandardError, /#{@headers.first}/)
109
+ end
110
+
99
111
  it "should raise when any REQUIRED HEADERS do NOT exist" do
100
112
  missing_header = 'doesnt_exist'
101
113
  lambda { CSVSchema.new(@lenient_options.merge(:file => generate_csv_file.path, :required_headers => [missing_header])).validate }.should raise_error(StandardError, /#{missing_header}/)
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: csv_schema
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 2
10
- version: 0.0.2
9
+ - 3
10
+ version: 0.0.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - jconley