embratel 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.org ADDED
@@ -0,0 +1,10 @@
1
+ * 1.1.0
2
+ #+BEGIN_SRC
3
+ ecbfb6a Improved cost regexp, made fixture reflect moar reality.
4
+ b9140a4 Don't require relative
5
+ 492dd1c Implemented the CSVParser.
6
+ c122e79 Make PhoneBill use CSVParser.
7
+ 7d83b31 Better exception message for parsing errors.
8
+ 37170f0 Parse and treat fees from phone bills files, too.
9
+ 41d0a5e Reflect latest changes in the README.
10
+ #+END_SRC
data/README.org CHANGED
@@ -17,25 +17,24 @@ $ gem install embratel
17
17
  - vá em 'Opções' e selecione 'Exportar toda a conta'
18
18
  - exporte como 'Excel - CSV'
19
19
 
20
- *** Classes da gem
21
- #+BEGIN_SRC
22
- Embratel::PhoneBill
23
- Embratel::Call
24
- #+END_SRC
25
-
26
20
  *** Com o arquivo da fatura você pode
27
21
  #+BEGIN_SRC
28
- # Instancie uma fatura.
29
22
  >> phone_bill = Embratel::PhoneBill.new("/path/to/fatura.csv")
30
23
 
31
- # PhoneBill#calls retorna um array com todas as ligações da fatura (objetos Embratel::Call).
24
+ # Array com todas as ligações da fatura (objetos Embratel::Call).
32
25
  >> phone_bill.calls
33
26
 
34
- # PhoneBill#total retorna o custo total da fatura.
27
+ # Array com todas as taxas da fatura (objetos Embratel::Fee).
28
+ >> phone_bill.fees
29
+
30
+ # Array com todas as ligações e taxas da fatura.
31
+ >> phone_bill.payables
32
+
33
+ # Custo total da fatura.
35
34
  >> phone_bill.total
36
35
  #+END_SRC
37
36
 
38
- *** attr_accessors disponíveis para objetos Embratel::Call
37
+ *** attr_accessors disponíveis para objetos Embratel::Call e Embratel::Fee
39
38
  #+BEGIN_SRC
40
39
  id
41
40
  caller
data/lib/embratel.rb CHANGED
@@ -5,11 +5,17 @@ else
5
5
  require 'csv'
6
6
  end
7
7
 
8
- require 'embratel/call.rb'
9
- require 'embratel/phone_bill.rb'
8
+ require File.expand_path('../embratel/payable', __FILE__)
9
+ require File.expand_path('../embratel/call', __FILE__)
10
+ require File.expand_path('../embratel/fee', __FILE__)
11
+ require File.expand_path('../embratel/csv_parser', __FILE__)
12
+ require File.expand_path('../embratel/phone_bill', __FILE__)
10
13
 
11
14
  module Embratel
12
- VERSION = '1.0.0'
15
+ VERSION = '1.1.0'
13
16
 
14
17
  class InvalidPhoneBillFileError < StandardError; end
18
+ class InvalidRowsError < StandardError; end
19
+ class NonCSVFileError < StandardError; end
20
+ class InvalidCSVFileError < StandardError; end
15
21
  end
data/lib/embratel/call.rb CHANGED
@@ -1,36 +1,9 @@
1
1
  module Embratel
2
- class Call
2
+ class Call < Payable
3
3
  NUMBER_CALLED_REGEXP = /^\d{10}$/
4
- COST_REGEXP = /^\d*(\.\d+)?$/
5
- FIELDS = %w[id
6
- caller
7
- description
8
- date
9
- number_called
10
- caller_local
11
- called_local
12
- start_time
13
- end_time
14
- imp
15
- country
16
- quantity
17
- unit
18
- cost]
19
-
20
- FIELDS.each { |field| attr_accessor field.to_sym }
21
-
22
- def initialize(csv_row)
23
- @csv_row_size = csv_row.size
24
-
25
- FIELDS.each_with_index do |field, index|
26
- instance_variable_set("@#{field}".to_sym, csv_row[index].to_s.strip)
27
- end
28
- end
29
4
 
30
5
  def valid?
31
- @csv_row_size == 14 &&
32
- number_called =~ NUMBER_CALLED_REGEXP &&
33
- cost =~ COST_REGEXP
6
+ super && !!(number_called =~ NUMBER_CALLED_REGEXP)
34
7
  end
35
8
  end
36
9
  end
@@ -0,0 +1,35 @@
1
+ # encoding: utf-8
2
+
3
+ module Embratel
4
+ module CSVParser
5
+ extend self
6
+
7
+ def parse(path)
8
+ rows = CSV.read(path, { :skip_blanks => true })
9
+ rescue Errno::ENOENT, Errno::EISDIR, CSV::MalformedCSVError
10
+ raise
11
+ else
12
+ if File.extname(path) != '.csv'
13
+ raise NonCSVFileError
14
+ else
15
+ # Skipping title and header lines.
16
+ 2.times { rows.shift }
17
+ invalid_rows, calls, fees = [], [], []
18
+ rows.each_with_index do |row, index|
19
+ if (call = Call.new(row)).valid?
20
+ calls << call
21
+ elsif (fee = Fee.new(row)).valid?
22
+ fees << fee
23
+ else
24
+ invalid_rows << index + 1
25
+ end
26
+ end
27
+ if invalid_rows.empty?
28
+ calls + fees
29
+ else
30
+ raise InvalidRowsError, "Erro nas linhas #{invalid_rows.join(', ')}"
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,7 @@
1
+ module Embratel
2
+ class Fee < Payable
3
+ def valid?
4
+ super && number_called.empty?
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,41 @@
1
+ module Embratel
2
+ class Payable
3
+ COST_REGEXP = /^\d+(?:\.\d+)?$/
4
+ FIELDS = %w[id
5
+ caller
6
+ description
7
+ date
8
+ number_called
9
+ caller_local
10
+ called_local
11
+ start_time
12
+ end_time
13
+ imp
14
+ country
15
+ quantity
16
+ unit
17
+ cost]
18
+
19
+ FIELDS.each { |field| attr_accessor field.to_sym }
20
+
21
+ def initialize(row)
22
+ @row = row
23
+
24
+ FIELDS.each_with_index do |field, index|
25
+ instance_variable_set("@#{field}".to_sym, row[index].to_s.strip)
26
+ end
27
+ end
28
+
29
+ def call?
30
+ is_a?(Call)
31
+ end
32
+
33
+ def fee?
34
+ is_a?(Fee)
35
+ end
36
+
37
+ def valid?
38
+ @row.size == 14 && !!(cost =~ COST_REGEXP)
39
+ end
40
+ end
41
+ end
@@ -1,40 +1,21 @@
1
1
  module Embratel
2
2
  class PhoneBill
3
+ attr_reader :payables
4
+
3
5
  def initialize(path)
4
- begin
5
- @csv = CSV.read(path, { :skip_blanks => true })
6
- rescue Errno::ENOENT
7
- raise
8
- rescue Errno::EISDIR
9
- raise
10
- rescue CSV::MalformedCSVError
11
- raise
12
- else
13
- raise InvalidPhoneBillFileError if (invalid_rows? || non_csv?(path))
14
- end
6
+ @payables = CSVParser.parse(path)
15
7
  end
16
8
 
17
9
  def calls
18
- @calls ||= @csv.inject([]) do |calls, row|
19
- call = Call.new(row)
20
- call.valid? ? (calls << call) : calls
21
- end
22
- end
23
-
24
- def total
25
- @total ||= calls.inject(0) { |sum, call| sum += call.cost.to_f }
10
+ @calls ||= @payables.select(&:call?)
26
11
  end
27
12
 
28
- private
29
-
30
- def invalid_rows?
31
- csv = @csv.dup
32
- 3.times { csv.shift }
33
- csv.any? { |row| !Call.new(row).valid? }
13
+ def fees
14
+ @calls ||= @payables.select(&:fee?)
34
15
  end
