jsapi 0.5.0 → 0.6.1

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.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/lib/jsapi/controller/methods.rb +39 -13
  3. data/lib/jsapi/controller/parameters.rb +25 -23
  4. data/lib/jsapi/controller/response.rb +35 -22
  5. data/lib/jsapi/dsl/class_methods.rb +18 -10
  6. data/lib/jsapi/dsl/definitions.rb +11 -0
  7. data/lib/jsapi/dsl/openapi/callbacks.rb +34 -0
  8. data/lib/jsapi/dsl/openapi/examples.rb +32 -0
  9. data/lib/jsapi/dsl/openapi.rb +2 -0
  10. data/lib/jsapi/dsl/operation.rb +1 -1
  11. data/lib/jsapi/dsl/parameter.rb +1 -1
  12. data/lib/jsapi/dsl/request_body.rb +1 -1
  13. data/lib/jsapi/dsl/response.rb +1 -1
  14. data/lib/jsapi/dsl.rb +1 -3
  15. data/lib/jsapi/helpers/invalid_value_helper.rb +17 -0
  16. data/lib/jsapi/invalid_argument_error.rb +12 -0
  17. data/lib/jsapi/invalid_value_error.rb +12 -0
  18. data/lib/jsapi/json/object.rb +15 -14
  19. data/lib/jsapi/json.rb +1 -1
  20. data/lib/jsapi/meta/{attributes/class_methods.rb → base/attributes.rb} +2 -2
  21. data/lib/jsapi/meta/base/model.rb +44 -0
  22. data/lib/jsapi/meta/base/reference.rb +36 -0
  23. data/lib/jsapi/meta/{attributes → base}/type_caster.rb +2 -2
  24. data/lib/jsapi/meta/base.rb +4 -40
  25. data/lib/jsapi/meta/callable/symbol_evaluator.rb +30 -0
  26. data/lib/jsapi/meta/callable/symbol_sequence_evaluator.rb +29 -0
  27. data/lib/jsapi/meta/callable.rb +28 -0
  28. data/lib/jsapi/meta/defaults.rb +28 -0
  29. data/lib/jsapi/meta/definitions.rb +35 -29
  30. data/lib/jsapi/meta/openapi/callback/model.rb +1 -1
  31. data/lib/jsapi/meta/openapi/callback/reference.rb +1 -1
  32. data/lib/jsapi/meta/openapi/contact.rb +1 -1
  33. data/lib/jsapi/meta/openapi/example/model.rb +1 -1
  34. data/lib/jsapi/meta/openapi/example/reference.rb +1 -1
  35. data/lib/jsapi/meta/openapi/external_documentation.rb +1 -1
  36. data/lib/jsapi/meta/openapi/header/model.rb +17 -2
  37. data/lib/jsapi/meta/openapi/header/reference.rb +1 -1
  38. data/lib/jsapi/meta/openapi/info.rb +1 -1
  39. data/lib/jsapi/meta/openapi/license.rb +1 -1
  40. data/lib/jsapi/meta/openapi/link/model.rb +1 -1
  41. data/lib/jsapi/meta/openapi/link/reference.rb +1 -1
  42. data/lib/jsapi/meta/openapi/oauth_flow.rb +2 -2
  43. data/lib/jsapi/meta/openapi/root.rb +6 -20
  44. data/lib/jsapi/meta/openapi/security_requirement.rb +2 -2
  45. data/lib/jsapi/meta/openapi/security_scheme/base.rb +1 -1
  46. data/lib/jsapi/meta/openapi/security_scheme.rb +1 -1
  47. data/lib/jsapi/meta/openapi/server.rb +1 -1
  48. data/lib/jsapi/meta/openapi/server_variable.rb +1 -1
  49. data/lib/jsapi/meta/openapi/tag.rb +1 -1
  50. data/lib/jsapi/meta/operation.rb +21 -24
  51. data/lib/jsapi/meta/parameter/model.rb +4 -3
  52. data/lib/jsapi/meta/parameter/reference.rb +1 -1
  53. data/lib/jsapi/meta/property.rb +9 -3
  54. data/lib/jsapi/meta/request_body/model.rb +8 -3
  55. data/lib/jsapi/meta/request_body/reference.rb +1 -1
  56. data/lib/jsapi/meta/response/model.rb +9 -4
  57. data/lib/jsapi/meta/response/reference.rb +1 -1
  58. data/lib/jsapi/meta/schema/additional_properties.rb +5 -6
  59. data/lib/jsapi/meta/schema/base.rb +13 -7
  60. data/lib/jsapi/meta/schema/discriminator.rb +1 -9
  61. data/lib/jsapi/meta/schema/object.rb +27 -4
  62. data/lib/jsapi/meta/schema/reference.rb +1 -1
  63. data/lib/jsapi/meta/schema.rb +12 -5
  64. data/lib/jsapi/meta.rb +3 -5
  65. data/lib/jsapi/model/attributes.rb +10 -4
  66. data/lib/jsapi/model/base.rb +1 -1
  67. data/lib/jsapi/model/nestable.rb +25 -10
  68. data/lib/jsapi/version.rb +1 -1
  69. data/lib/jsapi.rb +4 -0
  70. metadata +15 -11
  71. data/lib/jsapi/dsl/callbacks.rb +0 -32
  72. data/lib/jsapi/dsl/examples.rb +0 -30
  73. data/lib/jsapi/meta/attributes.rb +0 -4
  74. data/lib/jsapi/meta/base_reference.rb +0 -34
  75. data/lib/jsapi/meta/invalid_argument_error.rb +0 -12
  76. data/lib/jsapi/meta/method_chain.rb +0 -32
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsapi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Denis Göller
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-08-31 00:00:00.000000000 Z
11
+ date: 2024-09-17 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Jsapi can be used to read requests, produce responses and create OpenAPI
14
14
  documents
