csv-safe 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of csv-safe might be problematic. Click here for more details.

Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/csv-safe.rb +20 -9
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bb010abb98b2115fcf5cc26ca41a5978a48e6227
4
- data.tar.gz: 3211e1a6684a8a9f39b9236fd97640c864664f19
3
+ metadata.gz: 62080f9ee319ff59459ab885ef1af9f212bdd1bc
4
+ data.tar.gz: 1bb148f92f1a755b7b96464a957e3490b5432bad
5
5
  SHA512:
6
- metadata.gz: 9592cb999ccdbbfb807d63e4418b700f757aef57b7be49bfa26cdc2923cf73edad981214669a8dd080e5b620fe13c630f5cc879c10ca01f0008f88058314ba10
7
- data.tar.gz: 8fda9200e55cf73dcb49505adde5a38dc524294d9ca80fe3e6bc9a9c44b43cc7648e9ba21b870ef98dc7beccfbc8b3e2cbbb5ffe0e9a95915adbe8c317a03408
6
+ metadata.gz: 4c2ed55a84467cefad1ad0756210cc244fb4eea18f8712929f0f634860471374c3887859d24de8ad3356b8980b74175dc91c54d6c2f0d9c2bc182a0c4266b3dd
7
+ data.tar.gz: 7720af34e3aae0ac35613369693aac6d0507770255d43f28c40258009909efff9bedea7a3f1a0ac06bf9bad0736f86bc1fafcfd7b546cb561c27eba5e2a05450
data/lib/csv-safe.rb CHANGED
@@ -16,31 +16,42 @@ class CSVSafe < CSV
16
16
 
17
17
  private
18
18
 
19
+ # TODO: performance test if i'm adding
20
+ # too many method calls to hot code
21
+ def starts_with_special_character?(str)
22
+ %w[- = + @].include?(str[0])
23
+ end
24
+
25
+ def prefix(field)
26
+ encoded = field.encode(CSV::ConverterEncoding)
27
+ "'" + encoded
28
+ rescue StandardError
29
+ "'" + field
30
+ end
31
+
19
32
  def prefix_if_necessary(field)
20
- if field.is_a?(String) && %w[- = + @].include?(field[0])
21
- "'" + field
33
+ as_string = field.to_s
34
+ if starts_with_special_character?(as_string)
35
+ prefix(as_string)
22
36
  else
23
37
  field
24
38
  end
25
39
  end
26
40
 
27
41
  def sanitize_field(field)
28
- if field.nil?
42
+ if field.nil? || field.is_a?(Numeric)
29
43
  field
30
44
  else
31
- encoded = field.encode(CSV::ConverterEncoding)
32
- prefix_if_necessary(encoded)
45
+ prefix_if_necessary(field)
33
46
  end
34
- rescue StandardError # encoding conversion errors
35
- field
36
47
  end
37
48
 
38
49
  def sanitize_row(row)
39
50
  case row
40
51
  when self.class::Row
41
- then row.fields.map { |field| sanitize_field(field) }
52
+ then row.fields.map { |field| sanitize_field(field) }
42
53
  when Hash
43
- then @headers.map { |header| sanitize_field(row[header]) }
54
+ then @headers.map { |header| sanitize_field(row[header]) }
44
55
  else
45
56
  row.map { |field| sanitize_field(field) }
46
57
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: csv-safe
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Zvorygin
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-07-27 00:00:00.000000000 Z
11
+ date: 2018-07-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler