lego 0.0.5 → 0.0.6
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.
- checksums.yaml +7 -0
- data/lego.gemspec +2 -2
- data/lib/lego/value/array.rb +10 -2
- data/lib/lego/value/set.rb +10 -2
- data/lib/lego/value/string.rb +15 -1
- data/spec/lego/model_spec.rb +34 -0
- data/spec/lego/value/array_spec.rb +2 -2
- data/spec/lego/value/set_spec.rb +2 -2
- data/spec/lego/value/string_spec.rb +11 -0
- metadata +17 -31
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f79015b4662b0c8d1e004410950275e887cab739
|
4
|
+
data.tar.gz: 18d9a62cc10a1de37489bd00d660141063728dfe
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2b27fb559b3c0640acd2af7327205b373618b238dc112cc77e4b8a9fd1a2b24da5c849aca075ed83bbc6b4dd50c256784d11c7b0d3cc4a20d5bcade73a2952bb
|
7
|
+
data.tar.gz: 451fccb9ad32d000e22a01ff8f7e0aa9678660dabdd0f65507efbb9d9275a30d702c9a968316c97a31fb0242aaea3a99be944552418b24dc7148361a106b26ac
|
data/lego.gemspec
CHANGED
@@ -12,10 +12,10 @@ Gem::Specification.new do |gem|
|
|
12
12
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
13
13
|
gem.name = "lego"
|
14
14
|
gem.require_paths = ["lib"]
|
15
|
-
gem.version = '0.0.
|
15
|
+
gem.version = '0.0.6'
|
16
16
|
|
17
17
|
gem.add_dependency 'activesupport'
|
18
18
|
|
19
19
|
gem.add_development_dependency "rake"
|
20
|
-
gem.add_development_dependency "rspec"
|
20
|
+
gem.add_development_dependency "rspec", '~> 2.14.1'
|
21
21
|
end
|
data/lib/lego/value/array.rb
CHANGED
@@ -18,15 +18,23 @@ module Lego::Value
|
|
18
18
|
private
|
19
19
|
|
20
20
|
def parse_items(items)
|
21
|
+
errors = []
|
22
|
+
|
21
23
|
items = items.map do |item|
|
22
24
|
new_item = @_item_parser.parse(item)
|
23
25
|
if new_item.value?
|
26
|
+
errors << nil
|
24
27
|
new_item.value
|
25
28
|
else
|
26
|
-
|
29
|
+
errors << new_item.error
|
27
30
|
end
|
28
31
|
end
|
29
|
-
|
32
|
+
|
33
|
+
if errors.compact.empty?
|
34
|
+
Lego.just(items)
|
35
|
+
else
|
36
|
+
Lego.fail(errors)
|
37
|
+
end
|
30
38
|
end
|
31
39
|
|
32
40
|
def check_length?
|
data/lib/lego/value/set.rb
CHANGED
@@ -19,16 +19,24 @@ module Lego::Value
|
|
19
19
|
private
|
20
20
|
|
21
21
|
def parse_items(set)
|
22
|
+
errors = []
|
23
|
+
|
22
24
|
new_set = ::Set.new
|
23
25
|
set.each do |item|
|
24
26
|
new_item = @_item_parser.parse(item)
|
25
27
|
if new_item.value?
|
28
|
+
errors << nil
|
26
29
|
new_set << new_item.value
|
27
30
|
else
|
28
|
-
|
31
|
+
errors << new_item.error
|
29
32
|
end
|
30
33
|
end
|
31
|
-
|
34
|
+
|
35
|
+
if errors.compact.empty?
|
36
|
+
Lego.just(new_set)
|
37
|
+
else
|
38
|
+
Lego.fail(errors)
|
39
|
+
end
|
32
40
|
end
|
33
41
|
|
34
42
|
def allow_empty?
|
data/lib/lego/value/string.rb
CHANGED
@@ -6,7 +6,8 @@ module Lego::Value
|
|
6
6
|
->(v) { v.respond_to?(:to_str) ? Lego.just(v.to_str) : Lego.fail("invalid string: '#{v}'") },
|
7
7
|
->(v) { strip? ? Lego.just(v.strip) : Lego.just(v) },
|
8
8
|
->(v) { (not allow_blank? and v.blank?) ? Lego.none : Lego.just(v) },
|
9
|
-
->(v) { check_regexp? ? assert_regexp(v) : Lego.just(v) }
|
9
|
+
->(v) { check_regexp? ? assert_regexp(v) : Lego.just(v) },
|
10
|
+
->(v) { whitelist? ? assert_whitelist(v) : Lego.just(v) }
|
10
11
|
]
|
11
12
|
end
|
12
13
|
|
@@ -18,6 +19,10 @@ module Lego::Value
|
|
18
19
|
@opts.fetch(:strip, true)
|
19
20
|
end
|
20
21
|
|
22
|
+
def whitelist?
|
23
|
+
!!@opts.fetch(:allow, false)
|
24
|
+
end
|
25
|
+
|
21
26
|
private
|
22
27
|
|
23
28
|
def check_regexp?
|
@@ -33,5 +38,14 @@ module Lego::Value
|
|
33
38
|
end
|
34
39
|
end
|
35
40
|
|
41
|
+
def assert_whitelist(v)
|
42
|
+
whitelist = Array(@opts.fetch(:allow))
|
43
|
+
if whitelist.include?(v)
|
44
|
+
Lego.just(v)
|
45
|
+
else
|
46
|
+
Lego.fail("not allowed: '#{v}'")
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
36
50
|
end
|
37
51
|
end
|
data/spec/lego/model_spec.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'date'
|
3
|
+
require 'set'
|
3
4
|
|
4
5
|
describe Lego::Model do
|
5
6
|
|
@@ -196,6 +197,39 @@ describe Lego::Model do
|
|
196
197
|
klass.parse(start: today.to_s, stop: (today + 2).to_s).should be_error(start: 'at least 3 days after')
|
197
198
|
klass.parse(start: today.to_s, stop: (today + 3).to_s).should be_value
|
198
199
|
end
|
200
|
+
|
201
|
+
it 'validates custom requirements for groups' do
|
202
|
+
klass = Class.new(Lego::Model) do
|
203
|
+
attribute :people, Array, Person
|
204
|
+
|
205
|
+
validates :people, :check_unique_names
|
206
|
+
|
207
|
+
def check_unique_names
|
208
|
+
names, errors = Set.new, []
|
209
|
+
|
210
|
+
people.map do |person|
|
211
|
+
if names.include?(person.name)
|
212
|
+
errors << {name: 'must be unique'}
|
213
|
+
else
|
214
|
+
names << person.name
|
215
|
+
errors << nil
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
if errors.compact.empty?
|
220
|
+
Lego.just(self)
|
221
|
+
else
|
222
|
+
Lego.fail(errors)
|
223
|
+
end
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
alice = Person.coerce(name: 'Alice', age: '10')
|
228
|
+
alice2 = Person.coerce(name: 'Alice', age: '50')
|
229
|
+
bob = Person.coerce(name: 'Bob', age: '50')
|
230
|
+
klass.parse(people: [alice, alice2]).should be_error(people: [nil, {name: 'must be unique'}])
|
231
|
+
klass.parse(people: [alice, bob]).should be_value
|
232
|
+
end
|
199
233
|
end
|
200
234
|
|
201
235
|
it 'correctly handles array values' do
|
@@ -13,7 +13,7 @@ describe Lego::Value::Array do
|
|
13
13
|
context 'invalid array or item' do
|
14
14
|
specify { subject.parse('').should be_error("invalid array: ''") }
|
15
15
|
specify { subject.parse('2012-02').should be_error("invalid array: '2012-02'") }
|
16
|
-
specify { subject.parse(['one', 123, 'two']).should be_error("invalid string: '123'") }
|
16
|
+
specify { subject.parse(['one', 123, 'two']).should be_error([nil, "invalid string: '123'", nil]) }
|
17
17
|
end
|
18
18
|
|
19
19
|
it 'parses array' do
|
@@ -63,7 +63,7 @@ describe Lego::Value::Array do
|
|
63
63
|
|
64
64
|
context 'failure' do
|
65
65
|
it 'raises error' do
|
66
|
-
expect{ subject.coerce([123]) }.to raise_error(Lego::CoerceError, "invalid string: '123'")
|
66
|
+
expect{ subject.coerce([123]) }.to raise_error(Lego::CoerceError, ["invalid string: '123'"].inspect)
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
data/spec/lego/value/set_spec.rb
CHANGED
@@ -16,7 +16,7 @@ describe Lego::Value::Set do
|
|
16
16
|
context 'invalid set or item' do
|
17
17
|
specify { subject.parse('').should be_error("invalid set: ''") }
|
18
18
|
specify { subject.parse('2012-02').should be_error("invalid set: '2012-02'") }
|
19
|
-
specify { subject.parse(['one', 123, 'two']).should be_error("invalid string: '123'") }
|
19
|
+
specify { subject.parse(['one', 123, 'two']).should be_error([nil, "invalid string: '123'", nil]) }
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'parses array' do
|
@@ -65,7 +65,7 @@ describe Lego::Value::Set do
|
|
65
65
|
|
66
66
|
context 'failure' do
|
67
67
|
it 'raises error' do
|
68
|
-
expect{ subject.coerce([123]) }.to raise_error(Lego::CoerceError, "invalid string: '123'")
|
68
|
+
expect{ subject.coerce([123]) }.to raise_error(Lego::CoerceError, ["invalid string: '123'"].inspect)
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
@@ -74,6 +74,17 @@ describe Lego::Value::String do
|
|
74
74
|
its(:allow_blank?){ should == false }
|
75
75
|
its(:strip?){ should == true }
|
76
76
|
end
|
77
|
+
|
78
|
+
context 'allow' do
|
79
|
+
subject { Lego::Value::String.new(allow: %w{mon tue wed thu fri sat sun}) }
|
80
|
+
|
81
|
+
specify { subject.parse('mon').should be_just('mon') }
|
82
|
+
specify { subject.parse('sat').should be_just('sat') }
|
83
|
+
|
84
|
+
specify { subject.parse('Mon').should be_error("not allowed: 'Mon'") }
|
85
|
+
specify { subject.parse('foo').should be_error("not allowed: 'foo'") }
|
86
|
+
end
|
87
|
+
|
77
88
|
end
|
78
89
|
|
79
90
|
|
metadata
CHANGED
@@ -1,64 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lego
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.6
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Norbert Wojtowicz
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2015-01-14 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: activesupport
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rake
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - ">="
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - ">="
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rspec
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - "~>"
|
52
46
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
47
|
+
version: 2.14.1
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - "~>"
|
60
53
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
54
|
+
version: 2.14.1
|
62
55
|
description: Data building blocks for you app.
|
63
56
|
email:
|
64
57
|
- wojtowicz.norbert@gmail.com
|
@@ -66,8 +59,8 @@ executables: []
|
|
66
59
|
extensions: []
|
67
60
|
extra_rdoc_files: []
|
68
61
|
files:
|
69
|
-
- .gitignore
|
70
|
-
- .rspec
|
62
|
+
- ".gitignore"
|
63
|
+
- ".rspec"
|
71
64
|
- Gemfile
|
72
65
|
- Guardfile
|
73
66
|
- LICENSE
|
@@ -101,33 +94,26 @@ files:
|
|
101
94
|
- spec/spec_helper.rb
|
102
95
|
homepage: https://github.com/pithyless/lego
|
103
96
|
licenses: []
|
97
|
+
metadata: {}
|
104
98
|
post_install_message:
|
105
99
|
rdoc_options: []
|
106
100
|
require_paths:
|
107
101
|
- lib
|
108
102
|
required_ruby_version: !ruby/object:Gem::Requirement
|
109
|
-
none: false
|
110
103
|
requirements:
|
111
|
-
- -
|
104
|
+
- - ">="
|
112
105
|
- !ruby/object:Gem::Version
|
113
106
|
version: '0'
|
114
|
-
segments:
|
115
|
-
- 0
|
116
|
-
hash: 3624199644753223561
|
117
107
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
118
|
-
none: false
|
119
108
|
requirements:
|
120
|
-
- -
|
109
|
+
- - ">="
|
121
110
|
- !ruby/object:Gem::Version
|
122
111
|
version: '0'
|
123
|
-
segments:
|
124
|
-
- 0
|
125
|
-
hash: 3624199644753223561
|
126
112
|
requirements: []
|
127
113
|
rubyforge_project:
|
128
|
-
rubygems_version:
|
114
|
+
rubygems_version: 2.2.2
|
129
115
|
signing_key:
|
130
|
-
specification_version:
|
116
|
+
specification_version: 4
|
131
117
|
summary: Data building blocks for you app.
|
132
118
|
test_files:
|
133
119
|
- spec/lego/either/fail_spec.rb
|