lhs 2.1.0 → 2.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/lhs/concerns/item/validation.rb +2 -1
- data/lib/lhs/version.rb +1 -1
- data/spec/item/validation_spec.rb +75 -47
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0136ac0223418ddf3f141de5fb9a469a7fe24374
|
4
|
+
data.tar.gz: 448e6a48140f37728dfe40083edb15638649de74
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b4833493e3121a9177210180f96b1b5df0b496b9c8f6945c7e73c00ea8117bb6dd65cb3bc63fef3f60e1a357b3ccfcf1d958c86177e67d5490f705edbcbfd65e
|
7
|
+
data.tar.gz: 5724f5743af929cc146863a897161d2625748ef6fff40ae36e8b48446c8772d7c88138ebae10ca256862504c047d6129a7afcb31f9334d4b477edc9438dc8875
|
@@ -9,7 +9,8 @@ class LHS::Item < LHS::Proxy
|
|
9
9
|
self.errors = nil
|
10
10
|
fail 'No validation endpoint found!' unless validation_endpoint
|
11
11
|
service = LHS::Service.for_url(validation_endpoint.url)
|
12
|
-
|
12
|
+
validation_params = validation_endpoint.options[:validates] == true ? { persist: false } : { validation_endpoint.options[:validates] => false }
|
13
|
+
params = validation_endpoint.options.fetch(:params, {}).merge(validation_params)
|
13
14
|
begin
|
14
15
|
service.request(
|
15
16
|
url: validation_endpoint.url,
|
data/lib/lhs/version.rb
CHANGED
@@ -4,84 +4,112 @@ describe LHS::Item do
|
|
4
4
|
|
5
5
|
let(:datastore) { 'http://local.ch' }
|
6
6
|
|
7
|
-
|
8
|
-
LHC.config.placeholder('datastore', datastore)
|
9
|
-
class User < LHS::Service
|
10
|
-
endpoint ':datastore/v2/users', validates: true
|
11
|
-
end
|
12
|
-
mock_validation
|
13
|
-
end
|
7
|
+
let(:validation_parameter) { 'persist' }
|
14
8
|
|
15
9
|
let(:mock_validation) do
|
16
10
|
successful_validation
|
17
11
|
end
|
18
12
|
|
19
13
|
let(:successful_validation) do
|
20
|
-
stub_request(:post, "#{datastore}/v2/users
|
14
|
+
stub_request(:post, "#{datastore}/v2/users?#{validation_parameter}=false").to_return(body: '{}')
|
21
15
|
end
|
22
16
|
|
23
|
-
|
24
|
-
|
25
|
-
.to_return(status: 400,
|
26
|
-
body: {
|
27
|
-
field_errors: [{code: "UNSUPPORTED_PROPERTY_VALUE", "path" => [ "email" ]}]
|
28
|
-
}.to_json
|
29
|
-
)
|
17
|
+
before(:each) do
|
18
|
+
mock_validation
|
30
19
|
end
|
31
20
|
|
32
|
-
context '
|
21
|
+
context 'custom validation parameter' do
|
22
|
+
|
23
|
+
let(:validation_parameter) { 'publish' }
|
24
|
+
|
33
25
|
let(:user) do
|
34
26
|
User.build(email: 'steve@local.ch')
|
35
27
|
end
|
36
28
|
|
37
|
-
|
38
|
-
|
29
|
+
before(:each) do
|
30
|
+
LHC.config.placeholder('datastore', datastore)
|
31
|
+
class User < LHS::Service
|
32
|
+
endpoint ':datastore/v2/users', validates: 'publish'
|
33
|
+
end
|
39
34
|
end
|
40
35
|
|
41
|
-
it '
|
36
|
+
it 'validates' do
|
42
37
|
expect(user.valid?).to eq true
|
43
|
-
user.email = 'not a valid email'
|
44
|
-
failing_validation
|
45
|
-
expect(user.valid?).to eq false
|
46
|
-
expect(user.errors[:email]).to be
|
47
38
|
end
|
39
|
+
|
48
40
|
end
|
49
41
|
|
50
|
-
context '
|
42
|
+
context 'default parameter' do
|
51
43
|
|
52
|
-
|
53
|
-
|
44
|
+
before(:each) do
|
45
|
+
LHC.config.placeholder('datastore', datastore)
|
46
|
+
class User < LHS::Service
|
47
|
+
endpoint ':datastore/v2/users', validates: true
|
48
|
+
end
|
54
49
|
end
|
55
50
|
|
56
|
-
let(:
|
57
|
-
|
51
|
+
let(:failing_validation) do
|
52
|
+
stub_request(:post, "#{datastore}/v2/users?persist=false")
|
53
|
+
.to_return(status: 400,
|
54
|
+
body: {
|
55
|
+
field_errors: [{ code: "UNSUPPORTED_PROPERTY_VALUE", "path" => ["email"] }]
|
56
|
+
}.to_json
|
57
|
+
)
|
58
58
|
end
|
59
59
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
60
|
+
context 'valid data' do
|
61
|
+
let(:user) do
|
62
|
+
User.build(email: 'steve@local.ch')
|
63
|
+
end
|
64
64
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
65
|
+
it 'validates' do
|
66
|
+
expect(user.valid?).to eq true
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'turns to be invalid if validating on changed, invalid data' do
|
70
|
+
expect(user.valid?).to eq true
|
71
|
+
user.email = 'not a valid email'
|
72
|
+
failing_validation
|
73
|
+
expect(user.valid?).to eq false
|
74
|
+
expect(user.errors[:email]).to be
|
75
|
+
end
|
71
76
|
end
|
72
|
-
end
|
73
77
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
+
context 'invalid data' do
|
79
|
+
let(:user) do
|
80
|
+
User.build(email: 'im not an email address')
|
81
|
+
end
|
82
|
+
|
83
|
+
let(:mock_validation) do
|
84
|
+
failing_validation
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'does not validate and provides error messages' do
|
88
|
+
expect(user.valid?).to eq false
|
89
|
+
expect(user.errors[:email]).to be
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'resets errors when revalidating' do
|
93
|
+
expect(user.valid?).to eq false
|
94
|
+
user.email = 'steve@local.ch'
|
95
|
+
successful_validation
|
96
|
+
expect(user.valid?).to eq true
|
97
|
+
expect(user.errors).to be_nil
|
78
98
|
end
|
79
99
|
end
|
80
100
|
|
81
|
-
|
82
|
-
|
83
|
-
Favorite
|
84
|
-
|
101
|
+
context 'endpoint does not support validations' do
|
102
|
+
before(:each) do
|
103
|
+
class Favorite < LHS::Service
|
104
|
+
endpoint ':datastore/v2/favorites'
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'fails when trying to use an endpoint for validations that does not support it' do
|
109
|
+
expect(lambda {
|
110
|
+
Favorite.build.valid?
|
111
|
+
}).to raise_error('Endpoint does not support validations!')
|
112
|
+
end
|
85
113
|
end
|
86
114
|
end
|
87
115
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lhs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- local.ch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-02-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: lhc
|