eazypi 0.0.4 → 0.0.5
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/eazypi/components.rb +2 -1
- data/lib/eazypi/schema/array.rb +3 -1
- data/lib/eazypi/schema/object.rb +1 -0
- data/lib/eazypi/schema.rb +11 -3
- data/lib/eazypi/serializer.rb +13 -3
- data/lib/eazypi/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 38e9def08b7d5d8f9a3221b7fa25472cca0833efe5ae0cda8ae96ae0332009e8
|
4
|
+
data.tar.gz: df904e67baef641dbc1cc88f3f11cbf9f7474c2c291059fdfcaaa73feb3f7d14
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5b6de60965569128c00d205656afd44b45caf9556e1cc0314ac86524d91f7173dfacb08462eb908d77a57a0fa16b474ecd04d2033afe59264ae3583b29feaa95
|
7
|
+
data.tar.gz: d0627af90001cd495935603a04a0f249f7bc98842cdd395139f1ae0f898071bd1104d74157d227b654bb869b7d5e1dd39487160932c58f652b862a9f98bbdcbe
|
data/lib/eazypi/components.rb
CHANGED
@@ -8,7 +8,8 @@ module Eazypi
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def add_schema(name, schema)
|
11
|
-
|
11
|
+
# Make sure it never gets a changed copy + never gets overwritten
|
12
|
+
@schemas[name] = schema.dup unless @schemas.key?(name)
|
12
13
|
|
13
14
|
"#/components/schemas/#{name}"
|
14
15
|
end
|
data/lib/eazypi/schema/array.rb
CHANGED
@@ -10,8 +10,10 @@ module Eazypi
|
|
10
10
|
@item_schema = item_schema
|
11
11
|
end
|
12
12
|
|
13
|
-
def collect_components(schemas: nil, **
|
13
|
+
def collect_components(schemas: nil, **kwargs)
|
14
14
|
schemas&.call(@item_schema)
|
15
|
+
|
16
|
+
@item_schema.collect_components(schemas: schemas, **kwargs)
|
15
17
|
end
|
16
18
|
|
17
19
|
def to_openapi_spec
|
data/lib/eazypi/schema/object.rb
CHANGED
data/lib/eazypi/schema.rb
CHANGED
@@ -3,21 +3,29 @@
|
|
3
3
|
module Eazypi
|
4
4
|
# JSON schema
|
5
5
|
module Schema
|
6
|
-
def self.from_object(object) # rubocop:todo Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/AbcSize
|
6
|
+
def self.from_object(object, parent = nil) # rubocop:todo Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/AbcSize
|
7
7
|
if object == :boolean
|
8
8
|
Schema::Primitive.new(type: "boolean")
|
9
9
|
elsif object.is_a?(::Array)
|
10
10
|
raise "Array needs to have one element" if object.length != 1
|
11
11
|
|
12
|
-
Schema::Array.new(Schema.from_object(object[0]))
|
12
|
+
Schema::Array.new(Schema.from_object(object[0], parent))
|
13
13
|
elsif object == String
|
14
14
|
Schema::Primitive.new(type: "string")
|
15
|
+
elsif object == Date
|
16
|
+
Schema::Primitive.new(type: "string", format: "date")
|
17
|
+
elsif object == Time
|
18
|
+
Schema::Primitive.new(type: "string", format: "date-time")
|
15
19
|
elsif object == Integer
|
16
20
|
Schema::Primitive.new(type: "integer")
|
17
21
|
elsif object == Float
|
18
22
|
Schema::Primitive.new(type: "number")
|
19
23
|
elsif object.respond_to?(:to_schema)
|
20
|
-
object
|
24
|
+
if object == parent
|
25
|
+
object.to_schema_reference
|
26
|
+
else
|
27
|
+
object.to_schema
|
28
|
+
end
|
21
29
|
else
|
22
30
|
raise "Can not convert #{object} to a schema"
|
23
31
|
end
|
data/lib/eazypi/serializer.rb
CHANGED
@@ -56,7 +56,7 @@ module Eazypi
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
-
included do
|
59
|
+
included do # rubocop:disable Metrics/BlockLength
|
60
60
|
@attributes = []
|
61
61
|
|
62
62
|
def self.attribute(attribute_name, type:, method: nil, method_name: nil, required: false)
|
@@ -74,14 +74,22 @@ module Eazypi
|
|
74
74
|
end
|
75
75
|
|
76
76
|
def self.to_schema
|
77
|
-
schema = Schema::Object.new(
|
77
|
+
schema = Schema::Object.new(object_name)
|
78
78
|
|
79
79
|
@attributes.each do |attribute|
|
80
|
-
schema.property attribute.name.to_s, Schema.from_object(attribute.type), required: attribute.required
|
80
|
+
schema.property attribute.name.to_s, Schema.from_object(attribute.type, self), required: attribute.required
|
81
81
|
end
|
82
82
|
|
83
83
|
schema
|
84
84
|
end
|
85
|
+
|
86
|
+
def self.to_schema_reference
|
87
|
+
Schema::Object.new(object_name).reference!("#/components/schemas/#{object_name}")
|
88
|
+
end
|
89
|
+
|
90
|
+
def self.object_name
|
91
|
+
name.split("::").last
|
92
|
+
end
|
85
93
|
end
|
86
94
|
|
87
95
|
def self.serialize_object(type_object, object) # rubocop:disable Metrics/MethodLength
|
@@ -91,6 +99,8 @@ module Eazypi
|
|
91
99
|
object&.map do |value|
|
92
100
|
serialize_object(type_object[0], value)
|
93
101
|
end
|
102
|
+
elsif [Date, Time].include?(type_object)
|
103
|
+
object&.iso8601
|
94
104
|
elsif [String, Integer, Float].include?(type_object)
|
95
105
|
object
|
96
106
|
else
|
data/lib/eazypi/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eazypi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathan Samson
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-06-
|
11
|
+
date: 2024-06-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionpack
|