daily_affirmation 0.8.2 → 1.0.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5d6a05019e18b5074eb228e2cd9e42ae8302cb00
4
- data.tar.gz: f33966b9dc5669032db433ed3034aeacce539fd8
3
+ metadata.gz: 1cc1e1ce0b58bfda7c7d73f8d28f03e1e5e74756
4
+ data.tar.gz: bbb527d49af075c5512336fbde9a1139f85c840f
5
5
  SHA512:
6
- metadata.gz: 2af4d1fd5b8bd6334e837aa1aa2842ed9c4dcbc8adb6200171313e26ebd7a54778548bc6ff37dd51a448fe1b52ce23cb34d235a52f642b9428bcd5de3c6a20bd
7
- data.tar.gz: 1158c66ad417f70e3117573b8b51b9ed2d744f8b2e246a676548abe6be32b478ae3eaaab7f59d0d1bc583696b3e1e7797b57cad5e29ca31235ce0c67fd202696
6
+ metadata.gz: 08ce5f23b0c2911bd124818fd1a71ab052db502027d8d72f146c5980b0c07ad2d9ceb42e0761488dc93674bd6df083d97a1a58dc4f16826d30a4736e2bfbb172
7
+ data.tar.gz: 02eff11856d22c91fc861630c34210f5b02e4b40d7adcf520853ff657f82971d3e8cb8ae303628e59d1a785ea13c957d9692898ad93c89554a1a276200a73e56
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # DailyAffirmation
2
2
 
