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 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: