camille 0.5.5 → 0.5.6
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 +12 -0
- data/Gemfile.lock +1 -1
- data/README.md +4 -2
- data/lib/camille/types/record.rb +58 -0
- data/lib/camille/version.rb +1 -1
- data/lib/camille.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 991a6d473c51e10dce629da09a1b430ff316b448521bf8631b8994b358cdc809
|
4
|
+
data.tar.gz: 34398f5bf1e5e2d2793de422d43dfd9c57b4f1eed9933cb3e99db91778e15ef9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 772f197217bc1ffdd29b432b3c615c34f13f286e694d33abec58a468722d3217c1d8ffcd893aadab57b3f2be4b57fbe693c08e7976d72f9c7aeee33bea67e837
|
7
|
+
data.tar.gz: 679738f907ba017a94dc6e73b29ff82500765c207fb48a5da42c037e0ec9dbfb6155e4d26abc465b205271fbb1928ef29d677f1510c40f9a62dbb829e9e26d73
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -163,9 +163,11 @@ params(
|
|
163
163
|
boolean_literal: false,
|
164
164
|
# a custom type we defined above
|
165
165
|
product: Product,
|
166
|
-
# Pick and Omit
|
166
|
+
# Pick and Omit accept a type and an array of symbols
|
167
167
|
pick: Pick[{a: 1, b: 2}, [:a, :b]],
|
168
|
-
omit: Omit[Product, [:id]]
|
168
|
+
omit: Omit[Product, [:id]],
|
169
|
+
# Record accepts a key type and a value type
|
170
|
+
record: Record[Number, String]
|
169
171
|
)
|
170
172
|
```
|
171
173
|
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Camille
|
2
|
+
module Types
|
3
|
+
class Record < Camille::BasicType
|
4
|
+
attr_reader :left, :right
|
5
|
+
attr_reader :key, :value
|
6
|
+
|
7
|
+
def initialize key, value
|
8
|
+
@key = Camille::Type.instance key
|
9
|
+
@value = Camille::Type.instance value
|
10
|
+
end
|
11
|
+
|
12
|
+
def transform_and_check value
|
13
|
+
if value.is_a? ::Hash
|
14
|
+
|
15
|
+
transform_and_check_results = value.map.with_index do |(k, v), index|
|
16
|
+
[index, transform_and_check_pair(k, v)]
|
17
|
+
end
|
18
|
+
|
19
|
+
errors = transform_and_check_results.map do |index, (error, transformed)|
|
20
|
+
["record[#{index}]", error]
|
21
|
+
end.select{|x| x[1]}
|
22
|
+
|
23
|
+
if errors.empty?
|
24
|
+
transformed = transform_and_check_results.map{|_, (_, transformed)| transformed}.to_h
|
25
|
+
[nil, transformed]
|
26
|
+
else
|
27
|
+
[Camille::TypeError.new(**errors.to_h), nil]
|
28
|
+
end
|
29
|
+
else
|
30
|
+
[Camille::TypeError.new("Expected hash, got #{value.inspect}."), nil]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.[] key, value
|
35
|
+
self.new key, value
|
36
|
+
end
|
37
|
+
|
38
|
+
def literal
|
39
|
+
"Record<#{@key.literal}, #{@value.literal}>"
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
def transform_and_check_pair key, value
|
44
|
+
key_error, key_transformed = @key.transform_and_check key
|
45
|
+
value_error, value_transformed = @value.transform_and_check value
|
46
|
+
|
47
|
+
if key_error.nil? && value_error.nil?
|
48
|
+
[nil, [key_transformed, value_transformed]]
|
49
|
+
else
|
50
|
+
errors = [['record.key', key_error], ['record.value', value_error]].select{|x| x[1]}.to_h
|
51
|
+
|
52
|
+
error = Camille::TypeError.new(**errors)
|
53
|
+
[error, nil]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/lib/camille/version.rb
CHANGED
data/lib/camille.rb
CHANGED
@@ -21,6 +21,7 @@ require_relative "camille/types/boolean_literal"
|
|
21
21
|
require_relative "camille/pick_and_omit"
|
22
22
|
require_relative "camille/types/pick"
|
23
23
|
require_relative "camille/types/omit"
|
24
|
+
require_relative "camille/types/record"
|
24
25
|
require_relative "camille/type"
|
25
26
|
require_relative "camille/type_error"
|
26
27
|
require_relative "camille/type_error_printer"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: camille
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- 辻彩
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-05-
|
11
|
+
date: 2023-05-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -84,6 +84,7 @@ files:
|
|
84
84
|
- lib/camille/types/object.rb
|
85
85
|
- lib/camille/types/omit.rb
|
86
86
|
- lib/camille/types/pick.rb
|
87
|
+
- lib/camille/types/record.rb
|
87
88
|
- lib/camille/types/string.rb
|
88
89
|
- lib/camille/types/string_literal.rb
|
89
90
|
- lib/camille/types/tuple.rb
|