bankocr 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 51e9f6ed181fb6340334fb1d1aab02b63fef8ba1
4
+ data.tar.gz: 63b85e8d8dc37b40d8ff16bfde34cf6457276854
5
+ SHA512:
6
+ metadata.gz: 52eb966fadec59720b6d2474dbffc5be72a784d4cdc701fbe62c45f1df28bc8f7c7336002f2d710b993d309b77d8b7035e1345e79995995792d5cf0644f147b4
7
+ data.tar.gz: 29b79b21203e50fce61e8c297efac31ae5c87868b03f45138358539c4578a84f7bd2ddb4d356631be1ffb003acc1819bd0c60381cdac25991a78bbe6e10b8f2d
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ *.out
2
+ *.gem
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ rvm:
2
+ - 2.1.2
3
+ script: bundle exec rspec spec
4
+ notifications:
5
+ email: false
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rspec', '~> 3.0.0'
data/Gemfile.lock ADDED
@@ -0,0 +1,22 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ diff-lcs (1.2.5)
5
+ rspec (3.0.0)
6
+ rspec-core (~> 3.0.0)
7
+ rspec-expectations (~> 3.0.0)
8
+ rspec-mocks (~> 3.0.0)
9
+ rspec-core (3.0.2)
10
+ rspec-support (~> 3.0.0)
11
+ rspec-expectations (3.0.2)
12
+ diff-lcs (>= 1.2.0, < 2.0)
13
+ rspec-support (~> 3.0.0)
14
+ rspec-mocks (3.0.2)
15
+ rspec-support (~> 3.0.0)
16
+ rspec-support (3.0.2)
17
+
18
+ PLATFORMS
19
+ ruby
20
+
21
+ DEPENDENCIES
22
+ rspec (~> 3.0.0)
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Javier Cervantes
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,32 @@
1
+ # BankOCR Kata
2
+
3
+ This repository provides a solution for BankOCR kata.
4
+
5
+ [![Build status](https://travis-ci.org/solojavier/BankOCR.svg)](https://travis-ci.org/solojavier/BankOCR)
6
+
7
+ ## What is it about?
8
+
9
+ * Description of the problem can be found here: http://code.joejag.com/coding-dojo-bank-ocr/
10
+ * Current implementation covers the first 3 use cases.
11
+
12
+ ## How to run?
13
+
14
+ Use the following commands:
15
+
16
+ ```
17
+ gem install backocr
18
+ bankocr ./bin/input.in ./bin/output
19
+ ```
20
+
21
+ * It will generate a file under /bin directory with results
22
+ * If you want to modify input edit file /bin/input.in
23
+
24
+ ## Tests
25
+
26
+ To run test use the following commands:
27
+
28
+ ```
29
+ gem install bundler
30
+ bundle install
31
+ bundle exec rspec spec
32
+ ```
data/bankocr.gemspec ADDED
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'bankocr/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "bankocr"
8
+ spec.version = BankOCR::VERSION
9
+ spec.authors = ["Javier Cervantes"]
10
+ spec.email = ["javier@hybridgroup.com"]
11
+ spec.summary = %q{Solution to BankOCR Kata}
12
+ spec.description = %q{Solution in ruby of BankOCR Kata: http://code.joejag.com/coding-dojo-bank-ocr/}
13
+ spec.homepage = "https://github.com/solojavier/bankOCR"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.6"
22
+ spec.add_development_dependency "rspec", "~> 3.0"
23
+ end
data/bin/bankocr ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bankocr'
4
+
5
+ BankOCR.process(ARGV[0], ARGV[1])
6
+
7
+ p 'OCR accounts report generated succesfully'
data/bin/input.in ADDED
@@ -0,0 +1,48 @@
1
+ _
2
+ | | | | | | | | |
3
+ | | | | | | | | |
4
+
5
+ _ _ _ _ _ _ _ _
6
+ | | | | | | | | |
7
+ | | | | | | | | |
8
+
9
+ _ _ _ _ _ _ _ _ _
10
+ _|| || ||_|| || || || || |
11
+ |_ |_||_||_||_||_||_||_||_|
12
+
13
+ _ _ _ _ _ _ _ _ _
14
+ _| _| _| _||_| _| _| _| _|
15
+ _| _| _| _| _| _| _| _| _|
16
+
17
+ _ _ _ _ _ _ _ _ _
18
+ |_||_||_||_||_||_||_||_||_|
19
+ |_||_||_||_||_||_||_||_||_|
20
+
21
+ _ _ _ _ _ _ _ _ _
22
+ |_ |_ |_ |_ |_ |_ |_ |_ |_
23
+ _| _| _| _| _| _| _| _| _|
24
+
25
+ _ _ _ _ _ _ _ _ _
26
+ |_ |_ |_ |_ |_ |_ |_ |_ |_
27
+ |_||_||_||_||_||_||_||_||_|
28
+
29
+ _ _ _ _ _ _ _ _ _
30
+ |_||_||_||_||_||_||_||_||_|
31
+ _| _| _| _| _| _| _| _| _|
32
+
33
+ _ _ _ _ _ _ _
34
+ |_||_|| || ||_ | | ||_
35
+ | _||_||_||_| | | | _|
36
+
37
+ _ _ _ _ _ _ _
38
+ | _| _||_||_ |_ ||_||_|
39
+ ||_ _| | _||_| ||_| _|
40
+
41
+ _ _ _ _ _ _ _ _
42
+ | || || || || || || ||_ |
43
+ |_||_||_||_||_||_||_| _| |
44
+
45
+ _ _ _ _ _ _ _
46
+ |_||_|| ||_||_ | | | _
47
+ | _||_||_||_| | | | _|
48
+
@@ -0,0 +1,31 @@
1
+ module BankOCR
2
+ class AccountNumber
3
+
4
+ attr_reader :error_message, :digits
5
+
6
+ def initialize(digits)
7
+ @digits = digits
8
+ @valid = false
9
+
10
+ validate!
11
+ end
12
+
13
+ def valid?
14
+ @valid
15
+ end
16
+
17
+ def validate!
18
+ @error_message = 'ILL' if @digits.include?('?')
19
+ @error_message ||= 'ERR' if sum(@digits) % 11 != 0
20
+
21
+ @valid = true unless @error_message
22
+ end
23
+
24
+ private
25
+
26
+ def sum(account_number)
27
+ (0..8).map { |i| account_number[i].to_i * (i + 2) }.reduce(:+)
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,3 @@
1
+ module BankOCR
2
+ VERSION = "0.0.1"
3
+ end
data/lib/bankocr.rb ADDED
@@ -0,0 +1,14 @@
1
+ require "bankocr/version"
2
+
3
+ module BankOCR
4
+ autoload :FileParser, 'file_parser'
5
+ autoload :AccountNumber, 'account_number'
6
+ autoload :ReportGenerator, 'report_generator'
7
+
8
+ def self.process(input, output)
9
+ digit_strings = BankOCR::FileParser.new(input).entries
10
+ account_numbers = digit_strings.map { |d| BankOCR::AccountNumber.new(d) }
11
+
12
+ BankOCR::ReportGenerator.new(output, account_numbers).save!
13
+ end
14
+ end
@@ -0,0 +1,59 @@
1
+ module BankOCR
2
+ class FileParser
3
+
4
+ def initialize(input_path)
5
+ @input_path = input_path
6
+ end
7
+
8
+ def entries
9
+ @entries || read_entries
10
+ end
11
+
12
+ def read_entries
13
+ @entries = []
14
+ file = File.open(@input_path)
15
+ @entries << parse_entry(file) until file.eof?
16
+
17
+ @entries
18
+ rescue
19
+ []
20
+ ensure
21
+ file.close if file
22
+ end
23
+
24
+ private
25
+
26
+ def parse_entry(file)
27
+ top = file.readline
28
+ middle = file.readline
29
+ bottom = file.readline
30
+ _blank = file.readline
31
+
32
+ entry_to_digits(top, middle, bottom)
33
+ end
34
+
35
+ def entry_to_digits(top, middle, bottom)
36
+ (0..8).map do |i|
37
+ low = (i * 3)
38
+ high = ((i + 1) * 3) - 1
39
+ shape = top[low..high] + middle[low..high] + bottom[low..high]
40
+
41
+ conversions[shape] || '?'
42
+ end.join
43
+ end
44
+
45
+ def conversions
46
+ { ' _ | ||_|' => '0',
47
+ ' | |' => '1',
48
+ ' _ _||_ ' => '2',
49
+ ' _ _| _|' => '3',
50
+ ' |_| |' => '4',
51
+ ' _ |_ _|' => '5',
52
+ ' _ |_ |_|' => '6',
53
+ ' _ | |' => '7',
54
+ ' _ |_||_|' => '8',
55
+ ' _ |_| _|' => '9' }
56
+ end
57
+
58
+ end
59
+ end
@@ -0,0 +1,22 @@
1
+ module BankOCR
2
+ class ReportGenerator
3
+
4
+ def initialize(output_path, account_numbers)
5
+ @output_path = output_path
6
+ @account_numbers = account_numbers
7
+ end
8
+
9
+ def save!
10
+ file = File.open(@output_path, 'w+')
11
+
12
+ @account_numbers.each do |account|
13
+ file.write account.digits
14
+ file.write " #{account.error_message}" if !account.valid?
15
+ file.write "\n"
16
+ end
17
+
18
+ file.close
19
+ end
20
+
21
+ end
22
+ end
data/lib/utils.rb ADDED
@@ -0,0 +1,84 @@
1
+ # Module for BankOCR Application
2
+ module BankOCR
3
+ # Utility functions to perform data conversions
4
+ module Utils
5
+ # Parses an OCR machine input file and returns an array of account numbers
6
+ def parse_file(input_path)
7
+ file = File.open(input_path)
8
+ numbers = []
9
+
10
+ numbers << next_entry_to_digits(file) until file.eof?
11
+ numbers
12
+ rescue
13
+ []
14
+ ensure
15
+ file.close if file
16
+ end
17
+
18
+ # Receives a list of account numbers and returns validation information
19
+ def validate_accounts(account_numbers)
20
+ account_numbers.map do |number|
21
+ valid, message = validate(number.to_s)
22
+
23
+ { account_number: number, valid: valid, message: message }
24
+ end
25
+ end
26
+
27
+ # Creates a file report in ouput path with accounts received
28
+ def generate_report(output_path, accounts)
29
+ file = File.open(output_path, 'w+')
30
+
31
+ accounts.select { |a| a[:account_number] }.each do |acc|
32
+ file.write acc[:account_number]
33
+ file.write " #{acc[:message]}" if !acc[:valid] && acc[:message]
34
+ file.write "\n"
35
+ end
36
+
37
+ file.close
38
+ end
39
+
40
+ private
41
+
42
+ def next_entry_to_digits(file)
43
+ top = file.readline
44
+ middle = file.readline
45
+ bottom = file.readline
46
+ _blank = file.readline
47
+
48
+ (0..8).map do |i|
49
+ low = (i * 3)
50
+ high = ((i + 1) * 3) - 1
51
+ shape = top[low..high] + middle[low..high] + bottom[low..high]
52
+
53
+ conversions[shape] || '?'
54
+ end.join
55
+ end
56
+
57
+ def conversions
58
+ { ' _ | ||_|' => '0',
59
+ ' | |' => '1',
60
+ ' _ _||_ ' => '2',
61
+ ' _ _| _|' => '3',
62
+ ' |_| |' => '4',
63
+ ' _ |_ _|' => '5',
64
+ ' _ |_ |_|' => '6',
65
+ ' _ | |' => '7',
66
+ ' _ |_||_|' => '8',
67
+ ' _ |_| _|' => '9' }
68
+ end
69
+
70
+ def sum(account_number)
71
+ (0..8).map { |i| account_number[i].to_i * (i + 2) }.reduce(:+)
72
+ end
73
+
74
+ def validate(number)
75
+ if number.include?('?')
76
+ [false, 'ILL']
77
+ elsif sum(number) % 11 != 0
78
+ [false, 'ERR']
79
+ else
80
+ [true, 'OK']
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,24 @@
1
+ require 'bankocr'
2
+
3
+ describe 'Application execution' do
4
+
5
+ let(:input) { File.dirname(__FILE__) + '/input.in' }
6
+ let(:output) { File.dirname(__FILE__) + '/report.out' }
7
+
8
+ let(:report) do
9
+ "711111111\n777777177\n200800000\n333393333\n888888888 ERR\n" \
10
+ "555555555 ERR\n666666666 ERR\n999999999 ERR\n490067715 ERR\n" \
11
+ "123456789\n000000051\n49086771? ILL\n"
12
+ end
13
+
14
+ before do
15
+ File.delete(output) if File.exists?(output)
16
+ end
17
+
18
+ it 'parses file and creates report', integration: true do
19
+ BankOCR.process(input, output)
20
+
21
+ expect(File.open(output).read).to eq(report)
22
+ end
23
+
24
+ end
data/spec/bin/input.in ADDED
@@ -0,0 +1,48 @@
1
+ _
2
+ | | | | | | | | |
3
+ | | | | | | | | |
4
+
5
+ _ _ _ _ _ _ _ _
6
+ | | | | | | | | |
7
+ | | | | | | | | |
8
+
9
+ _ _ _ _ _ _ _ _ _
10
+ _|| || ||_|| || || || || |
11
+ |_ |_||_||_||_||_||_||_||_|
12
+
13
+ _ _ _ _ _ _ _ _ _
14
+ _| _| _| _||_| _| _| _| _|
15
+ _| _| _| _| _| _| _| _| _|
16
+
17
+ _ _ _ _ _ _ _ _ _
18
+ |_||_||_||_||_||_||_||_||_|
19
+ |_||_||_||_||_||_||_||_||_|
20
+
21
+ _ _ _ _ _ _ _ _ _
22
+ |_ |_ |_ |_ |_ |_ |_ |_ |_
23
+ _| _| _| _| _| _| _| _| _|
24
+
25
+ _ _ _ _ _ _ _ _ _
26
+ |_ |_ |_ |_ |_ |_ |_ |_ |_
27
+ |_||_||_||_||_||_||_||_||_|
28
+
29
+ _ _ _ _ _ _ _ _ _
30
+ |_||_||_||_||_||_||_||_||_|
31
+ _| _| _| _| _| _| _| _| _|
32
+
33
+ _ _ _ _ _ _ _
34
+ |_||_|| || ||_ | | ||_
35
+ | _||_||_||_| | | | _|
36
+
37
+ _ _ _ _ _ _ _
38
+ | _| _||_||_ |_ ||_||_|
39
+ ||_ _| | _||_| ||_| _|
40
+
41
+ _ _ _ _ _ _ _ _
42
+ | || || || || || || ||_ |
43
+ |_||_||_||_||_||_||_| _| |
44
+
45
+ _ _ _ _ _ _ _
46
+ |_||_|| ||_||_ | | | _
47
+ | _||_||_||_| | | | _|
48
+
@@ -0,0 +1,44 @@
1
+ require 'bankocr'
2
+
3
+ describe BankOCR::AccountNumber do
4
+
5
+ context 'when validating account numbers' do
6
+
7
+ let(:valid_numbers) { %w(711111111b 123456789 490867715) }
8
+ let(:invalid_numbers) { %w(888888888 490067715 012345678) }
9
+ let(:wrong_numbers) { %w(86110?356) }
10
+
11
+ let(:wrong_accounts) do
12
+ [ { account_number: '86110??36', valid: false, message: 'ILL' } ]
13
+ end
14
+
15
+ it 'validates valid account numbers' do
16
+ valid_numbers.each do |n|
17
+ account = described_class.new(n)
18
+
19
+ expect(account.valid?).to eq(true)
20
+ expect(account.error_message).to eq(nil)
21
+ end
22
+ end
23
+
24
+ it 'validates invalid account numbers' do
25
+ invalid_numbers.each do |n|
26
+ account = described_class.new(n)
27
+
28
+ expect(account.valid?).to eq(false)
29
+ expect(account.error_message).to eq('ERR')
30
+ end
31
+ end
32
+
33
+ it 'validates wrong account numbers' do
34
+ wrong_numbers.each do |n|
35
+ account = described_class.new(n)
36
+
37
+ expect(account.valid?).to eq(false)
38
+ expect(account.error_message).to eq('ILL')
39
+ end
40
+ end
41
+
42
+ end
43
+
44
+ end
@@ -0,0 +1,28 @@
1
+ require 'bankocr'
2
+
3
+ describe BankOCR::FileParser do
4
+
5
+ let(:input_path) { File.dirname(__FILE__) + '/user_story_1.in' }
6
+
7
+ context 'when parsing a file' do
8
+
9
+ let(:account_numbers) do
10
+ %w(000000000 111111111 222222222 333333333 444444444 555555555 666666666
11
+ 777777777 888888888 999999999 123456789 12345678?)
12
+ end
13
+
14
+ it 'returns an array with account numbers' do
15
+ parser = described_class.new(input_path)
16
+
17
+ expect(parser.entries).to eq(account_numbers)
18
+ end
19
+
20
+ it 'returns empty account_numbers if error reading file' do
21
+ parser = described_class.new('invalid_path')
22
+
23
+ expect(parser.entries).to eq([])
24
+ end
25
+
26
+ end
27
+
28
+ end
@@ -0,0 +1,38 @@
1
+ require 'bankocr'
2
+
3
+ describe BankOCR::ReportGenerator do
4
+
5
+ let(:accounts) do
6
+ [
7
+ BankOCR::AccountNumber.new('457508000'),
8
+ BankOCR::AccountNumber.new('664371495'),
9
+ BankOCR::AccountNumber.new('86110??36')
10
+ ]
11
+ end
12
+
13
+ let(:expected_content) do
14
+ "457508000\n664371495 ERR\n86110??36 ILL\n"
15
+ end
16
+
17
+ let(:output_path) { File.dirname(__FILE__) + '/user_story_3.out' }
18
+
19
+ let(:generated_content) do
20
+ File.open(output_path).read
21
+ end
22
+
23
+ before do
24
+ File.delete(output_path) if File.exists?(output_path)
25
+ end
26
+
27
+ it 'creates empty file if accounts are not sent' do
28
+ described_class.new(output_path, []).save!
29
+
30
+ expect(generated_content).to eq('')
31
+ end
32
+
33
+ it 'creates expected content' do
34
+ described_class.new(output_path, accounts).save!
35
+
36
+ expect(generated_content).to eq(expected_content)
37
+ end
38
+ end
@@ -0,0 +1,48 @@
1
+ _ _ _ _ _ _ _ _ _
2
+ | || || || || || || || || |
3
+ |_||_||_||_||_||_||_||_||_|
4
+
5
+
6
+ | | | | | | | | |
7
+ | | | | | | | | |
8
+
9
+ _ _ _ _ _ _ _ _ _
10
+ _| _| _| _| _| _| _| _| _|
11
+ |_ |_ |_ |_ |_ |_ |_ |_ |_
12
+
13
+ _ _ _ _ _ _ _ _ _
14
+ _| _| _| _| _| _| _| _| _|
15
+ _| _| _| _| _| _| _| _| _|
16
+
17
+
18
+ |_||_||_||_||_||_||_||_||_|
19
+ | | | | | | | | |
20
+
21
+ _ _ _ _ _ _ _ _ _
22
+ |_ |_ |_ |_ |_ |_ |_ |_ |_
23
+ _| _| _| _| _| _| _| _| _|
24
+
25
+ _ _ _ _ _ _ _ _ _
26
+ |_ |_ |_ |_ |_ |_ |_ |_ |_
27
+ |_||_||_||_||_||_||_||_||_|
28
+
29
+ _ _ _ _ _ _ _ _ _
30
+ | | | | | | | | |
31
+ | | | | | | | | |
32
+
33
+ _ _ _ _ _ _ _ _ _
34
+ |_||_||_||_||_||_||_||_||_|
35
+ |_||_||_||_||_||_||_||_||_|
36
+
37
+ _ _ _ _ _ _ _ _ _
38
+ |_||_||_||_||_||_||_||_||_|
39
+ _| _| _| _| _| _| _| _| _|
40
+
41
+ _ _ _ _ _ _ _
42
+ | _| _||_||_ |_ ||_||_|
43
+ ||_ _| | _||_| ||_| _|
44
+
45
+ _ _ _ _ _ _ _
46
+ | _| _||_||_ |_ ||_|| |
47
+ ||_ _| | _||_| ||_| _|
48
+
metadata ADDED
@@ -0,0 +1,102 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bankocr
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Javier Cervantes
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-07-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.0'
41
+ description: 'Solution in ruby of BankOCR Kata: http://code.joejag.com/coding-dojo-bank-ocr/'
42
+ email:
43
+ - javier@hybridgroup.com
44
+ executables:
45
+ - bankocr
46
+ - input.in
47
+ extensions: []
48
+ extra_rdoc_files: []
49
+ files:
50
+ - ".gitignore"
51
+ - ".travis.yml"
52
+ - Gemfile
53
+ - Gemfile.lock
54
+ - LICENSE.txt
55
+ - README.md
56
+ - bankocr.gemspec
57
+ - bin/bankocr
58
+ - bin/input.in
59
+ - lib/account_number.rb
60
+ - lib/bankocr.rb
61
+ - lib/bankocr/version.rb
62
+ - lib/file_parser.rb
63
+ - lib/report_generator.rb
64
+ - lib/utils.rb
65
+ - spec/bin/bankocr_spec.rb
66
+ - spec/bin/input.in
67
+ - spec/lib/account_number_spec.rb
68
+ - spec/lib/file_parser_spec.rb
69
+ - spec/lib/report_generator_spec.rb
70
+ - spec/lib/user_story_1.in
71
+ homepage: https://github.com/solojavier/bankOCR
72
+ licenses:
73
+ - MIT
74
+ metadata: {}
75
+ post_install_message:
76
+ rdoc_options: []
77
+ require_paths:
78
+ - lib
79
+ required_ruby_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ requirements: []
90
+ rubyforge_project:
91
+ rubygems_version: 2.2.2
92
+ signing_key:
93
+ specification_version: 4
94
+ summary: Solution to BankOCR Kata
95
+ test_files:
96
+ - spec/bin/bankocr_spec.rb
97
+ - spec/bin/input.in
98
+ - spec/lib/account_number_spec.rb
99
+ - spec/lib/file_parser_spec.rb
100
+ - spec/lib/report_generator_spec.rb
101
+ - spec/lib/user_story_1.in
102
+ has_rdoc: