schemable 1.0.2 → 1.0.3

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: 7d63ce1b1c91d8f6344b5800d9e793bb33a3b9694f91f646546a0e59f470a675
4
- data.tar.gz: 04c750e85b0095266a86b5e74ccf64212af0c7669476b23229b3d0874af4a287
3
+ metadata.gz: 76b5ccf66c28d0bcfc644321e370e1c4404518ee1a4ba056fe20bb72a22cc415
4
+ data.tar.gz: cd7ad60e43634159a2b845c15ef557a3a60b02cb5c465e63e5f90ff47807afe5
5
5
  SHA512:
6
- metadata.gz: 182e79396d00e3eb16d2344467cde65f9a8a0841b152f38c9fccafe4f3dfbaf47febdeb1a00063206090eb1fed37942f00788ee7530a936bda983a9c67944d34
7
- data.tar.gz: 188035d9d158f7f28b2b79b98c1b9dea08df8482344c287eebac12116fddd5758637871917b8c79194537ad8af80ea72676f17f0e8cb5df2d811f5605240909e
6
+ metadata.gz: 835b1048ab2efd7419b45e77d4733e769d9c657a5cd08e67a26584f3cf6f3ca23588d7875eb21353d9a283f422b50bb50bfc8a5ef0dd2edcad3dcf0c76cfda16
7
+ data.tar.gz: accc7a59d075dfc07437f7d2c6bfa8367336b3aafd8d04aca652c38a98cebdf3e7f80c614c1e90524091df6f32e7306ac4f2d183ab79157863f4014376a3b14a
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.3 (2024-01-30)
5
+
6
+ * Added configuration for preventing expansion for nested relationships. This can be done by setting the `expand_nested` to `true` when invoking `ResponseSchemaGenerator`'s `generate` instance method (e.g. `ResponseSchemaGenerator.new(instance).generate(expand: true, expand_nested: true)`. Additionally, you could globally set the value of `expand_nested` to the same value as `expand` by setting the configuration `infer_expand_nested_from_expand` to `true` in the `/config/initializers/schemable.rb`.
7
+
4
8
  ## Schemable 1.0.2 (2024-01-30)
5
9
 
6
10
  * 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.
data/README.md CHANGED
@@ -61,6 +61,7 @@ Please note that the configurations options below are defined in the `Schemable`
61
61
  | `enum_prefix_for_simple_enum` | The prefix to be used for the enum values when `mongoid` is used. | `nil` |
62
62
  | `enum_suffix_for_simple_enum` | The suffix to be used for the enum values when `mongoid` is used. | `nil` |
