csvlint 0.3.0 → 0.3.1

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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MTJlZWM1ZDA0ZDMzMjBkM2I1OGUxYjM1NTIxZTA1NWVkODJlMDFiYQ==
4
+ MDdiMTU5MDRkOWMzODllZGVjZTE1NWU0NzgyMjNkODgzYjlkNDE3NQ==
5
5
  data.tar.gz: !binary |-
6
- MWE1MWYzZjk3YjgwMTJhNzBjZGM4NTMyOGYzYTU1ZWM4ZDc4NTI2YQ==
6
+ MmY0YjQyZTM1ODBkOTA2OWQxOGRkOWYxYmI2ZDA2NWEyZjRjM2U2YQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MWU5NTAxZDVjMGI3YTNiYTBlNTJmODkxNTBkYzdiN2ExN2E3NGE2ZjI5M2Nl
10
- ZGY0OWM3ZTVjODNiNjcyZDMwODhhNTc3ODIyZGMyMzUzYWE2ZTMyZmFmNGIw
11
- NDFiYzc5YzNlNTFlODQ1ODE1YzZkMDU0MDdkMzE3MmVlNWUyYmU=
9
+ NWM1OGNjNDk0MzgzY2MwZmY5NjJhOTBiNDFjYTA3YjBkYTAzN2IzNzUyYjg3
10
+ NDdlZjVlYzEzZTFkMmI2ODQzZjIwY2IwZDU1Mjk5Y2QwNzdjNTg3YjYxM2Zj
11
+ MzFkNWM5ZWUzOTY1NGUzZTgyMWZhYzRhNDI2ZWI0NmQyNWNjYzQ=
12
12
  data.tar.gz: !binary |-
13
- MjBhYTU1ZWMzNjcxMmU1NjU1ZjZkYTE5M2YwOTQ5NzYyOWYzNmM2NzkxNWJk
14
- Y2VlM2JkMmRlYmNhNzM5MGI0ZDg2YWQzOTNhYzg1YjAyNDRiNTFiNmRlZjk4
15
- Nzc0YjJlOWM0MGVmMjAzZTBiZjQwZTc4MTU5YTVjMGFiZDFjNmQ=
13
+ ODc3MjNlZDRmOGFmNmJiYWM4OWJmN2IzZGYzNTI5YWY1Zjg5YzZmMmYyYjhi
14
+ NWZhMjQ3ZTc4NGRhYTQ5ZjBlZjQ5ZjcwOThhYzQ5NjNhZDViZDVjYTFjYjlk
15
+ YzgwNGM3NjMxMWNkOTI4ODU1ZDM4YmIwODc4MTExOWUyZWJkYjA=
data/.travis.yml CHANGED
@@ -1,3 +1,4 @@
1
+ ---
1
2
  rvm:
2
3
  - 2.0.0
3
4
  - 2.1.0
@@ -9,7 +10,7 @@ notifications:
9
10
  channels:
10
11
  - irc.freenode.net#theodi
11
12
  template:
12
- - '%{repository} %{branch} - %{message} %{build_url}'
13
+ - "%{repository} %{branch} - %{message} %{build_url}"
13
14
  on_success: change
14
15
  on_failure: always
15
16
  deploy:
@@ -17,7 +18,7 @@ deploy:
17
18
  api_key:
18
19
  secure: fjnPS61/skQ1PsRJu1SYWIct0vjdkTyQhj0ria9zfcJfbWbfiHnpehVh1ege3sTUkDSTvoOFT35jzEeozvtKZOlAWMU5QbL8LTXu+JSp9olOdSuGeWRWVuQT3NLgRJW0+2c7N66piZvnRUUTyt2P8VIR8c/Ltuhc32bUGL7X6Gw=
19
20
  gem: csvlint
20
- on:
21
+ true:
21
22
  tags: true
22
23
  repo: theodi/csvlint.rb
23
24
  all_branches: true
@@ -26,7 +27,10 @@ after_success:
26
27
  - '[ "$TRAVIS_BRANCH" == "master" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ] && curl
27
28
  -v -X POST -d ''{"ref":"refs/tags/''$GEM_VERSION''","sha":"''$TRAVIS_COMMIT''"}'' --header
28
29
  "Content-Type:application/json" -u $GITHUB_USER:$GITHUB_PASSWORD "https://api.github.com/repos/$TRAVIS_REPO_SLUG/git/refs"'
30
+ - gem install henry
31
+ - henry deploy
29
32
  env:
30
33
  global:
31
34
  - secure: hM8Pv/EAZoB4fGGEUwKQQ/2+mgKbUac+PH2cwud25l2MJ64eoKEMZzfy4TF6+XMIzXhlWpsg4s51y6K3+W8pUyRAuwo2MsN5Iee7HnLz+LlYTiT0//iQdAmxQ0JlOyh8vd2SEFBcVfwpp/iZFIHAfbBO73ZDXhtGMEieMk025I0=
32
35
  - secure: hsKbZ0kVKVU/e8oVCPJpRmBxbbieN2tVbyjdhJo/UYchcyLWeGAmAj/ApUDL4SyR0HZxpfi+SIsGFNRy5LnrFeCFgY9aZ6u9ma4n0Y2cTElMRt5kvI/c28FehsRjCzAe6W8dxwhJ8wSkvFDNpLml47/iy8bw4a7aUZDdq3OYXck=
36
+ - secure: FW0iyoq4yS55yVTxWXv0OrnOQWuUzpsv32w0FsE7E6OgS/UtCSAQeXO+T448+JXVbJClQDQNM9Pimdfzz/znGzHF6//UVmIbxfKwbyGtvzg4dZUexK8KlGnQy1na/4qiOi5xBSQQ5q/CwtblkCkklhDIs8CwV1M7mCIK5Sf0HZ4=
data/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Change Log
2
2
 
