sinatra-param-validator 0.2.0 → 0.3.0

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: dda1b5487b870b26f4b2ca5c6a575a57c91441ac319b78567295ab0b4517a8bc
4
- data.tar.gz: 331f3cace8d87a35fa410ae28c3df15e07f851d276ad2a2173ce799572cfae04
3
+ metadata.gz: 54d6ed44b4046ecc9fd330aef4e719cbe10d4a953a8d07a80226822f59ed66d7
4
+ data.tar.gz: e70164b07f23972aeffa920719c6de35baff4576eed46260944daf3a1b5e404b
5
5
  SHA512:
6
- metadata.gz: caceb492da8562135850ecf1c7a77ecd4fd850ab31d714ff1fa555c4316e63074aa7ed9f75e331336ddf30c1921a5d3cc2f895447d7ec76f3767b46448e6a7c4
7
- data.tar.gz: 729686317687d72ff23ce570991a88e6731314320f3e702ba631c7452b75e117997fc30207c2cee7be52c1aa458424311666b734061bb7c3aefb6911b07a9dc2
6
+ metadata.gz: d4d54fc8f4d76d1499d9c15adec02e35ff2f7c36bf99f5606d15b60a579e45da1c0905624c12be5e4a01b645670a5f23603191cf87fd6be0fd3541c1f94f6afb
7
+ data.tar.gz: c1c40e3b72dcb644adaf9437b0b7b67cfec8e33efad17ded176b74f3d6cf942fd76d3e4b7bf47f11442ebbb279d08907678e7600813b0b8da37c13736e0fdef4
data/CHANGELOG.md CHANGED
@@ -1,5 +1,34 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.3.0] - 2022-06-08
4
+
5
+ - Don't create entries in `params` for parameters that are not passed
6
+ - Don't set validator type during definition
7
+ - Add unique validator conditionals for each validator:
8
+ - validate
9
+ - validate_form
10
+ - validate_url_param
11
+
12
+ ## [0.2.0] - 2022-06-08
13
+
14
+ - Add validators:
15
+ - Standard
16
+ - URL Parameter
17
+ - Form
18
+ - Add parameters:
19
+ - Array
20
+ - Boolean
21
+ - Date
22
+ - Float
23
+ - Hash
24
+ - Integer
25
+ - String
26
+ - Time
27
+ - Add rules:
28
+ - All or none of
29
+ - Any of
30
+ - One of
31
+
3
32
  ## [0.1.0] - 2022-05-16
4
33
 
5
34
  - Initial release
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sinatra-param-validator (0.2.0)
4
+ sinatra-param-validator (0.3.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -15,7 +15,7 @@ If bundler is not being used to manage dependencies, install the gem by executin
15
15
  ## Sample Usage
16
16
 
17
17
  ```ruby
18
- validator identifier: :user_id do
18
+ validator :user_id do
19
19
  param :id, Integer, required: true
20
20
  end
21
21
 
@@ -23,7 +23,7 @@ get '/user/:id', validate: :user_id do
23
23
  # ...
24
24
  end
25
25
 
26
- validator identifier: :new_user do
26
+ validator :new_user do
27
27
  param :name, String, required: true
28
28
  param :age, Integer, required: true, min: 0
29
29
  end
@@ -113,12 +113,16 @@ There are two other provided validators, that handle failure differently:
113
113
  * will provide a JSON object with errors to an XHR request
114
114
  * will `halt 400`
115
115
 
116
- These validators can be set when a validator is defined:
116
+ These validators can be invoked with a different conditional on the route:
117
117
 
118
118
  ```ruby
119
- validator type: :form, identifier: :new_user do
120
- param :name, String, required: true
121
- param :age, Integer, required: true, min: 0
119
+ post '/new-user', validate_form: :new_user do
120
+ # ...
121
+ end
122
+
123
+
124
+ get '/user/:id', validate_url_param: :user_id do
125
+ # ...
122
126
  end
123
127
  ```
124
128
 
@@ -13,8 +13,9 @@ module Sinatra
13
13
  raise "Filter params failed: #{e}"
14
14
  end
15
15
 
16
- def validate(identifier, args = {})
17
- validator = settings.validator_definitions.get(identifier)
16
+ def validate(klass, identifier, args = {})
17
+ definition = settings.validator_definitions.get(identifier)
18
+ validator = klass.new(&definition)
18
19
  validator.run(self, *args)
19
20
  validator.handle_failure(self) unless validator.success?
20
21
  end
@@ -21,7 +21,7 @@ module Sinatra
21
21
 
22
22
  def param(key, type, **args)
23
23
  parameter = Parameter.new(@context.params[key], type, **args)
24
- @context.params[key] = parameter.coerced
24
+ @context.params[key] = parameter.coerced if @context.params.key? key
25
25
  @errors[key] = parameter.errors unless parameter.valid?
26
26
  rescue NameError
27
27
  raise 'Invalid parameter type'
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sinatra
4
+ module ParamValidator
5
+ # Helpers for validating parameters
6
+ module SnakeCase
7
+ def snake_case(string)
8
+ string.gsub(/([a-z\d])([A-Z])/, '\1_\2').downcase
9
+ end
10
+ end
11
+ end
12
+ end
@@ -1,9 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'validation_failed_error'
4
- require_relative 'validator/form'
5
- require_relative 'validator/url_param'
6
-
7
3
  module Sinatra
8
4
  module ParamValidator
9
5
  # Definition of a single validator
@@ -26,6 +22,21 @@ module Sinatra
26
22
  def success?
27
23
  @errors.empty?
28
24
  end
25
+
26
+ @validators = []
27
+
28
+ class << self
29
+ attr_reader :validators
30
+
31
+ def inherited(subclass)
32
+ super
33
+ @validators << subclass
34
+ end
35
+ end
29
36
  end
30
37
  end
31
38
  end
39
+
40
+ require_relative 'validation_failed_error'
41
+ require_relative 'validator/form'
42
+ require_relative 'validator/url_param'
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Sinatra
4
4
  module ParamValidator
5
- VERSION = '0.2.0'
5
+ VERSION = '0.3.0'
6
6
  end
7
7
  end
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'param_validator/camelize'
3
4
  require_relative 'param_validator/definitions'
4
5
  require_relative 'param_validator/helpers'
5
6
  require_relative 'param_validator/parser'
7
+ require_relative 'param_validator/snake_case'
6
8
  require_relative 'param_validator/validator'
7
9
  require_relative 'param_validator/version'
8
10
 
@@ -11,19 +13,29 @@ module Sinatra
11
13
  module ParamValidator
12
14
  include Camelize
13
15
 
14
- def validator(identifier:, type: nil, &definition)
15
- class_name = 'Sinatra::ParamValidator::Validator'
16
- class_name = "#{class_name}::#{camelize(type)}" unless type.nil?
17
- settings.validator_definitions.add(identifier, Object.const_get(class_name).new(&definition))
16
+ def validator(identifier, &definition)
17
+ settings.validator_definitions.add(identifier, definition)
18
18
  end
19
19
 
20
- def self.registered(app)
21
- app.helpers Helpers
22
- app.before { filter_params }
23
- app.set(:validator_definitions, Definitions.new)
24
- app.set(:validate) do |*identifiers|
25
- condition do
26
- identifiers.each { |identifier| validate identifier }
20
+ class << self
21
+ include SnakeCase
22
+
23
+ def registered(app)
24
+ app.helpers Helpers
25
+ app.before { filter_params }
26
+ app.set(:validator_definitions, Definitions.new)
27
+ validator_conditional app, :validate, Sinatra::ParamValidator::Validator
28
+
29
+ Sinatra::ParamValidator::Validator.validators.each do |validator|
30
+ validator_conditional app, :"validate_#{snake_case(validator.to_s.split('::').last)}", validator
31
+ end
32
+ end
33
+
34
+ def validator_conditional(app, name, klass)
35
+ app.set(name) do |*identifiers|
36
+ condition do
37
+ identifiers.each { |identifier| validate klass, identifier }
38
+ end
27
39
  end
28
40
  end
29
41
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra-param-validator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rick Selby
@@ -157,6 +157,7 @@ files:
157
157
  - lib/sinatra/param_validator/rule/all_or_none_of.rb
158
158
  - lib/sinatra/param_validator/rule/any_of.rb
159
159
  - lib/sinatra/param_validator/rule/one_of.rb
160
+ - lib/sinatra/param_validator/snake_case.rb
160
161
  - lib/sinatra/param_validator/validation_failed_error.rb
161
162
  - lib/sinatra/param_validator/validator.rb
162
163
  - lib/sinatra/param_validator/validator/form.rb