input_sanitizer 0.2.0 → 0.2.2

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
  SHA1:
3
- metadata.gz: 80975685ea36b822133f114e4f25a86795ab1a84
4
- data.tar.gz: fe52c7a9f8039a61e247cc7634a93d176de4ed32
3
+ metadata.gz: 22a6e4537da366c88f1578e47d886e94319e9104
4
+ data.tar.gz: d039d03743961d3712a8e651f83af62087837231
5
5
  SHA512:
6
- metadata.gz: 3fd6f2abb6f51ddfc1e161568515dcb40800f3eb7c7a28962253040d1aa37052de7b3e15f1f6b0b5b739a54276b1d76b7f66f98289ad4052afb2fd84b264ddbb
7
- data.tar.gz: cfc6ea3add9b7a3d9089e30830e53e1ffa00ec12daacb0d0ced5c6c8eedc05d22d112a2c29c3617c886ee57dd5559bea455901384b18ad78f7d437c681f9d38d
6
+ metadata.gz: 5696a63090cd6e7428669dae8f0536c9ef6d04cf2d0fe040c1f36319172be9d11e7b6e385d57dad12efb1357e1c4992e81d2a27f39bd84fd646ea25265589518
7
+ data.tar.gz: c9a42b2d1ad1b9702d59305a8df143f2a4c3054a6999d24a89c00471b29685cc5cc86d4195c16dd2cb8fa7f54224b6b3c2d5e202ae0d5b1d0e2ed94bd7dea445
data/.gitignore CHANGED
@@ -3,7 +3,6 @@
3
3
  .bundle
4
4
  .config
5
5
  .yardoc
6
- Gemfile.lock
7
6
  InstalledFiles
8
7
  _yardoc
9
8
  coverage
data/.travis.yml CHANGED
@@ -1,12 +1,7 @@
1
1
  language: ruby
2
2
  script: bundle exec rspec spec
3
3
  rvm:
4
- - 1.8.7
5
- - 1.9.2
6
4
  - 1.9.3
7
- - jruby-18mode
5
+ - 2.0.0
6
+ - 2.1.0
8
7
  - jruby-19mode
9
-
10
- # keeps failing
11
- #- rbx-18mode
12
- #- rbx-19mode
data/Gemfile.lock ADDED
@@ -0,0 +1,44 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ input_sanitizer (0.2.2)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ coderay (1.1.0)
10
+ diff-lcs (1.2.5)
11
+ docile (1.1.5)
12
+ method_source (0.8.2)
13
+ multi_json (1.10.1)
14
+ pry (0.10.0)
15
+ coderay (~> 1.1.0)
16
+ method_source (~> 0.8.1)
17
+ slop (~> 3.4)
18
+ rspec (3.0.0)
19
+ rspec-core (~> 3.0.0)
20
+ rspec-expectations (~> 3.0.0)
21
+ rspec-mocks (~> 3.0.0)
22
+ rspec-core (3.0.3)
23
+ rspec-support (~> 3.0.0)
24
+ rspec-expectations (3.0.3)
25
+ diff-lcs (>= 1.2.0, < 2.0)
26
+ rspec-support (~> 3.0.0)
27
+ rspec-mocks (3.0.3)
28
+ rspec-support (~> 3.0.0)
29
+ rspec-support (3.0.3)
30
+ simplecov (0.9.0)
31
+ docile (~> 1.1.0)
32
+ multi_json
33
+ simplecov-html (~> 0.8.0)
34
+ simplecov-html (0.8.0)
35
+ slop (3.6.0)
36
+
37
+ PLATFORMS
38
+ ruby
39
+
40
+ DEPENDENCIES
41
+ input_sanitizer!
42
+ pry
43
+ rspec
44
+ simplecov
data/README.md CHANGED
@@ -19,12 +19,10 @@ Or install it yourself as:
19
19
  ## Usage
20
20
 
