code_error 0.9.3 → 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 +4 -4
- data/HISTORY.md +4 -0
- data/README.md +141 -192
- data/code_error.gemspec +26 -28
- data/lib/code_error.rb +126 -67
- data/lib/code_error/version.rb +1 -1
- data/test/test_all.rb +4 -4
- data/test/test_config.rb +56 -69
- data/test/test_gen.rb +76 -0
- data/test/test_masked.rb +170 -64
- data/test/test_pos.rb +213 -0
- metadata +37 -23
- data/lib/code_error/random_token_error.rb +0 -75
- data/test/test_code_in_msg.rb +0 -85
- data/test/test_new.rb +0 -100
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: code_error
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sibevin Wang
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
11
|
+
date: 2014-12-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: minitest
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '5.0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '5.0'
|
13
27
|
description: A code-based customized error.
|
14
28
|
email:
|
15
29
|
- sibevin@gmail.com
|
@@ -17,18 +31,18 @@ executables: []
|
|
17
31
|
extensions: []
|
18
32
|
extra_rdoc_files: []
|
19
33
|
files:
|
34
|
+
- HISTORY.md
|
20
35
|
- LICENSE.txt
|
21
36
|
- README.md
|
22
37
|
- code_error.gemspec
|
23
38
|
- lib/code_error.rb
|
24
|
-
- lib/code_error/random_token_error.rb
|
25
39
|
- lib/code_error/version.rb
|
26
40
|
- test/test_all.rb
|
27
|
-
- test/test_code_in_msg.rb
|
28
41
|
- test/test_config.rb
|
42
|
+
- test/test_gen.rb
|
29
43
|
- test/test_helper.rb
|
30
44
|
- test/test_masked.rb
|
31
|
-
- test/
|
45
|
+
- test/test_pos.rb
|
32
46
|
homepage: https://github.com/sibevin/code_error
|
33
47
|
licenses:
|
34
48
|
- MIT
|
@@ -39,36 +53,36 @@ require_paths:
|
|
39
53
|
- lib
|
40
54
|
required_ruby_version: !ruby/object:Gem::Requirement
|
41
55
|
requirements:
|
42
|
-
- -
|
56
|
+
- - ">="
|
43
57
|
- !ruby/object:Gem::Version
|
44
58
|
version: '0'
|
45
59
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
46
60
|
requirements:
|
47
|
-
- -
|
61
|
+
- - ">="
|
48
62
|
- !ruby/object:Gem::Version
|
49
63
|
version: '0'
|
50
64
|
requirements: []
|
51
65
|
rubyforge_project:
|
52
|
-
rubygems_version: 2.
|
66
|
+
rubygems_version: 2.4.2
|
53
67
|
signing_key:
|
54
68
|
specification_version: 4
|
55
69
|
summary: 'Inherit CodeError::Base to create your own code-based error. You need to
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
''A duplicated IAP request is sent.'' },
|
62
|
-
should send the IAP request again.'' } }
|
63
|
-
you need. raise MyError.
|
64
|
-
#...
|
65
|
-
e.info data = e.data case(e.status)
|
66
|
-
#... end #... end Please see "README"
|
70
|
+
assign "error_codes" with a hash to define your own error code map. class MyError
|
71
|
+
< CodeError::Base error_codes({ purchase_info_incorrect: { status: :failed, msg:
|
72
|
+
''Purchase information format is incorrect.'' }, device_info_incorrect: { status:
|
73
|
+
:failed, msg: ''Device information format is incorrect.'' }, unknown_store: { status:
|
74
|
+
:failed, msg: ''Unknown store.'' }, duplicated_request: { status: :duplicated, msg:
|
75
|
+
''A duplicated IAP request is sent.'' }, resend_iap: { status: :retry, msg: ''Client
|
76
|
+
should send the IAP request again.'' } }) end Raise an error with a code when
|
77
|
+
you need. raise MyError.gen(:purchase_info_incorrect) Rescue and handle it. begin
|
78
|
+
#... raise MyError.gen(:purchase_info_incorrect) #... rescue MyError => e raise
|
79
|
+
e if e.internal? msg = e.msg code = e.code info = e.info data = e.data case(e.status)
|
80
|
+
when :failed #... when :duplicated #... else #... end #... end Please see "README"
|
81
|
+
to get more details.'
|
67
82
|
test_files:
|
68
83
|
- test/test_all.rb
|
69
|
-
- test/test_code_in_msg.rb
|
70
84
|
- test/test_config.rb
|
85
|
+
- test/test_gen.rb
|
71
86
|
- test/test_helper.rb
|
72
87
|
- test/test_masked.rb
|
73
|
-
- test/
|
74
|
-
has_rdoc:
|
88
|
+
- test/test_pos.rb
|
@@ -1,75 +0,0 @@
|
|
1
|
-
module RandomToken
|
2
|
-
|
3
|
-
# A customized exception for RandomToken
|
4
|
-
class RandomTokenError < StandardError
|
5
|
-
|
6
|
-
# Errors used in RandomToken
|
7
|
-
ERRORS = {
|
8
|
-
:unknown_seed => {
|
9
|
-
:value => 1,
|
10
|
-
:msg => "Unknown given seed"
|
11
|
-
},
|
12
|
-
:not_support_case => {
|
13
|
-
:value => 2,
|
14
|
-
:msg => "Case feature is not supported in this case, but the case option is given."
|
15
|
-
},
|
16
|
-
:not_support_friendly => {
|
17
|
-
:value => 3,
|
18
|
-
:msg => "Friendly feature is not supported in this case, but the friendly option is true."
|
19
|
-
},
|
20
|
-
:false_friendly_with_given_mask => {
|
21
|
-
:value => 4,
|
22
|
-
:msg => "The mask is given but the friendly option is false."
|
23
|
-
},
|
24
|
-
:invalid_strf_pattern => {
|
25
|
-
:value => 5,
|
26
|
-
:msg => "The given pattern is invalid."
|
27
|
-
},
|
28
|
-
:invalid_gen_arg => {
|
29
|
-
:value => 6,
|
30
|
-
:msg => "The given arg is invalid."
|
31
|
-
},
|
32
|
-
:mask_remove_all_seeds => {
|
33
|
-
:value => 7,
|
34
|
-
:msg => "The friendly mask removes all seeds."
|
35
|
-
},
|
36
|
-
:duplicated_option => {
|
37
|
-
:value => 8,
|
38
|
-
:msg => "The same options are given."
|
39
|
-
},
|
40
|
-
:invalid_option_value => {
|
41
|
-
:value => 9,
|
42
|
-
:msg => "The given option value is invalid."
|
43
|
-
},
|
44
|
-
}
|
45
|
-
|
46
|
-
attr_reader :code, :value, :msg, :info
|
47
|
-
|
48
|
-
# The RandomTokenError constructor.
|
49
|
-
# @param error [Fixnum, String]
|
50
|
-
# You can give a error number defined in the keys of {RandomToken::RandomTokenError::ERRORS} or a string message for internal usage.
|
51
|
-
# @param info [Hash]
|
52
|
-
# Anything you want to put in the info attribute of RandomTokenError.
|
53
|
-
def initialize(error, info = {})
|
54
|
-
@code = error
|
55
|
-
@info = info
|
56
|
-
if ERRORS.keys.include?(error)
|
57
|
-
@value = ERRORS[error][:value]
|
58
|
-
@msg = ERRORS[error][:msg]
|
59
|
-
elsif error.class.name == 'String'
|
60
|
-
@code = :internal
|
61
|
-
@value = 90000
|
62
|
-
@msg = error
|
63
|
-
else
|
64
|
-
@code = :internal
|
65
|
-
@value = 99999
|
66
|
-
@msg = "Internal Error"
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
# Override the message method to show more information in RandomTokenError
|
71
|
-
def message
|
72
|
-
"RandomTokenError(#{@code.to_s}): value = #{@value}, msg = #{@msg}, info = #{@info.inspect}"
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
data/test/test_code_in_msg.rb
DELETED
@@ -1,85 +0,0 @@
|
|
1
|
-
require "test/unit"
|
2
|
-
|
3
|
-
$LOAD_PATH.unshift("#{File.dirname(__FILE__)}")
|
4
|
-
require "test_helper"
|
5
|
-
require "code_error"
|
6
|
-
|
7
|
-
class TestCodeInMsg < Test::Unit::TestCase
|
8
|
-
|
9
|
-
ERROR_CODE_1 = 1
|
10
|
-
ERROR_MSG_1 = 'The error message for code 1.'
|
11
|
-
ERROR_STATUS_1 = :failed
|
12
|
-
|
13
|
-
class AppendError < CodeError::Base
|
14
|
-
def error_codes
|
15
|
-
{
|
16
|
-
ERROR_CODE_1 => {
|
17
|
-
status: ERROR_STATUS_1,
|
18
|
-
msg: ERROR_MSG_1,
|
19
|
-
}
|
20
|
-
}
|
21
|
-
end
|
22
|
-
|
23
|
-
def config
|
24
|
-
super.merge({
|
25
|
-
:code_in_msg => :append
|
26
|
-
})
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
class PrependError < CodeError::Base
|
31
|
-
def error_codes
|
32
|
-
{
|
33
|
-
ERROR_CODE_1 => {
|
34
|
-
status: ERROR_STATUS_1,
|
35
|
-
msg: ERROR_MSG_1,
|
36
|
-
}
|
37
|
-
}
|
38
|
-
end
|
39
|
-
|
40
|
-
def config
|
41
|
-
super.merge({
|
42
|
-
:code_in_msg => :prepand
|
43
|
-
})
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
class NoneError < CodeError::Base
|
48
|
-
def error_codes
|
49
|
-
{
|
50
|
-
ERROR_CODE_1 => {
|
51
|
-
status: ERROR_STATUS_1,
|
52
|
-
msg: ERROR_MSG_1,
|
53
|
-
}
|
54
|
-
}
|
55
|
-
end
|
56
|
-
|
57
|
-
def config
|
58
|
-
super.merge({
|
59
|
-
:code_in_msg => :none
|
60
|
-
})
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
def test_code_in_msg_should_return_a_message_with_the_code_appended_after_it_if_append_config_is_given
|
65
|
-
e = AppendError.new(ERROR_CODE_1)
|
66
|
-
assert(e.msg == "#{ERROR_MSG_1}(#{ERROR_CODE_1})")
|
67
|
-
end
|
68
|
-
|
69
|
-
def test_code_in_msg_should_return_a_message_with_the_code_prepended_before_it_if_prepend_config_is_given
|
70
|
-
e = PrependError.new(ERROR_CODE_1)
|
71
|
-
assert(e.msg == "(#{ERROR_CODE_1})#{ERROR_MSG_1}")
|
72
|
-
end
|
73
|
-
|
74
|
-
def test_code_in_msg_should_return_a_message_without_the_code_if_none_config_is_given
|
75
|
-
e = NoneError.new(ERROR_CODE_1)
|
76
|
-
assert(e.msg == "#{ERROR_MSG_1}")
|
77
|
-
end
|
78
|
-
|
79
|
-
def test_code_in_msg_should_return_a_message_without_the_code_if_it_is_a_success_error
|
80
|
-
e = AppendError.new(CodeError::SUCCESS_CODE)
|
81
|
-
assert(e.msg == "#{CodeError::SUCCESS_MSG}")
|
82
|
-
e = PrependError.new(CodeError::SUCCESS_CODE)
|
83
|
-
assert(e.msg == "#{CodeError::SUCCESS_MSG}")
|
84
|
-
end
|
85
|
-
end
|
data/test/test_new.rb
DELETED
@@ -1,100 +0,0 @@
|
|
1
|
-
require "test/unit"
|
2
|
-
|
3
|
-
$LOAD_PATH.unshift("#{File.dirname(__FILE__)}")
|
4
|
-
require "test_helper"
|
5
|
-
require "code_error"
|
6
|
-
|
7
|
-
class TestNew < Test::Unit::TestCase
|
8
|
-
|
9
|
-
class InvalidError < CodeError::Base; end;
|
10
|
-
|
11
|
-
ERROR_CODE_1 = 1
|
12
|
-
ERROR_MSG_1 = 'The error message for code 1.'
|
13
|
-
ERROR_STATUS_1 = :failed
|
14
|
-
|
15
|
-
ERROR_CODE_2 = 2
|
16
|
-
ERROR_MSG_2 = 'The error message for code 2.'
|
17
|
-
ERROR_STATUS_2 = :failed
|
18
|
-
|
19
|
-
ERROR_CODE_UNDEFINED = 55688
|
20
|
-
|
21
|
-
class TestError < CodeError::Base
|
22
|
-
def error_codes
|
23
|
-
{
|
24
|
-
ERROR_CODE_1 => {
|
25
|
-
:status => ERROR_STATUS_1,
|
26
|
-
:msg => ERROR_MSG_1,
|
27
|
-
},
|
28
|
-
ERROR_CODE_2 => {
|
29
|
-
:status => ERROR_STATUS_2,
|
30
|
-
:msg => ERROR_MSG_2,
|
31
|
-
:masked => true
|
32
|
-
}
|
33
|
-
}
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_new_should_raise_an_exception_if_the_error_codes_is_undefined
|
38
|
-
assert_raise(RuntimeError) { InvalidError.new }
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_new_should_return_the_correspond_data_if_given_code_is_defined
|
42
|
-
e = TestError.new(ERROR_CODE_1)
|
43
|
-
assert(e.code == ERROR_CODE_1)
|
44
|
-
assert(e.status == ERROR_STATUS_1)
|
45
|
-
assert(e.msg == "#{ERROR_MSG_1}(#{ERROR_CODE_1})")
|
46
|
-
assert(e.data == { :code => ERROR_CODE_1,
|
47
|
-
:status => ERROR_STATUS_1,
|
48
|
-
:msg => "#{ERROR_MSG_1}(#{ERROR_CODE_1})",
|
49
|
-
:info => {} })
|
50
|
-
assert(e.message == e.data.inspect)
|
51
|
-
assert(!e.internal?)
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_new_should_return_an_internal_error_with_given_code_if_given_code_is_undefined
|
55
|
-
e = TestError.new(ERROR_CODE_UNDEFINED)
|
56
|
-
assert(e.code == ERROR_CODE_UNDEFINED)
|
57
|
-
assert(e.status == CodeError::INTERNAL_STATUS)
|
58
|
-
assert(e.msg == "#{CodeError::INTERNAL_MSG}(#{ERROR_CODE_UNDEFINED})")
|
59
|
-
assert(e.internal?)
|
60
|
-
end
|
61
|
-
|
62
|
-
def test_new_should_return_an_internal_error_with_given_msg_if_given_code_is_a_string
|
63
|
-
msg = 'An error message.'
|
64
|
-
e = TestError.new(msg)
|
65
|
-
assert(e.code == CodeError::INTERNAL_CODE)
|
66
|
-
assert(e.status == CodeError::INTERNAL_STATUS)
|
67
|
-
assert(e.msg == "#{msg}(#{CodeError::INTERNAL_CODE})")
|
68
|
-
assert(e.internal?)
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_new_should_return_an_success_error_if_given_code_is_a_success_code
|
72
|
-
e = TestError.new(CodeError::SUCCESS_CODE)
|
73
|
-
assert(e.code == CodeError::SUCCESS_CODE)
|
74
|
-
assert(e.status == CodeError::SUCCESS_STATUS)
|
75
|
-
assert(e.msg == "#{CodeError::SUCCESS_MSG}")
|
76
|
-
assert(!e.internal?)
|
77
|
-
end
|
78
|
-
|
79
|
-
def test_new_should_mask_the_msg_if_given_msg_is_masked
|
80
|
-
e = TestError.new(ERROR_CODE_1, :masked)
|
81
|
-
assert(e.code == ERROR_CODE_1)
|
82
|
-
assert(e.status == ERROR_STATUS_1)
|
83
|
-
assert(e.msg == "#{CodeError::MASKED_MSG}(#{ERROR_CODE_1})")
|
84
|
-
assert(!e.internal?)
|
85
|
-
end
|
86
|
-
|
87
|
-
def test_new_should_mask_the_msg_by_default_if_true_masked_config_is_given
|
88
|
-
e = TestError.new(ERROR_CODE_2)
|
89
|
-
assert(e.code == ERROR_CODE_2)
|
90
|
-
assert(e.status == ERROR_STATUS_2)
|
91
|
-
assert(e.msg == "#{CodeError::MASKED_MSG}(#{ERROR_CODE_2})")
|
92
|
-
assert(!e.internal?)
|
93
|
-
end
|
94
|
-
|
95
|
-
def test_new_should_contain_the_info_if_an_info_is_given
|
96
|
-
info = 'some information'
|
97
|
-
e = TestError.new(ERROR_CODE_1, nil, info)
|
98
|
-
assert(e.info == info)
|
99
|
-
end
|
100
|
-
end
|