camille 0.5.11 → 0.5.13

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9d5030e35bf654863f03d80dbd09f8adb03b335f3f66d52c745404f6344e7efc
4
- data.tar.gz: 7cc7a7000f5ce205f8edabfa31046933b7c7e04a71b18a270a8a080b37ed0c71
3
+ metadata.gz: d72196c6854c4c1354a55e5560b649753e49e23875a96d903b2d197dbae72581
4
+ data.tar.gz: 43b711376dfa6e9311245463738d999ffe73abc8fa9c7eb9516100f0f778c018
5
5
  SHA512:
6
- metadata.gz: 746548d7942f95c217ad8763add318a2dab939dbe2fb1abbd26d88b3c7da76023f58946a5622b15d5e3107ea7a88bfb919c78526eac78dbd6f9520d4f6e11469
7
- data.tar.gz: 5460ccaaa044c4a4a1255b68d3df78e1f251931a725b26ff36155dd29695c0422097287c07efb0f405d2928aa088022c03fd8bbf64ed652c64f450a688c9d1c1
6
+ metadata.gz: 513b2edc45cf95615c6a0d6768a09b7a9ec40fdafb79756694db91b72ab7c614b49140ed6cd7e4cba1a0e8a033e39c5b50aec3ac20d8e5fac25f9ba169f958af
7
+ data.tar.gz: '077171197c9aaea4b898ebe5157333d72b2f78297ec08b84605cf9da3615543e24af37f21d06d0a501bb1aa077aa21972e77c1f7c28967fff9274702578a22e1'
data/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.5.13
4
+
5
+ ### Fixed
6
+
7
+ * Fixed that `Omit` and `Pick` did not preserve optional fields
8
+
9
+ ## 0.5.12
10
+
11
+ ### Added
12
+
13
+ * Added `.test` to `Camille::Type`
14
+ * Added error details to `Camille::TypeError#inspect` and `#to_s`
15
+
16
+ ### Changed
17
+
18
+ * Removed `Camille::TypeError#print` since details are now in `#inspect`
19
+
3
20
  ## 0.5.11
4
21
 
5
22
  ### Changed
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- camille (0.5.11)
4
+ camille (0.5.12)
5
5
  rails (>= 6.1, < 8)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -128,6 +128,17 @@ Each custom type is considered a type alias in TypeScript. And `alias_of` define
128
128
  type Product = {id: number, name: string}
129
129
  ```
130
130
 
131
+ You can perform a type check on a value using `test`, which might be handy in testing:
132
+
133
+ ```ruby
134
+ error = Camille::Types::Product.test(hash)
135
+ if error.nil?
136
+ # the hash is accepted by Camille::Types::Product type
137
+ else
138
+ p error
139
+ end
140
+ ```
141
+
131
142
  ### Available syntax for types
132
143
 
133
144
  Camille supports most of the type syntax in TypeScript. Below is a list of types that you can use in type and schema definition.
data/lib/camille/type.rb CHANGED
@@ -26,6 +26,15 @@ module Camille
26
26
  @underlying.transform_and_check transformed
27
27
  end
28
28
 
29
+ def test value
30
+ error, _ = transform_and_check value
31
+ error
32
+ end
33
+
34
+ def self.test value
35
+ new.test value
36
+ end
37
+
29
38
  def self.klass_name
30
39
  name.gsub(/^Camille::Types::/, '')
31
40
  end
@@ -18,8 +18,14 @@ module Camille
18
18
  !!@message
19
19
  end
20
20
 
21
- def print io = STDOUT
22
- Camille::TypeErrorPrinter.new(self).print io
21
+ def inspect
22
+ string_io = StringIO.new
23
+ Camille::TypeErrorPrinter.new(self).print string_io
24
+ "#<Camille::TypeError\n#{string_io.string}>"
25
+ end
26
+
27
+ def to_s
28
+ inspect
23
29
  end
24
30
  end
25
31
  end
@@ -2,7 +2,7 @@ module Camille
2
2
  module Types
3
3
  class Object < Camille::BasicType
4
4
  class ArgumentError < ::ArgumentError; end
5
- attr_reader :fields
5
+ attr_reader :fields, :optional_keys
6
6
 
7
7
  def initialize fields
8
8
  @optional_keys = []
@@ -12,6 +12,13 @@ module Camille
12
12
 
13
13
  def processed_object
14
14
  fields = @target_object.fields.reject{|k, _| @keys.include?(k)}
15
+ fields.transform_keys! do |k,_|
16
+ if @target_object.optional_keys.include?(k)
17
+ "#{k}?".to_sym
18
+ else
19
+ k
20
+ end
21
+ end
15
22
  Camille::Types::Object.new(fields)
16
23
  end
17
24
 
@@ -12,6 +12,13 @@ module Camille
12
12
 
13
13
  def processed_object
14
14
  fields = @target_object.fields.select{|k, _| @keys.include?(k)}
15
+ fields.transform_keys! do |k,_|
16
+ if @target_object.optional_keys.include?(k)
17
+ "#{k}?".to_sym
18
+ else
19
+ k
20
+ end
21
+ end
15
22
  Camille::Types::Object.new(fields)
16
23
  end
17
24
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Camille
4
- VERSION = "0.5.11"
4
+ VERSION = "0.5.13"
5
5
  end
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.11
4
+ version: 0.5.13
5
5
  platform: ruby
6
6
  authors:
7
- - 辻彩
7
+ - Alyssa
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-06-10 00:00:00.000000000 Z
11
+ date: 2023-11-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '8'
33
33
  description: ''
34
34
  email:
35
- - cichol@live.cn
35
+ - git@alyssa.fm
36
36
  executables: []
37
37
  extensions: []
38
38
  extra_rdoc_files: []