trafaret 1.5.6 → 1.5.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.rst +18 -1
- data/lib/trafaret.rb +1 -0
- data/lib/trafaret/constructor.rb +5 -2
- data/lib/trafaret/uri_email.rb +38 -0
- data/lib/trafaret/validator.rb +2 -0
- data/lib/trafaret/validators.rb +6 -2
- data/lib/trafaret/version.rb +1 -1
- data/spec/trafaret_spec.rb +18 -3
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6dfda67413190ab691868072c86fe3fe6c58c8e4
|
4
|
+
data.tar.gz: 3a372f85b3aca6b1229a692ff473645b61dc51ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a6b3348f3a319282df5b87e6daa52bb79e882fcd27935f6b459a31b5e1259c7b622285ba23f1f41eb483c99c6f39cb853e46cfcf48cc2d95077e931a1fdcebca
|
7
|
+
data.tar.gz: 9c3f3730bd78f27eeecb71932ec3eb82d2ebd4f2f9f9bbd43674c01f5d63d861fd22d8ce3e2f5711c2b896badf54d29f3239ae15641ca7fd3b56dced6f0431a2
|
data/README.rst
CHANGED
@@ -60,6 +60,23 @@ If you use custom converter block, you will get `Match` instead of `String`, so
|
|
60
60
|
|
61
61
|
T.string(regex: /\Ayear=(\d+),month=(\d+),day=(\d+)\z/).to {|m| Date.new(*m.to_a[1..3].map(&:to_i)) }.call('year=2012,month=5,day=4').to_s == '2012-05-04'
|
62
62
|
|
63
|
+
URI
|
64
|
+
---
|
65
|
+
|
66
|
+
URI parses URI. Parameter `schemes`, by default == ['http', 'https']::
|
67
|
+
|
68
|
+
t = T.uri(schemes: ['ftp'])
|
69
|
+
t.call('ftp://ftp.ueaysuc.co.uk.edu') == 'ftp://ftp.ueaysuc.co.uk.edu'
|
70
|
+
|
71
|
+
Possible Errors - 'Invalid scheme', 'Invalid URI'.
|
72
|
+
|
73
|
+
Mail
|
74
|
+
----
|
75
|
+
|
76
|
+
Now just checks simple regexp::
|
77
|
+
|
78
|
+
T.email('kuku@example.com').to { |m| m[:name] } == 'kuku'
|
79
|
+
|
63
80
|
Array
|
64
81
|
-----
|
65
82
|
|
@@ -98,4 +115,4 @@ Example::
|
|
98
115
|
|
99
116
|
t = T.tuple(:integer, :string, :nil)
|
100
117
|
t.call([1, 'a', nil]) == [1, 'a', nil]
|
101
|
-
t.call([1, 'a', 3]).dump == {2 => 'Value must be nil'} # Error dumped to pure structures
|
118
|
+
t.call([1, 'a', 3]).dump == {2 => 'Value must be nil'} # Error dumped to pure structures
|
data/lib/trafaret.rb
CHANGED
data/lib/trafaret/constructor.rb
CHANGED
@@ -33,8 +33,11 @@ module Trafaret
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def from_array(params)
|
36
|
-
|
37
|
-
|
36
|
+
if params.size == 1
|
37
|
+
Trafaret::Array.new validator: Trafaret::Constructor.construct_from(params[0])
|
38
|
+
else params.size > 1
|
39
|
+
Trafaret::Tuple.new(*(params.map { |p| Trafaret::Constructor.construct_from(p) }))
|
40
|
+
end
|
38
41
|
end
|
39
42
|
end
|
40
43
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'uri'
|
2
|
+
|
3
|
+
module Trafaret
|
4
|
+
class URI < Validator
|
5
|
+
def prepare
|
6
|
+
@schemes = @options.delete(:schemes) || []
|
7
|
+
end
|
8
|
+
|
9
|
+
def validate(data)
|
10
|
+
uri = ::URI.parse(data)
|
11
|
+
unless @schemes.empty? || @schemes.include?(uri.scheme)
|
12
|
+
failure('Invalid scheme')
|
13
|
+
else
|
14
|
+
uri
|
15
|
+
end
|
16
|
+
rescue ::URI::InvalidURIError
|
17
|
+
failure('Invalid URI')
|
18
|
+
end
|
19
|
+
|
20
|
+
def convert(uri)
|
21
|
+
uri.to_s
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
Uri = URI
|
26
|
+
|
27
|
+
class Email < Trafaret::String
|
28
|
+
REGEX = /\A(?<name>^[-!#$%&'*+\/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+\/=?^_`{}|~0-9A-Z]+)* # dot-atom
|
29
|
+
|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-011\013\014\016-\177])* # quoted-string
|
30
|
+
)@(?<domain>(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?$) # domain
|
31
|
+
|\[(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}\]\z/xi # literal form, ipv4 address (SMTP 4.1.3)
|
32
|
+
|
33
|
+
def prepare
|
34
|
+
super
|
35
|
+
@regex = REGEX
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/trafaret/validator.rb
CHANGED
data/lib/trafaret/validators.rb
CHANGED
@@ -51,13 +51,17 @@ module Trafaret
|
|
51
51
|
end
|
52
52
|
|
53
53
|
class String < Validator
|
54
|
+
def prepare
|
55
|
+
@regex = ::Regexp.compile @options[:regex] if @options[:regex]
|
56
|
+
end
|
57
|
+
|
54
58
|
def validate(data)
|
55
59
|
return failure('Not a String') unless data.is_a? ::String
|
56
60
|
return failure('Should not be blank') if !@options[:allow_blank] && data.empty?
|
57
61
|
return failure('Too short') if @options[:min_length] && data.size < @options[:min_length]
|
58
62
|
return failure('Too long') if @options[:max_length] && data.size > @options[:max_length]
|
59
|
-
if @
|
60
|
-
match = @
|
63
|
+
if @regex
|
64
|
+
match = @regex.match(data)
|
61
65
|
return failure('Does not match') unless match
|
62
66
|
return match
|
63
67
|
end
|
data/lib/trafaret/version.rb
CHANGED
data/spec/trafaret_spec.rb
CHANGED
@@ -39,10 +39,11 @@ describe Trafaret::Base do
|
|
39
39
|
karma: :integer
|
40
40
|
},
|
41
41
|
array: [{id: :integer}],
|
42
|
+
tuple: [:integer, :nil],
|
42
43
|
proc_: proc { |d| d },
|
43
44
|
just_trafaret: T.nil
|
44
45
|
})
|
45
|
-
res = t.call({kuku: 123, krkr: 'karma', hash: {karma: 234}, array: [{id: 123}, {id: 234}], proc_: 123, just_trafaret: nil})
|
46
|
+
res = t.call({kuku: 123, krkr: 'karma', hash: {karma: 234}, array: [{id: 123}, {id: 234}], proc_: 123, just_trafaret: nil, tuple: [123, nil]})
|
46
47
|
res[:id].should == 'karma'
|
47
48
|
res[:hash][:karma].should == 234
|
48
49
|
res[:proc_].should == 123
|
@@ -163,7 +164,7 @@ describe Trafaret::Validator do
|
|
163
164
|
end
|
164
165
|
|
165
166
|
describe Trafaret::Case do
|
166
|
-
it 'must
|
167
|
+
it 'must case options' do
|
167
168
|
cs = T.case do |c|
|
168
169
|
c.when(T.integer) { |r| :int }
|
169
170
|
c.when(T.string) { |r| :string }
|
@@ -177,9 +178,23 @@ describe Trafaret::Case do
|
|
177
178
|
end
|
178
179
|
|
179
180
|
describe Trafaret::Tuple do
|
180
|
-
it 'must
|
181
|
+
it 'must match tuple' do
|
181
182
|
t = T.tuple(:integer, :string, :nil)
|
182
183
|
t.call([1, 'a', nil]).should == [1, 'a', nil]
|
183
184
|
t.call([1, 'a', 3]).dump.should == {2 => 'Value must be nil'}
|
184
185
|
end
|
186
|
+
end
|
187
|
+
|
188
|
+
describe Trafaret::URI do
|
189
|
+
it 'must match uri' do
|
190
|
+
t = T.uri(schemes: ['http', 'https'])
|
191
|
+
t.call('http://ya.ru:80').should == 'http://ya.ru'
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
describe Trafaret::Email do
|
196
|
+
it 'must parse email' do
|
197
|
+
e = T.email.to { |m| m[:name] }
|
198
|
+
e.call('kuku@gmail.com').should == 'kuku'
|
199
|
+
end
|
185
200
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trafaret
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.
|
4
|
+
version: 1.5.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mikhail Krivushin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-04-
|
11
|
+
date: 2014-04-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -71,6 +71,7 @@ files:
|
|
71
71
|
- lib/trafaret/constructor.rb
|
72
72
|
- lib/trafaret/errors.rb
|
73
73
|
- lib/trafaret/numeric.rb
|
74
|
+
- lib/trafaret/uri_email.rb
|
74
75
|
- lib/trafaret/validator.rb
|
75
76
|
- lib/trafaret/validators.rb
|
76
77
|
- lib/trafaret/version.rb
|