63
63
  | `infer_attributes_from_custom_method` | The name of the custom method that is used to get the attributes to be generated in the schema. See [Annex 1.3 - Infer attributes from custom method](#annex-13---infer-attributes-from-custom-method) for more information. | `nil` |
64
+ | `infer_expand_nested_from_expand` | Configures `ResponseSchemaGenerator`'s `generate` method to prevent expansion for nested relationships. It globally set the value of `expand_nested` to the same value as `expand` by setting the configuration to `true` | `flase` |
64
65
  | `infer_attributes_from_jsonapi_serializable` | Whether or not to infer the attributes from the `JSONAPI::Serializable::Resource` class. See the previous example [Annex 1.1 - Use serialized instance](#annex-11---use-serialized-instance) for more information. | `false` |
65
66
  | `custom_meta_response_schema` | A hash of custom meta response schema that can be used to override the default meta response schema. See [Annex 1.4 - Custom meta response schema](#annex-14---custom-meta-response-schema) for more information. | `nil` |
66
67
  | `pagination_enabled` | Enable pagination schema generation in the `meta` section of the response schema. | `true` |
@@ -400,7 +401,7 @@ module Swagger
400
401
  "#{schema_instance.model}CreateRequest": schema_instance.camelize_keys(Schemable::RequestSchemaGenerator.new(schema_instance).generate_for_create),
401
402
  "#{schema_instance.model}UpdateRequest": schema_instance.camelize_keys(Schemable::RequestSchemaGenerator.new(schema_instance).generate_for_update),
402
403
  "#{schema_instance.model}Response": schema_instance.camelize_keys(Schemable::ResponseSchemaGenerator.new(schema_instance).generate(expand: true, collection: true, relationships_to_exclude_from_expansion: %w[addresses stores attachments])),
403
- "#{schema_instance.model}ResponseExpanded": schema_instance.camelize_keys(Schemable::ResponseSchemaGenerator.new(schema_instance).generate(expand: true))
404
+ "#{schema_instance.model}ResponseExpanded": schema_instance.camelize_keys(Schemable::ResponseSchemaGenerator.new(schema_instance).generate(expand: true, expand_nested: true))
404
405
  ]
405
406
  end
406
407
  end
@@ -16,6 +16,7 @@ module Schemable
16
16
  :enum_prefix_for_simple_enum,
17
17
  :enum_suffix_for_simple_enum,
18
18
  :custom_meta_response_schema,
19
+ :infer_expand_nested_from_expand,
19
20
  :infer_attributes_from_custom_method,
20
21
  :infer_attributes_from_jsonapi_serializable
21
22
  )
@@ -32,6 +33,7 @@ module Schemable
32
33
  @custom_meta_response_schema = nil
33
34
  @enum_prefix_for_simple_enum = nil
34
35
  @enum_suffix_for_simple_enum = nil
36
+ @infer_expand_nested_from_expand = false
35
37
  @infer_attributes_from_custom_method = nil
36
38
  @infer_attributes_from_jsonapi_serializable = false
37
39
  end
@@ -27,12 +27,16 @@ module Schemable
27
27
  # @param expand [Boolean] Whether to include the included resources in the schema.
28
28
  # @param relationships_to_exclude_from_expansion [Array] The relationships to exclude from expansion in the schema.
29
29
  # @param collection [Boolean] Whether the response is for a collection of resources.
30
+ # @param expand_nested [Boolean] Whether to include the nested relationships in the schema.
30
31
  #
31
32
  # @example
32
- # schema = generator.generate(expand: true, relationships_to_exclude_from_expansion: ['some_relationship'], collection: true)
33
+ # schema = generator.generate(expand: true, relationships_to_exclude_from_expansion: ['some_relationship'], collection: true, expand_nested: true)
33
34
  #
34
35
  # @return [Hash] The generated schema.
35
- def generate(expand: false, relationships_to_exclude_from_expansion: [], collection: false)
36
+ def generate(expand: false, relationships_to_exclude_from_expansion: [], collection: false, expand_nested: false)
37
+ # Override expand_nested if infer_expand_nested_from_expand is true
38
+ expand_nested = expand if @configuration.infer_expand_nested_from_expand
39
+
36
40
  data = {
37
41
  type: :object,
38
42
  properties: {
@@ -51,7 +55,7 @@ module Schemable
51
55
  schema = collection ? { data: { type: :array, items: data } } : { data: }
52
56
 
53
57
  if expand
54
- included_schema = IncludedSchemaGenerator.new(@model_definition).generate(expand:, relationships_to_exclude_from_expansion:)
58
+ included_schema = IncludedSchemaGenerator.new(@model_definition).generate(expand: expand_nested, relationships_to_exclude_from_expansion:)
55
59
  @schema_modifier.add_properties(schema, included_schema, '.')
56
60
  end
57
61
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Schemable
4
- VERSION = '1.0.2'
4
+ VERSION = '1.0.3'
5
5
  end
@@ -41,6 +41,11 @@ Schemable.configure do |config|
41
41
  #
42
42
  # config.infer_attributes_from_custom_method = nil
43
43
 
44
+ # If you want to recursively expand the relationships in the response schema
45
+ # then set this option to true, otherwise set it to false (default).
46
+ #
47
+ # config.infer_expand_nested_from_expand = true
48
+
44
49
  # If you want to get the list of attributes from the jsonapi-rails gem's
45
50
  # JSONAPI::Serializable::Resource class, set this option to true.
46
51
  # It uses the attribute_blocks method to get the list of attributes.
@@ -8,6 +8,7 @@ module Schemable
8
8
  attr_accessor custom_defined_enum_method: Symbol?
9
9
  attr_accessor enum_prefix_for_simple_enum: String?
10
10
  attr_accessor enum_suffix_for_simple_enum: String?
11
+ attr_accessor infer_expand_nested_from_expand: bool
11
12
  attr_accessor custom_type_mappers: Hash[Symbol, any]
12
13
  attr_accessor infer_attributes_from_custom_method: Symbol?
13
14
  attr_accessor custom_meta_response_schema: Hash[Symbol, any]?
@@ -8,6 +8,6 @@ module Schemable
8
8
  def initialize: (Definition) -> void
9
9
  def meta: -> Hash[Symbol, any]
10
10
  def jsonapi: -> Hash[Symbol, any]
11
- def generate: (expand: bool, relationships_to_exclude_from_expansion: Array[Symbol], collection: bool) -> Hash[Symbol, any]
11
+ def generate: (expand: bool, relationships_to_exclude_from_expansion: Array[Symbol], collection: bool, expand_nested: bool) -> Hash[Symbol, any]
12
12
  end
13
13
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schemable
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Muhammad Nawzad