csvlint 0.4.0 → 1.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.
Files changed (53) hide show
  1. checksums.yaml +5 -5
  2. data/.github/dependabot.yml +11 -0
  3. data/.github/workflows/push.yml +35 -0
  4. data/.gitignore +1 -0
  5. data/.ruby-version +1 -1
  6. data/.standard_todo.yml +43 -0
  7. data/CHANGELOG.md +38 -0
  8. data/Dockerfile +16 -0
  9. data/Gemfile +2 -2
  10. data/README.md +13 -10
  11. data/Rakefile +7 -7
  12. data/bin/create_schema +2 -2
  13. data/csvlint.gemspec +19 -22
  14. data/docker_notes_for_windows.txt +20 -0
  15. data/features/step_definitions/cli_steps.rb +11 -11
  16. data/features/step_definitions/information_steps.rb +4 -4
  17. data/features/step_definitions/parse_csv_steps.rb +11 -11
  18. data/features/step_definitions/schema_validation_steps.rb +10 -10
  19. data/features/step_definitions/sources_steps.rb +1 -1
  20. data/features/step_definitions/validation_errors_steps.rb +19 -19
  21. data/features/step_definitions/validation_info_steps.rb +9 -9
  22. data/features/step_definitions/validation_warnings_steps.rb +11 -11
  23. data/features/support/aruba.rb +10 -9
  24. data/features/support/earl_formatter.rb +39 -39
  25. data/features/support/env.rb +10 -11
  26. data/features/support/load_tests.rb +109 -105
  27. data/features/support/webmock.rb +3 -1
  28. data/lib/csvlint/cli.rb +136 -142
  29. data/lib/csvlint/csvw/column.rb +279 -280
  30. data/lib/csvlint/csvw/date_format.rb +90 -92
  31. data/lib/csvlint/csvw/metadata_error.rb +1 -3
  32. data/lib/csvlint/csvw/number_format.rb +40 -32
  33. data/lib/csvlint/csvw/property_checker.rb +714 -717
  34. data/lib/csvlint/csvw/table.rb +49 -52
  35. data/lib/csvlint/csvw/table_group.rb +24 -23
  36. data/lib/csvlint/error_collector.rb +2 -0
  37. data/lib/csvlint/error_message.rb +0 -1
  38. data/lib/csvlint/field.rb +153 -141
  39. data/lib/csvlint/schema.rb +35 -43
  40. data/lib/csvlint/validate.rb +173 -151
  41. data/lib/csvlint/version.rb +1 -1
  42. data/lib/csvlint.rb +22 -23
  43. data/spec/csvw/column_spec.rb +15 -16
  44. data/spec/csvw/date_format_spec.rb +5 -7
  45. data/spec/csvw/number_format_spec.rb +2 -4
  46. data/spec/csvw/table_group_spec.rb +103 -105
  47. data/spec/csvw/table_spec.rb +71 -73
  48. data/spec/field_spec.rb +116 -121
  49. data/spec/schema_spec.rb +131 -141
  50. data/spec/spec_helper.rb +6 -6
  51. data/spec/validator_spec.rb +167 -203
  52. metadata +41 -85
  53. data/.travis.yml +0 -37
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 5d5ee384ce684c04b09f786edab7aaba1598f651
4
- data.tar.gz: 7e473e918dea5c6578c5f8d5870633c006ee7c80
2
+ SHA256:
3
+ metadata.gz: 7f9c598fca283466c50e65c4b436166fccb0e9e0340d3d370fb3f4e814cf1f3e
4
+ data.tar.gz: 321481d47fca1f6ef1df7963e5d705ce05685a9861e48d954397eb288f46541a
5
5
  SHA512:
