sinatra-validations 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +41 -0
  3. data/lib/sinatra/validations.rb +63 -0
  4. metadata +75 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c5932041f8855fbbbe9b79f215035e2c9b813ba2
4
+ data.tar.gz: 5d3f34f375e466c8debcd7cdf08bae5517bfb110
5
+ SHA512:
6
+ metadata.gz: 9bd9fb4381f522980c740be4013450979863ab5d40cda0d385a322961a51d59ef4fe08bbeb79b5bc34f14492674e5b5f798b2388b0d182f085b5e7babc6a9672
7
+ data.tar.gz: 958a94a3a734292fecfa12b21b29ae32ce7c8fdbc79a4301fae739975777309f04fe0857a4bbbeac1c069226d0690d5f8f8aa1d5ecfd2f836de3d904ab3e652e
@@ -0,0 +1,41 @@
1
+ # Sinatra validations
2
+
3
+ [![Build Status](https://img.shields.io/travis/pedrogimenez/sinatra-validations/master.svg)](https://travis-ci.org/pedrogimenez/sinatra-validations)
4
+
5
+ I use this library to validate parameters in my Sinatra applications.
6
+
7
+ It supports defaults and type coercion.
8
+
9
+ ## Install
10
+
11
+ ```bash
12
+ $ gem "sinatra-validations"
13
+ ```
14
+
15
+ ## Usage
16
+
17
+ ```ruby
18
+ require "sinatra/validations"
19
+
20
+ class Api < Sinatra::Base
21
+ helpers Sinatra::Validations
22
+
23
+ get "/users" do
24
+ validate params, :sort, type: String, default: "desc"
25
+ validate params, :limit, type: Integer, default: 30
26
+ validate params, :filter_by, type: String, default: nil
27
+
28
+ # ...
29
+ end
30
+
31
+ get "/users/:user" do
32
+ validate params, :user, type: String
33
+
34
+ # ...
35
+ end
36
+ end
37
+ ```
38
+
39
+ ## Documentation
40
+
41
+ Read the tests.
@@ -0,0 +1,63 @@
1
+ require "sinatra/base"
2
+
3
+ module Sinatra
4
+ module Validations
5
+ extend self
6
+
7
+ InvalidParameter = Class.new(RuntimeError)
8
+
9
+ def validate(parameters, name, options = {})
10
+ default = options[:default]
11
+ type = options[:type]
12
+ cast = true
13
+
14
+ if options.key?(:cast)
15
+ cast = options[:cast]
16
+ end
17
+
18
+ param = parameters[name]
19
+
20
+ if !param
21
+ if options.key?(:default)
22
+ return param = parameters[name] = default
23
+ end
24
+
25
+ raise InvalidParameter.new("Missing required parameter #{name}")
26
+ end
27
+
28
+ if cast
29
+ if type == Integer
30
+ param = parameters[name] = cast_into_integer(param)
31
+ elsif type == String
32
+ param = parameters[name] = cast_into_string(param)
33
+ else
34
+ raise InvalidParameter.new("Unsupported casting for #{name}")
35
+ end
36
+ end
37
+
38
+ if type && !param.is_a?(type)
39
+ raise InvalidParameter.new("Wrong type for #{name}. Expected #{type}, got #{param.class}")
40
+ end
41
+ end
42
+
43
+ private
44
+
45
+ def cast_into_integer(param)
46
+ begin
47
+ Integer(param)
48
+ rescue
49
+ raise InvalidParameter.new("Unable to convert #{name} into Integer")
50
+ end
51
+ end
52
+
53
+ def cast_into_string(param)
54
+ begin
55
+ String(param)
56
+ rescue
57
+ raise InvalidParameter.new("Unable to convert #{name} into String")
58
+ end
59
+ end
60
+
61
+ private_class_method :cast_into_integer, :cast_into_string
62
+ end
63
+ end
metadata ADDED
@@ -0,0 +1,75 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sinatra-validations
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Pedro Gimenez
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-05-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sinatra
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: Validation of params for Sinatra
42
+ email:
43
+ - me@pedro.bz
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files:
47
+ - README.md
48
+ files:
49
+ - README.md
50
+ - lib/sinatra/validations.rb
51
+ homepage: http://github.com/pedrogimenez/sinatra-validations
52
+ licenses:
53
+ - MIT
54
+ metadata: {}
55
+ post_install_message:
56
+ rdoc_options: []
57
+ require_paths:
58
+ - lib
59
+ required_ruby_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: 2.1.0
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ requirements: []
70
+ rubyforge_project:
71
+ rubygems_version: 2.6.3
72
+ signing_key:
73
+ specification_version: 4
74
+ summary: Validation of params for Sinatra
75
+ test_files: []