jbuilder-schema 2.6.7 → 2.6.8

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: 9df1e47129d5125d222c0f9b5fc39a678b1034814198d86f8ac9e661014d12e9
4
- data.tar.gz: 5724904ce752c19d7f9ef70bfca632996edc9c840fbdb9752259941f955808c7
3
+ metadata.gz: 3f75cc13caa4465745a822b1bd1d7e66899fa1bb2387457d1e638ba1df9e360a
4
+ data.tar.gz: 6ec03326e02493379e9e97e2c9d50eac1f1bfb4a4cc340c1e3941774cddde6c6
5
5
  SHA512:
6
- metadata.gz: 615e44bdebeb69b360ded48ae49a6450d39662cbe66c2f3061535934d0be2f7b2945a225082bb7cab2e975826c99ac724d7c98830e832be9ce58f73cc1afa23c
7
- data.tar.gz: 21b333cccdad9e9e1cde19b61f9424b9d3c7624766241185ac4046138a0da2df66de98fc7f5846c6c1c1f05ff0ac753da9f1173b6551f2884d7482a5a35d628b
6
+ metadata.gz: 9704440704b61701c9b3852a97b86b4dbed7e4456e8fbf37934cab3978690d41fe4fd9c7fa786ef1479da9c3b8be53e67cc0a05516073481f21eaabeb864921a
7
+ data.tar.gz: b875004bb14f11ba6eed4a8f1ca77675bb7b2484e5c97676943fb21fe1023aedb8b263476191517b45f89ab7c15bd2c2f1a1e97e1a2082bc002f7734454ed310
data/README.md CHANGED
@@ -1,62 +1,58 @@
1
1
  # Jbuilder::Schema
2
2
 
3
- Generate JSON Schema compatible with OpenAPI 3 specs from Jbuilder files
3
+ Easily Generate JSON Schemas from Jbuilder Templates for OpenAPI 3.1
4
4
 
5
- ## Installation
5
+ ## Quick Start
6
6
 
7
- In your Gemfile, put `gem "jbuilder-schema"` after Jbuilder:
7
+ ### Installation
8
+
9
+ Add this to your Gemfile:
8
10
 
9
11
  gem "jbuilder"
10
12
  gem "jbuilder-schema"
11
13
 
12
- And run:
13
-
14
- $ bundle
15
-
16
- Or install it yourself as:
14
+ Then, run `bundle` or install it manually using `gem install jbuilder-schema`.
17
15
 
18
- $ gem install jbuilder-schema
16
+ ### Generating Schemas
19
17
 
20
- ## Usage
21
-
22
- Wherever you want to generate schemas, call `Jbuilder::Schema.yaml` or `Jbuilder::Schema.json`:
18
+ Use `Jbuilder::Schema.yaml` or `Jbuilder::Schema.json` to create schemas. For example:
23
19
 
24
20
  ```ruby
25
21
  Jbuilder::Schema.yaml(@article, title: 'Article', description: 'Article in the blog', locals: { current_user: @user })
26
22
  ```
27
23
 
28
- Under the hood `Jbuilder::Schema.yaml`/`json` will use Action View's `render` method and support the same arguments.
24
+ This will render a Jbuilder template (e.g., `articles/_article.json.jbuilder`) and make `@article` available in the partial. You can also pass additional locals.
29
25
 
30
- So in the above example, the `@article`'s `to_partial_path` path is used to find and render a `articles/_article.json.jbuilder` template, and `article` is available in the partial.
26
+ ## Contents
31
27
 
32
- Additionally, we can pass any needed `locals:`.
28
+ - [Advanced Usage](#advanced-usage)
29
+ - [Rendering Specific Directories](#rendering-specific-directories)
30
+ - [Rendering Templates](#rendering-templates)
31
+ - [Output](#output)
32
+ - [Handling Arrays and Objects](#handling-arrays-and-objects)
33
+ - [Nested Partials and Arrays](#nested-partials-and-arrays)
34
+ - [Customization](#customization)
35
+ - [Titles & Descriptions](#titles--descriptions)
36
+ - [Configuration](#configuration)
37
+ - [Integration with RSwag](#integration-with-rswag)
38
+ - [Contributing](#contributing)
39
+ - [License](#license)
40
+ - [Sponsor](#open-source-development-sponsored-by)
33
41
 
34
- The `title` and `description` set the title and description of the schema — though they can also come from locale files (see *[Titles & Descriptions](#titles--descriptions)*);
42
+ ### Advanced Usage
35
43
 
36
- ### Use with a directory within app/views
44
+ #### Rendering Specific Directories
37
45
 
38
- If you have a directory within app/views where your Jbuilder templates are, you can use `renderer` to capture that along with any `locals:` common to the templates you'll render:
46
+ If your Jbuilder templates are in a specific directory, use `Jbuilder::Schema.renderer`:
39
47
 
40
48
  ```ruby
41
49
  jbuilder = Jbuilder::Schema.renderer('app/views/api/v1', locals: { current_user: @user })
42
50
  jbuilder.yaml @article, title: 'Article', description: 'Article in the blog'
43
51
  ```
44
52
 
45
- This means you don't have to write out the partial path, which gets tedious with multiple schema renders:
53
+ #### Rendering Templates
46
54
 
47
- ```ruby
48
- Jbuilder::Schema.yaml(partial: 'api/v1/articles/article', locals: { article: @article, current_user: @user }, title: 'Article', description: 'Article in the blog')
49
- ```
50
-
51
- ### Rendering a template
52
-
53
- If you're rendering a template like `app/views/articles/index.jbuilder`:
54
-
55
- ```ruby
56
- json.articles @articles, :id, :title
57
- ```
58
-
59
- You'll need to pass the relative template path in `template:` and any needed instance variables in `assigns:` like so:
55
+ For templates like `app/views/articles/index.jbuilder`, specify the template path and variables:
60
56
 
61
57
  ```ruby
62
58
  Jbuilder::Schema.yaml(template: "articles/index", assigns: { articles: Article.first(3) })
@@ -64,15 +60,16 @@ Jbuilder::Schema.yaml(template: "articles/index", assigns: { articles: Article.f
64
60
 
65
61
  ### Output
66
62
 
67
- Jbuilder::Schema automatically sets `description`, `type`, and `required` options in JSON-Schema.
63
+ Jbuilder::Schema automatically sets `description`, `type`, and `required` fields in the JSON Schema. You can *[customize](#customization)* these using the `schema:` hash.
68
64
 
69
- For example, if we have a `_article.json.jbuilder` file:
65
+ #### Example
70
66
 
71
67
  ```ruby
68
+ # _article.json.jbuilder
72
69
  json.extract! article, :id, :title, :body, :created_at
73
70
  ```
74
71
 
75
- This will produce the following:
72
+ #### Result
76
73
 
77
74
  ```yaml
78
75
  type: object
@@ -84,136 +81,245 @@ required:
84
81
  - body
85
82
  properties:
86
83
  id:
87
- description: ID of an article
88
84
  type: integer
85
+ description: Article ID
89
86
  title:
90
- description: Title of an article
91
87
  type: string
88
+ description: Article Title
92
89
  body:
93
- description: Contents of an article
94
90
  type: string
91
+ description: Article Contents
95
92
  created_at:
96
- description: Timestamp when article was created
97
- type: string
93
+ type:
94
+ - string
95
+ - "null"
98
96
  format: date-time
97
+ description: Timestamp when article was created
99
98
  ```
100
99
 
101
- ### Customization
100
+ ### Handling Arrays and Objects
101
+
102
+ The gem efficiently handles arrays and objects, including nested structures. Arrays with a single element type are straightforwardly represented, while arrays with mixed types use the `anyOf` keyword for versatility.
102
103
 
103
- #### Simple
104
+ Support of various object types like `Hash`, `Struct`, `OpenStruct`, and `ActiveRecord::Base` is also integrated. It simplifies object schemas by setting only `type` and `properties`.
104
105
 
105
- To set your own data in the generated JSON-Schema pass a `schema:` hash:
106
+ #### Example
106
107
 
107
108
  ```ruby
108
- json.id article.id, schema: { type: :number, description: "Custom ID description" }
109
- json.title article.title, schema: { minLength: 5, maxLength: 20 }
110
- json.body article.body, schema: { type: :text, maxLength: 500 }
111
- json.created_at article.created_at.strftime('%d/%m/%Y'), schema: { format: :date, pattern: /^(3[01]|[12][0-9]|0[1-9])\/(1[0-2]|0[1-9])\/[0-9]{4}$/ }
109
+ json.custom_array [1, article.user, 2, "Text", [3.14, 25.44], 5.33, [3, "Another text", {a: 4, b: "One more text"}], {c: 5, d: "And another"}, {e: 6, f: {g: 7, h: "Last Text"}}]
112
110
  ```
113
111
 
114
- This will produce the following:
112
+ #### Result
115
113
 
116
114
  ```yaml
117
- ...
118
- properties:
119
- id:
120
- description: Custom ID description
121
- type: number
122
- title:
123
- description: Title of an article
124
- type: string
125
- minLength: 5
126
- maxLength: 20
127
- body:
128
- description: Contents of an article
129
- type: string
130
- maxLength: 500
131
- created_at:
132
- description: Timestamp when article was created
133
- type: string
134
- format: date
135
- pattern: "^(3[01]|[12][0-9]|0[1-9])\/(1[0-2]|0[1-9])\/[0-9]{4}$"
115
+ properties:
116
+ custom_array:
117
+ type:
118
+ - array
119
+ - "null"
120
+ minContains: 0
121
+ contains:
122
+ anyOf:
123
+ - type: integer
124
+ - type: object
125
+ # ... ActiveRecord object properties ...
126
+ - type: string
127
+ - type: array
128
+ # All arrays are merged in one so all possible values of arrays are in one place
129
+ minContains: 0
130
+ contains:
131
+ anyOf:
132
+ - type: number
133
+ - type: integer
134
+ - type: string
135
+ - type: object
136
+ properties:
137
+ a:
138
+ type: integer
139
+ # ... description ...
140
+ b:
141
+ type: integer
142
+ # ... description ...
143
+ - type: number
144
+ - type: object
145
+ properties:
146
+ c:
147
+ type: integer
148
+ # ... description ...
149
+ d:
150
+ type: integer
151
+ # ... description ...
152
+ - type: object
153
+ properties:
154
+ e:
155
+ type: integer
156
+ # ... description ...
157
+ f:
158
+ type: object
159
+ properties:
160
+ h:
161
+ type: integer
162
+ # ... description ...
163
+ g:
164
+ type: string
165
+ # ... description ...
166
+ description: Very weird custom array
136
167
  ```
137
168
 
138
- #### Bulk
169
+ Each schema is unique, ensuring no duplication. Description fields are nested under parent field names for clarity.
139
170
 
140
- You can customize output for multiple fields at once:
141
-
142
- ```ruby
143
- json.extract! user, :id, :name, :email, schema: {id: {type: :string}, email: {type: :email, pattern: /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/}}
144
- ```
171
+ ### Nested Partials and Arrays
145
172
 
146
- ### Nested objects
173
+ Nested partials and arrays will most commonly produce reference to the related schema component.
174
+ Only if block with partial includes other fields, the inline object will be generated.
147
175
 
148
- When you have nested objects in your Jbuilder template, you have to pass it to `schema: {object: <nested_object>}` when the block starts:
176
+ #### Example
149
177
 
150
178
  ```ruby
151
- json.extract! article
152
- json.author schema: {object: article.user, object_title: "Author", object_description: "Authors are users who write articles"} do
153
- json.extract! article.user
179
+ json.author do
180
+ json.partial! "api/v1/users/user", user: article.user
181
+ end
182
+ json.comments do
183
+ json.array! article.comments, partial: "api/v1/articles/comments/comment", as: :article_comment
184
+ end
185
+ json.ratings do
186
+ json.array! article.ratings, schema: {object: article.ratings.first, title: "Rating", description: "Article Rating"} do |rating|
187
+ json.partial! "api/v1/shared/id", resource: rating
188
+ json.extract! rating, :value
189
+ end
154
190
  end
155
191
  ```
156
192
 
157
- This will help Jbuilder::Schema to process those fields right.
193
+ #### Result
158
194
 
159
- ### Collections
195
+ ```yaml
196
+ # ... object description ...
197
+ properties:
198
+ author:
199
+ type: object
200
+ allOf:
201
+ - "$ref": "#/components/schemas/User"
202
+ description: User
203
+ comments:
204
+ type: array
205
+ items:
206
+ - "$ref": "#/components/schemas/Comment"
207
+ description: Comments
208
+ ratings:
209
+ type: array
210
+ items:
211
+ type: object
212
+ title: Rating
213
+ description: Article Rating
214
+ required:
215
+ - id
216
+ - value
217
+ properties:
218
+ id:
219
+ type: integer
220
+ description: Rating ID
221
+ public_id:
222
+ type:
223
+ - string
224
+ - "null"
225
+ description: Rating Public ID
226
+ value:
227
+ type: integer
228
+ description: Rating Value
229
+ description: Article Ratings
230
+ ```
160
231
 
161
- If an object or an array of objects is generated in template, either in root or in some field through Jbuilder partials, JSON-Schema `$ref` is generated pointing to object with the same name as partial. By default those schemas should appear in `"#/components/schemas/"`.
232
+ Reference names are taken from `:as` option or first of the `locals:`.
162
233
 
163
- For example, if we have:
234
+ The path to component schemas can be configured with `components_path` variable, which defaults to `components/schemas`. See *[Configuration](#configuration)* for more info.
235
+
236
+ ### Customization
237
+
238
+ Customize individual or multiple fields at once using the `schema:` attribute.
239
+ For nested objects and collections, use the `schema: {object: <nested_object>}` format.
240
+
241
+ #### Example
164
242
 
165
243
  ```ruby
166
- json.user do
167
- json.partial! 'api/v1/users/user', user: user
168
- end
244
+ json.id article.id, schema: { type: :number, description: "Custom ID description" }
245
+ json.title article.title, schema: { minLength: 5, maxLength: 20 }
246
+ json.contents article.body, schema: { type: :text, maxLength: 500, required: true }
247
+ json.created_at article.created_at.strftime('%d/%m/%Y'), schema: { format: :date, pattern: /^(3[01]|[12][0-9]|0[1-9])\/(1[0-2]|0[1-9])\/[0-9]{4}$/ }
169
248
 
170
- json.articles do
171
- json.array! user.articles, partial: "api/v1/articles/article", as: :article
249
+ json.author schema: {object: article.user, title: "Article Author", description: "The person who wrote the article", required: true} do
250
+ json.extract! article.user, :id, :name, :email, schema: {id: {type: :string}, email: {type: :email, pattern: /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/}}
172
251
  end
173
252
  ```
174
253
 
175
- The result would be:
254
+ #### Result
176
255
 
177
256
  ```yaml
178
- user:
179
- type: object
180
- $ref: #/components/schemas/user
181
- articles:
182
- type: array
183
- items:
184
- $ref: #/components/schemas/article
257
+ type: object
258
+ title: Article
259
+ description: Article in the blog
260
+ required:
261
+ - id
262
+ - title
263
+ - contents
264
+ - author
265
+ properties:
266
+ id:
267
+ type: number
268
+ description: Custom ID description
269
+ title:
270
+ type: string
271
+ minLength: 5
272
+ maxLength: 20
273
+ description: Title of an article
274
+ contents:
275
+ type: string
276
+ maxLength: 500
277
+ description: Contents of an article
278
+ created_at:
279
+ type:
280
+ - string
281
+ - "null"
282
+ format: date
283
+ pattern: "^(3[01]|[12][0-9]|0[1-9])\/(1[0-2]|0[1-9])\/[0-9]{4}$"
284
+ description: Timestamp when article was created
285
+ author:
286
+ type: object
287
+ title: Article Author
288
+ description: The person who wrote the article
289
+ required:
290
+ - id
291
+ - name
292
+ - email
293
+ properties:
294
+ id:
295
+ type: string
296
+ description: User ID
297
+ name:
298
+ type: string
299
+ description: User Name
300
+ email:
301
+ type: email
302
+ pattern: "^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$"
303
+ description: User Email
185
304
  ```
186
305
 
187
- The path to component schemas can be configured with `components_path` variable, which defaults to `components/schemas`. See *[Configuration](#configuration)* for more info.
188
-
189
- ### Titles & Descriptions
306
+ #### Titles & Descriptions
190
307
 
191
- Custom titles and descriptions for objects can be specified when calling `jbuilder-schema` helper (see *[Usage](#usage)*), for fields and nested objects within `schema` attributes (see *[Customization](#simple)* and *[Nested objects](#nested-objects)*). If not set, they will be searched in locale files.
192
-
193
- Titles and descriptions for the models are supposed to be found in locale files under `<underscored_plural_model_name>.<title_name>` and `<underscored_plural_model_name>.<description_name>`, for example:
308
+ Set custom titles and descriptions directly or through locale files. For models, use `<underscored_plural_model_name>.<title_name>` and for fields, use `<underscored_plural_model_name>.fields.<field_name>.<description_name>` in locale files:
194
309
 
195
310
  ```yaml
196
311
  en:
197
312
  articles:
198
313
  title: Article
199
314
  description: The main object on the blog
200
- ```
201
-
202
- Descriptions for the fields are supposed to be found in locale files under `<underscored_plural_model_name>.fields.<field_name>.<description_name>`, for example:
203
-
204
- ```yaml
205
- en:
206
- articles:
207
315
  fields:
208
316
  title:
209
317
  description: The title of an article
210
318
  ```
211
319
 
212
- `<title_name>` and `<description_name>` can be configured (see *[Configuration](#configuration)*), it defaults to `title` and `description`.
213
-
214
320
  ### Configuration
215
321
 
216
- You can configure some variables that Jbuilder::Schema uses (for example, in `config/initializers/jbuilder_schema.rb`):
322
+ Configure Jbuilder::Schema in `config/initializers/jbuilder_schema.rb`:
217
323
 
218
324
  ```ruby
219
325
  Jbuilder::Schema.configure do |config|
@@ -223,9 +329,9 @@ Jbuilder::Schema.configure do |config|
223
329
  end
224
330
  ```
225
331
 
226
- ### RSwag
332
+ ### Integration with RSwag
227
333
 
228
- You can use the `yaml`/`json` methods in your `swagger_helper.rb` like this:
334
+ Use `yaml`/`json` methods in your `swagger_helper.rb` for Swagger documentation:
229
335
 
230
336
  ```ruby
231
337
  RSpec.configure do |config|
@@ -246,11 +352,11 @@ end
246
352
 
247
353
  ## Contributing
248
354
 
249
- Bug reports and pull requests are welcome on GitHub at https://github.com/bullet-train-co/jbuilder-schema.
355
+ Contributions are welcome! Report bugs and submit pull requests on [GitHub](https://github.com/bullet-train-co/jbuilder-schema).
250
356
 
251
357
  ## License
252
358
 
253
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
359
+ This gem is open source under the [MIT License](https://opensource.org/licenses/MIT).
254
360
 
255
361
  ## Open-source development sponsored by:
256
362
 
@@ -37,7 +37,11 @@ class Jbuilder::Schema
37
37
  super || translate(Jbuilder::Schema.description_name)
38
38
  end
39
39
 
40
- def translate_field(key)
40
+ def translate_title(key)
41
+ translate("fields.#{key}.#{Jbuilder::Schema.title_name}")
42
+ end
43
+
44
+ def translate_description(key)
41
45
  translate("fields.#{key}.#{Jbuilder::Schema.description_name}")
42
46
  end
43
47
 
@@ -84,6 +88,7 @@ class Jbuilder::Schema
84
88
 
85
89
  def set!(key, value = BLANK, *args, schema: nil, **options, &block)
86
90
  old_configuration, @configuration = @configuration, Configuration.build(**schema) if schema&.dig(:object)
91
+ _required << key if schema&.delete(:required) == true
87
92
  @within_block = _within_block?(&block)
88
93
 
89
94
  _with_schema_overrides(key => schema) do
@@ -188,16 +193,18 @@ class Jbuilder::Schema
188
193
  }
189
194
  end
190
195
 
191
- def _set_description(key, value)
192
- if !value.key?(:description) && @configuration.object
193
- value[:description] = @configuration.translate_field(key)
194
- end
196
+ def _set_title_and_description(key, value)
197
+ overrides = @schema_overrides&.dig(key)&.to_h || {}
198
+ return unless overrides.any? || @configuration.object
199
+
200
+ value[:title] ||= overrides[:title] if overrides&.key?(:title)
201
+ value[:description] ||= overrides[:description] || @configuration.translate_description(key)
195
202
  end
196
203
 
197
- def _set_ref(part, array: false)
198
- ref = {"$ref": "#/#{::Jbuilder::Schema.components_path}/#{part.split("/").last}"}
204
+ def _set_ref(object, **options)
205
+ ref = {"$ref": "#/#{::Jbuilder::Schema.components_path}/#{object.split("/").last}"}
199
206
 
200
- if array
207
+ if options[:array]
201
208
  _attributes.merge! type: :array, items: ref
202
209
  else
203
210
  _attributes.merge! type: :object, allOf: [ref]
@@ -209,6 +216,10 @@ class Jbuilder::Schema
209
216
  @attributes
210
217
  end
211
218
 
219
+ def _required
220
+ @required_keys ||= []
221
+ end
222
+
212
223
  FORMATS = {::DateTime => "date-time", ::ActiveSupport::TimeWithZone => "date-time", ::Date => "date", ::Time => "time"}
213
224
 
214
225
  def _schema(key, value, **options)
@@ -248,7 +259,7 @@ class Jbuilder::Schema
248
259
  options[:enum] = defined_enum.keys
249
260
  end
250
261
 
251
- _set_description key, options unless within_array
262
+ _set_title_and_description key, options unless within_array
252
263
  options
253
264
  end
254
265
 
@@ -281,7 +292,7 @@ class Jbuilder::Schema
281
292
  def _set_value(key, value)
282
293
  value = _value(value)
283
294
  value = _schema(key, value) unless value.is_a?(::Hash) && (value.key?(:type) || value.key?(:allOf)) # rubocop:disable Style/UnlessLogicalOperators
284
- _set_description(key, value)
295
+ _set_title_and_description(key, value)
285
296
  super
286
297
  end
287
298
 
@@ -296,10 +307,20 @@ class Jbuilder::Schema
296
307
  end
297
308
 
298
309
  def _required!(keys)
299
- presence_validated_attributes = @configuration.object&.class.try(:validators).to_a.flat_map { _1.attributes if _1.is_a?(::ActiveRecord::Validations::PresenceValidator) }
310
+ presence_validated_attributes = @configuration.object&.class.try(:validators).to_a.flat_map { _1.attributes if _1.is_a?(::ActiveRecord::Validations::PresenceValidator) } + _required
300
311
  keys & [_key(:id), *presence_validated_attributes.flat_map { [_key(_1), _key("#{_1}_id")] }]
301
312
  end
302
313
 
314
+ def _within_block?(&block)
315
+ block.present? && _one_line?(block.source)
316
+ end
317
+
318
+ def _one_line?(text)
319
+ text = text.gsub("{", " do\n").gsub("}", "\nend").tr(";", "\n")
320
+ lines = text.lines[1..-2].reject { |line| line.strip.empty? || !line.strip.start_with?("json.") }
321
+ lines.size == 1
322
+ end
323
+
303
324
  ###
304
325
  # Jbuilder methods
305
326
  ###
@@ -317,15 +338,5 @@ class Jbuilder::Schema
317
338
 
318
339
  _merge_values(current_value, value)
319
340
  end
320
-
321
- def _within_block?(&block)
322
- block.present? && _one_line?(block.source)
323
- end
324
-
325
- def _one_line?(text)
326
- text = text.gsub("{", " do\n").gsub("}", "\nend").tr(";", "\n")
327
- lines = text.lines[1..-2].reject { |line| line.strip.empty? || line.strip.start_with?("#") }
328
- lines.size == 1
329
- end
330
341
  end
331
342
  end
@@ -1,4 +1,4 @@
1
1
  # We can't use the standard `Jbuilder::Schema::VERSION =` because
2
2
  # `Jbuilder` isn't a regular module namespace, but a class …which also loads Active Support.
3
3
  # So we use trickery, and assign the proper version once `jbuilder/schema.rb` is loaded.
4
- JBUILDER_SCHEMA_VERSION = "2.6.7"
4
+ JBUILDER_SCHEMA_VERSION = "2.6.8"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jbuilder-schema
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.7
4
+ version: 2.6.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuri Sidorov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-12-04 00:00:00.000000000 Z
11
+ date: 2023-12-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jbuilder