6
- metadata.gz: e2dbc5910aca216330618cf5095950a8b227b412ccc7f6b997fa401b2e02d19895c4c18b0a4d2b01cb76c0415089a4793429f10c09a1c7eb4273d4dfa5cff0db
7
- data.tar.gz: dd5bc5ff3d8b31b52a342bbba7d9b8984dca267cfa618b514c1c3995139190e275e5c8ee6f5ac0b965910458a49891a13bf60fd46d4c329a99e4fc51d75d28ed
6
+ metadata.gz: 1e9f755b174f3c1b3052f43621e8c15cf3a3b947a5a611f370b42f309492797664a622886520a7d209d109f271a2d101aaa24017529900c82d76a71b8cb46173
7
+ data.tar.gz: 73da87ddbbc71a1e62f90ffaebca3947833921f546dcb01524bd464c7fbf1a3dbf086757443838e6ec401bac86e5cacf26a9e3b397904ba9ee32a0688c4271a0
@@ -0,0 +1,11 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: bundler
4
+ directory: "/"
5
+ schedule:
6
+ interval: daily
7
+ open-pull-requests-limit: 10
8
+ - package-ecosystem: github-actions
9
+ directory: "/"
10
+ schedule:
11
+ interval: weekly
@@ -0,0 +1,35 @@
1
+ name: CI
2
+ on:
3
+ push:
4
+ branches: [ main ]
5
+ pull_request:
6
+ branches: [ main ]
7
+ jobs:
8
+ test:
9
+ runs-on: ubuntu-latest
10
+ strategy:
11
+ matrix:
12
+ ruby-version: ['2.5', '2.6', '2.7', '3.0', '3.1', '3.2']
13
+ fail-fast: false
14
+ steps:
15
+ - uses: actions/checkout@v3
16
+ - uses: ruby/setup-ruby@v1
17
+ with:
18
+ bundler-cache: true
19
+ ruby-version: ${{ matrix.ruby-version }}
20
+ - name: Install dependencies
21
+ run: bundle install
22
+ - name: Run the tests
23
+ run: bundle exec rake
24
+ lint:
25
+ runs-on: ubuntu-latest
26
+ steps:
27
+ - uses: actions/checkout@v2
28
+ - uses: ruby/setup-ruby@v1
29
+ with:
30
+ bundler-cache: true
31
+ ruby-version: "3.2"
32
+ - name: Install dependencies
33
+ run: bundle install
34
+ - name: Run the tests
35
+ run: bundle exec standardrb
data/.gitignore CHANGED
@@ -26,3 +26,4 @@ features/fixtures/csvw
26
26
  bin/run-csvw-tests
27
27
 
28
28
  csvlint-earl.ttl
29
+ .byebug_history
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.4.1
1
+ 3.2.0
@@ -0,0 +1,43 @@
1
+ # Auto generated files with errors to ignore.
2
+ # Remove from this list as you refactor files.
3
+ ---
4
+ ignore:
5
+ - features/step_definitions/validation_errors_steps.rb:
6
+ - Lint/Void
7
+ - features/support/load_tests.rb:
8
+ - Style/For
9
+ - Security/Open
10
+ - Lint/UselessAssignment
11
+ - lib/csvlint/cli.rb:
12
+ - Style/NonNilCheck
13
+ - lib/csvlint/csvw/column.rb:
14
+ - Style/TernaryParentheses
15
+ - lib/csvlint/csvw/date_format.rb:
16
+ - Lint/MixedRegexpCaptureTypes
17
+ - lib/csvlint/csvw/number_format.rb:
18
+ - Style/SlicingWithRange
19
+ - Style/IdenticalConditionalBranches
20
+ - lib/csvlint/csvw/property_checker.rb:
21
+ - Performance/InefficientHashSearch
22
+ - Lint/UselessAssignment
23
+ - Naming/VariableName
24
+ - Style/SlicingWithRange
25
+ - Security/Open
26
+ - Lint/BooleanSymbol
27
+ - lib/csvlint/csvw/table_group.rb:
28
+ - Style/OptionalArguments
29
+ - lib/csvlint/field.rb:
30
+ - Naming/VariableName
31
+ - lib/csvlint/schema.rb:
32
+ - Security/Open
33
+ - Lint/UselessAssignment
34
+ - Style/SlicingWithRange
35
+ - lib/csvlint/validate.rb:
36
+ - Lint/UselessAssignment
37
+ - Performance/Count
38
+ - Lint/BooleanSymbol
39
+ - Naming/VariableName
40
+ - Security/Open
41
+ - Lint/NonLocalExitFromIterator
42
+ - spec/validator_spec.rb:
43
+ - Lint/UselessAssignment
data/CHANGELOG.md CHANGED
@@ -1,5 +1,43 @@
1
1
  # Change Log
2
2
 
3
+ ## [v1.0.0](https://github.com/Data-Liberation-Front/csvlint.rb/tree/v1.0.0) (2022-07-13)
4
+ [Full Changelog](https://github.com/theodi/csvlint.rb/compare/0.4.0...v1.0.0)
5
+
6
+ Support Ruby 3.x, and DROPPED support for Ruby 2.4 - that's why the major version bump. That and this has been around long enough that it really shouldn't be on a zero version any more :)
7
+
8
+ ## What's Changed
9
+ * Don't patch CSV#init_converters for ruby 2.5 compatibility by @rbmrclo in https://github.com/Data-Liberation-Front/csvlint.rb/pull/217
10
+ * correct typos in README by @erikj in https://github.com/Data-Liberation-Front/csvlint.rb/pull/216
11
+ * add info about your PATH by @ftrotter in https://github.com/Data-Liberation-Front/csvlint.rb/pull/222
12
+ * Remove tests on deprecated ruby versions < 2.3 by @Floppy in https://github.com/Data-Liberation-Front/csvlint.rb/pull/234
13
+ * Drop mime-types gem dependency by @ohbarye in https://github.com/Data-Liberation-Front/csvlint.rb/pull/221
14
+ * remove specific version of net-http-persistent in gemspec by @kotaro0522 in https://github.com/Data-Liberation-Front/csvlint.rb/pull/219
15
+ * Replace colorize with rainbow to make licensing consistent. by @cobbr2 in https://github.com/Data-Liberation-Front/csvlint.rb/pull/215
16
+ * Update rdf requirement from < 2.0 to < 4.0 by @dependabot-preview in https://github.com/Data-Liberation-Front/csvlint.rb/pull/231
17
+ * Test on Ruby 2.5 and 2.6 by @Domon in https://github.com/Data-Liberation-Front/csvlint.rb/pull/223
18
+ * Fix load_from_json deprecation warnings. by @jezhiggins in https://github.com/Data-Liberation-Front/csvlint.rb/pull/237
19
+ * Fix csvw tests by @Floppy in https://github.com/Data-Liberation-Front/csvlint.rb/pull/239
20
+ * Test on Ruby 2.6 and 2.7 by @Floppy in https://github.com/Data-Liberation-Front/csvlint.rb/pull/240
21
+ * Create Dependabot config file by @dependabot-preview in https://github.com/Data-Liberation-Front/csvlint.rb/pull/245
22
+ * Include active_support/object to ensure this works in ruby 2.6 by @mseverini in https://github.com/Data-Liberation-Front/csvlint.rb/pull/246
23
+ * add CI workflow for github actions by @Floppy in https://github.com/Data-Liberation-Front/csvlint.rb/pull/255
24
+ * Enable and fix tests for Ruby 2.5 by @Floppy in https://github.com/Data-Liberation-Front/csvlint.rb/pull/259
25
+ * Support Ruby 2.6 by @Floppy in https://github.com/Data-Liberation-Front/csvlint.rb/pull/262
26
+ * Ruby 2.7 support by @Floppy in https://github.com/Data-Liberation-Front/csvlint.rb/pull/263
27
+ * Drop support for Ruby 2.4 by @Floppy in https://github.com/Data-Liberation-Front/csvlint.rb/pull/265
28
+ * Ruby 3.0 by @Floppy in https://github.com/Data-Liberation-Front/csvlint.rb/pull/264
29
+
30
+ ## New Contributors
31
+ * @rbmrclo made their first contribution in https://github.com/Data-Liberation-Front/csvlint.rb/pull/217
32
+ * @erikj made their first contribution in https://github.com/Data-Liberation-Front/csvlint.rb/pull/216
33
+ * @ftrotter made their first contribution in https://github.com/Data-Liberation-Front/csvlint.rb/pull/222
34
+ * @ohbarye made their first contribution in https://github.com/Data-Liberation-Front/csvlint.rb/pull/221
35
+ * @kotaro0522 made their first contribution in https://github.com/Data-Liberation-Front/csvlint.rb/pull/219
36
+ * @cobbr2 made their first contribution in https://github.com/Data-Liberation-Front/csvlint.rb/pull/215
37
+ * @dependabot-preview made their first contribution in https://github.com/Data-Liberation-Front/csvlint.rb/pull/231
38
+ * @Domon made their first contribution in https://github.com/Data-Liberation-Front/csvlint.rb/pull/223
39
+ * @mseverini made their first contribution in https://github.com/Data-Liberation-Front/csvlint.rb/pull/246
40
+
3
41
  ## [0.4.0](https://github.com/theodi/csvlint.rb/tree/0.4.0) (2017-xx-xx)
