eazypi 0.0.12 → 0.0.14.pre.beta1

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: 244892ecf0e137179172b7cda3f78dc7f00292194434f5bb053b6246ad25a765
4
- data.tar.gz: 158bef0052e89bde84bfe05ab5e1a2b059067aba49ddb4f6b697b68659c3aba2
3
+ metadata.gz: 9cc49b18bf8740a18781440ec9ca4087ac0809fa79fb30c5bb0417cd608e827d
4
+ data.tar.gz: 4c181b8acb484189be36c6688680dfd9b1adcc9768561d6061156c8ee8709728
5
5
  SHA512:
6
- metadata.gz: 636c5f7ce57dc6bb2b575e8d99fafe1b5d8f16bda9cab8f9fbf416600d1c319aea03cf3a2e2dcbee830c22ee0a84bc9d12af9ef55ddb034b5102b8543c2f70f0
7
- data.tar.gz: 6d2dcfefbc061d50af85aae149aef8e107c977ace16047a2c72cec27ed32e3eb82b076d7768233f32ac53bfc663d1618b8b8aff523b828e51a07e9d2cd802c98
6
+ metadata.gz: 9cb5ea061e64372ec8c6f9a4407b0e328e02581eff307e6ac7cb42cc2f94b1b28a2b40da0a4a9d32c649f48e37d66996923744d0e42940657f4c1916033129c5
7
+ data.tar.gz: c7c9d57ec1b1ac66fb3ae471fe593ff46a9d5f6c274ec1653c1f79d4a188870a4d176769e21acded8c5c320d8829e1ebaaf415774e31d37da04f7eee552b6119
data/eazypi.gemspec CHANGED
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
29
29
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
30
30
  spec.require_paths = ["lib"]
31
31
 
32
- spec.add_dependency "actionpack", "~> 7.0"
33
- spec.add_dependency "activesupport", "~> 7.0"
32
+ spec.add_dependency "actionpack", "> 7.0", "< 9"
33
+ spec.add_dependency "activesupport", "> 7.0", "< 9"
34
34
  spec.metadata["rubygems_mfa_required"] = "true"
35
35
  end
@@ -18,6 +18,8 @@ module Eazypi
18
18
  op.load(&block)
19
19
 
20
20
  define_method(method_name) do
21
+ @request_body = op.request_body.deserialize(request.content_type, params) if op.request_body?
22
+
21
23
  op.call(self)
22
24
  end
23
25
 
@@ -57,9 +59,15 @@ module Eazypi
57
59
 
58
60
  # Instance methods to be used in your own API controller
59
61
  module InstanceMethods
62
+ def request_body
63
+ @request_body
64
+ end
65
+
60
66
  def respond_with(object, status: :ok)
61
67
  response_type = @current_operation.response_for_response_code(status)
62
68
 
69
+ raise "No response found for #{status}" if response_type.nil?
70
+
63
71
  response_object_type = response_type.object_type_for_content_type
64
72
 
65
73
  render json: Serializer.serialize_object(response_object_type, object), status: status
@@ -40,9 +40,15 @@ module Eazypi
40
40
  @request_body ||= RequestBody.new(&block)
41
41
  end
42
42
 
43
- def response(status_code, &block)
43
+ def request_body?
44
+ !@request_body.nil?
45
+ end
46
+
47
+ def response(status_code = :ok, &block)
44
48
  @responses ||= Responses.new
45
49
 
50
+ status_code = Rack::Utils::SYMBOL_TO_STATUS_CODE[status_code] if status_code.is_a?(Symbol)
51
+
46
52
  @responses.add_response(status_code, &block)
47
53
  end
48
54
 
@@ -20,6 +20,10 @@ module Eazypi
20
20
  end
21
21
  end
22
22
 
23
+ def deserialize(content_type, params)
24
+ @content[content_type].schema.deserialize(params)
25
+ end
26
+
23
27
  def collect_components(**kwargs)
24
28
  @content&.each_value do |media_type|
25
29
  media_type.collect_components(**kwargs)
@@ -10,6 +10,12 @@ module Eazypi
10
10
  @item_schema = item_schema
11
11
  end
12
12
 
13
+ def deserialize(param_value)
14
+ param_value.map do |value|
15
+ @item_schema.deserialize(value)
16
+ end
17
+ end
18
+
13
19
  def collect_components(schemas: nil, **kwargs)
14
20
  schemas&.call(@item_schema)
15
21
 
@@ -13,6 +13,16 @@ module Eazypi
13
13
  @reference = nil
14
14
  end
15
15
 
16
+ def deserialize(param_value)
17
+ @struct ||= ::Struct.new(*@properties.keys.map(&:to_sym))
18
+
19
+ @struct.new(
20
+ *@properties.each_pair.map do |name, attr|
21
+ attr.deserialize(param_value[name])
22
+ end
23
+ )
24
+ end
25
+
16
26
  def reference!(reference)
17
27
  @reference = reference
18
28
  self
@@ -13,6 +13,28 @@ module Eazypi
13
13
  @format = format
14
14
  end
15
15
 