3
- [ ![Codeship Status for teamsnap/daily_affirmation](https://www.codeship.io/projects/70727b30-de01-0131-af05-5236ebb52643/status)](https://www.codeship.io/projects/24759)
3
+ [![Codeship Status for teamsnap/daily_affirmation](https://www.codeship.io/projects/70727b30-de01-0131-af05-5236ebb52643/status)](https://www.codeship.io/projects/24759)
4
4
 
5
5
  [![Gem Version](https://badge.fury.io/rb/daily_affirmation.png)](http://badge.fury.io/rb/daily_affirmation)
6
6
  [![Code Climate](https://codeclimate.com/github/teamsnap/daily_affirmation.png)](https://codeclimate.com/github/teamsnap/daily_affirmation)
@@ -8,6 +8,8 @@
8
8
  [![Dependency Status](https://gemnasium.com/teamsnap/daily_affirmation.png)](https://gemnasium.com/teamsnap/daily_affirmation)
9
9
  [![License](http://img.shields.io/license/MIT.png?color=green)](http://opensource.org/licenses/MIT)
10
10
 
11
+ [Documentation](http://www.rubydoc.info/github/teamsnap/daily_affirmation)
12
+
11
13
  A simple library for external validations of POROs
12
14
 
13
15
  ![Daily Affirmation](http://i.imgur.com/rdvgFAK.jpg)
@@ -49,11 +51,6 @@ end
49
51
  team1 = OpenStruct.new(:name => "", :status_cd => 3)
50
52
  TeamAffirmation.new(team1).valid? #=> false
51
53
  ```
52
-
53
- ## Roadmap
54
-
55
- - Allow error messages to use i18n.
56
- - Add a way to build custom validations (example validating a password).
57
54
 
58
55
  ## Contributing
59
56
 
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["oss@teamsnap.com"]
11
11
  spec.description = "A simple library for external validations of POROs"
12
12
  spec.summary = "A simple library for external validations of POROs"
13
- spec.homepage = "https://github.com/teamsnap/daily_affirmation"
13
+ spec.homepage = "http://teamsnap.github.io/daily_affirmation"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
@@ -17,6 +17,7 @@ require_relative "daily_affirmation/version"
17
17
  module DailyAffirmation
18
18
  OptionError = Class.new(StandardError)
19
19
 
20
+ # Include DailyAffirmation.affirmations to make your object a validator.
20
21
  def self.affirmations
21
22
  Module.new do
22
23
  def self.included(descendant)
@@ -4,14 +4,26 @@ module DailyAffirmation
4
4
  descendant.extend(ClassMethods)
5
5
  end
6
6
 
7
+ # Creates a new instance of the validator.
8
+ #
9
+ # @param object [Object] the object to validate.
10
+ # @return [self]
7
11
  def initialize(object)
8
12
  self.object = object
9
13
  end
10
14
 
15
+ # Tells you if the object is valid based on the affirmations.
16
+ #
17
+ # @return [true, false]
11
18
  def valid?
12
19
  validate[0]
13
20
  end
14
21
 
22
+ # Returns an array of length 2 telling you if the object is valid, along
23
+ # with any error messages.
24
+ #
25
+ # @return [Array(Boolean, Array<String>)] Array of length 2 containing
26
+ # validation results.
15
27
  def validate
16
28
  @validate ||= [
17
29
  affirmations.map(&:first).all?,
@@ -19,6 +31,9 @@ module DailyAffirmation
19
31
  ]
20
32
  end
21
33
 
34
+ # Returns an array of error message if any, otherwise an empty array.
35
+ #
36
+ # @return [Array<String>]
22
37
  def error_messages
23
38
  validate[1]
24
39
  end
@@ -1,5 +1,18 @@
1
1
  module DailyAffirmation
2
2
  class Validator
3
+ # Initializes a new validator to validate the given object/attribute
4
+ # combination.
5
+ #
6
+ # @param object [Object] the object to validate.
7
+ # @param attribute [Symbol] the attribute to validate. The object must
8
+ # `respond_to?` a method with the name `attribute` with no arguments.
9
+ # @param opts [Hash] any special options related to the affirmation.
10
+ # @option opts [Proc] :if evaluated before affirmation to ensure we should
11
+ # run validation.
12
+ # @option opts [true, false] :allow_nil determines if we skip validation of
13
+ # `nil` valued attributes.
14
+ #
15
+ # @return [self]
3
16
  def initialize(object, attribute, opts = {})
4
17
  self.object = object
5
18
  self.attribute = attribute
@@ -7,14 +20,31 @@ module DailyAffirmation
7
20
  self.opts = opts
8
21
  end
9
22
 
23
+ # Returns an array of length 2 telling you if the object passes this
24
+ # affirmation along with an error message if it doesn't.
25
+ #
26
+ # @return [Array(Boolean, [nil, String])] Array of length 2 containing
27
+ # validation results.
10
28
  def affirm
11
29
  @affirm ||= [valid?, valid? ? nil : error_message]
12
30
  end
13
31
 
32
+ # Tells you if the object is valid based on this affirmation.
33
+ #
34
+ # @note Subclasses of DailyAffirmation::Validator must implement this
35
+ # method.
36
+ #
37
+ # @return [true, false]
14
38
  def valid?
15
39
  raise StandardError, "must implement #valid?"
16
40
  end
17
41
 
42
+ # Returns the error message related to this validation.
43
+ #
44
+ # @note This method will always return the associated error message, even
45
+ # if the object passes validation.
46
+ #
47
+ # @return [String]
18
48
  def error_message
19
49
  i18n_error_message(:none)
20
50
  end
@@ -3,6 +3,7 @@ require_relative "presence_validator"
3
3
 
4
4
  module DailyAffirmation
5
5
  module Validators
6
+ # This affirmation ensures an attribute is not present.
6
7
  class AbsenceValidator < Validator
7
8
  def valid?
8
9
  @valid ||= !PresenceValidator.new(object, attribute).valid?
@@ -2,6 +2,7 @@ require_relative "../validator"
2
2
 
3
3
  module DailyAffirmation
4
4
  module Validators
5
+ # This affrimation ensures an attribute is true.
5
6
  class AcceptanceValidator < Validator
6
7
  def valid?
7
8
  @valid ||= !!value
@@ -2,6 +2,8 @@ require_relative "../validator"
2
2
 
3
3
  module DailyAffirmation
4
4
  module Validators
5
+ # This affirmation ensures a related attribute *_confirmation has the same
6
+ # value.
5
7
  class ConfirmationValidator < Validator
6
8
  def valid?
7
9
  @valid ||= value == object.send("#{attribute}_confirmation")
@@ -2,6 +2,10 @@ require_relative "../validator"
2
2
 
3
3
  module DailyAffirmation
4
4
  module Validators
5
+ # This affirmation accepts a :proc option and evaluates it's results.
6
+ #
7
+ # @option opts [Proc] :proc evaluated to determine if attribute should be
8
+ # validated.
5
9
  class CustomValidator < Validator
6
10
  def valid?
7
11
  @valid ||= opts[:proc].call(object)
@@ -2,6 +2,14 @@ require_relative "../validator"
2
2
 
3
3
  module DailyAffirmation
4
4
  module Validators
5
+ # This affirmation ensures an attribute is a date and if a :before or
6
+ # :after option is given, that the attribute is before or after the
7
+ # selected date.
8
+ #
9
+ # @option opts [Date] :before if present checked to ensure value is before
10
+ # provided date.
11
+ # @option opts [Date] :after if present checked to ensure value is after
12
+ # provided date.
5
13
  class DateValidator < Validator
6
14
  class NullDateLike
7
15
  def <(val); true; end
@@ -2,6 +2,10 @@ require_relative "../validator"
2
2
 
3
3
  module DailyAffirmation
4
4
  module Validators
5
+ # This affirmation ensures an attribute is equal to the :value option
6
+ # given.
7
+ #
8
+ # @option opts [Object] :value used to determine if attribute is equal
5
9
  class EqualityValidator < Validator
6
10
  def valid?
7
11
  @valid ||= (opts[:value] == value)
@@ -3,6 +3,11 @@ require_relative "inclusion_validator"
3
3
 
4
4
  module DailyAffirmation
5
5
  module Validators
6
+ # This affirmation ensures an attribute is not in the provided :list
7
+ # option.
8
+ #
9
+ # @option opts [#include?] :list list of values the attribute must not
10
+ # match.
6
11
  class ExclusionValidator < Validator
7
12
  def valid?
8
13
  @valid ||= !InclusionValidator.new(object, attribute, opts).valid?
@@ -2,6 +2,9 @@ require_relative "../validator"
2
2
 
3
3
  module DailyAffirmation
4
4
  module Validators
5
+ # This affirmation ensures an attribute matches the provided :regex option.
6
+ #
7
+ # @option opts [Regex] :regex the patten the attributes value must match.
5
8
  class FormatValidator < Validator
6
9
  def valid?
7
10
  @valid ||= !!opts[:regex].match(value)
@@ -2,6 +2,9 @@ require_relative "../validator"
2
2
 
3
3
  module DailyAffirmation
4
4
  module Validators
5
+ # This affirmation ensures an attribute is in the provided :list option.
6
+ #
7
+ # @option opts [#include?] :list list of values the attribute must match.
5
8
  class InclusionValidator < Validator
6
9
  def valid?
7
10
  @valid ||= opts[:list].include?(value)
@@ -2,6 +2,11 @@ require_relative "../validator"
2
2
 
3
3
  module DailyAffirmation
4
4
  module Validators
5
+ # This affirmation ensures an attribute's size is within the provided
6
+ # :range option.
7
+ #
8
+ # @option opts [Range] :range the range the size of the attribute's value
9
+ # must fit in.
5
10
  class LengthValidator < Validator
6
11
  def valid?
7
12
  @valid ||= opts[:range].include?(value.size)
@@ -2,6 +2,14 @@ require_relative "../validator"
2
2
 
3
3
  module DailyAffirmation
4
4
  module Validators
5
+ # This affirmation ensures an attribute is a Number and if the
6
+ # :greater_than or :less_then option is given, that the attribute is
7
+ # greater than or less than the value provided.
8
+ #
9
+ # @option opts [Numeric] :greater_than the value the attribute's value must
10
+ # be greater than.
11
+ # @option opts [Numeric] :less_than the value the attribute's value must be
12
+ # less than.
5
13
  class NumericalityValidator < Validator
6
14
  def valid?
7
15
  @valid ||= value ? numeric? && greater_than? && less_than? : true
@@ -2,6 +2,7 @@ require_relative "../validator"
2
2
 
3
3
  module DailyAffirmation
4
4
  module Validators
5
+ # This affirmation ensures an attribute is present.
5
6
  class PresenceValidator < Validator
6
7
  def valid?
7
8
  @valid ||= present?
@@ -1,3 +1,3 @@
1
1
  module DailyAffirmation
2
- VERSION = "0.8.2"
2
+ VERSION = "1.0.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: daily_affirmation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.2
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shane Emmons
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-01 00:00:00.000000000 Z
11
+ date: 2015-01-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -114,7 +114,7 @@ files:
114
114
  - spec/validators/length_validator_spec.rb
115
115
  - spec/validators/numericality_validator_spec.rb
116
116
  - spec/validators/presence_validator_spec.rb
117
- homepage: https://github.com/teamsnap/daily_affirmation
117
+ homepage: http://teamsnap.github.io/daily_affirmation
118
118
  licenses:
119
119
  - MIT
120
120
  metadata: {}