jbuilder-schema 2.3.1 → 2.5.0
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 +4 -4
- data/Gemfile +10 -0
- data/lib/jbuilder/schema/renderer.rb +3 -1
- data/lib/jbuilder/schema/template.rb +39 -7
- data/lib/jbuilder/schema/version.rb +1 -1
- metadata +15 -8
- data/Gemfile.lock +0 -215
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b91da7438556fc92910dbf0f50ac15c54f62593985f1baacb9d1cda87c09e2e
|
4
|
+
data.tar.gz: bd9e173ce9473d32ca6c3a62d0af33411e76782a927c6ec6b0542a23a8f340dc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d5be408235c5190215d78d4d5946f4bb3a28becd80ccbb3a727225efc5f9c48f48903b8ed719296b344bcbf648f9a0d9a2e93ccedf4e475e4e874ca7142b6fa0
|
7
|
+
data.tar.gz: 89775b8f6a5819561eb33c8e0af6847167db2de6c0f719981de6bf393e072234fd36baf763dace85e773c5cd761dc93781c81c2a7548f19811111cefa24114e6
|
data/Gemfile
CHANGED
@@ -12,3 +12,13 @@ gem "sqlite3"
|
|
12
12
|
gem "standard", "~> 1.3"
|
13
13
|
|
14
14
|
gem "mocha"
|
15
|
+
|
16
|
+
rails_version = ENV.fetch("RAILS_VERSION", "7.0")
|
17
|
+
|
18
|
+
rails_constraint = if rails_version == "main"
|
19
|
+
{github: "rails/rails"}
|
20
|
+
else
|
21
|
+
"~> #{rails_version}.0"
|
22
|
+
end
|
23
|
+
|
24
|
+
gem "rails", rails_constraint
|
@@ -37,7 +37,9 @@ class Jbuilder::Schema::Renderer
|
|
37
37
|
options[:locals].merge! @default_locals if @default_locals
|
38
38
|
options[:locals][:__jbuilder_schema_options] = {json: json, object: object, title: title, description: description}
|
39
39
|
|
40
|
-
@view_renderer.render(options)
|
40
|
+
@view_renderer.render(options).then do |result|
|
41
|
+
result.respond_to?(:unwrap_target!) ? result.unwrap_target! : result
|
42
|
+
end
|
41
43
|
end
|
42
44
|
|
43
45
|
# Thin wrapper around the regular Jbuilder JSON output render, which also parses it into a hash.
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require "jbuilder/jbuilder_template"
|
4
4
|
require "active_support/inflections"
|
5
|
+
require "method_source"
|
5
6
|
|
6
7
|
class Jbuilder::Schema
|
7
8
|
class Template < ::JbuilderTemplate
|
@@ -52,18 +53,28 @@ class Jbuilder::Schema
|
|
52
53
|
@configuration = Configuration.new(**options)
|
53
54
|
super(context)
|
54
55
|
@ignore_nil = false
|
56
|
+
@within_block = false
|
57
|
+
end
|
58
|
+
|
59
|
+
class TargetWrapper
|
60
|
+
def initialize(object)
|
61
|
+
@object = object
|
62
|
+
end
|
63
|
+
|
64
|
+
# Rails 7.1 calls `to_s` on our `target!` (the return value from our templates).
|
65
|
+
# To get around that and let our inner Hash through, we add this override.
|
66
|
+
# `unwrap_target!` is added for backwardscompatibility so we get the inner Hash on Rails < 7.1.
|
67
|
+
def to_s
|
68
|
+
@object
|
69
|
+
end
|
70
|
+
alias_method :unwrap_target!, :to_s
|
55
71
|
end
|
56
72
|
|
57
73
|
def target!
|
58
|
-
schema!
|
74
|
+
TargetWrapper.new(schema!)
|
59
75
|
end
|
60
76
|
|
61
77
|
def schema!
|
62
|
-
# TODO: Not sure why it was like that, when it was meant to be used,
|
63
|
-
# but that seems to fix the problem with disappearance of root properties
|
64
|
-
# https://github.com/bullet-train-co/jbuilder-schema/issues/46
|
65
|
-
# if ([@attributes] + @attributes.each_value.grep(::Hash)).any? { _1[:type] == :array && _1.key?(:items) }
|
66
|
-
|
67
78
|
if [@attributes, *@attributes.first].select { |a| a.is_a?(::Hash) && a[:type] == :array && a.key?(:items) }.any?
|
68
79
|
@attributes
|
69
80
|
else
|
@@ -73,6 +84,7 @@ class Jbuilder::Schema
|
|
73
84
|
|
74
85
|
def set!(key, value = BLANK, *args, schema: nil, **options, &block)
|
75
86
|
old_configuration, @configuration = @configuration, Configuration.build(**schema) if schema&.dig(:object)
|
87
|
+
@within_block = _within_block?(&block)
|
76
88
|
|
77
89
|
_with_schema_overrides(key => schema) do
|
78
90
|
keys = args.presence || _extract_possible_keys(value)
|
@@ -88,6 +100,7 @@ class Jbuilder::Schema
|
|
88
100
|
end
|
89
101
|
ensure
|
90
102
|
@configuration = old_configuration if old_configuration
|
103
|
+
@within_block = false
|
91
104
|
end
|
92
105
|
|
93
106
|
alias_method :method_missing, :set! # TODO: Remove once Jbuilder passes keyword arguments along to `set!` in its `method_missing`.
|
@@ -96,10 +109,14 @@ class Jbuilder::Schema
|
|
96
109
|
if _partial_options?(options)
|
97
110
|
partial!(collection: collection, **options)
|
98
111
|
else
|
112
|
+
@within_block = _within_block?(&block)
|
113
|
+
|
99
114
|
_with_schema_overrides(schema) do
|
100
115
|
_attributes.merge! type: :array, items: _scope { super(collection, *args, &block) }
|
101
116
|
end
|
102
117
|
end
|
118
|
+
ensure
|
119
|
+
@within_block = false
|
103
120
|
end
|
104
121
|
|
105
122
|
def extract!(object, *attributes, schema: nil)
|
@@ -114,7 +131,12 @@ class Jbuilder::Schema
|
|
114
131
|
local = options.except(:partial, :as, :collection, :cached, :schema).first
|
115
132
|
as = options[:as] || ((local.is_a?(::Array) && local.size == 2 && local.first.is_a?(::Symbol) && local.last.is_a?(::Object)) ? local.first.to_s : nil)
|
116
133
|
|
117
|
-
|
134
|
+
if @within_block || collection.present?
|
135
|
+
_set_ref(as&.to_s || partial || model, array: collection&.any?)
|
136
|
+
else
|
137
|
+
json = ::Jbuilder::Schema.renderer.original_render partial: model || partial, locals: options
|
138
|
+
json.each { |key, value| set!(key, value) }
|
139
|
+
end
|
118
140
|
end
|
119
141
|
end
|
120
142
|
|
@@ -240,5 +262,15 @@ class Jbuilder::Schema
|
|
240
262
|
value = _object(value, _required!(value.keys)) unless value[:type] == :array || value.key?(:$ref)
|
241
263
|
_merge_values(current_value, value)
|
242
264
|
end
|
265
|
+
|
266
|
+
def _within_block?(&block)
|
267
|
+
block.present? && _one_line?(block.source)
|
268
|
+
end
|
269
|
+
|
270
|
+
def _one_line?(text)
|
271
|
+
text = text.gsub("{", " do\n").gsub("}", "\nend").tr(";", "\n")
|
272
|
+
lines = text.lines[1..-2].reject { |line| line.strip.empty? || line.strip.start_with?("#") }
|
273
|
+
lines.size == 1
|
274
|
+
end
|
243
275
|
end
|
244
276
|
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.
|
4
|
+
JBUILDER_SCHEMA_VERSION = "2.5.0"
|
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.
|
4
|
+
version: 2.5.0
|
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-10-
|
11
|
+
date: 2023-10-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jbuilder
|
@@ -31,9 +31,6 @@ dependencies:
|
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 5.0.0
|
34
|
-
- - "<"
|
35
|
-
- !ruby/object:Gem::Version
|
36
|
-
version: 7.1.0
|
37
34
|
type: :runtime
|
38
35
|
prerelease: false
|
39
36
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -41,9 +38,20 @@ dependencies:
|
|
41
38
|
- - ">="
|
42
39
|
- !ruby/object:Gem::Version
|
43
40
|
version: 5.0.0
|
44
|
-
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: method_source
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
45
46
|
- !ruby/object:Gem::Version
|
46
|
-
version:
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
47
55
|
description: Generate JSON Schema from Jbuilder files
|
48
56
|
email:
|
49
57
|
- hey@yurisidorov.com
|
@@ -53,7 +61,6 @@ extra_rdoc_files: []
|
|
53
61
|
files:
|
54
62
|
- ".standard.yml"
|
55
63
|
- Gemfile
|
56
|
-
- Gemfile.lock
|
57
64
|
- LICENSE.txt
|
58
65
|
- README.md
|
59
66
|
- Rakefile
|
data/Gemfile.lock
DELETED
@@ -1,215 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
jbuilder-schema (2.3.1)
|
5
|
-
jbuilder
|
6
|
-
rails (>= 5.0.0, < 7.1.0)
|
7
|
-
|
8
|
-
GEM
|
9
|
-
remote: https://rubygems.org/
|
10
|
-
specs:
|
11
|
-
actioncable (7.0.8)
|
12
|
-
actionpack (= 7.0.8)
|
13
|
-
activesupport (= 7.0.8)
|
14
|
-
nio4r (~> 2.0)
|
15
|
-
websocket-driver (>= 0.6.1)
|
16
|
-
actionmailbox (7.0.8)
|
17
|
-
actionpack (= 7.0.8)
|
18
|
-
activejob (= 7.0.8)
|
19
|
-
activerecord (= 7.0.8)
|
20
|
-
activestorage (= 7.0.8)
|
21
|
-
activesupport (= 7.0.8)
|
22
|
-
mail (>= 2.7.1)
|
23
|
-
net-imap
|
24
|
-
net-pop
|
25
|
-
net-smtp
|
26
|
-
actionmailer (7.0.8)
|
27
|
-
actionpack (= 7.0.8)
|
28
|
-
actionview (= 7.0.8)
|
29
|
-
activejob (= 7.0.8)
|
30
|
-
activesupport (= 7.0.8)
|
31
|
-
mail (~> 2.5, >= 2.5.4)
|
32
|
-
net-imap
|
33
|
-
net-pop
|
34
|
-
net-smtp
|
35
|
-
rails-dom-testing (~> 2.0)
|
36
|
-
actionpack (7.0.8)
|
37
|
-
actionview (= 7.0.8)
|
38
|
-
activesupport (= 7.0.8)
|
39
|
-
rack (~> 2.0, >= 2.2.4)
|
40
|
-
rack-test (>= 0.6.3)
|
41
|
-
rails-dom-testing (~> 2.0)
|
42
|
-
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
43
|
-
actiontext (7.0.8)
|
44
|
-
actionpack (= 7.0.8)
|
45
|
-
activerecord (= 7.0.8)
|
46
|
-
activestorage (= 7.0.8)
|
47
|
-
activesupport (= 7.0.8)
|
48
|
-
globalid (>= 0.6.0)
|
49
|
-
nokogiri (>= 1.8.5)
|
50
|
-
actionview (7.0.8)
|
51
|
-
activesupport (= 7.0.8)
|
52
|
-
builder (~> 3.1)
|
53
|
-
erubi (~> 1.4)
|
54
|
-
rails-dom-testing (~> 2.0)
|
55
|
-
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
56
|
-
activejob (7.0.8)
|
57
|
-
activesupport (= 7.0.8)
|
58
|
-
globalid (>= 0.3.6)
|
59
|
-
activemodel (7.0.8)
|
60
|
-
activesupport (= 7.0.8)
|
61
|
-
activerecord (7.0.8)
|
62
|
-
activemodel (= 7.0.8)
|
63
|
-
activesupport (= 7.0.8)
|
64
|
-
activestorage (7.0.8)
|
65
|
-
actionpack (= 7.0.8)
|
66
|
-
activejob (= 7.0.8)
|
67
|
-
activerecord (= 7.0.8)
|
68
|
-
activesupport (= 7.0.8)
|
69
|
-
marcel (~> 1.0)
|
70
|
-
mini_mime (>= 1.1.0)
|
71
|
-
activesupport (7.0.8)
|
72
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
73
|
-
i18n (>= 1.6, < 2)
|
74
|
-
minitest (>= 5.1)
|
75
|
-
tzinfo (~> 2.0)
|
76
|
-
ast (2.4.2)
|
77
|
-
base64 (0.1.1)
|
78
|
-
builder (3.2.4)
|
79
|
-
concurrent-ruby (1.2.2)
|
80
|
-
crass (1.0.6)
|
81
|
-
date (3.3.3)
|
82
|
-
erubi (1.12.0)
|
83
|
-
globalid (1.2.1)
|
84
|
-
activesupport (>= 6.1)
|
85
|
-
i18n (1.14.1)
|
86
|
-
concurrent-ruby (~> 1.0)
|
87
|
-
jbuilder (2.11.5)
|
88
|
-
actionview (>= 5.0.0)
|
89
|
-
activesupport (>= 5.0.0)
|
90
|
-
json (2.6.3)
|
91
|
-
language_server-protocol (3.17.0.3)
|
92
|
-
lint_roller (1.1.0)
|
93
|
-
loofah (2.21.3)
|
94
|
-
crass (~> 1.0.2)
|
95
|
-
nokogiri (>= 1.12.0)
|
96
|
-
mail (2.8.1)
|
97
|
-
mini_mime (>= 0.1.1)
|
98
|
-
net-imap
|
99
|
-
net-pop
|
100
|
-
net-smtp
|
101
|
-
marcel (1.0.2)
|
102
|
-
method_source (1.0.0)
|
103
|
-
mini_mime (1.1.5)
|
104
|
-
mini_portile2 (2.8.4)
|
105
|
-
minitest (5.20.0)
|
106
|
-
mocha (2.1.0)
|
107
|
-
ruby2_keywords (>= 0.0.5)
|
108
|
-
net-imap (0.4.0)
|
109
|
-
date
|
110
|
-
net-protocol
|
111
|
-
net-pop (0.1.2)
|
112
|
-
net-protocol
|
113
|
-
net-protocol (0.2.1)
|
114
|
-
timeout
|
115
|
-
net-smtp (0.4.0)
|
116
|
-
net-protocol
|
117
|
-
nio4r (2.5.9)
|
118
|
-
nokogiri (1.15.4)
|
119
|
-
mini_portile2 (~> 2.8.2)
|
120
|
-
racc (~> 1.4)
|
121
|
-
parallel (1.23.0)
|
122
|
-
parser (3.2.2.4)
|
123
|
-
ast (~> 2.4.1)
|
124
|
-
racc
|
125
|
-
racc (1.7.1)
|
126
|
-
rack (2.2.8)
|
127
|
-
rack-test (2.1.0)
|
128
|
-
rack (>= 1.3)
|
129
|
-
rails (7.0.8)
|
130
|
-
actioncable (= 7.0.8)
|
131
|
-
actionmailbox (= 7.0.8)
|
132
|
-
actionmailer (= 7.0.8)
|
133
|
-
actionpack (= 7.0.8)
|
134
|
-
actiontext (= 7.0.8)
|
135
|
-
actionview (= 7.0.8)
|
136
|
-
activejob (= 7.0.8)
|
137
|
-
activemodel (= 7.0.8)
|
138
|
-
activerecord (= 7.0.8)
|
139
|
-
activestorage (= 7.0.8)
|
140
|
-
activesupport (= 7.0.8)
|
141
|
-
bundler (>= 1.15.0)
|
142
|
-
railties (= 7.0.8)
|
143
|
-
rails-dom-testing (2.2.0)
|
144
|
-
activesupport (>= 5.0.0)
|
145
|
-
minitest
|
146
|
-
nokogiri (>= 1.6)
|
147
|
-
rails-html-sanitizer (1.6.0)
|
148
|
-
loofah (~> 2.21)
|
149
|
-
nokogiri (~> 1.14)
|
150
|
-
railties (7.0.8)
|
151
|
-
actionpack (= 7.0.8)
|
152
|
-
activesupport (= 7.0.8)
|
153
|
-
method_source
|
154
|
-
rake (>= 12.2)
|
155
|
-
thor (~> 1.0)
|
156
|
-
zeitwerk (~> 2.5)
|
157
|
-
rainbow (3.1.1)
|
158
|
-
rake (13.0.6)
|
159
|
-
regexp_parser (2.8.1)
|
160
|
-
rexml (3.2.6)
|
161
|
-
rubocop (1.56.4)
|
162
|
-
base64 (~> 0.1.1)
|
163
|
-
json (~> 2.3)
|
164
|
-
language_server-protocol (>= 3.17.0)
|
165
|
-
parallel (~> 1.10)
|
166
|
-
parser (>= 3.2.2.3)
|
167
|
-
rainbow (>= 2.2.2, < 4.0)
|
168
|
-
regexp_parser (>= 1.8, < 3.0)
|
169
|
-
rexml (>= 3.2.5, < 4.0)
|
170
|
-
rubocop-ast (>= 1.28.1, < 2.0)
|
171
|
-
ruby-progressbar (~> 1.7)
|
172
|
-
unicode-display_width (>= 2.4.0, < 3.0)
|
173
|
-
rubocop-ast (1.29.0)
|
174
|
-
parser (>= 3.2.1.0)
|
175
|
-
rubocop-performance (1.19.1)
|
176
|
-
rubocop (>= 1.7.0, < 2.0)
|
177
|
-
rubocop-ast (>= 0.4.0)
|
178
|
-
ruby-progressbar (1.13.0)
|
179
|
-
ruby2_keywords (0.0.5)
|
180
|
-
sqlite3 (1.6.6)
|
181
|
-
mini_portile2 (~> 2.8.0)
|
182
|
-
standard (1.31.1)
|
183
|
-
language_server-protocol (~> 3.17.0.2)
|
184
|
-
lint_roller (~> 1.0)
|
185
|
-
rubocop (~> 1.56.2)
|
186
|
-
standard-custom (~> 1.0.0)
|
187
|
-
standard-performance (~> 1.2)
|
188
|
-
standard-custom (1.0.2)
|
189
|
-
lint_roller (~> 1.0)
|
190
|
-
rubocop (~> 1.50)
|
191
|
-
standard-performance (1.2.0)
|
192
|
-
lint_roller (~> 1.1)
|
193
|
-
rubocop-performance (~> 1.19.0)
|
194
|
-
thor (1.2.2)
|
195
|
-
timeout (0.4.0)
|
196
|
-
tzinfo (2.0.6)
|
197
|
-
concurrent-ruby (~> 1.0)
|
198
|
-
unicode-display_width (2.5.0)
|
199
|
-
websocket-driver (0.7.6)
|
200
|
-
websocket-extensions (>= 0.1.0)
|
201
|
-
websocket-extensions (0.1.5)
|
202
|
-
zeitwerk (2.6.12)
|
203
|
-
|
204
|
-
PLATFORMS
|
205
|
-
ruby
|
206
|
-
|
207
|
-
DEPENDENCIES
|
208
|
-
jbuilder-schema!
|
209
|
-
mocha
|
210
|
-
rake (~> 13.0)
|
211
|
-
sqlite3
|
212
|
-
standard (~> 1.3)
|
213
|
-
|
214
|
-
BUNDLED WITH
|
215
|
-
2.4.10
|