eazypi 0.0.4 → 0.0.6

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: a16005235e7c868a0c1d3ef77636f537ab583938ac15785a14c82387a6143d57
4
+ data.tar.gz: 05a041c6f609455795d160ecb7084f5d76e3d2e41e32d7f189a4001ba5ad7a06
5
5
  SHA512:
6
- metadata.gz: 184707f28d37b10fea94dd4c245dc5143e484b22b089061b3d9efe8cea7b2e48edf38f238dc07dd9fdda728520e482689d505571998c3e52b20913fa828254f6
7
- data.tar.gz: 00011c9d53005e80ada9eabf45fc4ce98fde60160fb418048a5dd46852ed8db8ee0d4d2c97455605229651d98ed1ce680a70f8a1979382733e66c1853337ad15
6
+ metadata.gz: 9976ca262116dfb775a64d63ee89a1a2b73f806356cbe183a20fe254cf6b387b326aa0eedba7aa937ae7e63bb2336ade03b9b0a6d238b8eb96c7a06c6660313b
7
+ data.tar.gz: 0ec474f7e638f62efbf2c60372e716ea3ef4c7f8471f812c4071a01c3908b31ce5ac656a1e3e4204d71f1acc8b559726aa4490fc8f48d54be5315e4fa88e9ffe
@@ -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
@@ -33,11 +33,17 @@ module Eazypi
33
33
  end
34
34
  end
35
35
 
36
- def value(object)
36
+ def value(object) # rubocop:disable Metrics/MethodLength
37
37
  if @method
38
38
  @method.call(object)
39
39
  elsif @method_name
40
40
  object.send(@method_name)
41
+ elsif object.is_a?(Hash)
42
+ if object.key?(@name)
43
+ object[@name]
44
+ elsif object.key?(@name.to_s)
45
+ object[@name.to_s]
46
+ end
41
47
  else
42
48
  object.send(@name)
43
49
  end
@@ -56,7 +62,7 @@ module Eazypi
56
62
  end
57
63
  end
58
64
 
59
- included do
65
+ included do # rubocop:disable Metrics/BlockLength
60
66
  @attributes = []
61
67
 
62
68
  def self.attribute(attribute_name, type:, method: nil, method_name: nil, required: false)
@@ -74,14 +80,22 @@ module Eazypi
74
80
  end
75
81
 
76
82
  def self.to_schema
77
- schema = Schema::Object.new(name.split("::").last)
83
+ schema = Schema::Object.new(object_name)
78
84
 
79
85
  @attributes.each do |attribute|
80
- schema.property attribute.name.to_s, Schema.from_object(attribute.type), required: attribute.required
86
+ schema.property attribute.name.to_s, Schema.from_object(attribute.type, self), required: attribute.required
81
87
  end
82
88
 
83
89
  schema
84
90
  end
91
+
92
+ def self.to_schema_reference
93
+ Schema::Object.new(object_name).reference!("#/components/schemas/#{object_name}")
94
+ end
95
+
96
+ def self.object_name
97
+ name.split("::").last
98
+ end
85
99
  end
86
100
 
87
101
  def self.serialize_object(type_object, object) # rubocop:disable Metrics/MethodLength
@@ -91,6 +105,8 @@ module Eazypi
91
105
  object&.map do |value|
92
106
  serialize_object(type_object[0], value)
93
107
  end
108
+ elsif [Date, Time].include?(type_object)
109
+ object&.iso8601
94
110
  elsif [String, Integer, Float].include?(type_object)
95
111
  object
96
112
  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.6"
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.6
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-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack