sepa_reason_codes 1.0.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.
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sepa_reason_codes/version'
4
+ require 'yaml'
5
+
6
+ # Usage:
7
+ #
8
+ # SepaReasonCodes.find('AC01')
9
+ #
10
+ # @returns ReasonCodeStruct{
11
+ # code: 'AC01',
12
+ # iso_name: '',
13
+ # description: '',
14
+ # probable_status: ''
15
+ # }
16
+
17
+ module SepaReasonCodes
18
+ class Error < StandardError; end
19
+
20
+ ParsedReasonCodes =
21
+ YAML.load_file(File.join(__dir__, ['reason_codes.yml'])).freeze
22
+
23
+ ReasonCodeStruct =
24
+ Struct.new(:code, :iso_name, :description, :probable_status)
25
+
26
+ # @param ~String~ Sepa Reason Code; Case insensitive
27
+ # Read more at : https://www.hettwer-beratung.de/sepa-spezialwissen/sepa-reason-codes/
28
+
29
+ # Parses lib/reason_codes.yml, retrieves and
30
+ # returns ReasonCode Struct with accessors
31
+ # code, iso_name, description, probable_status
32
+
33
+ def self.find(code)
34
+ reason_code =
35
+ ParsedReasonCodes.fetch(code&.upcase, nil)
36
+
37
+ return unless reason_code
38
+
39
+ reason_code_struct(reason_code)
40
+ end
41
+
42
+ # @returns collection [reason_code]
43
+
44
+ def self.all
45
+ ParsedReasonCodes.values.map do |reason_code|
46
+ reason_code_struct(reason_code)
47
+ end
48
+ end
49
+
50
+ def self.reason_code_struct(reason_code)
51
+ ReasonCodeStruct.new(
52
+ reason_code.fetch('code'),
53
+ reason_code.fetch('iso_name'),
54
+ reason_code.fetch('description'),
55
+ reason_code.fetch('probable_status')
56
+ )
57
+ end
58
+
59
+ private_constant :ParsedReasonCodes
60
+ private_class_method :reason_code_struct
61
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SepaReasonCodes
4
+ VERSION = '1.0.1'
5
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/sepa_reason_codes/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'sepa_reason_codes'
7
+ spec.version = SepaReasonCodes::VERSION
8
+ spec.authors = ['Sahil Gadimbayli']
9
+ spec.email = ['hi@ramblingcode.dev']
10
+
11
+ spec.summary = 'Minimal, plain old ruby gem to work with Sepa Reason Codes.'
12
+ spec.homepage = 'https://github.com/ramblingcode/sepa-reason-codes'
13
+ spec.license = 'MIT'
14
+ spec.required_ruby_version = Gem::Requirement.new('>= 2.3.0')
15
+
16
+ spec.metadata['homepage_uri'] = spec.homepage
17
+ spec.metadata['source_code_uri'] = 'https://github.com/ramblingcode/sepa-reason-codes'
18
+
19
+ # Specify which files should be added to the gem when it is released.
20
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
21
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
22
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
23
+ end
24
+
25
+ spec.bindir = 'exe'
26
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
+ spec.require_paths = ['lib']
28
+
29
+ spec.add_development_dependency 'rake'
30
+ spec.add_development_dependency 'rspec'
31
+ spec.add_development_dependency 'rubocop'
32
+ end
metadata ADDED
@@ -0,0 +1,103 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sepa_reason_codes
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Sahil Gadimbayli
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2020-05-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubocop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description:
56
+ email:
57
+ - hi@ramblingcode.dev
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".circleci/config.yml"
63
+ - ".gitignore"
64
+ - ".rspec"
65
+ - ".rubocop.yml"
66
+ - CODE_OF_CONDUCT.md
67
+ - Gemfile
68
+ - Gemfile.lock
69
+ - LICENSE.txt
70
+ - README.md
71
+ - Rakefile
72
+ - bin/console
73
+ - bin/setup
74
+ - lib/reason_codes.yml
75
+ - lib/sepa_reason_codes.rb
76
+ - lib/sepa_reason_codes/version.rb
77
+ - sepa_reason_codes.gemspec
78
+ homepage: https://github.com/ramblingcode/sepa-reason-codes
79
+ licenses:
80
+ - MIT
81
+ metadata:
82
+ homepage_uri: https://github.com/ramblingcode/sepa-reason-codes
83
+ source_code_uri: https://github.com/ramblingcode/sepa-reason-codes
84
+ post_install_message:
85
+ rdoc_options: []
86
+ require_paths:
87
+ - lib
88
+ required_ruby_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 2.3.0
93
+ required_rubygems_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ requirements: []
99
+ rubygems_version: 3.0.3
100
+ signing_key:
101
+ specification_version: 4
102
+ summary: Minimal, plain old ruby gem to work with Sepa Reason Codes.
103
+ test_files: []