camille 0.5.5 → 0.5.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a587c953d4d716329e30ee94c7dfd2b67fcbb9d95b6aee5acc3a74ba7d8e2883
4
- data.tar.gz: 28cf879c56d17ac119c2913c14d2ce09548c226b8f9120aa5fd5ccc3ab8334d0
3
+ metadata.gz: 991a6d473c51e10dce629da09a1b430ff316b448521bf8631b8994b358cdc809
4
+ data.tar.gz: 34398f5bf1e5e2d2793de422d43dfd9c57b4f1eed9933cb3e99db91778e15ef9
5
5
  SHA512:
6
- metadata.gz: 64ca501f703b329e9c4a8872a237480a4a751ffdbb82cadfc7ca67a31fcaffffd6c18c26d5eff045f69600c6bf2e6f82c9607b47ce83dbb9333a5b6d67f40692
7
- data.tar.gz: 5d8951b905ad94aecc0b10756c9ff16bb25f9b6ee791c57694ad7bfdfd2f0c27cebe6e980b975f3a0cb17b3afa25a750d0808cfad221729e7d1c50caeba20e8e
6
+ metadata.gz: 772f197217bc1ffdd29b432b3c615c34f13f286e694d33abec58a468722d3217c1d8ffcd893aadab57b3f2be4b57fbe693c08e7976d72f9c7aeee33bea67e837
7
+ data.tar.gz: 679738f907ba017a94dc6e73b29ff82500765c207fb48a5da42c037e0ec9dbfb6155e4d26abc465b205271fbb1928ef29d677f1510c40f9a62dbb829e9e26d73
data/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.5.6
4
+
5
+ ### Added
6
+
7
+ * Added record type
8
+
9
+ ## 0.5.5
10
+
11
+ ### Added
12
+
13
+ * Added case conversion check for object keys.
14
+
3
15
  ## 0.5.4
4
16
 
5
17
  ### Added
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- camille (0.5.4)
4
+ camille (0.5.6)
5
5
  rails (>= 6.1, < 8)
6
6
 
7
7
  GEM
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 accepts a type and an array of symbols
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Camille
4
- VERSION = "0.5.5"
4
+ VERSION = "0.5.6"
5
5
  end
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.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-13 00:00:00.000000000 Z
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