35
16
 
36
- def non_csv?(path)
37
- File.extname(path) != '.csv'
17
+ def total
18
+ @total ||= payables.inject(0) { |sum, payable| sum += payable.cost.to_f }
38
19
  end
39
20
  end
40
21
  end
@@ -1,104 +1,48 @@
1
- require 'test_helper'
1
+ require File.expand_path('../../test_helper', __FILE__)
2
2
 
3
3
  class CallTest < Test::Unit::TestCase
4
- def row_with_a_missing_field
5
- ['1',
6
- '1634125644-FRANQUIA 01',
7
- '04 - LIGACOES DDD PARA CELULARES',
8
- '11/08/10 A 99/99/99',
9
- 'SCL -SP',
10
- 'CAS -SP',
11
- '02:56:29 AM',
12
- '',
13
- 'E',
14
- '',
15
- '500',
16
- 'MIN',
17
- '0.73']
18
- end
19
-
20
- def row_with_invalid_number_called
21
- ['1',
22
- '1634125644-FRANQUIA 01',
23
- '04 - LIGACOES DDD PARA CELULARES',
24
- '11/08/10 A 99/99/99',
25
- '19936928871',
26
- 'SCL -SP',
27
- 'CAS -SP',
28
- '02:56:29 AM',
29
- '',
30
- 'E',
31
- '',
32
- '500',
33
- 'MIN',
34
- '0.73']
35
- end
36
-
37
- def row_with_invalid_cost
38
- ['1',
39
- '1634125644-FRANQUIA 01',
40
- '04 - LIGACOES DDD PARA CELULARES',
41
- '11/08/10 A 99/99/99',
42
- '19936928871',
43
- 'SCL -SP',
44
- 'CAS -SP',
45
- '02:56:29 AM',
46
- '',
47
- 'E',
48
- '',
49
- '500',
50
- 'MIN',
51
- '.73']
52
- end
53
-
54
- def valid_row
55
- ['1',
56
- '1634125644-FRANQUIA 01',
57
- '04 - LIGACOES DDD PARA CELULARES',
58
- '11/08/10 A 99/99/99',
59
- '1993692887',
60
- 'SCL -SP',
61
- 'CAS -SP',
62
- '02:56:29 AM',
63
- '',
64
- 'E',
65
- '',
66
- '500',
67
- 'MIN',
68
- '0.73']
69
- end
70
-
71
- def test_call_instantiated_with_a_row_with_a_missing_field
72
- call = Embratel::Call.new(row_with_a_missing_field)
73
- assert(!call.valid?)
74
- end
75
-
76
- def test_call_instantiated_with_a_row_with_invalid_number_called
77
- call = Embratel::Call.new(row_with_invalid_number_called)
4
+ include ValidRows
5
+
6
+ ROW_WITH_INVALID_NUMBER_CALLED = ['1',
7
+ '1634125644-FRANQUIA 01',
8
+ '04 - LIGACOES DDD PARA CELULARES',
9
+ '11/08/10 A 99/99/99',
10
+ '19936928871',
11
+ 'SCL -SP',
12
+ 'CAS -SP',
13
+ '02:56:29 AM',
14
+ '',
15
+ 'E',
16
+ '',
17
+ '500',
18
+ 'MIN',
19
+ '0.73']
20
+
21
+ def test_valid_with_a_row_with_invalid_number_called
22
+ call = Embratel::Call.new(ROW_WITH_INVALID_NUMBER_CALLED)
78
23
  assert(!call.valid?)
79
24
  end
80
25
 
81
- def test_call_instantiated_with_a_row_with_invalid_cost
82
- call = Embratel::Call.new(row_with_invalid_cost)
83
- assert(!call.valid?)
26
+ def test_valid_with_a_valid_fee_row
27
+ assert(!Embratel::Call.new(VALID_FEE_ROW).valid?)
84
28
  end