4
42
  [Full Changelog](https://github.com/theodi/csvlint.rb/compare/0.3.3...0.4.0)
5
43
 
data/Dockerfile ADDED
@@ -0,0 +1,16 @@
1
+ FROM ruby:2.5.8-buster
2
+
3
+ # throw errors if Gemfile has been modified since Gemfile.lock
4
+ RUN bundle config --global frozen 1
5
+
6
+ WORKDIR /usr/src/app
7
+
8
+ ENV LANG C.UTF-8
9
+
10
+ COPY ./lib/csvlint/version.rb ./lib/csvlint/
11
+ COPY csvlint.gemspec Gemfile Gemfile.lock ./
12
+ RUN bundle install
13
+
14
+ COPY ./ ./
15
+
16
+ CMD ["./bin/csvlint"]
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in csvlint.rb.gemspec
4
- gemspec
4
+ gemspec
data/README.md CHANGED
@@ -1,23 +1,23 @@
1
- [![Build Status](http://img.shields.io/travis/theodi/csvlint.rb.svg)](https://travis-ci.org/theodi/csvlint.rb)
2
- [![Dependency Status](http://img.shields.io/gemnasium/theodi/csvlint.rb.svg)](https://gemnasium.com/theodi/csvlint.rb)
3
- [![Coverage Status](http://img.shields.io/coveralls/theodi/csvlint.rb.svg)](https://coveralls.io/r/theodi/csvlint.rb)
1
+ [![Build Status](https://img.shields.io/github/workflow/status/Data-Liberation-Front/csvlint.rb/CI/main)](https://travis-ci.org/theodi/csvlint.rb)
2
+ [![Dependency Status](https://img.shields.io/librariesio/github/Data-Liberation-Front/csvlint.rb)](https://libraries.io/github/Data-Liberation-Front/csvlint.rb)
3
+ [![Coverage Status](http://img.shields.io/coveralls/Data-Liberation-Front/csvlint.rb.svg)](https://coveralls.io/r/Data-Liberation-Front/csvlint.rb)
4
4
  [![License](http://img.shields.io/:license-mit-blue.svg)](http://theodi.mit-license.org)
5
5
  [![Badges](http://img.shields.io/:badges-5/5-ff6799.svg)](https://github.com/pikesley/badger)
6
6
 
7
7
  # CSV Lint
8
8
 
9
- A ruby gem to support validating CSV files to check their syntax and contents. You can either use this gem within your own Ruby code, or as a standolone command line application
9
+ A ruby gem to support validating CSV files to check their syntax and contents. You can either use this gem within your own Ruby code, or as a standalone command line application
10
10
 
11
11
  ## Summary of features
12
12
 
13
- * Validation that checks the structural formatting of a CSV file
13
+ * Validation that checks the structural formatting of a CSV file
14
14
  * Validation of a delimiter-separated values (dsv) file accesible via URL, File, or an IO-style object (e.g. StringIO)
15
- * Validation against [CSV dialects](http://dataprotocols.org/csv-dialect/)
16
- * Validation against multiple schema standards; [JSON Table Schema](https://github.com/theodi/csvlint.rb/blob/master/README.md#json-table-schema-support) and [CSV on the Web](https://github.com/theodi/csvlint.rb/blob/master/README.md#csv-on-the-web-validation-support)
15
+ * Validation against [CSV dialects](http://dataprotocols.org/csv-dialect/)
16
+ * Validation against multiple schema standards; [JSON Table Schema](https://github.com/theodi/csvlint.rb/blob/master/README.md#json-table-schema-support) and [CSV on the Web](https://github.com/theodi/csvlint.rb/blob/master/README.md#csv-on-the-web-validation-support)
17
17
 
18
18
  ## Development
19
19
 
20
- `ruby version 2.1.4`
20
+ `ruby version 3.2`
21
21
 
22
22
  ### Tests
23
23
 
@@ -63,7 +63,7 @@ Or install it yourself as:
63
63
 
64
64
  ## Usage
65
65
 
66
- You can either use this gem within your own Ruby code, or as a standolone command line application
66
+ You can either use this gem within your own Ruby code, or as a standalone command line application
67
67
 
68
68
  ## On the command line
69
69
 
@@ -71,6 +71,9 @@ After installing the gem, you can validate a CSV on the command line like so:
71
71
 
72
72
  csvlint myfile.csv
73
73
 
74
+ You may need to add the gem exectuable directory to your path, by adding '/usr/local/lib/ruby/gems/2.6.0/bin'
75
+ or whatever your version is, to your .bash_profile PATH entry. [like so](https://stackoverflow.com/questions/2392293/ruby-gems-returns-command-not-found)
76
+
74
77
  You will then see the validation result, together with any warnings or errors e.g.
75
78
 
76
79
  ```
@@ -210,7 +213,7 @@ An example JSON Table Schema schema file is:
210
213
  "name": "price",
211
214
  "constraints": {
212
215
  "required": true,
213
- "minLength": 1
216
+ "minLength": 1
214
217
  }
215
218
  },
216
219
  {
data/Rakefile CHANGED
@@ -1,12 +1,12 @@
1
1
  require "bundler/gem_tasks"
2
2
 
3
- $:.unshift File.join( File.dirname(__FILE__), "lib")
3
+ $:.unshift File.join(File.dirname(__FILE__), "lib")
4
4
 
5
- require 'rubygems'
6
- require 'cucumber'
7
- require 'cucumber/rake/task'
8
- require 'coveralls/rake/task'
9
- require 'rspec/core/rake_task'
5
+ require "rubygems"
6
+ require "cucumber"
7
+ require "cucumber/rake/task"
8
+ require "coveralls/rake/task"
9
+ require "rspec/core/rake_task"
10
10
 
11
11
  RSpec::Core::RakeTask.new(:spec)
12
12
  Coveralls::RakeTask.new
@@ -14,4 +14,4 @@ Cucumber::Rake::Task.new(:features) do |t|
14
14
  t.cucumber_opts = "features --format pretty"
15
15
  end
16
16
 
17
- task :default => [:spec, :features, 'coveralls:push']
17
+ task default: [:spec, :features, "coveralls:push"]
data/bin/create_schema CHANGED
@@ -5,7 +5,7 @@ require 'csvlint'
5
5
 
6
6
  begin
7
7
  puts ARGV[0]
8
- csv = CSV.new( open(ARGV[0]) )
8
+ csv = CSV.new( URI.open(ARGV[0]) )
9
9
  headers = csv.shift
10
10
 
11
11
  name = File.basename( ARGV[0] )
@@ -29,4 +29,4 @@ rescue => e
29
29
  puts e
30
30
  puts e.backtrace
31
31
  puts "Unable to parse CSV file"
32
- end
32
+ end
data/csvlint.gemspec CHANGED
@@ -1,27 +1,24 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path("../lib", __FILE__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'csvlint/version'
3
+ require "csvlint/version"
5
4
 
6
5
  Gem::Specification.new do |spec|
7
- spec.name = "csvlint"
8
- spec.version = Csvlint::VERSION
9
- spec.authors = ["pezholio"]
10
- spec.email = ["pezholio@gmail.com"]
11
- spec.description = %q{CSV Validator}
12
- spec.summary = %q{CSV Validator}
13
- spec.homepage = "https://github.com/theodi/csvlint.rb"
14
- spec.license = "MIT"
6
+ spec.name = "csvlint"
7
+ spec.version = Csvlint::VERSION
8
+ spec.authors = ["pezholio"]
9
+ spec.email = ["pezholio@gmail.com"]
10
+ spec.description = "CSV Validator"
11
+ spec.summary = "CSV Validator"
12
+ spec.homepage = "https://github.com/theodi/csvlint.rb"
13
+ spec.license = "MIT"
15
14
 
16
- spec.files = `git ls-files`.split($/)
17
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
15
+ spec.files = `git ls-files`.split($/)
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
17
  spec.require_paths = ["lib"]
20
18
 
21
- spec.required_ruby_version = ['~> 2.0']
19
+ spec.required_ruby_version = [">= 2.5", "< 3.3"]
22
20
 
23
- spec.add_dependency "mime-types"
24
- spec.add_dependency "colorize"
21
+ spec.add_dependency "rainbow"
25
22
  spec.add_dependency "open_uri_redirections"
26
23
  spec.add_dependency "activesupport"
27
24
  spec.add_dependency "addressable"
@@ -30,9 +27,9 @@ Gem::Specification.new do |spec|
30
27
  spec.add_dependency "uri_template"
31
28
  spec.add_dependency "thor"
32
29
  spec.add_dependency "rack"
33
- spec.add_dependency "net-http-persistent", "< 3.0"
30
+ spec.add_dependency "net-http-persistent"
34
31
 
35
- spec.add_development_dependency "bundler", "~> 1.3"
32
+ spec.add_development_dependency "bundler", ">= 1.3"
36
33
  spec.add_development_dependency "rake"
37
34
  spec.add_development_dependency "cucumber"
38
35
  spec.add_development_dependency "simplecov"
@@ -43,11 +40,11 @@ Gem::Specification.new do |spec|
43
40
  spec.add_development_dependency "rspec-pride"
44
41
  spec.add_development_dependency "rspec-expectations"
45
42
  spec.add_development_dependency "coveralls"
46
- spec.add_development_dependency "pry"
43
+ spec.add_development_dependency "byebug"
47
44
  spec.add_development_dependency "github_changelog_generator"
48
45
  spec.add_development_dependency "aruba"
49
- spec.add_development_dependency "rdf", "< 2.0"
46
+ spec.add_development_dependency "rdf", "< 4.0"
50
47
  spec.add_development_dependency "rdf-turtle"
51
48
  spec.add_development_dependency "henry"
52
-
49
+ spec.add_development_dependency "standardrb"
53
50
  end
@@ -0,0 +1,20 @@
1
+ # Note that these commands are specific for a docker environment on MS Windows.
2
+
3
+ # to generate Gemfile.lock file
4
+ docker run --rm -v %CD%:/usr/src/app -w /usr/src/app ruby:2.5 bundle install
5
+
6
+ # to build docker image from source (the ending dot is significant)
7
+ docker build -t csvlint .
8
+
9
+ # to run tests
10
+ docker run -it --rm csvlint rake
11
+
12
+ # to run csvlint command line with a CSV file.
13
+ # cd to the directory with the CSV file then
14
+ docker run -it --rm -v %CD%:/tmp csvlint ./bin/csvlint --dump-errors /tmp/file-to-lint.csv
15
+
16
+ # to enter the linux container
17
+ docker run -it --rm -v %CD%:/tmp csvlint bash
18
+
19
+ # to enter the ruby REPL
20
+ docker run -it --rm -v %CD%:/tmp csvlint irb
@@ -1,37 +1,37 @@
1
- Given(/^I have stubbed stdin to contain "(.*?)"$/) do |file|
2
- expect(STDIN).to receive(:read).and_return(File.read(file))
1
+ Given(/^I have stubbed $stdin to contain "(.*?)"$/) do |file|
2
+ expect($stdin).to receive(:read).and_return(File.read(file))
3
3
  end
4
4
 
5
- Given(/^I have stubbed stdin to contain nothing$/) do
6
- expect(STDIN).to receive(:read).and_return(nil)
5
+ Given(/^I have stubbed $stdin to contain nothing$/) do
6
+ expect($stdin).to receive(:read).and_return(nil)
7
7
  end
8
8
 
9
9
  Then(/^nothing should be outputted to STDERR$/) do
10
- expect(STDERR).to_not receive(:puts)
10
+ expect($stderr).to_not receive(:puts)
11
11
  end
12
12
 
13
13
  Then(/^the output should contain JSON$/) do
14
14
  @json = JSON.parse(all_stdout)
15
- expect(@json['validation']).to be_present
15
+ expect(@json["validation"]).to be_present
16
16
  end
17
17
 
18
18
  Then(/^the JSON should have a state of "(.*?)"$/) do |state|
19
- expect(@json['validation']['state']).to eq(state)
19
+ expect(@json["validation"]["state"]).to eq(state)
20
20
  end
21
21
 
22
22
  Then(/^the JSON should have (\d+) errors?$/) do |count|
23
23
  @index = count.to_i - 1
24
- expect(@json['validation']['errors'].count).to eq(count.to_i)
24
+ expect(@json["validation"]["errors"].count).to eq(count.to_i)
25
25
  end
26
26
 
27
27
  Then(/^that error should have the "(.*?)" "(.*?)"$/) do |k, v|
28
- expect(@json['validation']['errors'][@index][k].to_s).to eq(v)
28
+ expect(@json["validation"]["errors"][@index][k].to_s).to eq(v)
29
29
  end
30
30
 
31
31
  Then(/^error (\d+) should have the "(.*?)" "(.*?)"$/) do |index, k, v|
32
- expect(@json['validation']['errors'][index.to_i - 1][k].to_s).to eq(v)
32
+ expect(@json["validation"]["errors"][index.to_i - 1][k].to_s).to eq(v)
33
33
  end
34
34
 
35
35
  Then(/^error (\d+) should have the constraint "(.*?)" "(.*?)"$/) do |index, k, v|
36
- expect(@json['validation']['errors'][index.to_i - 1]['constraints'][k].to_s).to eq(v)
36
+ expect(@json["validation"]["errors"][index.to_i - 1]["constraints"][k].to_s).to eq(v)
37
37
  end
@@ -3,11 +3,11 @@ Given(/^the content type is "(.*?)"$/) do |arg1|
3
3
  end
4
4
 
5
5
  Then(/^the "(.*?)" should be "(.*?)"$/) do |type, encoding|
6
- validator = Csvlint::Validator.new( @url, default_csv_options )
7
- expect( validator.send(type.to_sym) ).to eq( encoding )
6
+ validator = Csvlint::Validator.new(@url, default_csv_options)
7
+ expect(validator.send(type.to_sym)).to eq(encoding)
8
8
  end
9
9
 
10
10
  Then(/^the metadata content type should be "(.*?)"$/) do |content_type|
11
- validator = Csvlint::Validator.new( @url, default_csv_options )
12
- expect( validator.headers['content-type'] ).to eq( content_type )
11
+ validator = Csvlint::Validator.new(@url, default_csv_options)
12
+ expect(validator.headers["content-type"]).to eq(content_type)
13
13
  end
@@ -12,31 +12,31 @@ Given(/^it is stored at the url "(.*?)"$/) do |url|
12
12
  charset = @encoding || "UTF-8"
13
13
  headers = {"Content-Type" => "#{content_type}; charset=#{charset}"}
14
14
  headers["Link"] = @link if @link
15
- stub_request(:get, url).to_return(:status => 200, :body => @csv, :headers => headers)
16
- stub_request(:get, URI.join(url, '/.well-known/csvm')).to_return(:status => 404)
17
- stub_request(:get, url + '-metadata.json').to_return(:status => 404)
18
- stub_request(:get, URI.join(url, 'csv-metadata.json')).to_return(:status => 404)
15
+ stub_request(:get, url).to_return(status: 200, body: @csv, headers: headers)
16
+ stub_request(:get, URI.join(url, "/.well-known/csvm")).to_return(status: 404)
17
+ stub_request(:get, url + "-metadata.json").to_return(status: 404)
18
+ stub_request(:get, URI.join(url, "csv-metadata.json")).to_return(status: 404)
19
19
  end
20
20
 
21
21
  Given(/^it is stored at the url "(.*?)" with no character set$/) do |url|
22
22
  @url = url
23
23
  content_type = @content_type || "text/csv"
24
- stub_request(:get, url).to_return(:status => 200, :body => @csv, :headers => {"Content-Type" => "#{content_type}"})
25
- stub_request(:get, URI.join(url, '/.well-known/csvm')).to_return(:status => 404)
26
- stub_request(:get, url + '-metadata.json').to_return(:status => 404)
27
- stub_request(:get, URI.join(url, 'csv-metadata.json')).to_return(:status => 404)
24
+ stub_request(:get, url).to_return(status: 200, body: @csv, headers: {"Content-Type" => content_type.to_s})
25
+ stub_request(:get, URI.join(url, "/.well-known/csvm")).to_return(status: 404)
26
+ stub_request(:get, url + "-metadata.json").to_return(status: 404)
27
+ stub_request(:get, URI.join(url, "csv-metadata.json")).to_return(status: 404)
28
28
  end
29
29
 
30
30
  When(/^I ask if the CSV is valid$/) do
31
31
  @csv_options ||= default_csv_options
32
- @validator = Csvlint::Validator.new( @url, @csv_options )
32
+ @validator = Csvlint::Validator.new(@url, @csv_options)
33
33
  @valid = @validator.valid?
34
34
  end
35
35
 
36
36
  Then(/^I should get the value of true$/) do
37
- expect( @valid ).to be(true)
37
+ expect(@valid).to be(true)
38
38
  end
39
39
 
40
40
  Then(/^I should get the value of false$/) do
41
- expect( @valid ).to be(false)
41
+ expect(@valid).to be(false)
42
42
  end
@@ -10,24 +10,24 @@ end
10
10
 
11
11
  Given(/^I have a metadata file called "([^"]*)"$/) do |filename|
12
12
  @schema_type = :csvw_metadata
13
- @schema_json = File.read( File.join( File.dirname(__FILE__), "..", "fixtures", filename ) )
13
+ @schema_json = File.read(File.join(File.dirname(__FILE__), "..", "fixtures", filename))
14
14
  end
15
15
 
16
- Given(/^the (schema|metadata) is stored at the url "(.*?)"$/) do |schema_type,schema_url|
16
+ Given(/^the (schema|metadata) is stored at the url "(.*?)"$/) do |schema_type, schema_url|
17
17
  @schema_url = schema_url
18
- stub_request(:get, @schema_url).to_return(:status => 200, :body => @schema_json.to_str)
18
+ stub_request(:get, @schema_url).to_return(status: 200, body: @schema_json.to_str)
19
19
  end
20
20
 
21
21
  Given(/^there is a file at "(.*?)" with the content:$/) do |url, content|
22
- stub_request(:get, url).to_return(:status => 200, :body => content.to_str)
22
+ stub_request(:get, url).to_return(status: 200, body: content.to_str)
23
23
  end
24
24
 
25
- Given(/^I have a file called "(.*?)" at the url "(.*?)"$/) do |filename,url|
26
- content = File.read( File.join( File.dirname(__FILE__), "..", "fixtures", filename ) )
27
- content_type = filename =~ /.csv$/ ? "text/csv" : "application/csvm+json"
28
- stub_request(:get, url).to_return(:status => 200, :body => content, :headers => {"Content-Type" => "#{content_type}; charset=UTF-8"})
25
+ Given(/^I have a file called "(.*?)" at the url "(.*?)"$/) do |filename, url|
26
+ content = File.read(File.join(File.dirname(__FILE__), "..", "fixtures", filename))
27
+ content_type = /.csv$/.match?(filename) ? "text/csv" : "application/csvm+json"
28
+ stub_request(:get, url).to_return(status: 200, body: content, headers: {"Content-Type" => "#{content_type}; charset=UTF-8"})
29
29
  end
30
30
 
31
31
  Given(/^there is no file at the url "(.*?)"$/) do |url|
32
- stub_request(:get, url).to_return(:status => 404)
33
- end
32
+ stub_request(:get, url).to_return(status: 404)
33
+ end
@@ -3,5 +3,5 @@ Given(/^it is parsed as a StringIO$/) do
3
3
  end
4
4
 
5
5
  Given(/^I parse a file called "(.*?)"$/) do |filename|
6
- @url = File.new( File.join( File.dirname(__FILE__), "..", "fixtures", filename ) )
6
+ @url = File.new(File.join(File.dirname(__FILE__), "..", "fixtures", filename))
7
7
  end
@@ -2,14 +2,14 @@ When(/^I ask if there are errors$/) do
2
2
  @csv_options ||= default_csv_options
3
3
 
4
4
  if @schema_json
5
- if @schema_type == :json_table
6
- @schema = Csvlint::Schema.from_json_table( @schema_url || "http://example.org ", JSON.parse(@schema_json) )
5
+ @schema = if @schema_type == :json_table
6
+ Csvlint::Schema.from_json_table(@schema_url || "http://example.org ", JSON.parse(@schema_json))
7
7
  else
8
- @schema = Csvlint::Schema.from_csvw_metadata( @schema_url || "http://example.org ", JSON.parse(@schema_json) )
8
+ Csvlint::Schema.from_csvw_metadata(@schema_url || "http://example.org ", JSON.parse(@schema_json))
9
9
  end
10
10
  end
11
11
 
12
- @validator = Csvlint::Validator.new( @url, @csv_options, @schema )
12
+ @validator = Csvlint::Validator.new(@url, @csv_options, @schema)
13
13
  @errors = @validator.errors
14
14
  end
15
15
 
@@ -19,10 +19,10 @@ When(/^I carry out CSVW validation$/) do
19
19
  begin
20
20
  if @schema_json
21
21
  json = JSON.parse(@schema_json)
22
- if @schema_type == :json_table
23
- @schema = Csvlint::Schema.from_json_table( @schema_url || "http://example.org ", json )
22
+ @schema = if @schema_type == :json_table
23
+ Csvlint::Schema.from_json_table(@schema_url || "http://example.org ", json)
24
24
  else
25
- @schema = Csvlint::Schema.from_csvw_metadata( @schema_url || "http://example.org ", json )
25
+ Csvlint::Schema.from_csvw_metadata(@schema_url || "http://example.org ", json)
26
26
  end
27
27
  end
28
28
 
@@ -30,12 +30,12 @@ When(/^I carry out CSVW validation$/) do
30
30
  @errors = []
31
31
  @warnings = []
32
32
  @schema.tables.keys.each do |table_url|
33
- validator = Csvlint::Validator.new( table_url, @csv_options, @schema )
33
+ validator = Csvlint::Validator.new(table_url, @csv_options, @schema)
34
34
  @errors += validator.errors
35
35
  @warnings += validator.warnings
36
36
  end
37
37
  else
38
- validator = Csvlint::Validator.new( @url, @csv_options, @schema )
38
+ validator = Csvlint::Validator.new(@url, @csv_options, @schema)
39
39
  @errors = validator.errors
40
40
  @warnings = validator.warnings
41
41
  end
@@ -49,42 +49,42 @@ end
49
49
  Then(/^there should be errors$/) do
50
50
  # this test is only used for CSVW testing; :invalid_encoding & :line_breaks mask lack of real errors
51
51
  @errors.delete_if { |e| e.instance_of?(Csvlint::ErrorMessage) && [:invalid_encoding, :line_breaks].include?(e.type) }
52
- expect( @errors.count ).to be > 0
52
+ expect(@errors.count).to be > 0
53
53
  end
54
54
 
55
55
  Then(/^there should not be errors$/) do
56
- expect( @errors.count ).to eq(0)
56
+ expect(@errors.count).to eq(0)
57
57
  end
58
58
 
59
59
  Then(/^there should be (\d+) error$/) do |count|
60
- expect( @errors.count ).to eq( count.to_i )
60
+ expect(@errors.count).to eq(count.to_i)
61
61
  end
62
62
 
63
63
  Then(/^that error should have the type "(.*?)"$/) do |type|
64
- expect( @errors.first.type ).to eq( type.to_sym )
64
+ expect(@errors.first.type).to eq(type.to_sym)
65
65
  end
66
66
 
67
67
  Then(/^that error should have the row "(.*?)"$/) do |row|
68
- expect( @errors.first.row ).to eq( row.to_i )
68
+ expect(@errors.first.row).to eq(row.to_i)
69
69
  end
70
70
 
71
71
  Then(/^that error should have the column "(.*?)"$/) do |column|
72
- expect( @errors.first.column ).to eq( column.to_i )
72
+ expect(@errors.first.column).to eq(column.to_i)
73
73
  end
74
74
 
75
75
  Then(/^that error should have the content "(.*)"$/) do |content|
76
- expect( @errors.first.content.chomp ).to eq( content.chomp )
76
+ expect(@errors.first.content.chomp).to eq(content.chomp)
77
77
  end
78
78
 
79
79
  Then(/^that error should have no content$/) do
80
- expect( @errors.first.content ).to eq( nil )
80
+ expect(@errors.first.content).to eq(nil)
81
81
  end
82
82
 
83
83
  Given(/^I have a CSV that doesn't exist$/) do
84
84
  @url = "http//www.example.com/fake-csv.csv"
85
- stub_request(:get, @url).to_return(:status => 404)
85
+ stub_request(:get, @url).to_return(status: 404)
86
86
  end
87
87
 
88
88
  Then(/^there should be no "(.*?)" errors$/) do |type|
89
- @errors.each do |error| error.type.should_not == type.to_sym end
89
+ @errors.each { |error| error.type.should_not == type.to_sym }
90
90
  end