Put files in temp directory so relation between schema and csv is kept. Validate all tables in schema to pick up foreign key constraints.
1 parent 207ae7a commit 303c9194c95759a6c3ae04585399f3ffae7b2292
@Alex Tucker Alex Tucker authored on 10 Jun 2019
Showing 2 changed files
View
36
app.rb
erb :index
end
 
post '/validate' do
tidy_file = params[:tidyDataFile][:tempfile]
schema_file = params[:schemaFile][:tempfile]
schema_string = schema_file.read
csvw_schema = Csvlint::Schema.load_from_string(params[:schemaFile][:filename],
schema_string,
true)
@validator = Csvlint::Validator.new(tidy_file, {}, csvw_schema)
# @validator.validate
tmp_dir = Dir::mktmpdir('csvlint')
tidy_tmpfile = params[:tidyDataFile][:tempfile]
tidy_filename = File::join(tmp_dir, params[:tidyDataFile][:filename])
File.open(tidy_filename, 'wb') do |tf|
tf.write(tidy_tmpfile.read)
end
schema_tmpfile = params[:schemaFile][:tempfile]
schema_filename = File::join(tmp_dir, params[:schemaFile][:filename])
File.open(schema_filename, 'wb') do |sf|
sf.write(schema_tmpfile.read)
end
csvw_schema = Csvlint::Schema.load_from_uri(schema_filename)
valid = true
@validator = nil
csvw_schema.tables.keys.each do |source|
@validator = Csvlint::Validator.new(source, {}, csvw_schema)
valid &= @validator.valid?
end
erb :results
end
View
36
views/results.erb
<dl>
<dt>Valid</dt><dd><%= @validator.valid? %></dd>
<dt>Errors</dt><dd>
<ol>
<% @validator.errors do |error| %>
<li><%= error %>
<% end %>
<% @validator.errors.each do |error| %>
<li>
<%= error.type.to_s %>
<%= error.content %>
</li>
<% end %>
</ol>
</dd>
<dt>Warnings</dt><dd>
<ol>
<% @validator.warnings do |warning| %>
<li><%= warning %>
<% end %>
<% @validator.warnings.each do |warning| %>
<li>
<%= warning.type.to_s %>
<%= warning.content %>
</li>
<% end %>
</ol>
</dd>
<dt>Info</dt><dd>
<ol>
<% @validator.info_messages do |info| %>
<li><%= info %>
<% end %>
<% @validator.info_messages.each do |info| %>
<li>
<%= info.type.to_s %>
<%= info.content %>
</li>
<% end %>
</ol>
</dd>
</dl>
</div>