oas_rails 0.4.1 → 0.4.2

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: 85ae0895f424fb76a5e8b50b5f56c82f526a354ec5e9ec562f76219942da99a4
4
- data.tar.gz: bcfa9af3b8500e7204b4143173f86ef17d7c36083dfd44490047b7f0beac0c44
3
+ metadata.gz: 99f785633c605daf49dae444252b0bf2782a98621be1ead063bdd0d1ffb26014
4
+ data.tar.gz: d2b8f108c8fd8ceab1a286247cb5763663ecd1b6d87bb97677bdf09fe25917c8
5
5
  SHA512:
6
- metadata.gz: 7b6543957203039aec05ac6c324bd334df075871963f60408d257084df4f908fcac5facff6c69d867d02ad3bef02596a948b784d4f70e12ae7350d6c6dcf6632
7
- data.tar.gz: 672a557da4a80d153ecc6d37e73ddabecbc1ad03b7556470cca2f038964214fcb061cedec7866cfe1a2b7e87a3ea77496e0f82e14d182c470e24e4ebcd0e0355
6
+ metadata.gz: c30ec251db3f3397e3adc78974f80fd74fa4bfc4ad21385f9b9a120a12d8d8ac8655bd815be60e1b4769898f297cb5816f8851b23fd78eadb5ec0df14c21dd89
7
+ data.tar.gz: 2b4e29a8d2e47a4e7e9142b44a80d0a6504d93d3bca72cfe4b3a18fcbe111fdbd743876d678163099e64a04e192ec515197b5a831245c2487611f284e9ec6cec
data/README.md CHANGED
@@ -1,6 +1,9 @@
1
- ![Gem Version](https://img.shields.io/gem/v/oas_rails)
2
- ![GitHub License](https://img.shields.io/github/license/a-chacon/oas_rails)
1
+ ![Gem Version](https://img.shields.io/gem/v/oas_rails?color=E9573F)
2
+ ![GitHub License](https://img.shields.io/github/license/a-chacon/oas_rails?color=blue)
3
3
  ![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/a-chacon/oas_rails/.github%2Fworkflows%2Frubyonrails.yml)
4
+ ![Gem Total Downloads](https://img.shields.io/gem/dt/oas_rails)
5
+ ![Static Badge](https://img.shields.io/badge/Rails-%3E%3D7.0.0-%23E9573F)
6
+ ![Static Badge](https://img.shields.io/badge/Ruby-%3E%3D3.1.0-%23E9573F)
4
7
 
5
8
  # Open API Specification For Rails
6
9
 
@@ -35,7 +35,7 @@ module OasRails
35
35
  def from_model_class(klass)
36
36
  return self unless klass.ancestors.include? ActiveRecord::Base
37
37
 
38
- model_schema = EsquemaBuilder.send("build_#{@context}_schema", klass:)
38
+ model_schema = Builders::EsquemaBuilder.send("build_#{@context}_schema", klass:)
39
39
  model_schema["required"] = []
40
40
  schema = { type: "object", properties: { klass.to_s.downcase => model_schema } }
41
41
  examples = Spec::MediaType.search_for_examples_in_tests(klass, context: @context)
@@ -0,0 +1,39 @@
1
+ module OasRails
2
+ module Builders
3
+ module EsquemaBuilder
4
+ class << self
5
+ # Builds a schema for a class when it is used as incoming API data.
6
+ #
7
+ # @param klass [Class] The class for which the schema is built.
8
+ # @return [Hash] The schema as a JSON-compatible hash.
9
+ def build_incoming_schema(klass:, model_to_schema_class: Esquema)
10
+ configure_common_settings
11
+ model_to_schema_class.configuration.excluded_columns = OasRails.config.excluded_columns_incoming
12
+
13
+ model_to_schema_class::Builder.new(klass).build_schema.as_json
14
+ end
15
+
16
+ # Builds a schema for a class when it is used as outgoing API data.
17
+ #
18
+ # @param klass [Class] The class for which the schema is built.
19
+ # @return [Hash] The schema as a JSON-compatible hash.
20
+ def build_outgoing_schema(klass:, model_to_schema_class: Esquema)
21
+ configure_common_settings
22
+ model_to_schema_class.configuration.excluded_columns = OasRails.config.excluded_columns_outgoing
23
+
24
+ model_to_schema_class::Builder.new(klass).build_schema.as_json
25
+ end
26
+
27
+ private
28
+
29
+ # Configures common settings for schema building.
30
+ #
31
+ # Excludes associations and foreign keys from the schema.
32
+ def configure_common_settings
33
+ Esquema.configuration.exclude_associations = true
34
+ Esquema.configuration.exclude_foreign_keys = true
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -61,7 +61,7 @@ module OasRails
61
61
  klass = maybe_a_model.singularize.camelize(:upper).constantize
62
62
 
63
63
  if klass.ancestors.include?(ActiveRecord::Base)
64
- schema = EsquemaBuilder.build_outgoing_schema(klass:)
64
+ schema = Builders::EsquemaBuilder.build_outgoing_schema(klass:)
65
65
  if test_singularity(maybe_a_model)
66
66
  build_singular_model_schema_and_examples(maybe_a_model, errors, klass, schema)
67
67
  else
@@ -6,7 +6,8 @@ module OasRails
6
6
 
7
7
  STYLE_DEFAULTS = { query: 'form', path: 'simple', header: 'simple', cookie: 'form' }.freeze
8
8
 
9
- attr_accessor :name, :in, :style, :description, :required, :schema
9
+ attr_accessor :name, :style, :description, :required, :schema
10
+ attr_reader :in
10
11
 
11
12
  def initialize(specification)
12
13
  @specification = specification
@@ -18,8 +19,10 @@ module OasRails
18
19
  @schema = { type: 'string' }
19
20
  end
20
21
 
21
- def default_from_in
22
- STYLE_DEFAULTS[@in.to_sym]
22
+ def in=(value)
23
+ @in = value
24
+ @style = STYLE_DEFAULTS[@in.to_sym]
25
+ @required = true if value == "path"
23
26
  end
24
27
 
25
28
  def required?
@@ -18,8 +18,6 @@ module OasRails
18
18
  elsif value.is_a?(Array) && value.all? { |elem| elem.respond_to?(:to_spec) }
19
19
  value.map(&:to_spec)
20
20
  # elsif value.is_a?(Hash)
21
- # p "Here"
22
- # p value
23
21
  # hash = {}
24
22
  # value.each do |key, object|
25
23
  # hash[key] = object.to_spec
@@ -29,18 +27,23 @@ module OasRails
29
27
  value
30
28
  end
31
29
 
32
- # hash[camel_case_key] = processed_value unless (processed_value.is_a?(Hash) || processed_value.is_a?(Array)) && processed_value.empty?
33
- hash[camel_case_key] = processed_value unless processed_value.nil?
30
+ hash[camel_case_key] = processed_value unless valid_processed_value?(processed_value)
34
31
  end
35
32
  hash
36
33
  end
37
34
 
38
- def as_json
35
+ # rubocop:disable Lint/UnusedMethodArgument
36
+ def as_json(options = nil)
39
37
  to_spec
40
38
  end
39
+ # rubocop:enable Lint/UnusedMethodArgument
41
40
 
42
41
  private
43
42
 
43
+ def valid_processed_value?(processed_value)
44
+ ((processed_value.is_a?(Hash) || processed_value.is_a?(Array)) && processed_value.empty?) || processed_value.nil?
45
+ end
46
+
44
47
  def snake_to_camel(snake_str)
45
48
  words = snake_str.to_s.split('_')
46
49
  words[1..].map!(&:capitalize)
@@ -80,7 +80,7 @@ module OasRails
80
80
  if status.to_s =~ /^\d+$/
81
81
  status.to_i
82
82
  else
83
- status = "unprocessable_content" if status == "unprocessable_entity"
83
+ # status = "unprocessable_content" if status == "unprocessable_entity"
84
84
  Rack::Utils::SYMBOL_TO_STATUS_CODE[status.to_sym]
85
85
  end
86
86
  end
@@ -1,3 +1,3 @@
1
1
  module OasRails
2
- VERSION = "0.4.1"
2
+ VERSION = "0.4.2"
3
3
  end
data/lib/oas_rails.rb CHANGED
@@ -9,7 +9,6 @@ module OasRails
9
9
  autoload :Configuration, "oas_rails/configuration"
10
10
  autoload :OasRoute, "oas_rails/oas_route"
11
11
  autoload :Utils, "oas_rails/utils"
12
- autoload :EsquemaBuilder, "oas_rails/esquema_builder"
13
12
 
14
13
  module Builders
15
14
  autoload :OperationBuilder, "oas_rails/builders/operation_builder"
@@ -20,6 +19,7 @@ module OasRails
20
19
  autoload :ParametersBuilder, "oas_rails/builders/parameters_builder"
21
20
  autoload :ParameterBuilder, "oas_rails/builders/parameter_builder"
22
21
  autoload :RequestBodyBuilder, "oas_rails/builders/request_body_builder"
22
+ autoload :EsquemaBuilder, "oas_rails/builders/esquema_builder"
23
23
  end
24
24
 
25
25
  # This module contains all the clases that represent a part of the OAS file.
metadata CHANGED
@@ -1,51 +1,48 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oas_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - a-chacon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-08-11 00:00:00.000000000 Z
11
+ date: 2024-08-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: esquema
14
+ name: method_source
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.1.2
19
+ version: '1.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.1.2
26
+ version: '1.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: method_source
28
+ name: model-to-schema
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.0'
33
+ version: 0.1.1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.0'
40
+ version: 0.1.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rails
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '7.0'
48
- - - ">="
49
46
  - !ruby/object:Gem::Version
50
47
  version: 7.0.0
51
48
  type: :runtime
@@ -53,9 +50,6 @@ dependencies:
53
50
  version_requirements: !ruby/object:Gem::Requirement
54
51
  requirements:
55
52
  - - "~>"
56
- - !ruby/object:Gem::Version
57
- version: '7.0'
58
- - - ">="
59
53
  - !ruby/object:Gem::Version
60
54
  version: 7.0.0
61
55
  - !ruby/object:Gem::Dependency
@@ -101,6 +95,7 @@ files:
101
95
  - lib/generators/oas_rails/config/templates/oas_rails_initializer.rb
102
96
  - lib/oas_rails.rb
103
97
  - lib/oas_rails/builders/content_builder.rb
98
+ - lib/oas_rails/builders/esquema_builder.rb
104
99
  - lib/oas_rails/builders/operation_builder.rb
105
100
  - lib/oas_rails/builders/parameter_builder.rb
106
101
  - lib/oas_rails/builders/parameters_builder.rb
@@ -110,7 +105,6 @@ files:
110
105
  - lib/oas_rails/builders/responses_builder.rb
111
106
  - lib/oas_rails/configuration.rb
112
107
  - lib/oas_rails/engine.rb
113
- - lib/oas_rails/esquema_builder.rb
114
108
  - lib/oas_rails/extractors/oas_route_extractor.rb
115
109
  - lib/oas_rails/extractors/render_response_extractor.rb
116
110
  - lib/oas_rails/extractors/route_extractor.rb
@@ -156,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
156
150
  - !ruby/object:Gem::Version
157
151
  version: '0'
158
152
  requirements: []
159
- rubygems_version: 3.5.9
153
+ rubygems_version: 3.3.3
160
154
  signing_key:
161
155
  specification_version: 4
162
156
  summary: OasRails is a Rails engine for generating automatic interactive documentation
@@ -1,37 +0,0 @@
1
- module OasRails
2
- module EsquemaBuilder
3
- class << self
4
- # Builds a schema for a class when it is used as incoming API data.
5
- #
6
- # @param klass [Class] The class for which the schema is built.
7
- # @return [Hash] The schema as a JSON-compatible hash.
8
- def build_incoming_schema(klass:)
9
- configure_common_settings
10
- Esquema.configuration.excluded_columns = OasRails.config.excluded_columns_incoming
11
-
12
- Esquema::Builder.new(klass).build_schema.as_json
13
- end
14
-
15
- # Builds a schema for a class when it is used as outgoing API data.
16
- #
17
- # @param klass [Class] The class for which the schema is built.
18
- # @return [Hash] The schema as a JSON-compatible hash.
19
- def build_outgoing_schema(klass:)
20
- configure_common_settings
21
- Esquema.configuration.excluded_columns = OasRails.config.excluded_columns_outgoing
22
-
23
- Esquema::Builder.new(klass).build_schema.as_json
24
- end
25
-
26
- private
27
-
28
- # Configures common settings for schema building.
29
- #
30
- # Excludes associations and foreign keys from the schema.
31
- def configure_common_settings
32
- Esquema.configuration.exclude_associations = true
33
- Esquema.configuration.exclude_foreign_keys = true
34
- end
35
- end
36
- end
37
- end