camille 0.6.1 → 0.6.2

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: 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