lib/csvlint/schema.rb in csvlint-1.0.0 vs lib/csvlint/schema.rb in csvlint-1.1.0
- old
+ new
@@ -1,36 +1,33 @@
module Csvlint
-
class Schema
-
include Csvlint::ErrorCollector
attr_reader :uri, :fields, :title, :description
- def initialize(uri, fields=[], title=nil, description=nil)
+ def initialize(uri, fields = [], title = nil, description = nil)
@uri = uri
@fields = fields
@title = title
@description = description
reset
end
class << self
-
extend Gem::Deprecate
def from_json_table(uri, json)
fields = []
- json["fields"].each do |field_desc|
- fields << Csvlint::Field.new( field_desc["name"] , field_desc["constraints"],
- field_desc["title"], field_desc["description"] )
- end if json["fields"]
- return Schema.new( uri , fields, json["title"], json["description"] )
+ json["fields"]&.each do |field_desc|
+ fields << Csvlint::Field.new(field_desc["name"], field_desc["constraints"],
+ field_desc["title"], field_desc["description"])
+ end
+ Schema.new(uri, fields, json["title"], json["description"])
end
def from_csvw_metadata(uri, json)
- return Csvlint::Csvw::TableGroup.from_json(uri, json)
+ Csvlint::Csvw::TableGroup.from_json(uri, json)
end
# Deprecated method signature
def load_from_json(uri, output_errors = true)
load_from_uri(uri, output_errors)
@@ -42,66 +39,61 @@
rescue OpenURI::HTTPError, Errno::ENOENT => e
raise e
end
def load_from_string(uri, string, output_errors = true)
- begin
- json = JSON.parse( string )
- if json["@context"]
- uri = "file:#{File.expand_path(uri)}" unless uri.to_s =~ /^http(s)?/
- return Schema.from_csvw_metadata(uri,json)
- else
- return Schema.from_json_table(uri,json)
- end
- rescue TypeError => e
- # NO IDEA what this was even trying to do - SP 20160526
-
- rescue Csvlint::Csvw::MetadataError => e
- raise e
- rescue => e
- if output_errors === true
- STDERR.puts e.class
- STDERR.puts e.message
- STDERR.puts e.backtrace
- end
- return Schema.new(nil, [], "malformed", "malformed")
+ json = JSON.parse(string)
+ if json["@context"]
+ uri = "file:#{File.expand_path(uri)}" unless /^http(s)?/.match?(uri.to_s)
+ Schema.from_csvw_metadata(uri, json)
+ else
+ Schema.from_json_table(uri, json)
end
+ rescue TypeError => e
+ # NO IDEA what this was even trying to do - SP 20160526
+ rescue Csvlint::Csvw::MetadataError => e
+ raise e
+ rescue => e
+ if output_errors === true
+ warn e.class
+ warn e.message
+ warn e.backtrace
+ end
+ Schema.new(nil, [], "malformed", "malformed")
end
-
end
- def validate_header(header, source_url=nil, validate=true)
+ def validate_header(header, source_url = nil, validate = true)
reset
- found_header = header.to_csv(:row_sep => '')
- expected_header = @fields.map{ |f| f.name }.to_csv(:row_sep => '')
+ found_header = header.to_csv(row_sep: "")
+ expected_header = @fields.map { |f| f.name }.to_csv(row_sep: "")
if found_header != expected_header
build_warnings(:malformed_header, :schema, 1, nil, found_header, "expectedHeader" => expected_header)
end
- return valid?
+ valid?
end
- def validate_row(values, row=nil, all_errors=[], source_url=nil, validate=true)
+ def validate_row(values, row = nil, all_errors = [], source_url = nil, validate = true)
reset
if values.length < fields.length
fields[values.size..-1].each_with_index do |field, i|
- build_warnings(:missing_column, :schema, row, values.size+i+1)
+ build_warnings(:missing_column, :schema, row, values.size + i + 1)
end
end
if values.length > fields.length
values[fields.size..-1].each_with_index do |data_column, i|
- build_warnings(:extra_column, :schema, row, fields.size+i+1)
+ build_warnings(:extra_column, :schema, row, fields.size + i + 1)
end
end
- fields.each_with_index do |field,i|
+ fields.each_with_index do |field, i|
value = values[i] || ""
- result = field.validate_column(value, row, i+1, all_errors)
+ result = field.validate_column(value, row, i + 1, all_errors)
@errors += fields[i].errors
@warnings += fields[i].warnings
end
- return valid?
+ valid?
end
-
end
end