3
+ ## [0.3.0](https://github.com/theodi/csvlint.rb/tree/0.3.0) (2016-01-12)
4
+
5
+ [Full Changelog](https://github.com/theodi/csvlint.rb/compare/0.2.6...0.3.0)
6
+
7
+ **Merged pull requests:**
8
+
9
+ - still increment current\_line after invalid\_encoding error [\#174](https://github.com/theodi/csvlint.rb/pull/174) ([wjordan213](https://github.com/wjordan213))
10
+
11
+ - Support for CSV on the Web transformations [\#173](https://github.com/theodi/csvlint.rb/pull/173) ([JeniT](https://github.com/JeniT))
12
+
13
+ ## [0.2.6](https://github.com/theodi/csvlint.rb/tree/0.2.6) (2015-11-16)
14
+
15
+ [Full Changelog](https://github.com/theodi/csvlint.rb/compare/0.2.5...0.2.6)
16
+
3
17
  ## [0.2.5](https://github.com/theodi/csvlint.rb/tree/0.2.5) (2015-11-16)
4
18
 
5
19
  [Full Changelog](https://github.com/theodi/csvlint.rb/compare/0.2.4...0.2.5)
data/features/cli.feature CHANGED
@@ -65,6 +65,20 @@ Feature: CSVlint CLI
65
65
  Then the output should contain "http://example.com/example1.csv is INVALID"
66
66
  And the output should contain "whitespace"
67
67
 
68
+ Scenario: Invalid CSV from url with JSON
69
+ Given I have a CSV with the following content:
70
+ """
71
+ "Foo", "Bar" , "Baz"
72
+ """
73
+ And it is stored at the url "http://example.com/example1.csv"
74
+ When I run `csvlint http://example.com/example1.csv --json`
75
+ Then the output should contain JSON
76
+ And the JSON should have a state of "invalid"
77
+ And the JSON should have 1 error
78
+ And that error should have the "type" "whitespace"
79
+ And that error should have the "category" "structure"
80
+ And that error should have the "row" "1"
81
+
68
82
  Scenario: Specify schema
69
83
  Given I have a CSV with the following content:
70
84
  """
@@ -9,3 +9,21 @@ end
9
9
  Then(/^nothing should be outputted to STDERR$/) do
10
10
  expect(STDERR).to_not receive(:puts)
11
11
  end
12
+
13
+ Then(/^the output should contain JSON$/) do
14
+ @json = JSON.parse(all_stdout)
15
+ expect(@json['validation']).to be_present
16
+ end
17
+
18
+ Then(/^the JSON should have a state of "(.*?)"$/) do |state|
19
+ expect(@json['validation']['state']).to eq(state)
20
+ end
21
+
22
+ Then(/^the JSON should have (\d+) error$/) do |count|
23
+ @index = count.to_i - 1
24
+ expect(@json['validation']['errors'].count).to eq(count.to_i)
25
+ end
26
+
27
+ Then(/^that error should have the "(.*?)" "(.*?)"$/) do |k, v|
28
+ expect(@json['validation']['errors'][@index][k].to_s).to eq(v)
29
+ end
data/lib/csvlint/cli.rb CHANGED
@@ -10,12 +10,13 @@ module Csvlint
10
10
  desc "myfile.csv OR csvlint http://example.com/myfile.csv", "Supports validating CSV files to check their syntax and contents"
11
11
  option :dump_errors, desc: "Pretty print error and warning objects.", type: :boolean, aliases: :d
12
12
  option :schema, banner: "FILENAME OR URL", desc: "Schema file", aliases: :s
13
+ option :json, desc: "Output errors as JSON", type: :boolean, aliases: :j
13
14
  def validate(source = nil)
14
15
  source = read_source(source)
15
16
  @schema = get_schema(options[:schema]) if options[:schema]
16
17
  fetch_schema_tables(@schema, options) if source.nil?
17
18
 
18
- valid = validate_csv(source, @schema, options[:dump])
19
+ valid = validate_csv(source, @schema, options[:dump], options[:json])
19
20
  exit 1 unless valid
20
21
  end
21
22
 
@@ -77,7 +78,7 @@ module Csvlint
77
78
  rescue Errno::ENOENT
78
79
  return_error "#{source} not found"
79
80
  end unless source =~ /^http(s)?/
80
- valid &= validate_csv(source, schema, options[:dump])
81
+ valid &= validate_csv(source, schema, options[:dump], nil)
81
82
  end
82
83
 
83
84
  exit 1 unless valid
@@ -124,10 +125,14 @@ module Csvlint
124
125
  exit 1
125
126
  end
126
127
 
127
- def validate_csv(source, schema, dump)
128
+ def validate_csv(source, schema, dump, json)
128
129
  @error_count = 0
129
130
 
130
- validator = Csvlint::Validator.new( source, {}, schema, { lambda: report_lines } )
131
+ if json === true
132
+ validator = Csvlint::Validator.new( source, {}, schema )
133
+ else
134
+ validator = Csvlint::Validator.new( source, {}, schema, { lambda: report_lines } )
135
+ end
131
136
 
132
137
  if source.class == String
133
138
  csv = source
@@ -137,18 +142,39 @@ module Csvlint
137
142
  csv = "CSV"
138
143
  end
139
144
 
140
- if $stdout.tty?
141
- puts "\r\n#{csv} is #{validator.valid? ? "VALID".green : "INVALID".red}"
145
+ if json === true
146
+ json = {
147
+ validation: {
148
+ state: validator.valid? ? "valid" : "invalid",
149
+ errors: validator.errors.map { |v| hashify(v) },
150
+ warnings: validator.warnings.map { |v| hashify(v) },
151
+ info: validator.info_messages.map { |v| hashify(v) },
152
+ }
153
+ }.to_json
154
+ print json
142
155
  else
143
- puts "\r\n#{csv} is #{validator.valid? ? "VALID" : "INVALID"}"
144
- end
156
+ if $stdout.tty?
157
+ puts "\r\n#{csv} is #{validator.valid? ? "VALID".green : "INVALID".red}"
158
+ else
159
+ puts "\r\n#{csv} is #{validator.valid? ? "VALID" : "INVALID"}"
160
+ end
145
161
 
146
- print_errors(validator.errors, dump)
147
- print_errors(validator.warnings, dump)
162
+ print_errors(validator.errors, dump)
163
+ print_errors(validator.warnings, dump)
164
+ end
148
165
 
149
166
  return validator.valid?
150
167
  end
151
168
 
169
+ def hashify(error)
170
+ {
171
+ type: error.type,
172
+ category: error.category,
173
+ row: error.row,
174
+ col: error.column,
175
+ }
176
+ end
177
+
152
178
  def report_lines
153
179
  lambda do |row|
154
180
  new_errors = row.errors.count
@@ -1,3 +1,3 @@
1
1
  module Csvlint
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: csvlint
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - pezholio
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-12 00:00:00.000000000 Z
11
+ date: 2016-05-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mime-types