sinatra-params-validator 0.0.2 → 0.0.3

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.
data/README.md CHANGED
@@ -66,7 +66,9 @@ class App < Sinatra::Base
66
66
 
67
67
  validation_required :POST, '/group', :params => [
68
68
  { :name => :name, :required => true },
69
- { :name => :private, :type => :boolean, :required => true }
69
+ { :name => :private, :type => :boolean, :required => true },
70
+ { :name => :type, :set => %{public private}, :default => 'public' },
71
+ { :name => :param, :action => [ :trim, :downcase ] }
70
72
  ]
71
73
 
72
74
  post '/group' do
@@ -78,23 +80,32 @@ end
78
80
 
79
81
  Try it out yourself and run this in the root directory `rackup example/app.rb`.
80
82
 
83
+ __NOTE__ Every parameter that is used for that particular request needs to be mentioned in the params
84
+ array. Every parameter that hasn't been mentioned will be delete and won't be available in the sinatra
85
+ `params` variable when your sinatra code block is invoked.
86
+
81
87
  ## Validator class
82
88
 
83
89
  A class with several methods to validate and clean data from sinatra params holder.
84
- Can be used for an adopter for other libraries/frameworks, like rails.
90
+ Can be used as a basis for an adopter for other libraries/frameworks, like rails.
85
91
 
86
92
  ### Examples
87
93
 
88
94
  Initialize class in lazy mode, this means that once a validation fail the following ones are not executed:
89
95
 
