Class: SchemaTest::Property::Object
Constant Summary
collapse
- SHORTHAND_ATTRIBUTES =
{
id: :integer,
slug: :string,
updated_at: :datetime,
created_at: :datetime
}
- TYPES =
{
boolean: SchemaTest::Property::Boolean,
integer: SchemaTest::Property::Integer,
float: SchemaTest::Property::Float,
string: SchemaTest::Property::String,
datetime: SchemaTest::Property::DateTime,
date: SchemaTest::Property::Date,
url: SchemaTest::Property::Uri,
html: SchemaTest::Property::String,
null: SchemaTest::Property::Nil
}
NULL_TYPE
Instance Attribute Summary collapse
#_type, #description, #name
Instance Method Summary
collapse
-
#==(other) ⇒ Object
-
#array(name, of: nil, desc: nil, &block) ⇒ Object
-
#as_json_schema(include_root = true) ⇒ Object
-
#base_json_schema_type ⇒ Object
-
#based_on(name, version: self.version, except: []) ⇒ Object
-
#initialize(name, description: nil, version: nil, from: nil, properties: nil, except: [], &block) ⇒ Object
constructor
A new instance of Object.
-
#object(name, desc: nil, as: name, version: nil, except: [], &block) ⇒ Object
-
#properties ⇒ Object
-
#resolve ⇒ Object
#json_schema_format, #json_schema_type, #lookup_object, #nullable, #nullable!, #nullable?, #optional, #optional!, #optional?, #type
Constructor Details
#initialize(name, description: nil, version: nil, from: nil, properties: nil, except: [], &block) ⇒ Object
Returns a new instance of Object.
151
152
153
154
155
156
157
158
159
|
# File 'lib/schema_test/property.rb', line 151
def initialize(name, description: nil, version: nil, from: nil, properties: nil, except: [], &block)
super(name, :object, description)
@version = version
@specific_properties = properties
@properties = {}
@excluded_property_names = except
@from = from
instance_eval(&block) if block_given?
end
|
Instance Attribute Details
#excluded_property_names ⇒ Object
Returns the value of attribute excluded_property_names.
149
150
151
|
# File 'lib/schema_test/property.rb', line 149
def excluded_property_names
@excluded_property_names
end
|
Returns the value of attribute version.
149
150
151
|
# File 'lib/schema_test/property.rb', line 149
def version
@version
end
|
Instance Method Details
#==(other) ⇒ Object
171
172
173
174
175
|
# File 'lib/schema_test/property.rb', line 171
def ==(other)
super &&
properties.all? { |name, property| property == other.properties[name] } &&
excluded_property_names == other.excluded_property_names
end
|
#array(name, of: nil, desc: nil, &block) ⇒ Object
218
219
220
|
# File 'lib/schema_test/property.rb', line 218
def array(name, of: nil, desc: nil, &block)
define_property(SchemaTest::Property::Array.new(name, of, desc, &block))
end
|
#as_json_schema(include_root = true) ⇒ Object
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
|
# File 'lib/schema_test/property.rb', line 239
def as_json_schema(include_root=true)
property_values = properties.values
required_property_names = property_values.reject(&:optional?).map(&:name).map(&:to_s)
schema = {
'type' => json_schema_type,
'properties' => property_values.inject({}) { |a,p| a.merge(p.as_json_schema) },
'required' => required_property_names,
'additionalProperties' => false
}
if include_root
{ name.to_s => schema }
else
schema
end
end
|
#base_json_schema_type ⇒ Object
255
256
257
|
# File 'lib/schema_test/property.rb', line 255
def base_json_schema_type
'object'
end
|
#based_on(name, version: self.version, except: []) ⇒ Object
166
167
168
169
|
# File 'lib/schema_test/property.rb', line 166
def based_on(name, version: self.version, except: [])
@from = lookup_object(name, version)
@excluded_property_names = except
end
|
#object(name, desc: nil, as: name, version: nil, except: [], &block) ⇒ Object
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
|
# File 'lib/schema_test/property.rb', line 222
def object(name, desc: nil, as: name, version: nil, except: [], &block)
inferred_version = version || @version
if block_given?
define_property(SchemaTest::Property::Object.new(as, description: desc, version: inferred_version, &block))
else
define_property(
SchemaTest::Property::Object.new(
as,
description: desc,
version: inferred_version,
from: lookup_object(name, inferred_version, nil),
except: except
)
)
end
end
|
#properties ⇒ Object
161
162
163
164
|
# File 'lib/schema_test/property.rb', line 161
def properties
resolve
@properties.reject { |p| excluded_property_names.include?(p) }
end
|
177
178
179
180
181
182
183
184
185
186
187
|
# File 'lib/schema_test/property.rb', line 177
def resolve
if @from
@properties = @from.properties.merge(@properties)
@from = nil
end
if @specific_properties
@specific_properties.each { |p| define_property(p) }
@specific_properties = nil
end
self
end
|