schemable 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 75af2b99b8def68455dd086ca7d2b95dfbd5bcec8ccd16cca5a0695ef992c0f4
4
- data.tar.gz: '058291928127918abf3d5a7f64f7d6c3c42a1e262c76c7d06b23060f534bda47'
3
+ metadata.gz: 7d63ce1b1c91d8f6344b5800d9e793bb33a3b9694f91f646546a0e59f470a675
4
+ data.tar.gz: 04c750e85b0095266a86b5e74ccf64212af0c7669476b23229b3d0874af4a287
5
5
  SHA512:
6
- metadata.gz: f56ed0334197fd366ca8881d95aed351efe847486be33fac94a122b0b0c19d8fb3c958ae3edc94ec020d38bc3757396aea8d7c8010b8130907b10468b71b392f
7
- data.tar.gz: ea1b2cc748f66c9fdbc620a8914450debaddc2f468ce34bf2e11257d7aeb426d6bf52e72944ddfe9203ebfb9a305f3cf7de7510481c984ace3759e0b63b375cd
6
+ metadata.gz: 182e79396d00e3eb16d2344467cde65f9a8a0841b152f38c9fccafe4f3dfbaf47febdeb1a00063206090eb1fed37942f00788ee7530a936bda983a9c67944d34
7
+ data.tar.gz: 188035d9d158f7f28b2b79b98c1b9dea08df8482344c287eebac12116fddd5758637871917b8c79194537ad8af80ea72676f17f0e8cb5df2d811f5605240909e
data/CHANGELOG.md CHANGED
@@ -1,6 +1,10 @@
1
1
  # Changelog
2
2
  This file is used to list changes made in each version of the Schemable gem.
3
3
 
4
+ ## Schemable 1.0.2 (2024-01-30)
5
+
6
+ * Added configuration for making certain associations nullable in the response's relationship. This can be done by adding the name of the relation in the `nullable_relationships` method's array of strings.
7
+
4
8
  ## Schemable 1.0.1 (2024-01-29)
5
9
 
6
10
  * Added configuration for changing the default value of enums. By default first key is used, or alternatively default can be set manually by the method `default_value_for_enum_attributes` from the definition.
data/README.md CHANGED
@@ -86,6 +86,7 @@ The following is a list of the methods that can be overridden. (See the example
86
86
  | `optional_create_request_attributes` | Returns the attributes that are not required in the create request. |
87
87
  | `optional_update_request_attributes` | Returns the attributes that are not required in the update request. |
88
88
  | `nullable_attributes` | Returns the attributes that are nullable in the request/response body. |
89
+ | `nullable_relationships` | Returns the relationships that are nullable in the response body. |
89
90
  | `additional_create_request_attributes` | Returns the additional create request attributes that are not automatically generated. |
90
91
  | `additional_update_request_attributes` | Returns the additional update request attributes that are not automatically generated. |
91
92
  | `additional_response_attributes` | Returns the additional response attributes that are not automatically generated. |
@@ -125,6 +125,18 @@ module Schemable
125
125
  %i[]
126
126
  end
127
127
 
128
+ # Returns the relationships that are nullable in the response body.
129
+ # This means that they can be present in the response body but they can be null.
130
+ # They are not required to be present in the request body.
131
+ #
132
+ # @example
133
+ # ['users', 'applicant']
134
+ #
135
+ # @return [Array<String>] The attributes that are nullable in the response body.
136
+ def nullable_relationships
137
+ %w[]
138
+ end
139
+
128
140
  # Returns the additional create request attributes that are not automatically generated.
129
141
  # These attributes are appended to the create request schema.
130
142
  #
@@ -84,36 +84,43 @@ module Schemable
84
84
  #
85
85
  # @return [Hash] The generated schema for the relationship.
86
86
  def generate_schema(type_name, collection: false)
87
- if collection
88
- {
89
- type: :object,
90
- properties: {
91
- data: {
92
- type: :array,
93
- items: {
94
- type: :object,
95
- properties: {
96
- id: { type: :string },
97
- type: { type: :string, default: type_name }
98
- }
99
- }
100
- }
101
- }
102
- }
103
- else
104
- {
105
- type: :object,
106
- properties: {
107
- data: {
108
- type: :object,
109
- properties: {
110
- id: { type: :string },
111
- type: { type: :string, default: type_name }
112
- }
113
- }
114
- }
115
- }
116
- end
87
+ schema = if collection
88
+ {
89
+ type: :object,
90
+ properties: {
91
+ data: {
92
+ type: :array,
93
+ items: {
94
+ type: :object,
95
+ properties: {
96
+ id: { type: :string },
97
+ type: { type: :string, default: type_name }
98
+ }
99
+ }
100
+ }
101
+ }
102
+ }
103
+ else
104
+ {
105
+ type: :object,
106
+ properties: {
107
+ data: {
108
+ type: :object,
109
+ properties: {
110
+ id: { type: :string },
111
+ type: { type: :string, default: type_name }
112
+ }
113
+ }
114
+ }
115
+ }
116
+ end
117
+
118
+ # Modify the schema to nullable if the relationship is in nullable
119
+ is_relation_nullable = @model_definition.nullable_relationships.include?(type_name)
120
+
121
+ return schema unless is_relation_nullable
122
+
123
+ @schema_modifier.add_properties(schema, { nullable: true }, 'properties.data')
117
124
  end
118
125
  end
119
126
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Schemable
4
- VERSION = '1.0.1'
4
+ VERSION = '1.0.2'
5
5
  end
@@ -13,6 +13,7 @@ module Schemable
13
13
  def array_types: -> Hash[Symbol, any]
14
14
  def relationships: -> Hash[Symbol, any]
15
15
  def nullable_attributes: -> Array[Symbol]
16
+ def nullable_relationships: -> Array[String]
16
17
  def serialized_instance: -> Hash[Symbol, any]
17
18
  def self.generate: -> Array[Hash[Symbol, any]]
18
19
  def excluded_response_included: -> Array[Symbol]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schemable
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Muhammad Nawzad
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-01-29 00:00:00.000000000 Z
11
+ date: 2024-01-30 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: The schemable gem is an opinionated Gem for Rails applications to auto
14
14
  generate schema for models in JSONAPI format. It is designed to work with rswag's