@@ -26,20 +26,23 @@ files:
26
26
  - lib/jsapi/controller/parameters_invalid.rb
27
27
  - lib/jsapi/controller/response.rb
28
28
  - lib/jsapi/dsl.rb
29
- - lib/jsapi/dsl/callbacks.rb
30
29
  - lib/jsapi/dsl/class_methods.rb
31
30
  - lib/jsapi/dsl/definitions.rb
32
31
  - lib/jsapi/dsl/error.rb
33
- - lib/jsapi/dsl/examples.rb
34
32
  - lib/jsapi/dsl/node.rb
35
33
  - lib/jsapi/dsl/openapi.rb
36
34
  - lib/jsapi/dsl/openapi/callback.rb
35
+ - lib/jsapi/dsl/openapi/callbacks.rb
36
+ - lib/jsapi/dsl/openapi/examples.rb
37
37
  - lib/jsapi/dsl/openapi/root.rb
38
38
  - lib/jsapi/dsl/operation.rb
39
39
  - lib/jsapi/dsl/parameter.rb
40
40
  - lib/jsapi/dsl/request_body.rb
41
41
  - lib/jsapi/dsl/response.rb
42
42
  - lib/jsapi/dsl/schema.rb
43
+ - lib/jsapi/helpers/invalid_value_helper.rb
44
+ - lib/jsapi/invalid_argument_error.rb
45
+ - lib/jsapi/invalid_value_error.rb
43
46
  - lib/jsapi/json.rb
44
47
  - lib/jsapi/json/array.rb
45
48
  - lib/jsapi/json/boolean.rb
@@ -50,15 +53,17 @@ files:
50
53
  - lib/jsapi/json/string.rb
51
54
  - lib/jsapi/json/value.rb
52
55
  - lib/jsapi/meta.rb
53
- - lib/jsapi/meta/attributes.rb
54
- - lib/jsapi/meta/attributes/class_methods.rb
55
- - lib/jsapi/meta/attributes/type_caster.rb
56
56
  - lib/jsapi/meta/base.rb
57
- - lib/jsapi/meta/base_reference.rb
57
+ - lib/jsapi/meta/base/attributes.rb
58
+ - lib/jsapi/meta/base/model.rb
59
+ - lib/jsapi/meta/base/reference.rb
60
+ - lib/jsapi/meta/base/type_caster.rb
61
+ - lib/jsapi/meta/callable.rb
62
+ - lib/jsapi/meta/callable/symbol_evaluator.rb
63
+ - lib/jsapi/meta/callable/symbol_sequence_evaluator.rb
64
+ - lib/jsapi/meta/defaults.rb
58
65
  - lib/jsapi/meta/definitions.rb
59
66
  - lib/jsapi/meta/existence.rb