21
21
  ```ruby
22
-
23
22
  class PersonSanitizer < InputSanitizer::Sanitizer
24
23
  string :name
25
24
  string :address
26
25
  integer :height
27
- float :weight
28
26
  date :birthday
29
27
  end
30
28
 
@@ -57,7 +55,15 @@ PrivilegedSanitizer.clean({:birthday => '1986-10-06'})
57
55
  data = PrivilegedSanitizer.clean({:account_id => 3})
58
56
  data[:account] # instead of :account_id
59
57
  # => InputSanitizer::KeyNotAllowedError: Key not allowed: account
60
- # => ...
58
+
59
+ # supports custom value converters
60
+ class SomethingSanitizer < InputSanitizer::Sanitizer
61
+ custom :backward, :converter => lambda { |v| v.reverse }
62
+ integer :version
63
+ custom :name, :provide => :version, :converter => lambda { |name, version|
64
+ version < 3 ? name.downcase : name
65
+ }
66
+ end
61
67
  ```
62
68
 
63
69
 
@@ -18,4 +18,5 @@ Gem::Specification.new do |gem|
18
18
 
19
19
  gem.add_development_dependency "rspec"
20
20
  gem.add_development_dependency "simplecov"
21
+ gem.add_development_dependency "pry"
21
22
  end
@@ -20,6 +20,19 @@ module InputSanitizer
20
20
  end
21
21
  end
22
22
 
23
+ class CommaJoinedStringsConverter
24
+ def call(value)
25
+ non_valid = value.gsub(/[a-zA-Z,]/, "")
26
+ if non_valid.empty?
27
+ parts = value.split(",").map(&:to_s)
28
+ else
29
+ invalid_chars = non_valid.split(//)
30
+ invalid_chars_desc = invalid_chars.join(", ")
31
+ raise InputSanitizer::ConversionError.new("Invalid chars: #{invalid_chars_desc}")
32
+ end
33
+ end
34
+ end
35
+
23
36
  class SpecificValuesConverter
24
37
  def initialize(values)
25
38
  @valid_values = values
@@ -25,7 +25,8 @@ class InputSanitizer::Sanitizer
25
25
  collection = hash[:options][:collection]
26
26
  namespace = hash[:options][:namespace]
27
27
  default = hash[:options][:default]
28
- clean_field(field, type, required, collection, namespace, default)
28
+ provide = hash[:options][:provide]
29
+ clean_field(field, type, required, collection, namespace, default, provide)
29
30
  end
30
31
  @performed = true
31
32
  @cleaned.freeze
@@ -105,10 +106,10 @@ class InputSanitizer::Sanitizer
105
106
  array.last.is_a?(Hash) ? array.last : {}
106
107
  end
107
108
 
108
- def clean_field(field, type, required, collection, namespace, default)
109
+ def clean_field(field, type, required, collection, namespace, default, provide)
109
110
  if @data.has_key?(field)
110
111
  begin
111
- @cleaned[field] = convert(field, type, collection, namespace)
112
+ @cleaned[field] = convert(field, type, collection, namespace, provide)
112
113
  rescue InputSanitizer::ConversionError => ex
113
114
  add_error(field, :invalid_value, @data[field], ex.message)
114
115
  end
@@ -132,21 +133,29 @@ class InputSanitizer::Sanitizer
132
133
  add_error(field, :missing, nil, nil)
133
134
  end
134
135
 
135
- def convert(field, type, collection, namespace)
136
+ def convert(field, type, collection, namespace, provide)
136
137
  if collection
137
138
  @data[field].map { |v|
138
- convert_single(type, v, namespace)
139
+ convert_single(type, v, namespace, provide)
139
140
  }
140
141
  else
141
- convert_single(type, @data[field], namespace)
142
+ convert_single(type, @data[field], namespace, provide)
142
143
  end
143
144
  end
144
145
 
145
- def convert_single(type, value, namespace)
146
+ def convert_single(type, value, namespace, provide)
146
147
  if namespace
147
- { namespace => converter(type).call(value[namespace]) }
148
+ { namespace => convert_value(converter(type), value[namespace], provide) }
148
149
  else
149
- converter(type).call(value)
150
+ convert_value(converter(type), value, provide)
151
+ end
152
+ end
153
+
154
+ def convert_value(converter, value, provide)
155
+ if provide
156
+ converter.call(value, @data[provide])
157
+ else
158
+ converter.call(value)
150
159
  end
151
160
  end
152
161
 
@@ -1,3 +1,3 @@
1
1
  module InputSanitizer
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.2"
3
3
  end
@@ -32,35 +32,35 @@ describe InputSanitizer::BooleanConverter do
32
32
  let(:converter) { InputSanitizer::BooleanConverter.new }
33
33
 
34
34
  it "casts 'true' to true" do
35
- converter.call('true').should be_true
35
+ converter.call('true').should eq(true)
36
36
  end
37
37
 
38
38
  it "casts true to true" do
39
- converter.call(true).should be_true
39
+ converter.call(true).should eq(true)
40
40
  end
41
41
 
42
42
  it "casts '1' to true" do
43
- converter.call('1').should be_true
43
+ converter.call('1').should eq(true)
44
44
  end
45
45
 
46
46
  it "casts 'yes' to true" do
47
- converter.call('yes').should be_true
47
+ converter.call('yes').should eq(true)
48
48
  end
49
49
 
50
50
  it "casts 'false' to false" do
51
- converter.call('false').should be_false
51
+ converter.call('false').should eq(false)
52
52
  end
53
53
 
54
54
  it "casts false to false" do
55
- converter.call(false).should be_false
55
+ converter.call(false).should eq(false)
56
56
  end
57
57
 
58
58
  it "casts '0' to false" do
59
- converter.call('0').should be_false
59
+ converter.call('0').should eq(false)
60
60
  end
61
61
 
62
62
  it "casts 'no' to false" do
63
- converter.call('no').should be_false
63
+ converter.call('no').should eq(false)
64
64
  end
65
65
 
66
66
  it "raises error if cannot cast" do
@@ -116,4 +116,8 @@ describe InputSanitizer::TimeConverter do
116
116
  t = Time.now
117
117
  converter.call(t).should == t.utc
118
118
  end
119
+
120
+ it "raises error if value is of invalid type" do
121
+ lambda { converter.call({}) }.should raise_error(InputSanitizer::ConversionError)
122
+ end
119
123
  end
@@ -23,6 +23,10 @@ end
23
23
  describe InputSanitizer::PositiveIntegerConverter do
24
24
  let(:converter) { InputSanitizer::PositiveIntegerConverter.new }
25
25
 
26
+ it "casts string to integer" do
27
+ converter.call("3").should == 3
28
+ end
29
+
26
30
  it "raises error if integer less than zero" do
27
31
  lambda { converter.call("-3") }.should raise_error(InputSanitizer::ConversionError)
28
32
  end
@@ -44,6 +48,18 @@ describe InputSanitizer::CommaJoinedIntegersConverter do
44
48
  end
45
49
  end
46
50
 
51
+ describe InputSanitizer::CommaJoinedStringsConverter do
52
+ let(:converter) { described_class.new }
53
+
54
+ it "parses to array of ids" do
55
+ converter.call("input,Sanitizer,ROCKS").should == ["input", "Sanitizer", "ROCKS"]
56
+ end
57
+
58
+ it "raises on invalid character" do
59
+ lambda { converter.call(":") }.should raise_error(InputSanitizer::ConversionError)
60
+ end
61
+ end
62
+
47
63
  describe InputSanitizer::SpecificValuesConverter do
48
64
  let(:converter) { InputSanitizer::SpecificValuesConverter.new([:a, :b]) }
49
65
 
@@ -14,6 +14,9 @@ class BasicSanitizer < InputSanitizer::Sanitizer
14
14
  time :updated_at
15
15
  custom :cust1, :cust2, :converter => lambda { |v| v.reverse }
16
16
  nested :stuff, :sanitizer => NestedSanitizer, :collection => true, :namespace => :nested
17
+ custom :custom3, :provide => :num, :converter => lambda { |v, num|
18
+ num == 1 ? v.reverse : v
19
+ }
17
20
  end
18
21
 
19
22
  class BrokenCustomSanitizer < InputSanitizer::Sanitizer
@@ -132,7 +135,7 @@ describe InputSanitizer::Sanitizer do
132
135
 
133
136
  cleaned.should have_key(:num)
134
137
  cleaned[:num].should == 23
135
- cleaned[:is_nice].should be_false
138
+ cleaned[:is_nice].should eq(false)
136
139
  end
137
140
 
138
141
  it "overrides inherited fields" do
@@ -183,9 +186,17 @@ describe InputSanitizer::Sanitizer do
183
186
  end
184
187
 
185
188
  it "raises an error when converter is not defined" do
186
- expect do
189
+ lambda do
187
190
  BrokenCustomSanitizer.custom(:x)
188
- end.to raise_error
191
+ end.should raise_error
192
+ end
193
+
194
+ it "provides the converter with requested value" do
195
+ @params = { :custom3 => 'three', :num => 1 }
196
+ cleaned.should have_key(:custom3)
197
+ cleaned.should have_key(:num)
198
+ cleaned[:custom3].should eq('eerht')
199
+ cleaned[:num].should eq(1)
189
200
  end
190
201
  end
191
202
 
data/spec/spec_helper.rb CHANGED
@@ -6,4 +6,15 @@ unless ENV['CI']
6
6
  SimpleCov.start
7
7
  end
8
8
 
9
+ RSpec.configure do |config|
10
+ config.expect_with :rspec do |c|
11
+ c.syntax = :should
12
+ end
13
+
14
+ config.mock_with :rspec do |c|
15
+ c.syntax = :should
16
+ end
17
+ end
18
+
9
19
  require 'input_sanitizer'
20
+ require 'pry'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: input_sanitizer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomek Paczkowski
@@ -10,34 +10,48 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-12-11 00:00:00.000000000 Z
13
+ date: 2014-07-31 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - '>='
19
+ - - ">="
20
20
  - !ruby/object:Gem::Version
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
- - - '>='
26
+ - - ">="
27
27
  - !ruby/object:Gem::Version
28
28
  version: '0'
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: simplecov
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
- - - '>='
33
+ - - ">="
34
34
  - !ruby/object:Gem::Version
35
35
  version: '0'
36
36
  type: :development
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
- - - '>='
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ - !ruby/object:Gem::Dependency
44
+ name: pry
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ type: :development
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
41
55
  - !ruby/object:Gem::Version
42
56
  version: '0'
43
57
  description: Gem to sanitize hash of incoming data
@@ -49,10 +63,11 @@ executables: []
49
63
  extensions: []
50
64
  extra_rdoc_files: []
51
65
  files:
52
- - .gitignore
53
- - .rspec
54
- - .travis.yml
66
+ - ".gitignore"
67
+ - ".rspec"
68
+ - ".travis.yml"
55
69
  - Gemfile
70
+ - Gemfile.lock
56
71
  - LICENSE
57
72
  - README.md
58
73
  - Rakefile
@@ -77,17 +92,17 @@ require_paths:
77
92
  - lib
78
93
  required_ruby_version: !ruby/object:Gem::Requirement
79
94
  requirements:
80
- - - '>='
95
+ - - ">="
81
96
  - !ruby/object:Gem::Version
82
97
  version: '0'
83
98
  required_rubygems_version: !ruby/object:Gem::Requirement
84
99
  requirements:
85
- - - '>='
100
+ - - ">="
86
101
  - !ruby/object:Gem::Version
87
102
  version: '0'
88
103
  requirements: []
89
104
  rubyforge_project:
90
- rubygems_version: 2.0.14
105
+ rubygems_version: 2.2.2
91
106
  signing_key:
92
107
  specification_version: 4
93
108
  summary: Gem to sanitize hash of incoming data
@@ -97,4 +112,3 @@ test_files:
97
112
  - spec/restricted_hash_spec.rb
98
113
  - spec/sanitizer_spec.rb
99
114
  - spec/spec_helper.rb
100
- has_rdoc: