flexirest 1.3.32 → 1.3.33
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +2 -2
- data/Ruby-on-Rails-Integration.md +3 -3
- data/lib/flexirest/validation.rb +17 -17
- data/lib/flexirest/version.rb +1 -1
- data/spec/lib/validation_spec.rb +19 -12
- 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: 1c372f15d7e88d296232e1e055cb598419ca3d2c
|
4
|
+
data.tar.gz: c61b9f302f68cde71be0d091288e10f5b994c342
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '007239649da6105e553e6779858fc70951ff66825262300636254c34a749598839ad64c63bb145357b09bd07f85897b731d59b16c7a4354efd67d6f738fce30f'
|
7
|
+
data.tar.gz: fa9cbd5356984fc31ae87634833893cbc02b3586ad185324c85fe6458cedf6663e9303b93e437ffdecb09f09b5c88818e4570fd72508d402ba4da3807d74ac76
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -959,7 +959,7 @@ You can create validations on your objects just like Rails' built in ActiveModel
|
|
959
959
|
class Person < Flexirest::Base
|
960
960
|
validates :first_name, presence: true #ensures that the value is present and not blank
|
961
961
|
validates :last_name, existence: true #ensures that the value is non-nil only
|
962
|
-
validates :password, length: {within:6..12}
|
962
|
+
validates :password, length: {within:6..12}, message: "Invalid password length, must be 6-12 characters"
|
963
963
|
validates :post_code, length: {minimum:6, maximum:8}
|
964
964
|
validates :salary, numericality: true, minimum: 20_000, maximum: 50_000
|
965
965
|
validates :age, numericality: { minumum: 18, maximum: 65 }
|
@@ -977,7 +977,7 @@ Note: the block based validation is responsible for adding errors to `object._er
|
|
977
977
|
|
978
978
|
Validations are run when calling `valid?` or when calling any API on an instance (and then only if it is `valid?` will the API go on to be called).
|
979
979
|
|
980
|
-
`full_error_messages` returns an array of attributes with their associated error messages, i.e. `["age must be at least 18"]`
|
980
|
+
`full_error_messages` returns an array of attributes with their associated error messages, i.e. `["age must be at least 18"]`. Custom messages can be specified by passing a `:message` option to `validates`. This differs slightly from ActiveRecord in that it's an option to `validates` itself, not a part of a final hash.
|
981
981
|
|
982
982
|
#### Permitting nil values
|
983
983
|
The default behavior for `:length`, `:numericality` and `:inclusion` validators is to fail when a `nil` value is encountered. You can prevent `nil` attribute values from triggering validation errors for attributes that may permit `nil` by adding the `:allow_nil => true` option. Adding this option with a `true` value to `:length`, `:numericality` and `:inclusion` validators will permit `nil` values and not trigger errors. Some examples are:
|
@@ -15,12 +15,12 @@ gem 'flexirest'
|
|
15
15
|
|
16
16
|
## Configuration
|
17
17
|
|
18
|
-
It's possible to explicit specify the `base_url` in the Model Class. If you have an common API Endpoint it makes sense to setup an initializer in `config/
|
18
|
+
It's possible to explicit specify the `base_url` in the Model Class. If you have an common API Endpoint it makes sense to setup an initializer in `config/initializers` or use the `Rails.application.configure` namespace.
|
19
19
|
|
20
|
-
This example use a custom file in `config/
|
20
|
+
This example use a custom file in `config/initializers` to setup the API endpoint. Either set a fixed URL or use environment variables if you would like to follow the [12factor](http://12factor.net/config) rules for preparing your application running on cloud infrastructure like heroku.
|
21
21
|
|
22
22
|
```ruby
|
23
|
-
# config/
|
23
|
+
# config/initializers/flexirest.rb
|
24
24
|
Flexirest::Base.base_url = ENV.fetch("API_ENDPOINT_URL")
|
25
25
|
```
|
26
26
|
|
data/lib/flexirest/validation.rb
CHANGED
@@ -24,63 +24,63 @@ module Flexirest
|
|
24
24
|
validation[:options].each do |type, options|
|
25
25
|
if type == :presence
|
26
26
|
if value.nil?
|
27
|
-
@errors[validation[:field_name]] << "must be present"
|
27
|
+
@errors[validation[:field_name]] << (validation[:options][:message] || "must be present")
|
28
28
|
elsif value.blank?
|
29
|
-
@errors[validation[:field_name]] << "must be present"
|
29
|
+
@errors[validation[:field_name]] << (validation[:options][:message] || "must be present")
|
30
30
|
end
|
31
31
|
elsif type == :existence
|
32
32
|
if value.nil?
|
33
|
-
@errors[validation[:field_name]] << "must be not be nil"
|
33
|
+
@errors[validation[:field_name]] << (validation[:options][:message] || "must be not be nil")
|
34
34
|
end
|
35
35
|
elsif type == :length
|
36
36
|
if value.nil?
|
37
|
-
@errors[validation[:field_name]] << "must be not be nil" unless allow_nil
|
37
|
+
@errors[validation[:field_name]] << (validation[:options][:message] || "must be not be nil") unless allow_nil
|
38
38
|
else
|
39
39
|
if options[:within]
|
40
|
-
@errors[validation[:field_name]] << "must be within range #{options[:within]}" unless options[:within].include?(value.to_s.length )
|
40
|
+
@errors[validation[:field_name]] << (validation[:options][:message] || "must be within range #{options[:within]}") unless options[:within].include?(value.to_s.length )
|
41
41
|
end
|
42
42
|
if options[:minimum]
|
43
|
-
@errors[validation[:field_name]] << "must be at least #{options[:minimum]} characters long" unless value.to_s.length >= options[:minimum]
|
43
|
+
@errors[validation[:field_name]] << (validation[:options][:message] || "must be at least #{options[:minimum]} characters long") unless value.to_s.length >= options[:minimum]
|
44
44
|
end
|
45
45
|
if options[:maximum]
|
46
|
-
@errors[validation[:field_name]] << "must be no more than #{options[:maximum]} characters long" unless value.to_s.length <= options[:maximum]
|
46
|
+
@errors[validation[:field_name]] << (validation[:options][:message] || "must be no more than #{options[:maximum]} characters long") unless value.to_s.length <= options[:maximum]
|
47
47
|
end
|
48
48
|
end
|
49
49
|
elsif type == :numericality
|
50
50
|
if value.nil?
|
51
|
-
@errors[validation[:field_name]] << "must be not be nil" unless allow_nil
|
51
|
+
@errors[validation[:field_name]] << (validation[:options][:message] || "must be not be nil") unless allow_nil
|
52
52
|
else
|
53
53
|
numeric = (true if Float(value) rescue false)
|
54
54
|
if !numeric
|
55
|
-
@errors[validation[:field_name]] << "must be numeric"
|
55
|
+
@errors[validation[:field_name]] << (validation[:options][:message] || "must be numeric")
|
56
56
|
else
|
57
57
|
if options.is_a?(Hash)
|
58
58
|
if options[:minimum]
|
59
|
-
@errors[validation[:field_name]] << "must be at least #{options[:minimum]}" unless value.to_f >= options[:minimum]
|
59
|
+
@errors[validation[:field_name]] << (validation[:options][:message] || "must be at least #{options[:minimum]}") unless value.to_f >= options[:minimum]
|
60
60
|
end
|
61
61
|
if options[:maximum]
|
62
|
-
@errors[validation[:field_name]] << "must be no more than #{options[:maximum]}" unless value.to_f <= options[:maximum]
|
62
|
+
@errors[validation[:field_name]] << (validation[:options][:message] || "must be no more than #{options[:maximum]}") unless value.to_f <= options[:maximum]
|
63
63
|
end
|
64
64
|
end
|
65
65
|
end
|
66
66
|
end
|
67
67
|
elsif type == :minimum
|
68
68
|
if value.nil?
|
69
|
-
@errors[validation[:field_name]] << "must be not be nil" unless allow_nil
|
69
|
+
@errors[validation[:field_name]] << (validation[:options][:message] || "must be not be nil") unless allow_nil
|
70
70
|
else
|
71
|
-
@errors[validation[:field_name]] << "must be at least #{options}" unless value.to_f >= options.to_f
|
71
|
+
@errors[validation[:field_name]] << (validation[:options][:message] || "must be at least #{options}") unless value.to_f >= options.to_f
|
72
72
|
end
|
73
73
|
elsif type == :maximum
|
74
74
|
if value.nil?
|
75
|
-
@errors[validation[:field_name]] << "must be not be nil" unless allow_nil
|
75
|
+
@errors[validation[:field_name]] << (validation[:options][:message] || "must be not be nil") unless allow_nil
|
76
76
|
else
|
77
|
-
@errors[validation[:field_name]] << "must be no more than #{options}" unless value.to_f <= options.to_f
|
77
|
+
@errors[validation[:field_name]] << (validation[:options][:message] || "must be no more than #{options}") unless value.to_f <= options.to_f
|
78
78
|
end
|
79
79
|
elsif type == :inclusion
|
80
80
|
if value.nil?
|
81
|
-
@errors[validation[:field_name]] << "must be not be nil" unless allow_nil
|
81
|
+
@errors[validation[:field_name]] << (validation[:options][:message] || "must be not be nil") unless allow_nil
|
82
82
|
else
|
83
|
-
@errors[validation[:field_name]] << "must be included in #{options[:in].join(", ")}" unless options[:in].include?(value)
|
83
|
+
@errors[validation[:field_name]] << (validation[:options][:message] || "must be included in #{options[:in].join(", ")}") unless options[:in].include?(value)
|
84
84
|
end
|
85
85
|
end
|
86
86
|
end
|
data/lib/flexirest/version.rb
CHANGED
data/spec/lib/validation_spec.rb
CHANGED
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe "Flexirest::Validation" do
|
4
4
|
class SimpleValidationExample < OpenStruct
|
5
5
|
include Flexirest::Validation
|
6
|
-
validates :first_name, presence: true
|
6
|
+
validates :first_name, presence: true, message: "Sorry, something went wrong"
|
7
7
|
validates :middle_name, length: { minimum: 2, maximum: 30 }, allow_nil: true
|
8
8
|
validates :last_name, existence: true
|
9
9
|
validates :nick_name, length: { minimum: 2, maximum: 30 }
|
@@ -34,6 +34,13 @@ describe "Flexirest::Validation" do
|
|
34
34
|
expect(a._errors[:first_name].size).to eq(1)
|
35
35
|
end
|
36
36
|
|
37
|
+
it "should return a custom error if specified and a validation fails" do
|
38
|
+
a = SimpleValidationExample.new
|
39
|
+
a.first_name = nil
|
40
|
+
a.valid?
|
41
|
+
expect(a._errors[:first_name][0]).to eq("Sorry, something went wrong")
|
42
|
+
end
|
43
|
+
|
37
44
|
it "should be invalid if a required value is present but blank" do
|
38
45
|
a = SimpleValidationExample.new
|
39
46
|
a.first_name = ""
|
@@ -60,7 +67,7 @@ describe "Flexirest::Validation" do
|
|
60
67
|
a.first_name = "John"
|
61
68
|
a.valid?
|
62
69
|
expect(a._errors[:first_name]).to be_empty
|
63
|
-
end
|
70
|
+
end
|
64
71
|
end
|
65
72
|
|
66
73
|
context "when validating existence" do
|
@@ -83,7 +90,7 @@ describe "Flexirest::Validation" do
|
|
83
90
|
a.last_name = "John"
|
84
91
|
a.valid?
|
85
92
|
expect(a._errors[:last_name]).to be_empty
|
86
|
-
end
|
93
|
+
end
|
87
94
|
end
|
88
95
|
|
89
96
|
context "when validating length" do
|
@@ -116,7 +123,7 @@ describe "Flexirest::Validation" do
|
|
116
123
|
a.valid?
|
117
124
|
expect(a._errors[:post_code].size).to eq(1)
|
118
125
|
end
|
119
|
-
|
126
|
+
|
120
127
|
it "should be valid if a length is nil and allow_nil option is true" do
|
121
128
|
a = SimpleValidationExample.new
|
122
129
|
a.valid?
|
@@ -155,13 +162,13 @@ describe "Flexirest::Validation" do
|
|
155
162
|
a = SimpleValidationExample.new(salary:100_000)
|
156
163
|
a.valid?
|
157
164
|
expect(a._errors[:salary].size).to be > 0
|
158
|
-
end
|
165
|
+
end
|
159
166
|
|
160
167
|
it "should be valid that a numeric field is above or equal to a minimum" do
|
161
168
|
a = SimpleValidationExample.new(salary:30_000)
|
162
169
|
a.valid?
|
163
170
|
expect(a._errors[:salary].size).to eq(0)
|
164
|
-
end
|
171
|
+
end
|
165
172
|
|
166
173
|
it "should be valid if a value is nil and allow_nil option is true" do
|
167
174
|
a = SimpleValidationExample.new
|
@@ -205,13 +212,13 @@ describe "Flexirest::Validation" do
|
|
205
212
|
a = SimpleValidationExample.new(age: 70)
|
206
213
|
a.valid?
|
207
214
|
expect(a._errors[:age].size).to be > 0
|
208
|
-
end
|
215
|
+
end
|
209
216
|
|
210
217
|
it "should be valid that a numeric field is above or equal to a minimum" do
|
211
218
|
a = SimpleValidationExample.new(age: 30)
|
212
219
|
a.valid?
|
213
220
|
expect(a._errors[:age].size).to eq(0)
|
214
|
-
end
|
221
|
+
end
|
215
222
|
end
|
216
223
|
end
|
217
224
|
|
@@ -219,15 +226,15 @@ describe "Flexirest::Validation" do
|
|
219
226
|
it "should be invalid if the value is not contained in the list" do
|
220
227
|
a = SimpleValidationExample.new(suffix: "Baz")
|
221
228
|
a.valid?
|
222
|
-
expect(a._errors[:suffix].size).to be > 0
|
229
|
+
expect(a._errors[:suffix].size).to be > 0
|
223
230
|
end
|
224
231
|
|
225
232
|
it "should be valid if the value is contained in the list" do
|
226
233
|
a = SimpleValidationExample.new(suffix: "Dr.")
|
227
234
|
a.valid?
|
228
|
-
expect(a._errors[:suffix].size).to eq(0)
|
235
|
+
expect(a._errors[:suffix].size).to eq(0)
|
229
236
|
end
|
230
|
-
|
237
|
+
|
231
238
|
it "should be valid if the value is nil and allow_nil option is true" do
|
232
239
|
a = SimpleValidationExample.new
|
233
240
|
a.valid?
|
@@ -270,7 +277,7 @@ describe "Flexirest::Validation" do
|
|
270
277
|
a = ValidationExample2.new(first_name:"Johnny")
|
271
278
|
a.valid?
|
272
279
|
expect(a._errors[:first_name]).to be_empty
|
273
|
-
end
|
280
|
+
end
|
274
281
|
end
|
275
282
|
|
276
283
|
describe "#full_error_messages" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flexirest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.33
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Jeffries
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-02-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|