csv-safe 1.0.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 (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