plinko 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1c49d0ebb809f6673de1045693628d5567438b9b
4
+ data.tar.gz: fa7f596079f9dff9bd4fd5235422aa650e01bee3
5
+ SHA512:
6
+ metadata.gz: a2d85003ec52cbc16d4fe416cdae83cc55f5801668ac3749083ca672b07618a4bcd851a438be88325f3416069ba47e69eeacd27d4b2122029aa82c182dcb0c01
7
+ data.tar.gz: 5481d0b47ad76028177dbd2cf6d863b1b8da6f5041485791c63af04186240282ab7d5c72a5b0e2cc8b955db8045074730d14bf8357d842f94c1068ee03e7a7c1
@@ -0,0 +1,40 @@
1
+ require_relative 'validation'
2
+
3
+ module Plinko
4
+ class MultiValidator
5
+ attr_accessor :validated_object, :validators
6
+
7
+ def initialize(validated_object, validators = [])
8
+ self.validated_object = validated_object
9
+ self.validators = validators
10
+ end
11
+
12
+ def seed
13
+ Validation.new(validated_object)
14
+ end
15
+
16
+ def errors
17
+ validation.errors
18
+ end
19
+
20
+ def valid?
21
+ validation.valid?
22
+ end
23
+
24
+ def validation
25
+ validators.reduce(seed) do |memo, validator|
26
+ memo.with(validator)
27
+ end
28
+ end
29
+
30
+ def validate!
31
+ validators.reduce(seed) do |memo, validator|
32
+ temp_val = memo.with(validator)
33
+
34
+ raise StandardError temp_val.errors unless temp_val.valid?
35
+
36
+ temp_val
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,31 @@
1
+ module Plinko
2
+ class Validation
3
+ attr_accessor :value, :errors
4
+
5
+ def initialize(value, errors = [])
6
+ self.value = value
7
+ self.errors = errors
8
+ end
9
+
10
+ def with(validator)
11
+ new_value, validation_errors = validator.validate(value)
12
+ accumulated_errors = errors + Array(validation_errors)
13
+
14
+ return Valid.new(new_value) if accumulated_errors.empty?
15
+
16
+ Error.new(new_value, accumulated_errors)
17
+ end
18
+
19
+ class Valid < Validation
20
+ def valid?
21
+ true
22
+ end
23
+ end
24
+
25
+ class Error < Validation
26
+ def valid?
27
+ false
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,29 @@
1
+ module Plinko
2
+ class Validator
3
+ attr_accessor :value
4
+
5
+ def initialize(value)
6
+ self.value = value
7
+ end
8
+
9
+ def self.validate(value)
10
+ new(value).validate
11
+ end
12
+
13
+ def validate
14
+ if validation
15
+ value
16
+ else
17
+ [value, [error_message]]
18
+ end
19
+ end
20
+
21
+ def validation
22
+ true
23
+ end
24
+
25
+ def error_message
26
+ "An error occurred."
27
+ end
28
+ end
29
+ end
data/lib/plinko.rb ADDED
@@ -0,0 +1,6 @@
1
+ require_relative "plinko/version"
2
+ require_relative "plinko/multi_validator"
3
+ require_relative "plinko/validation"
4
+ require_relative "plinko/validator"
5
+
6
+ module Plinko; end
metadata ADDED
@@ -0,0 +1,81 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: plinko
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Mitch Monsen
8
+ - Benjamin Kimball
9
+ - Nathan Davis
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2015-04-27 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: bundler
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - "~>"
20
+ - !ruby/object:Gem::Version
21
+ version: '1.9'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: '1.9'
29
+ - !ruby/object:Gem::Dependency
30
+ name: rake
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - "~>"
34
+ - !ruby/object:Gem::Version
35
+ version: '10.0'
36
+ type: :development
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '10.0'
43
+ description: Plinko helps you create validators that collect all validation errors
44
+ instead of breaking on the first failure.
45
+ email:
46
+ - mmonsen7@gmail.com
47
+ - ben@creditera.com
48
+ - nbriardavis@gmail.com
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - "./lib/plinko.rb"
54
+ - "./lib/plinko/multi_validator.rb"
55
+ - "./lib/plinko/validation.rb"
56
+ - "./lib/plinko/validator.rb"
57
+ homepage: https://github.com/creditera/plinko
58
+ licenses:
59
+ - MIT
60
+ metadata: {}
61
+ post_install_message:
62
+ rdoc_options: []
63
+ require_paths:
64
+ - lib
65
+ required_ruby_version: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ required_rubygems_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ requirements: []
76
+ rubyforge_project:
77
+ rubygems_version: 2.4.6
78
+ signing_key:
79
+ specification_version: 4
80
+ summary: Composable, collected validations.
81
+ test_files: []