external_errors 1.1
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 +7 -0
- data/lib/external_errors.rb +53 -0
- data/test/external_errors_test.rb +23 -0
- metadata +74 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 275bb29d65627cd51ba50ae7465b932c1138dc6b
|
4
|
+
data.tar.gz: e417f9ff93f1eb2942f548b8b08f0829e040c3b8
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ceb750dab369e282c09fd277c2007b841e2337b2a2e4f2dc176153c3517a1f33829dda221c8bf704ed14ac6c5eb158ccf13b6ed92771708ac7c52cc4bf4e8a35
|
7
|
+
data.tar.gz: d7d8c920dafb806135908223bb28e826f8306b585569c3bfd16d13a0a19aa4508a54b97298e49c7d43fec400e06f1889c78ab5317bee0c1e660374a3bb879d1a
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module ExternalErrors
|
2
|
+
# Add errors from an external sources (/non-validators) to the model
|
3
|
+
# class SomeModel
|
4
|
+
# include ActiveModel::Model
|
5
|
+
# include ExternalErrors
|
6
|
+
# end
|
7
|
+
#
|
8
|
+
# some_instance = SomeModel.new
|
9
|
+
# some_instance.valid?
|
10
|
+
# #=> true
|
11
|
+
#
|
12
|
+
# some_instance.external_errors << 'some external error'
|
13
|
+
# some_instance.valid?
|
14
|
+
# #=> false
|
15
|
+
|
16
|
+
class ExternalErrorStore < Array
|
17
|
+
def initialize(error_added_cb)
|
18
|
+
@error_added_cb = error_added_cb
|
19
|
+
end
|
20
|
+
|
21
|
+
def <<(error)
|
22
|
+
super error
|
23
|
+
@error_added_cb.call(error)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.included(base)
|
28
|
+
base.class_eval { validate :check_for_external_errors }
|
29
|
+
end
|
30
|
+
|
31
|
+
def add_external_error(error)
|
32
|
+
external_errors << error
|
33
|
+
end
|
34
|
+
|
35
|
+
def add_external_errors(errors)
|
36
|
+
errors.each { |error| add_external_error error }
|
37
|
+
end
|
38
|
+
|
39
|
+
def external_errors
|
40
|
+
error_added_cb = proc { |error| add_external_error_to_errors error }
|
41
|
+
@external_errors ||= ExternalErrorStore.new error_added_cb
|
42
|
+
end
|
43
|
+
|
44
|
+
def add_external_error_to_errors(error)
|
45
|
+
errors.add(:base, error)
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def check_for_external_errors
|
51
|
+
external_errors.each { |error| add_external_error_to_errors error }
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require './lib/external_errors'
|
2
|
+
require 'active_model'
|
3
|
+
require 'minitest/autorun'
|
4
|
+
|
5
|
+
class TestExternalErrors < Minitest::Test
|
6
|
+
class Dummy
|
7
|
+
include ActiveModel::Model
|
8
|
+
include ExternalErrors
|
9
|
+
end
|
10
|
+
|
11
|
+
def setup
|
12
|
+
@dummy = Dummy.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_valid_without_extrnal_errors
|
16
|
+
assert @dummy.valid?
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_valid_with_extrnal_errors
|
20
|
+
@dummy.external_errors << 'nope, not valid'
|
21
|
+
assert @dummy.invalid?
|
22
|
+
end
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: external_errors
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '1.1'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Willian van der Velde
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-09-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activemodel
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: minitest
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '5.1'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '5.1'
|
41
|
+
description: Adds non validator errors to active model
|
42
|
+
email: mail@willian.io
|
43
|
+
executables: []
|
44
|
+
extensions: []
|
45
|
+
extra_rdoc_files: []
|
46
|
+
files:
|
47
|
+
- lib/external_errors.rb
|
48
|
+
- test/external_errors_test.rb
|
49
|
+
homepage: https://github.com/Willianvdv/external_errors
|
50
|
+
licenses:
|
51
|
+
- MIT
|
52
|
+
metadata: {}
|
53
|
+
post_install_message:
|
54
|
+
rdoc_options: []
|
55
|
+
require_paths:
|
56
|
+
- lib
|
57
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0'
|
67
|
+
requirements: []
|
68
|
+
rubyforge_project:
|
69
|
+
rubygems_version: 2.2.2
|
70
|
+
signing_key:
|
71
|
+
specification_version: 4
|
72
|
+
summary: Adds non validator errors to active model
|
73
|
+
test_files: []
|
74
|
+
has_rdoc:
|