strong_csv 0.3.0 → 0.4.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/README.md +16 -8
- data/lib/strong_csv/i18n.rb +4 -0
- data/lib/strong_csv/types/literal.rb +14 -0
- data/lib/strong_csv/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8078bf75d84307eb32f647a418d2cd2214d6891a78a25a73f7589b82fec0716c
|
4
|
+
data.tar.gz: 318af2a0c3a42ac7141819b06e729a5e98967c5106988bc4349b308f9c9d87f8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 63aa30f83182e0cab08f816124945d9da91149faaa82017ba0a80ca8b39ef57fed5eab521db1efd8404045aadba189550bd779f195434cef2294975dc30216f3
|
7
|
+
data.tar.gz: e4e74ea2446efcf32f6e67fe8be5df207ae8dbd66b392df4c2fb8895cd71aebf70894d062e64eee2814295aa00f29876afcb95b4c3a88ffffd7be0c8e9a9ba21
|
data/README.md
CHANGED
@@ -78,11 +78,11 @@ strong_csv = StrongCSV.new do
|
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
81
|
-
# TODO: The followings are not implemented so far.
|
82
|
-
|
83
81
|
# Regular expressions
|
84
82
|
let :url, %r{\Ahttps://}
|
85
83
|
|
84
|
+
# TODO: The followings are not implemented so far.
|
85
|
+
|
86
86
|
# Custom validation
|
87
87
|
#
|
88
88
|
# This example sees the database to fetch exactly stored `User` IDs,
|
@@ -158,6 +158,10 @@ end
|
|
158
158
|
<td><a href="#literal"><code>"abc"</code> (String literal)</a></td>
|
159
159
|
<td>The value must be casted to the specific <code>String</code> literal.</td>
|
160
160
|
</tr>
|
161
|
+
<tr>
|
162
|
+
<td><a href="#literal"><code>%r{\Ahttps://}</code> (Regexp literal)</a></td>
|
163
|
+
<td>The value must be casted to a <code>String</code> that matches the specified Regexp.</td>
|
164
|
+
</tr>
|
161
165
|
<tr>
|
162
166
|
<td><a href="#union"><code>,</code> (Union type)</a></td>
|
163
167
|
<td>The value must satisfy one of the subtypes.</td>
|
@@ -338,18 +342,19 @@ strong_csv = StrongCSV.new do
|
|
338
342
|
let 1, "test"
|
339
343
|
let 2, 2.5
|
340
344
|
let 3, 1..10
|
345
|
+
let 4, /[a-z]+/
|
341
346
|
end
|
342
347
|
|
343
348
|
result = strong_csv.parse(<<~CSV)
|
344
|
-
123,test,2.5,9
|
345
|
-
123,test,2.5,0
|
346
|
-
123,Hey,2.5,10
|
349
|
+
123,test,2.5,9,abc
|
350
|
+
123,test,2.5,0,xyz
|
351
|
+
123,Hey,2.5,10,!
|
347
352
|
CSV
|
348
353
|
|
349
354
|
result.map(&:valid?) # => [true, false, false]
|
350
|
-
result[0].slice(0, 1, 2, 3) # => {0=>123, 1=>"test", 2=>2.5, 3=>9}
|
351
|
-
result[1].slice(0, 1, 2, 3) # => {0=>123, 1=>"test", 2=>2.5, 3=>"0"} (0 is out of 1..10)
|
352
|
-
result[2].slice(0, 1, 2, 3) # => {0=>123, 1=>"Hey", 2=>2.5, 3=>10} ("Hey" is not equal to "test")
|
355
|
+
result[0].slice(0, 1, 2, 3, 4) # => {0=>123, 1=>"test", 2=>2.5, 3=>9, 4=>"abc"}
|
356
|
+
result[1].slice(0, 1, 2, 3, 4) # => {0=>123, 1=>"test", 2=>2.5, 3=>"0", 4=>"xyz"} (0 is out of 1..10)
|
357
|
+
result[2].slice(0, 1, 2, 3, 4) # => {0=>123, 1=>"Hey", 2=>2.5, 3=>10, 4=>"!"} ("Hey" is not equal to "test", and "!" does not match /[a-z]+/)
|
353
358
|
```
|
354
359
|
|
355
360
|
### Union
|
@@ -405,6 +410,9 @@ ja:
|
|
405
410
|
range:
|
406
411
|
cant_be_casted: "`%{value}`は`%{expected}`の始端に変換できません"
|
407
412
|
out_of_range: "`%{value}`は`%{range}`の範囲外です"
|
413
|
+
regexp:
|
414
|
+
cant_be_casted: "`%{value}`はStringに変換できません"
|
415
|
+
unexpected: "`%{value}`は`%{expected}`とマッチしませんでした"
|
408
416
|
string:
|
409
417
|
cant_be_casted: "`%{value}`はStringに変換できません"
|
410
418
|
out_of_range: "`%{value}`の文字数は`%{range}`の範囲外です"
|
data/lib/strong_csv/i18n.rb
CHANGED
@@ -28,6 +28,10 @@ I18n.backend.store_translations(
|
|
28
28
|
cant_be_casted: "`%{value}` can't be casted to the beginning of `%{expected}`",
|
29
29
|
out_of_range: "`%{value}` is not within `%{range}`",
|
30
30
|
},
|
31
|
+
regexp: {
|
32
|
+
cant_be_casted: "`%{value}` can't be casted to String",
|
33
|
+
unexpected: "`%{value}` did not match `%{expected}`",
|
34
|
+
},
|
31
35
|
},
|
32
36
|
string: {
|
33
37
|
cant_be_casted: "`%{value}` can't be casted to String",
|
@@ -72,6 +72,20 @@ class StrongCSV
|
|
72
72
|
end
|
73
73
|
end
|
74
74
|
end
|
75
|
+
|
76
|
+
refine ::Regexp do
|
77
|
+
# @param value [Object] Value to be casted to String
|
78
|
+
# @return [ValueResult]
|
79
|
+
def cast(value)
|
80
|
+
return ValueResult.new(original_value: value, error_messages: [I18n.t("strong_csv.literal.regexp.cant_be_casted", value: value.inspect, default: :"_strong_csv.literal.regexp.cant_be_casted")]) if value.nil?
|
81
|
+
|
82
|
+
if self =~ value
|
83
|
+
ValueResult.new(value: value, original_value: value)
|
84
|
+
else
|
85
|
+
ValueResult.new(original_value: value, error_messages: [I18n.t("strong_csv.literal.regexp.unexpected", value: value.inspect, expected: inspect, default: :"_strong_csv.literal.regexp.unexpected")])
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
75
89
|
end
|
76
90
|
end
|
77
91
|
end
|
data/lib/strong_csv/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: strong_csv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yutaka Kamei
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-05-
|
11
|
+
date: 2022-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: i18n
|