jbuilder-schema 2.4.0 → 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/lib/jbuilder/schema/template.rb +25 -7
- data/lib/jbuilder/schema/version.rb +1 -1
- metadata +16 -2
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
|
@@ -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,6 +53,7 @@ class Jbuilder::Schema
|
|
52
53
|
@configuration = Configuration.new(**options)
|
53
54
|
super(context)
|
54
55
|
@ignore_nil = false
|
56
|
+
@within_block = false
|
55
57
|
end
|
56
58
|
|
57
59
|
class TargetWrapper
|
@@ -65,7 +67,7 @@ class Jbuilder::Schema
|
|
65
67
|
def to_s
|
66
68
|
@object
|
67
69
|
end
|
68
|
-
|
70
|
+
alias_method :unwrap_target!, :to_s
|
69
71
|
end
|
70
72
|
|
71
73
|
def target!
|
@@ -73,11 +75,6 @@ class Jbuilder::Schema
|
|
73
75
|
end
|
74
76
|
|
75
77
|
def schema!
|
76
|
-
# TODO: Not sure why it was like that, when it was meant to be used,
|
77
|
-
# but that seems to fix the problem with disappearance of root properties
|
78
|
-
# https://github.com/bullet-train-co/jbuilder-schema/issues/46
|
79
|
-
# if ([@attributes] + @attributes.each_value.grep(::Hash)).any? { _1[:type] == :array && _1.key?(:items) }
|
80
|
-
|
81
78
|
if [@attributes, *@attributes.first].select { |a| a.is_a?(::Hash) && a[:type] == :array && a.key?(:items) }.any?
|
82
79
|
@attributes
|
83
80
|
else
|
@@ -87,6 +84,7 @@ class Jbuilder::Schema
|
|
87
84
|
|
88
85
|
def set!(key, value = BLANK, *args, schema: nil, **options, &block)
|
89
86
|
old_configuration, @configuration = @configuration, Configuration.build(**schema) if schema&.dig(:object)
|
87
|
+
@within_block = _within_block?(&block)
|
90
88
|
|
91
89
|
_with_schema_overrides(key => schema) do
|
92
90
|
keys = args.presence || _extract_possible_keys(value)
|
@@ -102,6 +100,7 @@ class Jbuilder::Schema
|
|
102
100
|
end
|
103
101
|
ensure
|
104
102
|
@configuration = old_configuration if old_configuration
|
103
|
+
@within_block = false
|
105
104
|
end
|
106
105
|
|
107
106
|
alias_method :method_missing, :set! # TODO: Remove once Jbuilder passes keyword arguments along to `set!` in its `method_missing`.
|
@@ -110,10 +109,14 @@ class Jbuilder::Schema
|
|
110
109
|
if _partial_options?(options)
|
111
110
|
partial!(collection: collection, **options)
|
112
111
|
else
|
112
|
+
@within_block = _within_block?(&block)
|
113
|
+
|
113
114
|
_with_schema_overrides(schema) do
|
114
115
|
_attributes.merge! type: :array, items: _scope { super(collection, *args, &block) }
|
115
116
|
end
|
116
117
|
end
|
118
|
+
ensure
|
119
|
+
@within_block = false
|
117
120
|
end
|
118
121
|
|
119
122
|
def extract!(object, *attributes, schema: nil)
|
@@ -128,7 +131,12 @@ class Jbuilder::Schema
|
|
128
131
|
local = options.except(:partial, :as, :collection, :cached, :schema).first
|
129
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)
|
130
133
|
|
131
|
-
|
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
|
132
140
|
end
|
133
141
|
end
|
134
142
|
|
@@ -254,5 +262,15 @@ class Jbuilder::Schema
|
|
254
262
|
value = _object(value, _required!(value.keys)) unless value[:type] == :array || value.key?(:$ref)
|
255
263
|
_merge_values(current_value, value)
|
256
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
|
257
275
|
end
|
258
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
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 5.0.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: method_source
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::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'
|
41
55
|
description: Generate JSON Schema from Jbuilder files
|
42
56
|
email:
|
43
57
|
- hey@yurisidorov.com
|