16
+ def deserialize(param_value)
17
+ case type
18
+ when "string"
19
+ case format
20
+ when "date"
21
+ Date.parse(param_value)
22
+ when "time"
23
+ Time.parse(param_value)
24
+ else
25
+ param_value
26
+ end
27
+ when "integer"
28
+ param_value.to_i
29
+ when "number"
30
+ param_value.to_f
31
+ when "boolean"
32
+ param_value
33
+ else
34
+ raise "Unsupported primitive"
35
+ end
36
+ end
37
+
16
38
  def collect_components(**_kwargs); end
17
39
 
18
40
  def to_openapi_spec
data/lib/eazypi/schema.rb CHANGED
@@ -3,13 +3,13 @@
3
3
  module Eazypi
4
4
  # JSON schema
5
5
  module Schema
6
- def self.from_object(object, parent = nil) # rubocop:todo Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/AbcSize
6
+ def self.from_object(object, parents: []) # 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], parent))
12
+ Schema::Array.new(Schema.from_object(object[0], parents: parents))
13
13
  elsif object == String
14
14
  Schema::Primitive.new(type: "string")
15
15
  elsif object == Date
@@ -21,10 +21,10 @@ module Eazypi
21
21
  elsif object == Float
22
22
  Schema::Primitive.new(type: "number")
23
23
  elsif object.respond_to?(:to_schema)
24
- if object == parent
24
+ if parents.include?(object)
25
25
  object.to_schema_reference
26
26
  else
27
- object.to_schema
27
+ object.to_schema(parents)
28
28
  end
29
29
  else
30
30
  raise "Can not convert #{object} to a schema"
@@ -23,6 +23,10 @@ module Eazypi
23
23
  Serializer.serialize_object(type, the_value, context)
24
24
  end
25
25
 
26
+ def deserialize(value)
27
+ type.deserialize(value)
28
+ end
29
+
26
30
  private
27
31
 
28
32
  def serialize_array(the_value)
@@ -84,11 +88,14 @@ module Eazypi
84
88
  @attributes
85
89
  end
86
90
 
87
- def self.to_schema
91
+ def self.to_schema(parents = [])
88
92
  schema = Schema::Object.new(object_name)
89
93
 
90
94
  @attributes.each do |attribute|
91
- schema.property attribute.name.to_s, Schema.from_object(attribute.type, self), required: attribute.required
95
+ schema.property attribute.name.to_s,
96
+ Schema.from_object(attribute.type,
97
+ parents: parents + [self]),
98
+ required: attribute.required
92
99
  end
93
100
 
94
101
  schema
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Eazypi
4
- VERSION = "0.0.12"
4
+ VERSION = "0.0.14-beta1"
5
5
  end
metadata CHANGED
@@ -1,44 +1,54 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eazypi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
4
+ version: 0.0.14.pre.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Samson
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2025-01-15 00:00:00.000000000 Z
10
+ date: 2025-06-01 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: actionpack
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
17
- - - "~>"
16
+ - - ">"
18
17
  - !ruby/object:Gem::Version
19
18
  version: '7.0'
19
+ - - "<"
20
+ - !ruby/object:Gem::Version
21
+ version: '9'
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
23
25
  requirements:
24
- - - "~>"
26
+ - - ">"
25
27
  - !ruby/object:Gem::Version
26
28
  version: '7.0'
29
+ - - "<"
30
+ - !ruby/object:Gem::Version
31
+ version: '9'
27
32
  - !ruby/object:Gem::Dependency
28
33
  name: activesupport
29
34
  requirement: !ruby/object:Gem::Requirement
30
35
  requirements:
31
- - - "~>"
36
+ - - ">"
32
37
  - !ruby/object:Gem::Version
33
38
  version: '7.0'
39
+ - - "<"
40
+ - !ruby/object:Gem::Version
41
+ version: '9'
34
42
  type: :runtime
35
43
  prerelease: false
36
44
  version_requirements: !ruby/object:Gem::Requirement
37
45
  requirements:
38
- - - "~>"
46
+ - - ">"
39
47
  - !ruby/object:Gem::Version
40
48
  version: '7.0'
41
- description:
49
+ - - "<"
50
+ - !ruby/object:Gem::Version
51
+ version: '9'
42
52
  email:
43
53
  - nathan@nathansamson.be
44
54
  executables: []
@@ -83,7 +93,6 @@ metadata:
83
93
  source_code_uri: https://gitlab.com/nathansamson/eazypi
84
94
  changelog_uri: https://gitlab.com/nathansamson/eazypi/-/blob/main/CHANGELOG.md
85
95
  rubygems_mfa_required: 'true'
86
- post_install_message:
87
96
  rdoc_options: []
88
97
  require_paths:
89
98
  - lib
@@ -98,8 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
107
  - !ruby/object:Gem::Version
99
108
  version: '0'
100
109
  requirements: []
101
- rubygems_version: 3.5.22
102
- signing_key:
110
+ rubygems_version: 3.6.2
103
111
  specification_version: 4
104
112
  summary: An opinionated framework to generate OpenAPI API's for Rails
105
113
  test_files: []