jsgoecke-echi_files 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "echi_files"
3
- s.version = "0.2.0"
4
- s.date = "2009-01-19"
3
+ s.version = "0.2.1"
4
+ s.date = "2009-01-26"
5
5
  s.summary = "Ruby Library for Processing Avaya ECHI Files"
6
6
  s.description = "Ruby Library for processing External Call History (ECHI) files from the Avaya CMS"
7
7
  s.authors = ["Jason Goecke"]
@@ -1,14 +1,35 @@
1
+ # This library is used to process Avaya CMS ECHI Files
2
+ #
3
+ # Author:: Jason Goecke (mailto:jason@goecke.net)
4
+ # Copyright:: Copyright (c) 2009 Jason Goecke
5
+ # License:: Distributes under the MIT License
6
+ #
7
+ # This class contains the methods for processing both
8
+ # binary and ascii files from the Avaya CMS
9
+
1
10
  require 'yaml'
2
11
  require 'fastercsv'
3
12
 
4
13
  class EchiFiles
5
14
 
15
+ #Load the associated schema definitions of the Avaya ECHI files
6
16
  def initialize
7
17
  @extended = YAML::load_file(File.expand_path(File.dirname(__FILE__) + "/extended-definition.yml"))
8
18
  @standard = YAML::load_file(File.expand_path(File.dirname(__FILE__) + "/standard-definition.yml"))
9
19
  end
10
20
 
11
- #Method for parsing the various datatypes from the ECH file
21
+ #Method to determine if the file is binary or ASCII encoded
22
+ def detect_filetype(filehandle)
23
+ if filehandle.read(1).is_binary_data?
24
+ type = 'BINARY'
25
+ else
26
+ type = 'ASCII'
27
+ end
28
+ filehandle.rewind
29
+ return type
30
+ end
31
+
32
+ #Method for parsing the various datatypes from the binary ECHI file
12
33
  def dump_binary(filehandle, type, length)
13
34
  case type
14
35
  when 'int'
@@ -48,7 +69,7 @@ class EchiFiles
48
69
  return value
49
70
  end
50
71
 
51
- #Mehtod that performs the conversions
72
+ #Mehtod that performs the conversions of files
52
73
  def convert_binary_file(filehandle, schema, extra_byte)
53
74
 
54
75
  #Read header information first
@@ -145,7 +166,7 @@ class EchiFiles
145
166
  #@format Whether this is the ECHI EXTENDED or STANDARD file format
146
167
  #@extra_byte Set to true if you want to read an extra byte at the end of each record
147
168
  #This method will return an array of hashes of the resulting data processed
148
- def process_file(filehandle, type, format, extra_byte)
169
+ def process_file(filehandle, format, extra_byte)
149
170
 
150
171
  #Set the appropriate schema format for standard or extended from the Avaya CMS
151
172
  case format
@@ -156,7 +177,7 @@ class EchiFiles
156
177
  end
157
178
 
158
179
  #Process based on the filetype passed
159
- case type
180
+ case detect_filetype(filehandle)
160
181
  when 'ASCII'
161
182
  return convert_ascii_file(filehandle, schema)
162
183
  when 'BINARY'
@@ -170,7 +191,6 @@ class EchiFiles
170
191
  #@fields An array of fields to strip characters from
171
192
  #@characters An Array of characters to be stripped
172
193
  def strip_special_characters(data, fields, characters)
173
-
174
194
  stripped_data = Array.new
175
195
  data.each do |row|
176
196
  fields.each do |field|
@@ -182,7 +202,6 @@ class EchiFiles
182
202
  end
183
203
  stripped_data << row
184
204
  end
185
-
186
205
  return stripped_data
187
206
  end
188
207
 
@@ -8,6 +8,7 @@ class EchiFiles_Test < Test::Unit::TestCase
8
8
  #Provide a filename to process as an argument on the commandline
9
9
  binary_file = File.open(File.expand_path("test/example_binary_file"))
10
10
  ascii_file = File.open(File.expand_path("test/example_ascii_file"))
11
+
11
12
  @proper_unstripped = YAML::load(File.open(File.expand_path("test/proper_unstripped.yml")))
12
13
  @proper_stripped = YAML::load(File.open(File.expand_path("test/proper_stripped.yml")))
13
14
  @proper_ascii = YAML::load(File.open(File.expand_path("test/proper_ascii.yml")))
@@ -15,12 +16,17 @@ class EchiFiles_Test < Test::Unit::TestCase
15
16
  #Create a new EchiFiles object
16
17
  echi_handler = EchiFiles.new
17
18
 
19
+ #Set filetype details
20
+ @filetype_binary = echi_handler.detect_filetype(binary_file)
21
+ binary_file.rewind
22
+ @filetype_ascii = echi_handler.detect_filetype(ascii_file)
23
+ ascii_file.rewind
24
+
18
25
  #Use this to process a binary file
19
- file_type = 'BINARY'
20
26
  format = 'EXTENDED'
21
27
  #In some cases the extra_byte is needed
22
28
  extra_byte = true
23
- @binary_data = echi_handler.process_file(binary_file, file_type, format, extra_byte)
29
+ @binary_data = echi_handler.process_file(binary_file, format, extra_byte)
24
30
  #If you need to strip in characters from the asaiuui field
25
31
  @stripped_data = Array.new
26
32
  @binary_data.each do |data|
@@ -28,14 +34,23 @@ class EchiFiles_Test < Test::Unit::TestCase
28
34
  end
29
35
 
30
36
  #Use this to process an ASCII file
31
- file_type = 'ASCII'
32
37
  format = 'EXTENDED'
33
- @ascii_data = echi_handler.process_file(ascii_file, file_type, format, extra_byte)
38
+ @ascii_data = echi_handler.process_file(ascii_file, format, extra_byte)
34
39
  end
35
40
 
36
41
  def teardown
37
42
  end
38
43
 
44
+ #Test method that determine filetype
45
+ def test_filetype_ascii
46
+ assert_equal("ASCII", @filetype_ascii)
47
+ end
48
+
49
+ #Test method that determine filetype
50
+ def test_filetype_binary
51
+ assert_equal("BINARY", @filetype_binary)
52
+ end
53
+
39
54
  #Test that processing a binary file works
40
55
  def test_binary_file
41
56
  assert_equal(@proper_unstripped, @binary_data)
@@ -50,4 +65,5 @@ class EchiFiles_Test < Test::Unit::TestCase
50
65
  def test_ascii_file
51
66
  assert_equal(@ascii_data, @proper_ascii)
52
67
  end
68
+
53
69
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsgoecke-echi_files
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Goecke
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-01-19 00:00:00 -08:00
12
+ date: 2009-01-26 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency