camille 0.6.1 → 0.6.3

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: 99c0d1cc96b49d7fe7e6262f5a81f07feeb476bb0c1d3902259cdaf3d346497e
4
+ data.tar.gz: 1f9973ab623eb9d1322f116ba21eb1708bd5b32d8f3957798bfc87493bbaea1d
5
5
  SHA512:
6
- metadata.gz: 924f63558e9540098f5073ed9b806b3e73169324ad5dea5da1967f275922396f81e21db4968ba3298baa3443d65ae09561c8612a87da15dfa1549ea1404cfafb
7
- data.tar.gz: 60fe1b8a0baf1df20417518f74e977431f7f9df30b1d5a6087bdef96a78b40d6782f2677f9bbdcac44e674cd676456b50c719ec0e194b069edaa8960afc7e7c5
6
+ metadata.gz: 50fb0dd0da2ca88ab75652af3bd8481ef37185dbfaddd5913cbfa4a9a24d0887cfe4fe1d7b42f98287bbcbce0fbbf108434343a1d149102f1471df16451a3556
7
+ data.tar.gz: f7d61181b15fa95ceff6e43f68148c3ca4bc03dbfbae89820250ce23028a78213fc255252b790e61890ff30a632c73442c1696c64372f1f56f9ecbf28d74928d
data/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.6.3
4
+
5
+ ### Added
6
+
7
+ * Allow accessing Rails models from type files.
8
+
9
+ ## 0.6.2
10
+
11
+ ### Added
12
+
13
+ * Added `Camille::Rendered` to store type-checked JSON string. Using this can skip type-check and JSON rendering.
14
+ * Added `Camille::Checked#render` to generate `Camille::Rendered`.
15
+
16
+ ### Changed
17
+
18
+ * Use `JSON.dump` instead of ActiveSupport `.to_json`.
19
+
3
20
  ## 0.6.1
4
21
 
5
22
  ### 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.2)
5
5
  rails (>= 6.1, < 8.1)
6
6
 
7
7
  GEM
@@ -109,14 +109,14 @@ 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.6)
113
113
  date
114
114
  net-protocol
115
115
  net-pop (0.1.2)
116
116
  net-protocol
117
117
  net-protocol (0.2.2)
118
118
  timeout
119
- net-smtp (0.5.0)
119
+ net-smtp (0.5.1)
120
120
  net-protocol
121
121
  nio4r (2.7.4)
122
122
  nokogiri (1.17.2-x86_64-linux)
@@ -190,11 +190,12 @@ 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)
197
- websocket-driver (0.7.6)
197
+ websocket-driver (0.7.7)
198
+ base64
198
199
  websocket-extensions (>= 0.1.0)
199
200
  websocket-extensions (0.1.5)
200
201
  zeitwerk (2.7.1)
@@ -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.")
@@ -33,7 +33,11 @@ module Camille
33
33
  loader.setup
34
34
  @zeitwerk_loader = loader
35
35
  @configuration_location = "#{app.root}/config/camille/configuration.rb"
36
+ end
37
+ end
36
38
 
39
+ def initial_load
40
+ synchronize do
37
41
  eager_load
38
42
  construct_controller_name_to_schema_map
39
43
  end
@@ -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
@@ -17,6 +17,9 @@ module Camille
17
17
  Camille::Loader.register_routes(self)
18
18
  end
19
19
 
20
+ end
21
+
22
+ config.after_initialize do |app|
20
23
  dir = "#{Rails.root}/config/camille"
21
24
 
22
25
  update_checker = ActiveSupport::FileUpdateChecker.new([], {dir => ['rb']}) do
@@ -27,9 +30,10 @@ module Camille
27
30
 
28
31
  app.reloader.to_run do
29
32
  require_unload_lock!
30
- update_checker.execute_if_updated
33
+ update_checker.execute
31
34
  end
32
35
 
36
+ Camille::Loader.initial_load
33
37
  end
34
38
 
35
39
  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.3"
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.3
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-04-18 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