60
- - lib/jsapi/meta/invalid_argument_error.rb
61
- - lib/jsapi/meta/method_chain.rb
62
67
  - lib/jsapi/meta/openapi.rb
63
68
  - lib/jsapi/meta/openapi/callback.rb
64
69
  - lib/jsapi/meta/openapi/callback/model.rb
@@ -147,7 +152,6 @@ licenses:
147
152
  - MIT
148
153
  metadata:
149
154
  homepage_uri: https://github.com/dmgoeller/jsapi
150
- source_code_uri: https://github.com/dmgoeller/jsapi
151
155
  post_install_message:
152
156
  rdoc_options: []
153
157
  require_paths:
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jsapi
4
- module DSL
5
- module Callbacks
6
- # Defines an \OpenAPI callback or refers a reusable callback.
7
- #
8
- # # define a callback
9
- # callback 'foo' do
10
- # operation '{$request.query.foo}'
11
- # end
12
- #
13
- # # refer a reusable callback
14
- # callback ref: 'foo'
15
- #
16
- # Refers the reusable callback with the same name if neither any
17
- # keywords nor a block is specified.
18
- #
19
- # callback 'foo'
20
- #
21
- def callback(name = nil, **keywords, &block)
22
- _define('callback', name&.inspect) do
23
- name = keywords[:ref] if name.nil?
24
- keywords = { ref: name } unless keywords.any? || block
25
-
26
- callback_model = _meta_model.add_callback(name, keywords)
27
- _eval(callback_model, OpenAPI::Callback, &block)
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jsapi
4
- module DSL
5
- module Examples
6
- # Adds an example.
7
- #
8
- # example 'foo', value: 'bar'
9
- #
10
- # example 'foo'
11
- #
12
- # The default name is <code>'default'</code>.
13
- def example(name_or_value = nil, **keywords, &block)
14
- _define('example', name_or_value&.inspect) do
15
- if keywords.any? || block
16
- # example 'foo', value: 'bar', ...
17
- name = name_or_value
18
- else
19
- # example 'foo'
20
- name = nil
21
- keywords = { value: name_or_value }
22
- end
23
-
24
- example = _meta_model.add_example(name, keywords)
25
- Node.new(example, &block) if block
26
- end
27
- end
28
- end
29
- end
30
- end
@@ -1,4 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'attributes/type_caster'
4
- require_relative 'attributes/class_methods'
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jsapi
4
- module Meta
5
- # The base reference class.
6
- class BaseReference < Base
7
- ##
8
- # :attr: ref
9
- # The name of the referred object.
10
- attribute :ref, String
11
-
12
- # Returns the name of the method to be invoked to look up the referred object
13
- # in a Definitions instance.
14
- def self.lookup_method_name
15
- @lookup_method_name ||=
16
- name.delete_suffix('::Reference').demodulize.underscore
17
- end
18
-
19
- def reference? # :nodoc:
20
- true
21
- end
22
-
23
- # Resolves +ref+ by looking up the object with that name in +definitions+.
24
- #
25
- # Raises a ReferenceError if +ref+ could not be resolved.
26
- def resolve(definitions)
27
- object = definitions.send(self.class.lookup_method_name, ref)
28
- raise ReferenceError, ref if object.nil?
29
-
30
- object.resolve(definitions)
31
- end
32
- end
33
- end
34
- end
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jsapi
4
- module Meta
5
- # Raised when an argument isn't contained in the list of valid values.
6
- class InvalidArgumentError < ArgumentError
7
- def initialize(name, value, values)
8
- super("#{name} must be one of #{values.inspect}, is #{value.inspect}")
9
- end
10
- end
11
- end
12
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Jsapi
4
- module Meta
5
- class MethodChain
6
- # The methods to be called in chain.
7
- attr_reader :methods
8
-
9
- def initialize(methods)
10
- @methods = Array.wrap(methods).flat_map do |method|
11
- next method if method.is_a?(Symbol)
12
-
13
- method.to_s.split('.')
14
- end.map(&:to_sym)
15
- end
16
-
17
- def inspect # :nodoc:
18
- "#<#{self.class.name} #{methods.inspect}>"
19
- end
20
-
21
- # Calls the chained methods on +object+.
22
- def call(object)
23
- return if methods.blank?
24
-
25
- methods.each do |method|
26
- object = object.public_send(method)
27
- end
28
- object
29
- end
30
- end
31
- end
32
- end