85
29
 
86
- def test_call_instantiated_with_a_valid_row
87
- call = Embratel::Call.new(valid_row)
30
+ def test_valid_with_a_valid_call_row
31
+ call = Embratel::Call.new(VALID_CALL_ROW)
88
32
  assert(call.valid?)
89
- assert_equal(call.id, '1')
90
- assert_equal(call.caller, '1634125644-FRANQUIA 01')
91
- assert_equal(call.description, '04 - LIGACOES DDD PARA CELULARES')
92
- assert_equal(call.date, '11/08/10 A 99/99/99')
93
- assert_equal(call.number_called, '1993692887')
94
- assert_equal(call.caller_local, 'SCL -SP')
95
- assert_equal(call.called_local, 'CAS -SP')
96
- assert_equal(call.start_time, '02:56:29 AM')
97
- assert_equal(call.end_time, '')
98
- assert_equal(call.imp, 'E')
99
- assert_equal(call.country, '')
100
- assert_equal(call.quantity, '500')
101
- assert_equal(call.unit, 'MIN')
102
- assert_equal(call.cost, '0.73')
33
+ assert_equal('1', call.id)
34
+ assert_equal('1634125644-FRANQUIA 01', call.caller)
35
+ assert_equal('04 - LIGACOES DDD PARA CELULARES', call.description)
36
+ assert_equal('11/08/10 A 99/99/99', call.date)
37
+ assert_equal('1993692887', call.number_called)
38
+ assert_equal('SCL -SP', call.caller_local)
39
+ assert_equal('CAS -SP', call.called_local)
40
+ assert_equal('02:56:29 AM', call.start_time)
41
+ assert_equal('', call.end_time)
42
+ assert_equal('E', call.imp)
43
+ assert_equal('', call.country)
44
+ assert_equal('500', call.quantity)
45
+ assert_equal('MIN', call.unit)
46
+ assert_equal('0.73', call.cost)
103
47
  end
104
48
  end
