rbcsv 0.1.6 → 0.1.8
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/.rust-analyzer.json +8 -0
- data/CHANGELOG.md +44 -0
- data/Cargo.lock +123 -45
- data/DEVELOPMENT.md +467 -129
- data/README.md +66 -5
- data/ext/rbcsv/Cargo.toml +6 -2
- data/ext/rbcsv/src/error.rs +101 -0
- data/ext/rbcsv/src/lib.rs +14 -143
- data/ext/rbcsv/src/parser.rs +306 -0
- data/ext/rbcsv/src/ruby_api.rs +111 -0
- data/lib/rbcsv/version.rb +1 -1
- data/test_write_functionality.rb +225 -0
- metadata +6 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6081f5083fa0f62ff08812aed7b6ff8fe47fbbc2a2170fc3d5ff3a4c6ef21661
|
|
4
|
+
data.tar.gz: a73748f6fefbf4a8fced9bf15f1f5db5ae3b4ef4fc11512e0f30a4ceb09b2e3f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f2bc15f8586443f6be96a47525688312938141f5d509fe1365b0c83c6e4776c2624678e4e2bdabb926b319875218d03e6e519e317acb42ab7749861197e72a8e
|
|
7
|
+
data.tar.gz: c0e37e6c24bae12583a538f79b9a0bba74d9b7ce06b16198c9b8764de1a2dd87cbcd1ca0681f580b65220d2a9c532c98fe7cc6fe04ad72cd6fb5a403ead1024a
|
data/.rust-analyzer.json
ADDED
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,49 @@
|
|
|
1
1
|
## [Unreleased]
|
|
2
2
|
|
|
3
|
+
## [0.1.8] - 2025-01-28
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- CSV file writing functionality with `RbCsv.write(file_path, data)` method
|
|
7
|
+
- Comprehensive data validation (empty data check, field count consistency)
|
|
8
|
+
- Enhanced error handling for write operations (permission errors, invalid data)
|
|
9
|
+
- Full test coverage for write functionality with executable test script
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
- **CRITICAL**: Fixed special character handling in CSV parsing
|
|
13
|
+
- Removed problematic `escape_sanitize` function that interfered with standard CSV escaping
|
|
14
|
+
- Now properly preserves backslashes, newlines, tabs, and other special characters
|
|
15
|
+
- Ensures perfect round-trip fidelity for write/read operations
|
|
16
|
+
- Updated RSpec tests to reflect correct CSV parsing behavior
|
|
17
|
+
|
|
18
|
+
## [0.1.7] - 2025-01-28
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
- **BREAKING**: API redesigned to use function-based approach with `!` suffix for trim functionality
|
|
22
|
+
- `parse(csv)` and `parse!(csv)` for regular and trimmed parsing
|
|
23
|
+
- `read(file)` and `read!(file)` for regular and trimmed file reading
|
|
24
|
+
- Removed option-based API in favor of cleaner function separation
|
|
25
|
+
- Major internal refactoring: split code into modular structure
|
|
26
|
+
- `parser.rs`: Core CSV parsing logic
|
|
27
|
+
- `ruby_api.rs`: Ruby bindings and API functions
|
|
28
|
+
- `error.rs`: Error handling and custom error types
|
|
29
|
+
- Updated to follow Ruby naming conventions with `!` suffix for modified behavior
|
|
30
|
+
|
|
31
|
+
### Added
|
|
32
|
+
- Comprehensive error handling with detailed error messages
|
|
33
|
+
- Support for various CSV edge cases (empty fields, special characters)
|
|
34
|
+
- Extensive test coverage for all parsing scenarios
|
|
35
|
+
- Improved documentation with DEVELOPMENT.md enhancements
|
|
36
|
+
|
|
37
|
+
### Fixed
|
|
38
|
+
- Memory efficiency improvements in CSV parsing
|
|
39
|
+
- Better handling of UTF-8 encoded data
|
|
40
|
+
- Consistent error reporting across all functions
|
|
41
|
+
|
|
42
|
+
### Development
|
|
43
|
+
- Added detailed project structure documentation
|
|
44
|
+
- Enhanced build and test procedures in DEVELOPMENT.md
|
|
45
|
+
- Improved release process documentation
|
|
46
|
+
|
|
3
47
|
## [0.1.6] - 2025-09-27
|
|
4
48
|
|
|
5
49
|
### Changed
|
data/Cargo.lock
CHANGED
|
@@ -90,12 +90,48 @@ version = "1.15.0"
|
|
|
90
90
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
91
91
|
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
|
|
92
92
|
|
|
93
|
+
[[package]]
|
|
94
|
+
name = "env_logger"
|
|
95
|
+
version = "0.10.2"
|
|
96
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
97
|
+
checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580"
|
|
98
|
+
dependencies = [
|
|
99
|
+
"humantime",
|
|
100
|
+
"is-terminal",
|
|
101
|
+
"log",
|
|
102
|
+
"regex",
|
|
103
|
+
"termcolor",
|
|
104
|
+
]
|
|
105
|
+
|
|
93
106
|
[[package]]
|
|
94
107
|
name = "glob"
|
|
95
108
|
version = "0.3.3"
|
|
96
109
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
97
110
|
checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"
|
|
98
111
|
|
|
112
|
+
[[package]]
|
|
113
|
+
name = "hermit-abi"
|
|
114
|
+
version = "0.5.2"
|
|
115
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
116
|
+
checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c"
|
|
117
|
+
|
|
118
|
+
[[package]]
|
|
119
|
+
name = "humantime"
|
|
120
|
+
version = "2.3.0"
|
|
121
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
122
|
+
checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424"
|
|
123
|
+
|
|
124
|
+
[[package]]
|
|
125
|
+
name = "is-terminal"
|
|
126
|
+
version = "0.4.16"
|
|
127
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
128
|
+
checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9"
|
|
129
|
+
dependencies = [
|
|
130
|
+
"hermit-abi",
|
|
131
|
+
"libc",
|
|
132
|
+
"windows-sys 0.59.0",
|
|
133
|
+
]
|
|
134
|
+
|
|
99
135
|
[[package]]
|
|
100
136
|
name = "itertools"
|
|
101
137
|
version = "0.12.1"
|
|
@@ -125,25 +161,31 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
|
|
|
125
161
|
|
|
126
162
|
[[package]]
|
|
127
163
|
name = "libc"
|
|
128
|
-
version = "0.2.
|
|
164
|
+
version = "0.2.176"
|
|
129
165
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
130
|
-
checksum = "
|
|
166
|
+
checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174"
|
|
131
167
|
|
|
132
168
|
[[package]]
|
|
133
169
|
name = "libloading"
|
|
134
|
-
version = "0.8.
|
|
170
|
+
version = "0.8.9"
|
|
135
171
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
136
|
-
checksum = "
|
|
172
|
+
checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55"
|
|
137
173
|
dependencies = [
|
|
138
174
|
"cfg-if",
|
|
139
|
-
"windows-
|
|
175
|
+
"windows-link",
|
|
140
176
|
]
|
|
141
177
|
|
|
178
|
+
[[package]]
|
|
179
|
+
name = "log"
|
|
180
|
+
version = "0.4.28"
|
|
181
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
182
|
+
checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
|
|
183
|
+
|
|
142
184
|
[[package]]
|
|
143
185
|
name = "magnus"
|
|
144
|
-
version = "0.
|
|
186
|
+
version = "0.8.1"
|
|
145
187
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
146
|
-
checksum = "
|
|
188
|
+
checksum = "bd2ac6e71886be00ac34db92aa732c793c5107c95191805b9a1c7e70e6d342e0"
|
|
147
189
|
dependencies = [
|
|
148
190
|
"magnus-macros",
|
|
149
191
|
"rb-sys",
|
|
@@ -153,9 +195,9 @@ dependencies = [
|
|
|
153
195
|
|
|
154
196
|
[[package]]
|
|
155
197
|
name = "magnus-macros"
|
|
156
|
-
version = "0.
|
|
198
|
+
version = "0.8.0"
|
|
157
199
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
158
|
-
checksum = "
|
|
200
|
+
checksum = "47607461fd8e1513cb4f2076c197d8092d921a1ea75bd08af97398f593751892"
|
|
159
201
|
dependencies = [
|
|
160
202
|
"proc-macro2",
|
|
161
203
|
"quote",
|
|
@@ -164,9 +206,9 @@ dependencies = [
|
|
|
164
206
|
|
|
165
207
|
[[package]]
|
|
166
208
|
name = "memchr"
|
|
167
|
-
version = "2.7.
|
|
209
|
+
version = "2.7.6"
|
|
168
210
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
169
|
-
checksum = "
|
|
211
|
+
checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
|
|
170
212
|
|
|
171
213
|
[[package]]
|
|
172
214
|
name = "minimal-lexical"
|
|
@@ -228,24 +270,25 @@ dependencies = [
|
|
|
228
270
|
|
|
229
271
|
[[package]]
|
|
230
272
|
name = "rb-sys-env"
|
|
231
|
-
version = "0.
|
|
273
|
+
version = "0.2.2"
|
|
232
274
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
233
|
-
checksum = "
|
|
275
|
+
checksum = "08f8d2924cf136a1315e2b4c7460a39f62ef11ee5d522df9b2750fab55b868b6"
|
|
234
276
|
|
|
235
277
|
[[package]]
|
|
236
278
|
name = "rbcsv"
|
|
237
279
|
version = "0.1.0"
|
|
238
280
|
dependencies = [
|
|
239
281
|
"csv",
|
|
282
|
+
"env_logger",
|
|
283
|
+
"log",
|
|
240
284
|
"magnus",
|
|
241
|
-
"rb-sys",
|
|
242
285
|
]
|
|
243
286
|
|
|
244
287
|
[[package]]
|
|
245
288
|
name = "regex"
|
|
246
|
-
version = "1.11.
|
|
289
|
+
version = "1.11.3"
|
|
247
290
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
248
|
-
checksum = "
|
|
291
|
+
checksum = "8b5288124840bee7b386bc413c487869b360b2b4ec421ea56425128692f2a82c"
|
|
249
292
|
dependencies = [
|
|
250
293
|
"aho-corasick",
|
|
251
294
|
"memchr",
|
|
@@ -255,9 +298,9 @@ dependencies = [
|
|
|
255
298
|
|
|
256
299
|
[[package]]
|
|
257
300
|
name = "regex-automata"
|
|
258
|
-
version = "0.4.
|
|
301
|
+
version = "0.4.11"
|
|
259
302
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
260
|
-
checksum = "
|
|
303
|
+
checksum = "833eb9ce86d40ef33cb1306d8accf7bc8ec2bfea4355cbdebb3df68b40925cad"
|
|
261
304
|
dependencies = [
|
|
262
305
|
"aho-corasick",
|
|
263
306
|
"memchr",
|
|
@@ -290,27 +333,27 @@ checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc"
|
|
|
290
333
|
|
|
291
334
|
[[package]]
|
|
292
335
|
name = "serde"
|
|
293
|
-
version = "1.0.
|
|
336
|
+
version = "1.0.227"
|
|
294
337
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
295
|
-
checksum = "
|
|
338
|
+
checksum = "80ece43fc6fbed4eb5392ab50c07334d3e577cbf40997ee896fe7af40bba4245"
|
|
296
339
|
dependencies = [
|
|
297
340
|
"serde_core",
|
|
298
341
|
]
|
|
299
342
|
|
|
300
343
|
[[package]]
|
|
301
344
|
name = "serde_core"
|
|
302
|
-
version = "1.0.
|
|
345
|
+
version = "1.0.227"
|
|
303
346
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
304
|
-
checksum = "
|
|
347
|
+
checksum = "7a576275b607a2c86ea29e410193df32bc680303c82f31e275bbfcafe8b33be5"
|
|
305
348
|
dependencies = [
|
|
306
349
|
"serde_derive",
|
|
307
350
|
]
|
|
308
351
|
|
|
309
352
|
[[package]]
|
|
310
353
|
name = "serde_derive"
|
|
311
|
-
version = "1.0.
|
|
354
|
+
version = "1.0.227"
|
|
312
355
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
313
|
-
checksum = "
|
|
356
|
+
checksum = "51e694923b8824cf0e9b382adf0f60d4e05f348f357b38833a3fa5ed7c2ede04"
|
|
314
357
|
dependencies = [
|
|
315
358
|
"proc-macro2",
|
|
316
359
|
"quote",
|
|
@@ -340,25 +383,60 @@ dependencies = [
|
|
|
340
383
|
"unicode-ident",
|
|
341
384
|
]
|
|
342
385
|
|
|
386
|
+
[[package]]
|
|
387
|
+
name = "termcolor"
|
|
388
|
+
version = "1.4.1"
|
|
389
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
390
|
+
checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
|
|
391
|
+
dependencies = [
|
|
392
|
+
"winapi-util",
|
|
393
|
+
]
|
|
394
|
+
|
|
343
395
|
[[package]]
|
|
344
396
|
name = "unicode-ident"
|
|
345
397
|
version = "1.0.19"
|
|
346
398
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
347
399
|
checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d"
|
|
348
400
|
|
|
401
|
+
[[package]]
|
|
402
|
+
name = "winapi-util"
|
|
403
|
+
version = "0.1.11"
|
|
404
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
405
|
+
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
|
|
406
|
+
dependencies = [
|
|
407
|
+
"windows-sys 0.61.1",
|
|
408
|
+
]
|
|
409
|
+
|
|
349
410
|
[[package]]
|
|
350
411
|
name = "windows-link"
|
|
351
|
-
version = "0.
|
|
412
|
+
version = "0.2.0"
|
|
352
413
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
353
|
-
checksum = "
|
|
414
|
+
checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65"
|
|
354
415
|
|
|
355
416
|
[[package]]
|
|
356
|
-
name = "windows-
|
|
357
|
-
version = "0.
|
|
417
|
+
name = "windows-sys"
|
|
418
|
+
version = "0.59.0"
|
|
358
419
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
359
|
-
checksum = "
|
|
420
|
+
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
|
|
421
|
+
dependencies = [
|
|
422
|
+
"windows-targets",
|
|
423
|
+
]
|
|
424
|
+
|
|
425
|
+
[[package]]
|
|
426
|
+
name = "windows-sys"
|
|
427
|
+
version = "0.61.1"
|
|
428
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
429
|
+
checksum = "6f109e41dd4a3c848907eb83d5a42ea98b3769495597450cf6d153507b166f0f"
|
|
360
430
|
dependencies = [
|
|
361
431
|
"windows-link",
|
|
432
|
+
]
|
|
433
|
+
|
|
434
|
+
[[package]]
|
|
435
|
+
name = "windows-targets"
|
|
436
|
+
version = "0.52.6"
|
|
437
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
438
|
+
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
|
|
439
|
+
dependencies = [
|
|
362
440
|
"windows_aarch64_gnullvm",
|
|
363
441
|
"windows_aarch64_msvc",
|
|
364
442
|
"windows_i686_gnu",
|
|
@@ -371,48 +449,48 @@ dependencies = [
|
|
|
371
449
|
|
|
372
450
|
[[package]]
|
|
373
451
|
name = "windows_aarch64_gnullvm"
|
|
374
|
-
version = "0.
|
|
452
|
+
version = "0.52.6"
|
|
375
453
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
376
|
-
checksum = "
|
|
454
|
+
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
|
|
377
455
|
|
|
378
456
|
[[package]]
|
|
379
457
|
name = "windows_aarch64_msvc"
|
|
380
|
-
version = "0.
|
|
458
|
+
version = "0.52.6"
|
|
381
459
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
382
|
-
checksum = "
|
|
460
|
+
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
|
|
383
461
|
|
|
384
462
|
[[package]]
|
|
385
463
|
name = "windows_i686_gnu"
|
|
386
|
-
version = "0.
|
|
464
|
+
version = "0.52.6"
|
|
387
465
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
388
|
-
checksum = "
|
|
466
|
+
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
|
|
389
467
|
|
|
390
468
|
[[package]]
|
|
391
469
|
name = "windows_i686_gnullvm"
|
|
392
|
-
version = "0.
|
|
470
|
+
version = "0.52.6"
|
|
393
471
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
394
|
-
checksum = "
|
|
472
|
+
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
|
|
395
473
|
|
|
396
474
|
[[package]]
|
|
397
475
|
name = "windows_i686_msvc"
|
|
398
|
-
version = "0.
|
|
476
|
+
version = "0.52.6"
|
|
399
477
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
400
|
-
checksum = "
|
|
478
|
+
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
|
|
401
479
|
|
|
402
480
|
[[package]]
|
|
403
481
|
name = "windows_x86_64_gnu"
|
|
404
|
-
version = "0.
|
|
482
|
+
version = "0.52.6"
|
|
405
483
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
406
|
-
checksum = "
|
|
484
|
+
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
|
|
407
485
|
|
|
408
486
|
[[package]]
|
|
409
487
|
name = "windows_x86_64_gnullvm"
|
|
410
|
-
version = "0.
|
|
488
|
+
version = "0.52.6"
|
|
411
489
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
412
|
-
checksum = "
|
|
490
|
+
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
|
|
413
491
|
|
|
414
492
|
[[package]]
|
|
415
493
|
name = "windows_x86_64_msvc"
|
|
416
|
-
version = "0.
|
|
494
|
+
version = "0.52.6"
|
|
417
495
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
418
|
-
checksum = "
|
|
496
|
+
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
|