cevennes 1.4.0 → 1.5.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/README.md +30 -0
- data/lib/cevennes.rb +26 -4
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 874142d4ea26d4cf12e802291ed6cce2b7563cc4c894ceafce5316448b04eb43
|
|
4
|
+
data.tar.gz: ac5051a4827b1af249ea9b5225464b8418ca7afc3bb7acb09c19b39e4c362e18
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 910c01d225504c18b7d74d34566b1449913cdb3045450840b2097ae55e1790d9501baebc5a2677200531186e3c563cb171eff3d3de78155f63428015f5787ecd
|
|
7
|
+
data.tar.gz: 8e0472c583b7b006e0a7aa1227f859f47d0bb4d35043307ca27bbed24cea6d5a2e1f99fa737ce75cd391f83fa2f05163b8852581a41b709a30e73918a86634c6
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
|
@@ -96,6 +96,36 @@ d = Cevennes.diff('id', cvs0, cvs1, drop_equals: true)
|
|
|
96
96
|
# the "=" entries are not included
|
|
97
97
|
```
|
|
98
98
|
|
|
99
|
+
### float: 'narrow'
|
|
100
|
+
|
|
101
|
+
Sometimes CSV exports turns numbers like `1.3` to strings like `"1.30"`. By using the `float: 'narrow'` option, Cevennes takes care to compare `1.3` with `1.3`.
|
|
102
|
+
|
|
103
|
+
```ruby
|
|
104
|
+
csv0 = %{
|
|
105
|
+
id, name, age, city, county
|
|
106
|
+
0, John, 33, Alexandria, Yorkshire
|
|
107
|
+
1, Jean-Baptiste, 44.10, Galileia, Lancashire
|
|
108
|
+
4, Matthew, 20, Beth, Essex
|
|
109
|
+
}.strip + "\n"
|
|
110
|
+
|
|
111
|
+
csv1 = %{
|
|
112
|
+
id, name, age, city, county
|
|
113
|
+
0, John, 33.0, Alexandria, Yorkshire
|
|
114
|
+
1, Jean-Baptiste, 44.1, Galileia, Lancashire
|
|
115
|
+
4, Matthew, 20, Beth, Essex
|
|
116
|
+
}.strip + "\n"
|
|
117
|
+
|
|
118
|
+
d = Cevennes.diff('name', csv0, csv1)
|
|
119
|
+
|
|
120
|
+
pp d[1]
|
|
121
|
+
# => [ "stats", { "!" => 2, "=" => 1, "l0" => 3, "l1" => 3 } ]
|
|
122
|
+
|
|
123
|
+
d = Cevennes.diff('name', csv0, csv1, float: 'narrow')
|
|
124
|
+
|
|
125
|
+
pp d[1]
|
|
126
|
+
# => [ "stats", { "=" => 3, "l0" => 3, "l1" => 3 } ]
|
|
127
|
+
```
|
|
128
|
+
|
|
99
129
|
|
|
100
130
|
## LICENSE
|
|
101
131
|
|
data/lib/cevennes.rb
CHANGED
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
require 'csv'
|
|
4
4
|
|
|
5
|
+
require 'colorato'
|
|
6
|
+
|
|
5
7
|
|
|
6
8
|
module Cevennes
|
|
7
9
|
|
|
8
|
-
VERSION = '1.
|
|
10
|
+
VERSION = '1.5.0'
|
|
9
11
|
|
|
10
12
|
class << self
|
|
11
13
|
|
|
@@ -21,9 +23,9 @@ module Cevennes
|
|
|
21
23
|
h0
|
|
22
24
|
.collect { |k, v|
|
|
23
25
|
v1 = h1[k]
|
|
24
|
-
if v1 == nil
|
|
25
|
-
elsif v1
|
|
26
|
-
else
|
|
26
|
+
if v1 == nil then [ '-', *v, -1, nil ]
|
|
27
|
+
elsif rowEquals(v1, v, opts) then [ '=', *v, v[0], nil ]
|
|
28
|
+
else [ '!', *v, *v1 ]
|
|
27
29
|
end }
|
|
28
30
|
|
|
29
31
|
(h1.keys - h0.keys)
|
|
@@ -139,6 +141,26 @@ module Cevennes
|
|
|
139
141
|
|
|
140
142
|
protected
|
|
141
143
|
|
|
144
|
+
def rowEquals(row0, row1, opts)
|
|
145
|
+
|
|
146
|
+
row01, row11 = row0[1], row1[1]
|
|
147
|
+
|
|
148
|
+
return false if row01.length != row11.length
|
|
149
|
+
|
|
150
|
+
if opts[:float] == 'narrow'
|
|
151
|
+
|
|
152
|
+
row01.each_with_index { |c0, i| c1 = row11[i]
|
|
153
|
+
next if c0 == c1
|
|
154
|
+
cf0 = Float(c0, exception: false) || c0
|
|
155
|
+
cf1 = Float(c1, exception: false) || c1
|
|
156
|
+
return false if cf0 != cf1 }
|
|
157
|
+
|
|
158
|
+
return true
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
row01 == row11
|
|
162
|
+
end
|
|
163
|
+
|
|
142
164
|
def strip(row)
|
|
143
165
|
|
|
144
166
|
row.collect { |cell| cell.is_a?(String) ? cell.strip : cell }
|