camille 0.6.1 → 0.6.2

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: 7812549c03ae51c6ea3883e982770259b1757ce13b9014e63f21bf87a6522e02
4
- data.tar.gz: b562c295c761474368defa4aaa5ba544a5c82d54ad013eafcd1fee5305a68b82
3
+ metadata.gz: 6b37e0a4afe4e40ef39ea0b1ea6ffa523c8b32c731c0574740ecbd47de87e150
4
+ data.tar.gz: 9af7a11aa04232eee613a8f26c29a8e59c9991a8b8e88e35c730ee2081db4576
5
5
  SHA512:
6
- metadata.gz: 924f63558e9540098f5073ed9b806b3e73169324ad5dea5da1967f275922396f81e21db4968ba3298baa3443d65ae09561c8612a87da15dfa1549ea1404cfafb
7
- data.tar.gz: 60fe1b8a0baf1df20417518f74e977431f7f9df30b1d5a6087bdef96a78b40d6782f2677f9bbdcac44e674cd676456b50c719ec0e194b069edaa8960afc7e7c5
6
+ metadata.gz: f52a3cb7c71e08d927986b4468d61f4814bc9de9534591be21ddb058a94825787daee610cf8be05b532def27e1a873e4408daeb0452adc8c8ee70572c3b5376a
7
+ data.tar.gz: e02f55abc595ad16ccb23a78320346b1c4d93c7c9127d3d9f19a87581c820f4cf86b7b10a5abf932d3642ac65b4672dcd4feba417eb1aac738608d398740d235
data/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.6.2
4
+
5
+ ### Added
6
+
7
+ * Added `Camille::Rendered` to store type-checked JSON string. Using this can skip type-check and JSON rendering.
8
+ * Added `Camille::Checked#render` to generate `Camille::Rendered`.
9
+
10
+ ### Changed
11
+
12
+ * Use `JSON.dump` instead of ActiveSupport `.to_json`.
13
+
3
14
  ## 0.6.1
4
15
 
5
16
  ### Fixed
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- camille (0.6.0)
4
+ camille (0.6.1)
5
5
  rails (>= 6.1, < 8.1)
6
6
 
7
7
  GEM
@@ -109,7 +109,7 @@ GEM
109
109
  marcel (1.0.4)
110
110
  mini_mime (1.1.5)
111
111
  minitest (5.25.4)
112
- net-imap (0.5.1)
112
+ net-imap (0.5.4)
113
113
  date
114
114
  net-protocol
115
115
  net-pop (0.1.2)
@@ -190,7 +190,7 @@ GEM
190
190
  securerandom (0.4.0)
191
191
  stringio (3.1.2)
192
192
  thor (1.3.2)
193
- timeout (0.4.2)
193
+ timeout (0.4.3)
194
194
  tzinfo (2.0.6)
195
195
  concurrent-ruby (~> 1.0)
196
196
  useragent (0.16.11)
@@ -5,6 +5,20 @@ module Camille
5
5
  class BasicType
6
6
  class InvalidTypeError < ::ArgumentError; end
7
7
 
8
+ module CheckRendered
9
+ def check value
10
+ if value.instance_of? Camille::Rendered
11
+ if @fingerprint == value.fingerprint
12
+ Camille::Checked.new(@fingerprint, value)
13
+ else
14
+ Camille::TypeError.new("Expected `Rendered` object with fingerprint #{@fingerprint}. Got fingerprint #{value.fingerprint}.")
15
+ end
16
+ else
17
+ super
18
+ end
19
+ end
20
+ end
21
+
8
22
  attr_reader :fingerprint
9
23
 
10
24
  def initialize
@@ -23,6 +37,10 @@ module Camille
23
37
  Camille::Types::Array.new(self)
24
38
  end
25
39
 
40
+ def check value
41
+ raise NotImplementedError
42
+ end
43
+
26
44
  def transform value
27
45
  value
28
46
  end
@@ -43,6 +61,10 @@ module Camille
43
61
  instance_method(:initialize).arity == 0
44
62
  end
45
63
 
64
+ def self.inherited klass
65
+ klass.prepend CheckRendered
66
+ end
67
+
46
68
  def self.instance value
47
69
  case
48
70
  when value.is_a?(::Hash)
@@ -14,5 +14,13 @@ module Camille
14
14
  def type_error?
15
15
  false
16
16
  end
17
+
18
+ def render
19
+ if @value.instance_of? Camille::Rendered
20
+ @value
21
+ else
22
+ Camille::Rendered.new(@fingerprint, JSON.dump(@value))
23
+ end
24
+ end
17
25
  end
18
26
  end
@@ -25,7 +25,8 @@ module Camille
25
25
  Camille::TypeErrorPrinter.new(result).print(string_io)
26
26
  raise TypeError.new("\nType check failed for response.\n#{string_io.string}")
27
27
  else
28
- super(json: result.value)
28
+ rendered = result.render.json
29
+ super(json: rendered)
29
30
  end
30
31
  else
31
32
  raise ArgumentError.new("Expected key :json for `render` call.")
@@ -1,11 +1,7 @@
1
1
  module Camille
2
2
  class ObjectHash < Hash
3
- def as_json options = nil
4
- transform_keys{|k, _| Camille::KeyConverter.convert_response_key(k)}.as_json
5
- end
6
-
7
3
  def to_json options = nil
8
- as_json.to_json
4
+ JSON.dump(transform_keys{|k, _| Camille::KeyConverter.convert_response_key(k)})
9
5
  end
10
6
  end
11
7
  end
@@ -0,0 +1,14 @@
1
+ module Camille
2
+ class Rendered
3
+ attr_reader :fingerprint, :json
4
+
5
+ def initialize fingerprint, json
6
+ @fingerprint = fingerprint
7
+ @json = json
8
+ end
9
+
10
+ def to_json options = nil
11
+ @json
12
+ end
13
+ end
14
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Camille
4
- VERSION = "0.6.1"
4
+ VERSION = "0.6.2"
5
5
  end
data/lib/camille.rb CHANGED
@@ -4,6 +4,7 @@ require "active_support"
4
4
 
5
5
  require_relative "camille/version"
6
6
  require_relative "camille/object_hash"
7
+ require_relative "camille/rendered"
7
8
  require_relative "camille/checked"
8
9
  require_relative "camille/basic_type"
9
10
  require_relative "camille/types"
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.6.1
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - merely
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-12-16 00:00:00.000000000 Z
11
+ date: 2025-01-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -75,6 +75,7 @@ files:
75
75
  - lib/camille/object_hash.rb
76
76
  - lib/camille/pick_and_omit.rb
77
77
  - lib/camille/railtie.rb
78
+ - lib/camille/rendered.rb
78
79
  - lib/camille/schema.rb
79
80
  - lib/camille/schemas.rb
80
81
  - lib/camille/syntax.rb