@@ -0,0 +1,49 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class Embratel::CSVParserTest < Test::Unit::TestCase
4
+ FIXTURES_PATH = File.join(File.dirname(__FILE__), '..', 'fixtures')
5
+
6
+ NON_EXISTING_FILE_PATH = "#{FIXTURES_PATH}/non_existing_file.csv"
7
+ DIRECTORY_PATH = "#{FIXTURES_PATH}"
8
+ NON_PHONE_BILL_FILE_PATH = "#{FIXTURES_PATH}/lorem_ipsum.csv"
9
+ INVALID_CSV_PHONE_BILL_FILE_PATH = "#{FIXTURES_PATH}/invalid_phone_bill_file.csv"
10
+ VALID_CSV_PHONE_BILL_FILE_PATH = "#{FIXTURES_PATH}/valid_phone_bill_file.csv"
11
+ NON_CSV_PHONE_BILL_FILE_PATH = "#{FIXTURES_PATH}/phone_bill.txt"
12
+
13
+ def test_csv_parser_instantiation_with_a_non_existing_file_path
14
+ assert_raise(Errno::ENOENT) do
15
+ Embratel::CSVParser.parse(NON_EXISTING_FILE_PATH)
16
+ end
17
+ end
18
+
19
+ def test_csv_parser_instantiation_with_a_directory_path
20
+ assert_raise(Errno::EISDIR) { Embratel::CSVParser.parse(DIRECTORY_PATH) }
21
+ end
22
+
23
+ def test_csv_parser_instantiation_with_a_non_phone_bill_file_path
24
+ assert_raise(Embratel::InvalidRowsError) do
25
+ Embratel::CSVParser.parse(NON_PHONE_BILL_FILE_PATH)
26
+ end
27
+ end
28
+
29
+ def test_csv_parser_instantiation_with_an_invalid_csv_phone_bill_file
30
+ assert_raise(Embratel::InvalidRowsError) do
31
+ Embratel::CSVParser.parse(INVALID_CSV_PHONE_BILL_FILE_PATH)
32
+ end
33
+ end
34
+
35
+ def test_does_not_allow_other_file_extensions_than_csv
36
+ assert_raise(Embratel::NonCSVFileError) do
37
+ Embratel::CSVParser.parse(NON_CSV_PHONE_BILL_FILE_PATH)
38
+ end
39
+ end
40
+
41
+ def test_parse_with_valid_phone_bill_file
42
+ payables = Embratel::CSVParser.parse(VALID_CSV_PHONE_BILL_FILE_PATH)
43
+ calls = payables.select(&:call?)
44
+ fees = payables.select(&:fee?)
45
+ assert_equal(4, payables.size)
46
+ assert_equal(3, calls.size)
47
+ assert_equal(1, fees.size)
48
+ end
49
+ end
@@ -0,0 +1,48 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class FeeTest < Test::Unit::TestCase
4
+ include ValidRows
5
+
6
+ ROW_WITH_NUMBER_CALLED = ['1',
7
+ '1634125644-FRANQUIA 01',
8
+ '04 - LIGACOES DDD PARA CELULARES',
9
+ '11/08/10 A 99/99/99',
10
+ '19936928871',
11
+ 'SCL -SP',
12
+ 'CAS -SP',
13
+ '02:56:29 AM',
14
+ '',
15
+ 'E',
16
+ '',
17
+ '500',
18
+ 'MIN',
19
+ '0.73']
20
+
21
+ def test_valid_with_a_row_with_number_called
22
+ fee = Embratel::Fee.new(ROW_WITH_NUMBER_CALLED)
23
+ assert(!fee.valid?)
24
+ end
25
+
26
+ def test_valid_with_a_valid_call_row
27
+ assert(!Embratel::Fee.new(VALID_CALL_ROW).valid?)
28
+ end
29
+
30
+ def test_valid_with_a_valid_fee_row
31
+ fee = Embratel::Fee.new(VALID_FEE_ROW)
32
+ assert(fee.valid?)
33
+ assert_equal('1', fee.id)
34
+ assert_equal('1634125644-FRANQUIA 01', fee.caller)
35
+ assert_equal('04 - LIGACOES DDD PARA CELULARES', fee.description)
36
+ assert_equal('11/08/10 A 99/99/99', fee.date)
37
+ assert_equal('', fee.number_called)
38
+ assert_equal('SCL -SP', fee.caller_local)
39
+ assert_equal('CAS -SP', fee.called_local)
40
+ assert_equal('02:56:29 AM', fee.start_time)
41
+ assert_equal('', fee.end_time)
42
+ assert_equal('E', fee.imp)
43
+ assert_equal('', fee.country)
44
+ assert_equal('500', fee.quantity)
45
+ assert_equal('MIN', fee.unit)
46
+ assert_equal('0.73', fee.cost)
47
+ end
48
+ end
@@ -0,0 +1,87 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ class PayableTest < Test::Unit::TestCase
4
+ include ValidRows
5
+
6
+ ROW_WITH_A_MISSING_FIELD = ['1',
7
+ '1634125644-FRANQUIA 01',
8
+ '04 - LIGACOES DDD PARA CELULARES',
9
+ '11/08/10 A 99/99/99',
10
+ 'SCL -SP',
11
+ 'CAS -SP',
12
+ '02:56:29 AM',
13
+ '',
14
+ 'E',
15
+ '',
16
+ '500',
17
+ 'MIN',
18
+ '0.73']
19
+
20
+ ROW_WITH_INVALID_COST = ['1',
21
+ '1634125644-FRANQUIA 01',
22
+ '04 - LIGACOES DDD PARA CELULARES',
23
+ '11/08/10 A 99/99/99',
24
+ '19936928871',
25
+ 'SCL -SP',
26
+ 'CAS -SP',
27
+ '02:56:29 AM',
28
+ '',
29
+ 'E',
30
+ '',
31
+ '500',
32
+ 'MIN',
33
+ '.73']
34
+
35
+ ROW_WITH_COST_WITH_SPACES_IN_THE_BEGINNING = ['1',
36
+ '1634125644-FRANQUIA 01',
37
+ '04 - LIGACOES DDD PARA CELULARES',
38
+ '11/08/10 A 99/99/99',
39
+ '1993692887',
40
+ 'SCL -SP',
41
+ 'CAS -SP',
42
+ '02:56:29 AM',
43
+ '',
44
+ 'E',
45
+ '',
46
+ '500',
47
+ 'MIN',
48
+ ' 0.73']
49
+
50
+ def test_call_with_call
51
+ assert(Embratel::Call.new(VALID_CALL_ROW).call?)
52
+ end
53
+
54
+ def test_call_with_fee
55
+ assert(!Embratel::Fee.new(VALID_FEE_ROW).call?)
56
+ end
57
+
58
+ def test_fee_with_fee
59
+ assert(Embratel::Fee.new(VALID_FEE_ROW).fee?)
60
+ end
61
+
62
+ def test_fee_with_call
63
+ assert(!Embratel::Call.new(VALID_CALL_ROW).fee?)
64
+ end
65
+
66
+ def test_valid_with_a_row_with_a_missing_field
67
+ assert(!Embratel::Payable.new(ROW_WITH_A_MISSING_FIELD).valid?)
68
+ end
69
+
70
+ def test_valid_with_a_row_with_invalid_cost
71
+ assert(!Embratel::Payable.new(ROW_WITH_INVALID_COST).valid?)
72
+ end
73
+
74
+ def test_valid_with_row_with_cost_with_spaces_in_the_beginning
75
+ payable = Embratel::Payable.new(ROW_WITH_COST_WITH_SPACES_IN_THE_BEGINNING)
76
+ assert(payable.valid?)
77
+ assert_equal('0.73', payable.cost)
78
+ end
79
+
80
+ def test_valid_with_a_valid_call_row
81
+ assert(Embratel::Payable.new(VALID_CALL_ROW).valid?)
82
+ end
83
+
84
+ def test_valid_with_a_valid_fee_row
85
+ assert(Embratel::Payable.new(VALID_FEE_ROW).valid?)
86
+ end
87
+ end
@@ -1,70 +1,24 @@
1
- require 'test_helper'
1
+ require File.expand_path('../../test_helper', __FILE__)
2
2
 
3
3
  class Embratel::PhoneBillTest < Test::Unit::TestCase
4
4
  FIXTURES_PATH = File.join(File.dirname(__FILE__), '..', 'fixtures')
5
5
 
6
- def non_existing_file_path
7
- "#{FIXTURES_PATH}/non_existing_file.csv"
8
- end
9
-
10
- def directory_path
11
- "#{FIXTURES_PATH}"
12
- end
13
-
14
- def non_phone_bill_file_path
15
- "#{FIXTURES_PATH}/text_file.txt"
16
- end
17
-
18
- def invalid_csv_phone_bill_file_path
19
- "#{FIXTURES_PATH}/invalid_phone_bill_file.csv"
20
- end
21
-
22
- def valid_csv_phone_bill_file_path
23
- "#{FIXTURES_PATH}/valid_phone_bill_file.csv"
24
- end
6
+ VALID_CSV_PHONE_BILL_FILE_PATH = "#{FIXTURES_PATH}/valid_phone_bill_file.csv"
25
7
 
26
- def non_csv_phone_bill_file_path
27
- "#{FIXTURES_PATH}/phone_bill.txt"
28
- end
29
-
30
- def test_phone_bill_instantiation_with_a_non_existing_file_path
31
- assert_raise(Errno::ENOENT) { Embratel::PhoneBill.new(non_existing_file_path) }
32
- end
33
-
34
- def test_phone_bill_instantiation_with_a_directory_path
35
- assert_raise(Errno::EISDIR) { Embratel::PhoneBill.new(directory_path) }
36
- end
37
-
38
- def test_phone_bill_instantiation_with_a_non_phone_bill_file_path
39
- assert_raise(Embratel::InvalidPhoneBillFileError) do
40
- Embratel::PhoneBill.new(non_phone_bill_file_path)
41
- end
42
- end
43
-
44
- def test_phone_bill_instantiation_with_an_invalid_csv_phone_bill_file_path
45
- assert_raise(Embratel::InvalidPhoneBillFileError) do
46
- Embratel::PhoneBill.new(invalid_csv_phone_bill_file_path)
47
- end
48
- end
49
-
50
- def test_does_not_allow_other_file_extensions_than_csv
51
- assert_raise(Embratel::InvalidPhoneBillFileError) do
52
- Embratel::PhoneBill.new(non_csv_phone_bill_file_path)
53
- end
54
- end
55
-
56
- def test_phone_bill_instantiation_with_a_valid_csv_phone_bill_file_path
57
- phone_bill = Embratel::PhoneBill.new(valid_csv_phone_bill_file_path)
58
- assert(!phone_bill.send(:invalid_rows?))
8
+ def test_calls
9
+ phone_bill = Embratel::PhoneBill.new(VALID_CSV_PHONE_BILL_FILE_PATH)
10
+ assert_equal(3, phone_bill.calls.size)
11
+ phone_bill.calls.each { |call| assert(call.is_a?(Embratel::Call)) }
59
12
  end
60
13
 
61
- def test_calls_method
62
- phone_bill = Embratel::PhoneBill.new(valid_csv_phone_bill_file_path)
63
- assert_equal(3, phone_bill.calls.size)
14
+ def test_fees
15
+ phone_bill = Embratel::PhoneBill.new(VALID_CSV_PHONE_BILL_FILE_PATH)
16
+ assert_equal(1, phone_bill.fees.size)
17
+ phone_bill.fees.each { |fee| assert(fee.is_a?(Embratel::Fee)) }
64
18
  end
65
19
 
66
- def test_total_method
67
- phone_bill = Embratel::PhoneBill.new(valid_csv_phone_bill_file_path)
68
- assert_equal(10.5, phone_bill.total)
20
+ def test_total
21
+ phone_bill = Embratel::PhoneBill.new(VALID_CSV_PHONE_BILL_FILE_PATH)
22
+ assert_equal(11.59, phone_bill.total)
69
23
  end
70
24
  end
File without changes
@@ -1,6 +1,7 @@
1
- ,,,,,,,,,,,,,
2
- ,,,,,,,,,,,,,
3
- "Seq ","Origem ","Descri��o ","Periodo/Data ","Terminal_Destino ","Local Origem","Local Destino ","Hora Inicio ","Hora Fim ","Imp ","Pais ","Qtde ","Unid ","Valor (R$) "
4
- 1,"1634125644-FRANQUIA 01 ","04 - LIGACOES DDD PARA CELULARES ","11/08/10 A 99/99/99 ",1993692887,"SCL -SP ","CAS -SP ",02:56:29 AM," ","E "," ",500,"MIN ",0.73
5
- 2,"1634125644-FRANQUIA 01 ","04 - LIGACOES DDD PARA CELULARES ","11/08/10 A 99/99/99 ",1993692887,"SCL -SP ","CAS -SP ",02:59:03 AM," ","E "," ",900,"MIN ",1.3
6
- 3,"1634125644-FRANQUIA 01 ","04 - LIGACOES DDD PARA CELULARES ","13/08/10 A 99/99/99 ",1992563321,"SCL -SP ","CAS -SP ",09:07:55 PM," ","E "," ",5800,"MIN ",8.47
1
+ Detalhes da fatura
2
+
3
+ "Seq ","Origem ","Descrição ","Periodo/Data ","Terminal_Destino ","Local Origem","Local Destino ","Hora Inicio ","Hora Fim ","Imp ","Pais ","Qtde ","Unid ","Valor (R$) "
4
+ 1,"1634125644-FRANQUIA 01 ","04 - LIGACOES DDD PARA CELULARES ","11/08/10 A 99/99/99 ",1993696666,"SCL -SP ","CAS -SP ",02:56:29 AM," ","E "," ",500,"MIN ",0.73
5
+ 2,"1634125644-FRANQUIA 01 ","04 - LIGACOES DDD PARA CELULARES ","11/08/10 A 99/99/99 ",1993696666,"SCL -SP ","CAS -SP ",02:59:03 AM," ","E "," ",900,"MIN ",1.3
6
+ 3,"1634125644-FRANQUIA 01 ","04 - LIGACOES DDD PARA CELULARES ","13/08/10 A 99/99/99 ",1992566666,"SCL -SP ","CAS -SP ",09:07:55 PM," ","E "," ",5800,"MIN ",8.47
7
+ "0000004 ","10/10/91647303 ","ENCARGOS POR ATRASO REFERENTE A C.P.S. ","25/10/10 A 10/11/10 "," ","SCL -SP "," - "," "," ","N "," ","1000 ","UNID "," 1.09"
data/test/test_helper.rb CHANGED
@@ -1,7 +1,34 @@
1
- $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
2
- require 'rubygems'
3
- require 'embratel'
1
+ require File.expand_path('../../lib/embratel.rb', __FILE__)
4
2
  require 'test/unit'
5
3
 
6
- class Test::Unit::TestCase
4
+ module ValidRows
5
+ VALID_CALL_ROW = ['1',
6
+ '1634125644-FRANQUIA 01',
7
+ '04 - LIGACOES DDD PARA CELULARES',
8
+ '11/08/10 A 99/99/99',
9
+ '1993692887',
10
+ 'SCL -SP',
11
+ 'CAS -SP',
12
+ '02:56:29 AM',
13
+ '',
14
+ 'E',
15
+ '',
16
+ '500',
17
+ 'MIN',
18
+ '0.73']
19
+
20
+ VALID_FEE_ROW = ['1',
21
+ '1634125644-FRANQUIA 01',
22
+ '04 - LIGACOES DDD PARA CELULARES',
23
+ '11/08/10 A 99/99/99',
24
+ '',
25
+ 'SCL -SP',
26
+ 'CAS -SP',
27
+ '02:56:29 AM',
28
+ '',
29
+ 'E',
30
+ '',
31
+ '500',
32
+ 'MIN',
33
+ '0.73']
7
34
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: embratel
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.0.0
5
+ version: 1.1.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Murilo Pereira
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-03-20 00:00:00 -03:00
13
+ date: 2011-04-22 00:00:00 -03:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -46,6 +46,7 @@ extra_rdoc_files: []
46
46
  files:
47
47
  - .gitignore
48
48
  - .rvmrc
49
+ - CHANGELOG.org
49
50
  - Gemfile
50
51
  - Gemfile.lock
51
52
  - MIT-LICENSE
@@ -54,12 +55,18 @@ files:
54
55
  - embratel.gemspec
55
56
  - lib/embratel.rb
56
57
  - lib/embratel/call.rb
58
+ - lib/embratel/csv_parser.rb
59
+ - lib/embratel/fee.rb
60
+ - lib/embratel/payable.rb
57
61
  - lib/embratel/phone_bill.rb
58
62
  - test/embratel/call_test.rb
63
+ - test/embratel/csv_parser_test.rb
64
+ - test/embratel/fee_test.rb
65
+ - test/embratel/payable_test.rb
59
66
  - test/embratel/phone_bill_test.rb
60
67
  - test/fixtures/invalid_phone_bill_file.csv
68
+ - test/fixtures/lorem_ipsum.csv
61
69
  - test/fixtures/phone_bill.txt
62
- - test/fixtures/text_file.txt
63
70
  - test/fixtures/valid_phone_bill_file.csv
64
71
  - test/test_helper.rb
65
72
  has_rdoc: true