lotus-validations 0.2.2 → 0.2.3
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 +4 -4
- data/CHANGELOG.md +8 -0
- data/README.md +24 -1
- data/lib/lotus/validations/attribute_definer.rb +98 -3
- data/lib/lotus/validations/validation_set.rb +8 -1
- data/lib/lotus/validations/version.rb +1 -1
- data/lib/lotus/validations.rb +10 -0
- 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: 5c28b2bd092a3123b3449bd57ce7aa6bf641aef7
|
4
|
+
data.tar.gz: 6def7642d5acb0049d3f9656ccb22617a7a0a97c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 721ec4289267c55b2ac39e132568568023c3a51ba3ecf1faca3627d7a1a60a351985aa0dfb778808fbfa19f3dec305fd1830e179a1f5f8d1ae4252676130a81b
|
7
|
+
data.tar.gz: 695f77817307e158789652f4a584bad04af0cf05e5f65d48068389a6db9e1153b613f827e45c25a5a3051c355eee28cc32889488988435798625a3b1f6d1a780
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
# Lotus::Validations
|
2
2
|
Validations mixin for Ruby objects
|
3
3
|
|
4
|
+
## v0.2.3 - 2015-01-12
|
5
|
+
### Added
|
6
|
+
- [Luca Guidi] Compatibility with Lotus::Entity
|
7
|
+
|
8
|
+
### Fixed
|
9
|
+
- [Luca Guidi] Ensure `.validates` usage to not raise `ArgumentError` when `:type` option is passed
|
10
|
+
- [Luca Guidi] Ensure to assign attributes when only `.validates` is used
|
11
|
+
|
4
12
|
## v0.2.2 - 2015-01-08
|
5
13
|
### Added
|
6
14
|
- [Steve Hodgkiss] Introduced `Validations.validates`. It defines validations, for already existing attributes.
|
data/README.md
CHANGED
@@ -471,6 +471,29 @@ signup.errors
|
|
471
471
|
# }>
|
472
472
|
```
|
473
473
|
|
474
|
+
### Lotus::Entity
|
475
|
+
|
476
|
+
Integration with [`Lotus::Entity`](https://github.com/lotus/model) is activated automatically.
|
477
|
+
|
478
|
+
```ruby
|
479
|
+
require 'lotus/model'
|
480
|
+
require 'lotus/validations'
|
481
|
+
|
482
|
+
class Product
|
483
|
+
include Lotus::Entity
|
484
|
+
include Lotus::Validations
|
485
|
+
|
486
|
+
attribute :name, type: String, presence: true
|
487
|
+
attribute :price, type: Integer, presence: true
|
488
|
+
end
|
489
|
+
|
490
|
+
product = Product.new(name: 'Book', price: '100')
|
491
|
+
product.valid? # => true
|
492
|
+
|
493
|
+
product.name # => "Book"
|
494
|
+
product.price # => 100
|
495
|
+
```
|
496
|
+
|
474
497
|
## Contributing
|
475
498
|
|
476
499
|
1. Fork it ( https://github.com/lotus/lotus-validations/fork )
|
@@ -481,4 +504,4 @@ signup.errors
|
|
481
504
|
|
482
505
|
## Copyright
|
483
506
|
|
484
|
-
Copyright 2014 Luca Guidi – Released under MIT License
|
507
|
+
Copyright 2014-2015 Luca Guidi – Released under MIT License
|
@@ -8,6 +8,14 @@ module Lotus
|
|
8
8
|
# @since 0.2.2
|
9
9
|
# @api private
|
10
10
|
module AttributeDefiner
|
11
|
+
# @since 0.2.3
|
12
|
+
# @api private
|
13
|
+
LOTUS_ENTITY_CLASS_NAME = 'Lotus::Entity'.freeze
|
14
|
+
|
15
|
+
# @since 0.2.3
|
16
|
+
# @api private
|
17
|
+
LOTUS_ENTITY_ID = 'id'.freeze
|
18
|
+
|
11
19
|
# Override Ruby's hook for modules.
|
12
20
|
#
|
13
21
|
# @param base [Class] the target class
|
@@ -18,6 +26,19 @@ module Lotus
|
|
18
26
|
# @see http://www.ruby-doc.org/core/Module.html#method-i-included
|
19
27
|
def self.included(base)
|
20
28
|
base.extend ClassMethods
|
29
|
+
base.extend EntityAttributeDefiner if lotus_entity?(base)
|
30
|
+
end
|
31
|
+
|
32
|
+
# Decide if enable the support for `Lotus::Entity`.
|
33
|
+
#
|
34
|
+
# @param base [Class]
|
35
|
+
#
|
36
|
+
# @since 0.2.3
|
37
|
+
# @api private
|
38
|
+
def self.lotus_entity?(base)
|
39
|
+
base.included_modules.any? do |m|
|
40
|
+
m.to_s == LOTUS_ENTITY_CLASS_NAME
|
41
|
+
end
|
21
42
|
end
|
22
43
|
|
23
44
|
# @since 0.2.2
|
@@ -237,8 +258,14 @@ module Lotus
|
|
237
258
|
validates(name, options)
|
238
259
|
end
|
239
260
|
|
261
|
+
# Set of user defined attributes
|
262
|
+
#
|
263
|
+
# @return [Array<String>]
|
264
|
+
#
|
265
|
+
# @since 0.2.2
|
266
|
+
# @api private
|
240
267
|
def defined_attributes
|
241
|
-
@defined_attributes ||= Set.new
|
268
|
+
@defined_attributes ||= Set.new(super)
|
242
269
|
end
|
243
270
|
|
244
271
|
private
|
@@ -246,7 +273,8 @@ module Lotus
|
|
246
273
|
# @since 0.2.2
|
247
274
|
# @api private
|
248
275
|
def define_attribute(name, options)
|
249
|
-
type = options.
|
276
|
+
type = options.fetch(:type) { nil }
|
277
|
+
|
250
278
|
define_accessor(name, type)
|
251
279
|
defined_attributes.add(name.to_s)
|
252
280
|
|
@@ -294,6 +322,73 @@ module Lotus
|
|
294
322
|
end
|
295
323
|
end
|
296
324
|
|
325
|
+
# Support for `Lotus::Entity`
|
326
|
+
#
|
327
|
+
# @since 0.2.3
|
328
|
+
# @api private
|
329
|
+
#
|
330
|
+
# @example
|
331
|
+
# require 'lotus/model'
|
332
|
+
# require 'lotus/validations'
|
333
|
+
#
|
334
|
+
# class Product
|
335
|
+
# include Lotus::Entity
|
336
|
+
# include Lotus::Validations
|
337
|
+
#
|
338
|
+
# attribute :name, type: String, presence: true
|
339
|
+
# attribute :price, type: Integer, presence: true
|
340
|
+
# end
|
341
|
+
#
|
342
|
+
# product = Product.new(name: 'Computer', price: '100')
|
343
|
+
#
|
344
|
+
# product.name # => "Computer"
|
345
|
+
# product.price # => 100
|
346
|
+
# product.valid? # => true
|
347
|
+
module EntityAttributeDefiner
|
348
|
+
# Override for Module#extend
|
349
|
+
#
|
350
|
+
# @since 0.2.3
|
351
|
+
# @api private
|
352
|
+
#
|
353
|
+
# @see http://ruby-doc.org/Module.html#method-i-extended
|
354
|
+
def self.extended(base)
|
355
|
+
base.class_eval do
|
356
|
+
include EntityAttributeDefiner::InstanceMethods
|
357
|
+
end
|
358
|
+
end
|
359
|
+
|
360
|
+
# @since 0.2.3
|
361
|
+
# @api private
|
362
|
+
#
|
363
|
+
# @see Lotus::Validations::AttributeDefiner#attribute
|
364
|
+
def attribute(name, options = {})
|
365
|
+
super
|
366
|
+
attributes name
|
367
|
+
end
|
368
|
+
|
369
|
+
# @since 0.2.3
|
370
|
+
# @api private
|
371
|
+
#
|
372
|
+
# @see Lotus::Validations::ClassMethods#validates
|
373
|
+
def validates(name, options = {})
|
374
|
+
super
|
375
|
+
define_attribute(name, options)
|
376
|
+
end
|
377
|
+
|
378
|
+
# @since 0.2.3
|
379
|
+
# @api private
|
380
|
+
module InstanceMethods
|
381
|
+
private
|
382
|
+
# @since 0.2.3
|
383
|
+
# @api private
|
384
|
+
#
|
385
|
+
# @see Lotus::Validations::AttributeDefiner#assign_attribute?
|
386
|
+
def assign_attribute?(attr)
|
387
|
+
super || attr.to_s == LOTUS_ENTITY_ID
|
388
|
+
end
|
389
|
+
end
|
390
|
+
end
|
391
|
+
|
297
392
|
# Create a new instance with the given attributes
|
298
393
|
#
|
299
394
|
# @param attributes [#to_h] an Hash like object which contains the
|
@@ -335,7 +430,7 @@ module Lotus
|
|
335
430
|
# signup = Signup.new(params)
|
336
431
|
#
|
337
432
|
# signup.name # => "Luca"
|
338
|
-
def initialize(attributes)
|
433
|
+
def initialize(attributes = {})
|
339
434
|
@attributes ||= Utils::Attributes.new
|
340
435
|
|
341
436
|
attributes.to_h.each do |key, value|
|
@@ -16,7 +16,8 @@ module Lotus
|
|
16
16
|
:inclusion,
|
17
17
|
:exclusion,
|
18
18
|
:confirmation,
|
19
|
-
:size
|
19
|
+
:size,
|
20
|
+
:type
|
20
21
|
].freeze
|
21
22
|
|
22
23
|
# @since 0.2.2
|
@@ -45,6 +46,12 @@ module Lotus
|
|
45
46
|
@validations.each_key(&blk)
|
46
47
|
end
|
47
48
|
|
49
|
+
# @since 0.2.3
|
50
|
+
# @api private
|
51
|
+
def names
|
52
|
+
@validations.keys
|
53
|
+
end
|
54
|
+
|
48
55
|
private
|
49
56
|
# Checks at the loading time if the user defined validations are recognized
|
50
57
|
#
|
data/lib/lotus/validations.rb
CHANGED
@@ -126,6 +126,16 @@ module Lotus
|
|
126
126
|
@validations ||= ValidationSet.new
|
127
127
|
end
|
128
128
|
|
129
|
+
# Set of user defined attributes
|
130
|
+
#
|
131
|
+
# @return [Array<String>]
|
132
|
+
#
|
133
|
+
# @since 0.2.3
|
134
|
+
# @api private
|
135
|
+
def defined_attributes
|
136
|
+
validations.names.map(&:to_s)
|
137
|
+
end
|
138
|
+
|
129
139
|
private
|
130
140
|
|
131
141
|
# Transfers attributes to a base class
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lotus-validations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luca Guidi
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-01-
|
12
|
+
date: 2015-01-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: lotus-utils
|