json_schemer-rails 0.3.1 → 0.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 81e5c4230f5eb7374ab6ce0f2b030f4e9230b3a5cabf8bf3bf9ea882e68fda2e
4
- data.tar.gz: d70bf354f52ff231a6a1fbe672bccccf7ebbf5a7d1cb7c2ccd095dba00fc3616
3
+ metadata.gz: '048c58d06a9c16f8bcac041018539e4b4c08db4b4b74a9a1eff70dbdc12719b2'
4
+ data.tar.gz: ba64d94c3670cc530ed0acbe5f7b3117fbca39d5f7791e65ff6ed7448a247892
5
5
  SHA512:
6
- metadata.gz: 641f4f82beb73c0cf6b5791da660b33427d8099cbab1ef9a67242863a19d957f9e9765e2a538ed03dd48ef377af44d6f7381a75dab19a0e96de4a08ff21bf3e6
7
- data.tar.gz: 5fb9a0fdc0d8824f34df4aa5dde5aadb04ea9da1b4c1014a642991b0a48e987bbcedeca1fbec3d3b54c87fdb91c84acb27a751b9d493108e67c8a4c04257cc84
6
+ metadata.gz: cbfcb80dd0a99367462f339d8fba75882aa5ba980e11b97a23b778cb8807e5648bd9907dc2aac2ae7bbdbbf4e88f96ee616375e012ad9b1bc87af80285456fa4
7
+ data.tar.gz: 7e30a251a6572af9cd86bc888ba4c68b23d9a8e4343b64e7c8fdb1be30abdde5c44c23221d2cb83fe0d2bfb2f7021baa94ad14440401508fafc971b0114e20c3
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # JsonSchemer::Rails
1
+ # JSONSchemer::Rails
2
2
 
3
3
  [![Ruby](https://img.shields.io/badge/ruby-%3E%3D%203.4.0-ruby.svg)](https://www.ruby-lang.org/en/)
4
4
  [![Rails](https://img.shields.io/badge/rails-%3E%3D%208.0-red.svg)](https://rubyonrails.org/)
@@ -90,7 +90,7 @@ paths:
90
90
 
91
91
  ```ruby
92
92
  class UsersController < ApplicationController
93
- include JsonSchemer::Rails::Controller
93
+ include JSONSchemer::Rails::Controller
94
94
 
95
95
  before_action :validate_from_openapi, only: [:create, :update]
96
96
 
@@ -111,7 +111,7 @@ end
111
111
  ```ruby
112
112
  class UsersController < ApplicationController
113
113
  def create
114
- validator = JsonSchemer::Rails::OpenApiValidator.new(request)
114
+ validator = JSONSchemer::Rails::OpenApiValidator.new(request)
115
115
 
116
116
  # Validate and cast parameters
117
117
  validator.validated_params
@@ -134,7 +134,7 @@ end
134
134
  By default, the validator looks for `openapi.yml` in your Rails root. You can specify a different location:
135
135
 
136
136
  ```ruby
137
- validator = JsonSchemer::Rails::OpenApiValidator.new(
137
+ validator = JSONSchemer::Rails::OpenApiValidator.new(
138
138
  request,
139
139
  open_api_filename: Rails.root.join('config', 'api_schema.yml')
140
140
  )
@@ -199,11 +199,11 @@ params[:limit] # => "10" (String, not cast because OpenAPI handles this differe
199
199
 
200
200
  ## Error Handling
201
201
 
202
- When validation fails, a `JsonSchemer::Rails::RequestValidationError` is raised:
202
+ When validation fails, a `JSONSchemer::Rails::RequestValidationError` is raised:
203
203
 
204
204
  ```ruby
205
205
  class ApplicationController < ActionController::API
206
- rescue_from JsonSchemer::Rails::RequestValidationError do |exception|
206
+ rescue_from JSONSchemer::Rails::RequestValidationError do |exception|
207
207
  render json: { error: exception.message }, status: :unprocessable_entity
208
208
  end
209
209
  end
@@ -249,7 +249,7 @@ end
249
249
 
250
250
  ```ruby
251
251
  class UsersController < ApplicationController
252
- include JsonSchemer::Rails::Controller
252
+ include JSONSchemer::Rails::Controller
253
253
 
254
254
  before_action :validate_from_openapi, except: [:index]
255
255
 
@@ -268,7 +268,7 @@ end
268
268
  ```ruby
269
269
  class UsersController < ApplicationController
270
270
  def create
271
- validator = JsonSchemer::Rails::OpenApiValidator.new(request)
271
+ validator = JSONSchemer::Rails::OpenApiValidator.new(request)
272
272
 
273
273
  # Validate parameters first
274
274
  validator.validated_params
@@ -327,4 +327,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
327
327
 
328
328
  Built with [json_schemer](https://github.com/davishmcclurg/json_schemer) by Davis W. McGuire.
329
329
 
330
- Developed by [Stanford Digital Library](https://library.stanford.edu/).
330
+ Developed by [Stanford Digital Library](https://library.stanford.edu/).
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module JsonSchemer
3
+ module JSONSchemer
4
4
  module Rails
5
5
  # Mixin for controllers.
6
6
  # usage:
7
- # include JsonSchemer::Rails::Controller
7
+ # include JSONSchemer::Rails::Controller
8
8
  # before_action :validate_from_openapi
9
9
  module Controller
10
10
  def validate_from_openapi
@@ -2,9 +2,8 @@
2
2
 
3
3
  require "cgi"
4
4
  require "yaml"
5
- require "json_schemer"
6
5
 
7
- module JsonSchemer
6
+ module JSONSchemer
8
7
  module Rails
9
8
  # This validates a request against the OpenAPI specification
10
9
  class OpenApiValidator
@@ -99,7 +98,7 @@ module JsonSchemer
99
98
  end
100
99
  end
101
100
 
102
- def validate_path_param(spec) # rubocop:disable Metrics/AbcSize
101
+ def validate_path_param(spec) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
103
102
  result = request.path_parameters[spec["name"].to_sym]
104
103
  ref = spec.dig("schema", "$ref")
105
104
  validator = if ref
@@ -108,6 +107,12 @@ module JsonSchemer
108
107
  JSONSchemer.schema(spec["schema"])
109
108
  end
110
109
 
110
+ begin
111
+ result = Integer(result) if validator.fetch("type").value == "integer"
112
+ rescue ArgumentError
113
+ raise RequestValidationError, "#{result} is not an integer"
114
+ end
115
+
111
116
  errors = validator.validate(result).to_a
112
117
 
113
118
  raise RequestValidationError, errors.join(", ") unless errors.empty?
@@ -122,10 +127,12 @@ module JsonSchemer
122
127
  end
123
128
 
124
129
  def json_ref_for_path
125
- params = request.path_parameters.except(:controller, :action)
130
+ params = request.path_parameters.except(:controller, :action, :format)
126
131
  path = CGI.unescape(request.path).tr(" ", "+")
127
- params.excluding(:controller, :action, :format).each_key do |parameter|
128
- path.gsub!(params[parameter], "%7B#{parameter}%7D") if params[parameter]
132
+ params.each_key do |parameter|
133
+ next unless path.match?(%r{/#{Regexp.escape(params[parameter])}(/|$)})
134
+
135
+ path.sub!("/#{params[parameter]}", "/%7B#{parameter}%7D")
129
136
  end
130
137
  path.gsub("/", "~1")
131
138
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module JsonSchemer
3
+ module JSONSchemer
4
4
  module Rails
5
5
  # Raised when the OpenAPI specification is violated
6
6
  class RequestValidationError < StandardError; end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module JsonSchemer
3
+ module JSONSchemer
4
4
  module Rails
5
- VERSION = "0.3.1"
5
+ VERSION = "0.4.1"
6
6
  end
7
7
  end
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "rails/version"
4
- require_relative "rails/validation_error"
5
- require_relative "rails/open_api_validator"
6
- require_relative "rails/controller"
3
+ require "json_schemer"
4
+ require "zeitwerk"
7
5
 
8
- module JsonSchemer
6
+ Zeitwerk::Loader.for_gem_extension(JSONSchemer).setup
7
+
8
+ module JSONSchemer
9
9
  module Rails
10
10
  class Error < StandardError; end
11
11
  # Your code goes here...
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json_schemer-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Coyne
@@ -37,7 +37,21 @@ dependencies:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
39
  version: '8.0'
40
- description: Rails integration for JsonSchemer. Validates OpenAPI
40
+ - !ruby/object:Gem::Dependency
41
+ name: zeitwerk
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ description: Rails integration for JSONSchemer. Validates OpenAPI
41
55
  email:
42
56
  - jcoyne@justincoyne.com
43
57
  executables: []
@@ -49,7 +63,7 @@ files:
49
63
  - lib/json_schemer/rails.rb
50
64
  - lib/json_schemer/rails/controller.rb
51
65
  - lib/json_schemer/rails/open_api_validator.rb
52
- - lib/json_schemer/rails/validation_error.rb
66
+ - lib/json_schemer/rails/request_validation_error.rb
53
67
  - lib/json_schemer/rails/version.rb
54
68
  homepage: https://github.com/sul-dlss/json_schemer-rails
55
69
  licenses: []
@@ -72,7 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
72
86
  - !ruby/object:Gem::Version
73
87
  version: '0'
74
88
  requirements: []
75
- rubygems_version: 4.0.3
89
+ rubygems_version: 4.0.8
76
90
  specification_version: 4
77
- summary: Rails integration for JsonSchemer. Validates OpenAPI
91
+ summary: Rails integration for JSONSchemer. Validates OpenAPI
78
92
  test_files: []