camille 0.5.10 → 0.5.12

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: 247a0f8bf5424ac104e9c4b71a073c4b7a6e38399434dc57a9a3b13f40b72d0b
4
- data.tar.gz: db54f6d86bab52b6f50bc09cc3aa42c4b2b9c00c10a484394de270bc4a1c8351
3
+ metadata.gz: 321511ba40eb05246be9d567a74ac7c753287088b22e282207d6affe5cd2c7b6
4
+ data.tar.gz: 4f7bec2b9a36f8dec419131cbbd1a98e3d4735f20155320b2419e6e2fe6600e4
5
5
  SHA512:
6
- metadata.gz: aa084c1032e46b35a3330a5500bdf2a31dd19d57585ca7fd12bbd8c93083d1f2b5f9df1c53c68dd10ab53167d27fe8f4680cf4a7f8f8567f4e9dd3b279d13022
7
- data.tar.gz: be8d2cc143b82614cd99ef6d0b38c2fcc756152a9856db840e04595f1d566d97e8c01f51caadcb7ba88ff9d00924f3ff1e048a821b9a08f50a164c3047b8aba5
6
+ metadata.gz: 676055618b2b681f821b3a2d0fa87bf0f60f52e0416aad2dbdbc51eb4186bd19c699f4a121265cba56d5a1128f241f1e9f3bd32a9d1779dca58cc902b888fd71
7
+ data.tar.gz: e6545da7d1c98881b0fac58802b16c2a50ad2447039b9802d3617caf5f89d3ce68e67aaa2871f338b636fc463fb813f21ef1a040d13f5f43e70bf9ee890e2b29
data/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.5.12
4
+
5
+ ### Added
6
+
7
+ * Added `.test` to `Camille::Type`
8
+ * Added error details to `Camille::TypeError#inspect` and `#to_s`
9
+
10
+ ### Changed
11
+
12
+ * Removed `Camille::TypeError#print` since details are now in `#inspect`
13
+
14
+ ## 0.5.11
15
+
16
+ ### Changed
17
+
18
+ * Optional fields are now preserved in generated TypeScript as having `?` suffix
19
+
3
20
  ## 0.5.10
4
21
 
5
22
  ### Added
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- camille (0.5.10)
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
@@ -14,11 +14,10 @@ module Camille
14
14
  keys = (@fields.keys + value.keys).uniq
15
15
  transform_and_check_results = keys.map do |key|
16
16
  if type = @fields[key]
17
- error, transformed = type.transform_and_check(value[key])
18
- if @optional_keys.include?(key) && !error && transformed.nil?
17
+ if @optional_keys.include?(key) && value[key].nil?
19
18
  nil
20
19
  else
21
- [key, [error, transformed]]
20
+ [key, type.transform_and_check(value[key])]
22
21
  end
23
22
  else
24
23
  [key, [nil, value[key]]]
@@ -43,7 +42,7 @@ module Camille
43
42
  end
44
43
 
45
44
  def literal
46
- "{#{@fields.map{|k,v| "#{ActiveSupport::Inflector.camelize k.to_s, false}: #{v.literal}"}.join(', ')}}"
45
+ "{#{@fields.map{|k,v| "#{literal_key k}: #{v.literal}"}.join(', ')}}"
47
46
  end
48
47
 
49
48
  private
@@ -54,7 +53,7 @@ module Camille
54
53
  if key.end_with?('?')
55
54
  new_key = remove_question_mark(key)
56
55
  @optional_keys << new_key
57
- [new_key, type | Camille::Types::Undefined.new]
56
+ [new_key, type]
58
57
  else
59
58
  [key, type]
60
59
  end
@@ -65,6 +64,10 @@ module Camille
65
64
  sym.to_s.gsub(/\?$/, '').to_sym
66
65
  end
67
66
 
67
+ def literal_key key
68
+ "#{ActiveSupport::Inflector.camelize key.to_s, false}#{@optional_keys.include?(key) ? '?' : ''}"
69
+ end
70
+
68
71
  def check_case_conversion_safe sym
69
72
  str = sym.to_s
70
73
  if str != str.camelize.underscore
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Camille
4
- VERSION = "0.5.10"
4
+ VERSION = "0.5.12"
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.10
4
+ version: 0.5.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - 辻彩
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-06-08 00:00:00.000000000 Z
11
+ date: 2023-06-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails