sinatra-param-validator 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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