90
96
  ```ruby
97
+ require 'rack/validator'
98
+
91
99
  validator = Rack::Validator.new(params)
92
100
  #required_3 is not present
93
101
  validator.required [:required_1, :required_2, :required_3]
94
- validator.trim
95
- validator.downcase [:required_2, :other_param]
102
+ validator.trim :required_1
103
+ validator.downcase :required_2
104
+ validator.downcase :other
96
105
  validator.is_in_range 3, 32, :required_1
97
106
  validator.is_email :contact
107
+ validator.is_boolean :private
108
+ validator.is_set %{public private}, :type
98
109
  validator.matches /[a-z]{2}_[A-Z]{2}|[a-z]{2}/i, :locale
99
110
 
100
111
  if validator.has_errors?
@@ -117,7 +128,14 @@ Available methods:
117
128
  * is_in_range
118
129
  * is_less_equal_than
119
130
  * is_email
131
+ * is_set
120
132
  * is_boolean
121
133
  * matches
134
+ * clean_parameters
122
135
 
123
136
  To see more examples check tests/params_validator_spec.rb
137
+
138
+ ## Contribution
139
+
140
+ If you like the project, fork me and help make sinatra better.
141
+ Make sure to include test cases and explanation for the implemented feature.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.0.3
@@ -6,6 +6,7 @@ module Rack
6
6
  attr_reader :invalid_params
7
7
  attr_reader :missing_params
8
8
  attr_reader :messages
9
+ attr_reader :params
9
10
  attr_accessor :lazy_mode
10
11
 
11
12
  def initialize(params, lazy_mode = true)
@@ -20,12 +21,12 @@ module Rack
20
21
  @invalid_params.length > 0 or @missing_params.length > 0
21
22
  end
22
23
 
23
- def trim
24
- @params.each_key { |k| @params[k] = @params[k].strip if @params[k]}
24
+ def trim(key)
25
+ @params[key.to_s] = @params[key.to_s].strip if @params[key.to_s]
25
26
  end
26
27
 
27
- def downcase(keys)
28
- keys.each { |k| @params[k.to_s] = @params[k.to_s].to_s.downcase if @params[k.to_s]}
28
+ def downcase(key)
29
+ @params[key.to_s] = @params[key.to_s].to_s.downcase if @params[key.to_s]
29
30
  end
30
31
 
31
32
  def required(keys)
@@ -127,6 +128,16 @@ module Rack
127
128
  end
128
129
  end
129
130
 
131
+ def is_set(array, key)
132
+ if lazy_check_disabled
133
+ key = key.to_s
134
+ unless array.include? @params[key]
135
+ @invalid_params.push(key)
136
+ @messages.push("#{key} does not match #{array}")
137
+ end
138
+ end
139
+ end
140
+
130
141
  def is_boolean(key)
131
142
  if lazy_check_disabled
132
143
  key = key.to_s
@@ -147,6 +158,12 @@ module Rack
147
158
  end
148
159
  end
149
160
 
161
+ def clean_parameters(all_parameters)
162
+ @params.each_key do |key|
163
+ @params.delete key.to_s unless all_parameters.include? key.to_s
164
+ end
165
+ end
166
+
150
167
  private
151
168
 
152
169
  def lazy_check_disabled
@@ -179,26 +196,34 @@ module Rack
179
196
  # TODO: Needs a general cleanup!!!
180
197
  def validate_parameters(options)
181
198
  validator = Rack::Validator.new params, false
199
+ all_params = [ ]
182
200
  required_params = [ ]
183
201
  integer_params = [ ]
184
202
  float_params = [ ]
185
203
  email_params = [ ]
186
204
  range_params = [ ]
205
+ set_params = [ ]
187
206
  boolean_params = [ ]
188
207
  matches_params = [ ]
189
208
  default_params = [ ]
209
+ action_params = [ ]
190
210
 
191
211
  options[:params].each do |param|
212
+ all_params << (param[:name].to_s)
192
213
  required_params << (param[:name]) if param[:required]
193
214
  integer_params << (param) if param[:type] == :integer
194
215
  float_params << (param) if param[:type] == :float
195
216
  email_params << (param) if param[:type] == :email
196
217
  range_params << (param) if param[:range]
218
+ set_params << (param) if param[:set]
197
219
  boolean_params << (param) if param[:type] == :boolean
198
220
  matches_params << (param) if param[:matches]
199
221
  default_params << (param) if param[:default]
222
+ action_params << (param) if param[:action]
200
223
  end
201
224
 
225
+ validator.clean_parameters all_params
226
+
202
227
  validator.required required_params
203
228
 
204
229
  integer_params.each do |param|
@@ -213,6 +238,9 @@ module Rack
213
238
  range_params.each do |param|
214
239
  validator.is_in_range param[:range].first, param[:range].last, param[:name] unless params[param[:name].to_s].nil?
215
240
  end
241
+ set_params.each do |param|
242
+ validator.is_set param[:set], param[:name] unless params[param[:name].to_s].nil?
243
+ end
216
244
  boolean_params.each do |param|
217
245
  validator.is_boolean param[:name] unless params[param[:name].to_s].nil?
218
246
  end
@@ -228,6 +256,11 @@ module Rack
228
256
  end
229
257
  end
230
258
 
259
+ action_params.each do |param|
260
+ validator.downcase param[:name] if param[:action].include? :downcase
261
+ validator.trim param[:name] if param[:action].include? :trim
262
+ end
263
+
231
264
  if validator.has_errors?
232
265
  @env['validator.missing'] = validator.missing_params
233
266
  @env['validator.invalid'] = validator.invalid_params
@@ -3,7 +3,7 @@ $: << File.dirname(__FILE__) + "/lib"
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "sinatra-params-validator"
5
5
  spec.version = IO.read("VERSION")
6
- spec.authors = ["tsov", "lube8buy"]
6
+ spec.authors = ["tsov", "lube8uy"]
7
7
  spec.email = "tsov@me.com"
8
8
  spec.homepage = "http://github.com/tsov/#{spec.name}"
9
9
  spec.summary = "A Sinatra Module to validate incoming parameters"
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra-params-validator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - tsov
9
- - lube8buy
9
+ - lube8uy
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-05-30 00:00:00.000000000 Z
13
+ date: 2013-05-31 00:00:00.000000000 Z
14
14
  dependencies: []
15
15
  description: This sinatra module validates the incoming parameter and lets you configure
16
16
  the pattern.