sinatra-validations 1.0.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.
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: []