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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3039b06d210f7a865957a6eb86b1946e0a7ae2ea63091ada95eed28ad47e8a7b
4
- data.tar.gz: c5b7ad7943c65cb84eb94b27c6c0b63978bc03f42b14b140df9b52f0caebe24d
3
+ metadata.gz: 38e9def08b7d5d8f9a3221b7fa25472cca0833efe5ae0cda8ae96ae0332009e8
4
+ data.tar.gz: df904e67baef641dbc1cc88f3f11cbf9f7474c2c291059fdfcaaa73feb3f7d14
5
5
  SHA512:
6
- metadata.gz: 184707f28d37b10fea94dd4c245dc5143e484b22b089061b3d9efe8cea7b2e48edf38f238dc07dd9fdda728520e482689d505571998c3e52b20913fa828254f6
7
- data.tar.gz: 00011c9d53005e80ada9eabf45fc4ce98fde60160fb418048a5dd46852ed8db8ee0d4d2c97455605229651d98ed1ce680a70f8a1979382733e66c1853337ad15
6
+ metadata.gz: 5b6de60965569128c00d205656afd44b45caf9556e1cc0314ac86524d91f7173dfacb08462eb908d77a57a0fa16b474ecd04d2033afe59264ae3583b29feaa95
7
+ data.tar.gz: d0627af90001cd495935603a04a0f249f7bc98842cdd395139f1ae0f898071bd1104d74157d227b654bb869b7d5e1dd39487160932c58f652b862a9f98bbdcbe
@@ -8,7 +8,8 @@ module Eazypi
8
8
  end
9
9
 
10
10
  def add_schema(name, schema)
11
- @schemas[name] = schema.dup # Make sure it never gets a reference
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
@@ -10,8 +10,10 @@ module Eazypi
10
10
  @item_schema = item_schema
11
11
  end
12
12
 
13
- def collect_components(schemas: nil, **_kwargs)
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
@@ -15,6 +15,7 @@ module Eazypi
15
15
 
16
16
  def reference!(reference)
17
17
  @reference = reference
18
+ self
18
19
  end
19
20
 
20
21
  def property(name, schema, required: false)
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.to_schema
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
@@ -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(name.split("::").last)
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Eazypi
4
- VERSION = "0.0.4"
4
+ VERSION = "0.0.5"
5
5
  end
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
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-18 00:00:00.000000000 Z
11
+ date: 2024-06-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack