csvlint.rb
csvlint.rb copied to clipboard
Validation not working as expected.
I have a rails app where you upload a csv file. I want to use Csvlint to validate the format of the file.
In the app controller I have the following:
file_path(connect) -> the uploaded csv file, the contents are as follows:
Date,Time,Product,ISIN,Reference,Venue,Quantity,Price,,Local value,,Value,,Exchange rate,Transaction and/or third,,Total,,Order ID
11-02-2022,11:29,VANGUARD S&P500,IE00B3XXRP09,LSE,MSEU,43,62.7350,GBP,-2697.61,GBP,-2697.61,GBP,,-2.11,GBP,-2699.72,GBP,8b7ae994-e727-4fa2-bb1d-89f7bfc31e6e
14-12-2021,10:49,VANGUARD S&P500,IE00B3XXRP09,LSE,MSEU,17,67.1300,GBP,-1141.21,GBP,-1141.21,GBP,,-2.05,GBP,-1143.26,GBP,eb1f8861-43b9-4de2-8276-21a18f42eedb
In the lib/csv folder I have a file called degiro.csv which includes the following (i am using this for testing purposes)
{
"@context": "http://www.w3.org/ns/csvw",
"url": "http://example.com/example1.csv",
"tableSchema": {
"columns": [
{
"name": "Date",
"required": true,
"datatype": { "base": "integer" }
},
{
"name": "Time",
"required": true,
"datatype": { "base": "string", "maxLength": 1 }
},
{
"name": "Product",
"required": true
}
]
}
}
When I run the following, I get the following error:
path = Rails.root.join('lib', 'csv', 'degiro.csv') schema = Csvlint::Schema.load_from_uri(path) validator = Csvlint::Validator.new(file_path(connect), nil, schema)
NoMethodError: undefined method []' for nil:NilClass from /Users/robert.mcginn/.rvm/gems/ruby-2.7.1/gems/csvlint-0.4.0/lib/csvlint/validate.rb:289:in set_dialect'
it appears that a dialect is required for the error not to be thrown.
If i supply an empty hash rather than nil i get a valid "Csvlint::Validator" object returned but without any errors found @errors=[]
# validator = Csvlint::Validator.new(file_path(connect), {} , schema)
Initially, I wanted to test that the schema validator was working appropriately, I am expecting at least the "Time" column which is accepting a string of maxLength 1 to return an error. But, that's not working.
Any help would be appreciated.
Expected Behaviour
What should happen?
I'm expecting validator.errors.any? to be true (errors to be found)
Desired Behaviour (for improvement suggestions only)
if relevant include images or hyperlinks to other resources that clarify the enhancement you're seeking
Current Behaviour (for problems)
validator.errors.any? = false
Steps to Reproduce (for problems)
Provide a link to a live example, or an unambiguous set of steps to reproduce this bug. Include code to reproduce, if relevant
As above.
Your Environment
Include as many relevant details about the environment you experienced the bug in - this will help us resolve the bug more expediently
local development environment
Rails 7.0.1 ruby "2.7.1" gem "csvlint" chrome = Version 101.0.4951.64