copybook_utils 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 600e6d99c32bd1ecacae6efd948314cf448113e6
4
+ data.tar.gz: a065ae03f78087f0350e653f5203d1ff0ab984cd
5
+ SHA512:
6
+ metadata.gz: 9c6097320fed8e54f609ac2979ed25980d14c2145fe0c220f71017d3cc6b34279b9cd081cef7062e60f635f3a21b719a295445b91d33b2560f77f70e2ca44f1e
7
+ data.tar.gz: 614480e875320e3d9af09057888160d255fbed31c332c0809af87df9cc90cd76ed48b7834f53c1f9eec085258db0c205864631e34ffad4352faaa16e3060858e
@@ -0,0 +1,9 @@
1
+ *.bundle
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.3
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in record_convert.gemspec
4
+ gemspec
5
+
6
+ gem 'nokogiri'
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Glenn Waters
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,94 @@
1
+ # CopybookUtils
2
+
3
+ Commands to convert fixed-record files described by a copybook record layout
4
+ from EBCDIC to ASCII, converting only the alpha-numeric fields.
5
+
6
+ The Gem can also be used to create scripts.
7
+
8
+ ## Installation
9
+
10
+ Add this line to your application's Gemfile:
11
+
12
+ ```ruby
13
+ gem 'copybook_utils'
14
+ ```
15
+
16
+ And then execute:
17
+
18
+ $ bundle
19
+
20
+ Or install it yourself as:
21
+
22
+ $ gem install copybook_utils
23
+
24
+ ## Command-line Usage
25
+
26
+ A command ```convert_from_ebcdic``` is in the gem ```bin``` directory. It is
27
+ recommended to copy ```convert_from_ebcdic``` from the bin directory to an
28
+ appropriate place on your system (also copy ```convert_from_ebcdic.bat``` to
29
+ the same place if on a Windows system).
30
+
31
+ Run the command from a terminal or command prompt. The command usage is:
32
+
33
+ ```convert_from_ebcdic <Copybook file> <EBCDIC data file> <ASCII converted
34
+ file>```
35
+
36
+ This command parses the ```copybook file``` that contains the record layout for
37
+ the ```EBCDIC data file```. The ```EBCDIC data file``` is read record by record
38
+ converting the alpha-numeric fields from EBCDIC to ASCII. The output is written
39
+ to ```ASCII converted file```.
40
+
41
+ All binary fields (e.g.: comp-3, etc) are copied from the input records to the
42
+ output records unchanged.
43
+
44
+ ## Gem Usage
45
+
46
+ To use CopybookUtils:
47
+
48
+ ```require 'copybook_utils'```
49
+
50
+ ### Converting Copybooks to XML
51
+
52
+ To convert a copybook to XML (wrapper around cb2xml Java jar from the copybook
53
+ to XML project):
54
+
55
+ ```result = CopybookUtils.copybook_to_xml( copybook_filename )```
56
+
57
+ Result contains:
58
+
59
+ ```
60
+ result[:xml] # XML string representing copybook
61
+ result[:error_out] # error info from conversion process
62
+ result[:process_status] # the Process::Status from running java; non-zero is an error
63
+ ```
64
+
65
+ The XML may be parsed with your favorite XML parser (e.g.: Nokogiri).
66
+
67
+ ### Converting Data Files between ASCII and EBCDIC
68
+
69
+ ```
70
+ CopybookUtils.to_ascii( copybook_xml, data_file_input, data_file_output )
71
+ CopybookUtils.to_ebcdic( copybook_xml, data_file_input, data_file_output )
72
+ ```
73
+
74
+ These methods take the XML from ```CopybookUtils.copybook_to_xml``` and convert
75
+ the ```data_file_input``` creating the ```data_file_output```. The input file
76
+ must be a fixed-record file with the record layout described by the copybook.
77
+ Note that fixed-record files do not have newlines at the end of each record.
78
+
79
+ ## Development
80
+
81
+ To install this gem onto your local machine, run `bundle exec rake install`.
82
+
83
+ To release a new version, update the version number in `version.rb`, and then
84
+ run `bundle exec rake release` to create a git tag for the version, push git
85
+ commits and tags, and push the `.gem` file to
86
+ [rubygems.org](https://rubygems.org).
87
+
88
+ ## Contributing
89
+
90
+ 1. Fork it ( https://github.com/[my-github-username]/copybook_utils/fork )
91
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
92
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
93
+ 4. Push to the branch (`git push origin my-new-feature`)
94
+ 5. Create a new Pull Request
@@ -0,0 +1,5 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/extensiontask'
3
+
4
+ spec = Gem::Specification.load('copybook_utils.gemspec')
5
+ Rake::ExtensionTask.new('convert_methods', spec)
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "copybook_utils"
5
+
6
+ if ARGV.length != 3
7
+ puts "Usage: #{File.basename(__FILE__)} <Copybook file> <Input EBCDIC data file> <Output ASCII data file>"
8
+ exit 99
9
+ end
10
+
11
+ copybook_filename = ARGV[0]
12
+ input_ebcdic_filename = ARGV[1]
13
+ output_ascii_filename = ARGV[2]
14
+
15
+ converted_copybook = CopybookUtils.copybook_to_xml copybook_filename
16
+ if converted_copybook[:process_status].exitstatus != 0
17
+ puts "Failed to properly parse copybook. Output from cb2xml is:"
18
+ puts "converted_copybook[:error_out]"
19
+ Process::exit converted_copybook[:process_status].exitstatus
20
+ end
21
+
22
+ CopybookUtils.to_ascii converted_copybook[:xml], input_ebcdic_filename, output_ascii_filename
@@ -0,0 +1,2 @@
1
+ @echo off
2
+ ruby %~dpn0 %*
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'copybook_utils/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "copybook_utils"
8
+ spec.version = CopybookUtils::VERSION
9
+ spec.authors = ["Glenn Waters"]
10
+ spec.email = ["gwwaters@gmail.com"]
11
+
12
+ spec.summary = %q{Utilities for working with COBOL copybooks and file conversion.}
13
+ spec.homepage = "https://github.com/gwww/CopybookUtils"
14
+
15
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
16
+ spec.bindir = "exe"
17
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.extensions << "ext/convert_methods/extconf.rb"
21
+
22
+ spec.add_development_dependency "bundler", "~> 1.9"
23
+ spec.add_development_dependency "rake", "~> 10.0"
24
+ spec.add_development_dependency "rake-compiler", "~> 0.9"
25
+ end
@@ -0,0 +1,45 @@
1
+ #include <ruby.h>
2
+ #include "tables.h"
3
+
4
+ VALUE CONVERT_METHODS = Qnil;
5
+ VALUE ebcdic2ascii(VALUE self, VALUE payload);
6
+ VALUE ascii2ebcdic(VALUE self, VALUE payload);
7
+
8
+ void Init_convert_methods() {
9
+ CONVERT_METHODS = rb_define_module("CONVERT_METHODS");
10
+ rb_define_method(CONVERT_METHODS, "ebcdic2ascii", ebcdic2ascii, 1);
11
+ rb_define_method(CONVERT_METHODS, "ascii2ebcdic", ascii2ebcdic, 1);
12
+ }
13
+
14
+ static VALUE convert( VALUE self, VALUE ruby_string, const unsigned char conversion_table[] ) {
15
+ u_char *input_string;
16
+ u_char *output_string;
17
+ u_char *dest;
18
+ long input_string_length;
19
+ long count;
20
+ VALUE return_string;
21
+
22
+ if (TYPE(ruby_string) != T_STRING)
23
+ rb_raise(rb_eRuntimeError, "expecting string, received %d", TYPE(ruby_string));
24
+
25
+ input_string = (u_char *)RSTRING_PTR(ruby_string);
26
+ input_string_length = RSTRING_LEN(ruby_string);
27
+ output_string = malloc(input_string_length);
28
+
29
+ count = input_string_length;
30
+ dest = output_string;
31
+ while (count-- != 0) {
32
+ *dest++ = conversion_table[*input_string++];
33
+ }
34
+ return_string = rb_str_new((const char *)output_string, input_string_length);
35
+ free(output_string);
36
+ return return_string;
37
+ }
38
+
39
+ VALUE ebcdic2ascii( VALUE self, VALUE ruby_string ) {
40
+ return convert( self, ruby_string, os_toascii );
41
+ }
42
+
43
+ VALUE ascii2ebcdic( VALUE self, VALUE ruby_string ) {
44
+ return convert( self, ruby_string, os_toebcdic );
45
+ }
@@ -0,0 +1,4 @@
1
+ require 'mkmf'
2
+ extension_name = 'convert_methods'
3
+ dir_config(extension_name)
4
+ create_makefile(extension_name)
@@ -0,0 +1,86 @@
1
+ /* os_toascii and os_toebcdic taken from...
2
+ * Initial Port for Apache-1.3 by <Martin.Kraemer@Mch.SNI.De>
3
+ * Adapted for OpenSSL-0.9.4 by <Martin.Kraemer@Mch.SNI.De>
4
+ */
5
+
6
+ /*
7
+ This code does basic character mapping for IBM's TPF and OS/390 operating systems.
8
+ It is a modified version of the BS2000 table.
9
+
10
+ Bijective EBCDIC (character set IBM-1047) to US-ASCII table:
11
+ This table is bijective - there are no ambigous or duplicate characters.
12
+ */
13
+ const unsigned char os_toascii[256] = {
14
+ 0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f, /* 00-0f: */
15
+ 0x87, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* ................ */
16
+ 0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97, /* 10-1f: */
17
+ 0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /* ................ */
18
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b, /* 20-2f: */
19
+ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /* ................ */
20
+ 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, /* 30-3f: */
21
+ 0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /* ................ */
22
+ 0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5, /* 40-4f: */
23
+ 0xe7, 0xf1, 0xa2, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /* ...........<(+| */
24
+ 0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef, /* 50-5f: */
25
+ 0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x5e, /* &.........!$*);^ */
26
+ 0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5, /* 60-6f: */
27
+ 0xc7, 0xd1, 0xa6, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, /* -/.........,%_>? */
28
+ 0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf, /* 70-7f: */
29
+ 0xcc, 0x60, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /* .........`:#@'=" */
30
+ 0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 80-8f: */
31
+ 0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /* .abcdefghi...... */
32
+ 0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, /* 90-9f: */
33
+ 0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /* .jklmnopqr...... */
34
+ 0xb5, 0x7e, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, /* a0-af: */
35
+ 0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0x5b, 0xde, 0xae, /* .~stuvwxyz...[.. */
36
+ 0xac, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc, /* b0-bf: */
37
+ 0xbd, 0xbe, 0xdd, 0xa8, 0xaf, 0x5d, 0xb4, 0xd7, /* .............].. */
38
+ 0x7b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* c0-cf: */
39
+ 0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /* {ABCDEFGHI...... */
40
+ 0x7d, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, /* d0-df: */
41
+ 0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xf9, 0xfa, 0xff, /* }JKLMNOPQR...... */
42
+ 0x5c, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, /* e0-ef: */
43
+ 0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /* \.STUVWXYZ...... */
44
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* f0-ff: */
45
+ 0x38, 0x39, 0xb3, 0xdb, 0xdc, 0xd9, 0xda, 0x9f /* 0123456789...... */
46
+ };
47
+
48
+
49
+ /*
50
+ The US-ASCII to EBCDIC (character set IBM-1047) table:
51
+ This table is bijective (no ambiguous or duplicate characters)
52
+ */
53
+ const unsigned char os_toebcdic[256] = {
54
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 00-0f: */
55
+ 0x16, 0x05, 0x15, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* ................ */
56
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 10-1f: */
57
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* ................ */
58
+ 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 20-2f: */
59
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* !"#$%&'()*+,-./ */
60
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 30-3f: */
61
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0123456789:;<=>? */
62
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 40-4f: */
63
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* @ABCDEFGHIJKLMNO */
64
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 50-5f: */
65
+ 0xe7, 0xe8, 0xe9, 0xad, 0xe0, 0xbd, 0x5f, 0x6d, /* PQRSTUVWXYZ[\]^_ */
66
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 60-6f: */
67
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* `abcdefghijklmno */
68
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 70-7f: */
69
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* pqrstuvwxyz{|}~. */
70
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x04, 0x06, 0x08, /* 80-8f: */
71
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x14, /* ................ */
72
+ 0x30, 0x31, 0x25, 0x33, 0x34, 0x35, 0x36, 0x17, /* 90-9f: */
73
+ 0x38, 0x39, 0x3a, 0x3b, 0x1a, 0x1b, 0x3e, 0xff, /* ................ */
74
+ 0x41, 0xaa, 0x4a, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, /* a0-af: */
75
+ 0xbb, 0xb4, 0x9a, 0x8a, 0xb0, 0xca, 0xaf, 0xbc, /* ................ */
76
+ 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* b0-bf: */
77
+ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* ................ */
78
+ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* c0-cf: */
79
+ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* ................ */
80
+ 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* d0-df: */
81
+ 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xba, 0xae, 0x59, /* ................ */
82
+ 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* e0-ef: */
83
+ 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* ................ */
84
+ 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* f0-ff: */
85
+ 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf /* ................ */
86
+ };
@@ -0,0 +1,3 @@
1
+ # cobol preprocessor settings normally 6 and 72
2
+ column.start=6
3
+ column.end=72
@@ -0,0 +1,28 @@
1
+ require 'copybook_utils/version'
2
+ require 'copybook_utils/convert_file'
3
+ require 'convert_methods'
4
+ require 'open3'
5
+
6
+ module CopybookUtils
7
+ # defines native methods ebcdic2ascii and ascii2ebcdic
8
+ extend CONVERT_METHODS
9
+
10
+ class << self
11
+ def copybook_to_xml copybook_filename
12
+ path = File.expand_path(File.dirname(__FILE__))
13
+ cmd = "java -jar #{path}/cb2xml-0.95.1/cb2xml.jar #{copybook_filename}"
14
+ stdout, stderr, status = Open3.capture3(cmd)
15
+ { :xml => stdout, :error_out => stderr, :process_status => status }
16
+ end
17
+
18
+ def to_ascii copybook_xml, from_filename, to_filename
19
+ converter = CopybookUtils::ConvertFile.new
20
+ converter.convert_file method(:ebcdic2ascii), copybook_xml, from_filename, to_filename
21
+ end
22
+
23
+ def to_ebcdic copybook_xml, from_filename, to_filename
24
+ converter = CopybookUtils::ConvertFile.new
25
+ converter.convert_file method(:ascii2ebcdic), copybook_xml, from_filename, to_filename
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,64 @@
1
+ require 'nokogiri'
2
+
3
+ module CopybookUtils
4
+ class ConvertFile
5
+ def convert_file conversion_method, copybook_xml, from_filename, to_filename
6
+ doc = Nokogiri.XML(copybook_xml)
7
+
8
+ @conversion_method = conversion_method
9
+ @record_fields = []
10
+ flatten_xml 0, 0, doc.root.children
11
+ record_length = @record_fields[-1][:start] + @record_fields[-1][:length]
12
+
13
+ convert record_length, from_filename, to_filename
14
+ end
15
+
16
+ private
17
+
18
+ def convert_record str
19
+ @record_fields.each do |field|
20
+ start = field[:start]
21
+ len = field[:length]
22
+ converter = field[:conversion_method]
23
+ str[start,len] = converter.(str[start,len]) if !converter.nil?
24
+ end
25
+ str
26
+ end
27
+
28
+ def convert record_length, from_filename, to_filename
29
+ puts "Record length #{record_length}"
30
+ record_count = 0
31
+ File.open(from_filename) do |input|
32
+ File.open(to_filename, "w") do |output|
33
+ while str = input.read(record_length) do
34
+ puts "Input file not a multiple of #{record_length}" if str.length != record_length
35
+ len = output.write(convert_record(str))
36
+ record_count += 1
37
+ puts "Write failed to output #{record_length} bytes, wrote #{len} bytes." if len != record_length
38
+ end
39
+ end
40
+ end
41
+ puts "Converted #{record_count} records."
42
+ end
43
+
44
+ def flatten_xml level, offset, tree
45
+ tree.each do |node|
46
+ # Note: The first definition is taken for determining how to convert (i.e.: redefines are ignored)
47
+ next if !node['redefines'].nil?
48
+
49
+ occurs = (node['occurs'] || "1").to_i - 1
50
+ (0..occurs).each do |i|
51
+ new_offset = node['storage-length'].to_i * i
52
+ if node.name == 'item'
53
+ ignoring = node['picture'].nil? && node['numeric'].nil?
54
+ binary = !((node['usage'] || '') =~ /^comp/).nil?
55
+ position = node['position'].to_i + offset - 1
56
+ @record_fields << { :start => position, :length => node['storage-length'].to_i,
57
+ :conversion_method => binary ? nil : @conversion_method } if !ignoring
58
+ end
59
+ flatten_xml level+1, offset+new_offset, node.children
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,3 @@
1
+ module CopybookUtils
2
+ VERSION = "0.2.0"
3
+ end
metadata ADDED
@@ -0,0 +1,104 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: copybook_utils
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Glenn Waters
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-06-26 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.9'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.9'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake-compiler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.9'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.9'
55
+ description:
56
+ email:
57
+ - gwwaters@gmail.com
58
+ executables: []
59
+ extensions:
60
+ - ext/convert_methods/extconf.rb
61
+ extra_rdoc_files: []
62
+ files:
63
+ - ".gitignore"
64
+ - ".rspec"
65
+ - ".travis.yml"
66
+ - Gemfile
67
+ - LICENSE.md
68
+ - README.md
69
+ - Rakefile
70
+ - bin/convert_from_ebcdic
71
+ - bin/convert_from_ebcdic.bat
72
+ - copybook_utils.gemspec
73
+ - ext/convert_methods/convert_methods.c
74
+ - ext/convert_methods/extconf.rb
75
+ - ext/convert_methods/tables.h
76
+ - lib/cb2xml-0.95.1/cb2xml.jar
77
+ - lib/cb2xml-0.95.1/cb2xml.properties
78
+ - lib/copybook_utils.rb
79
+ - lib/copybook_utils/convert_file.rb
80
+ - lib/copybook_utils/version.rb
81
+ homepage: https://github.com/gwww/CopybookUtils
82
+ licenses: []
83
+ metadata: {}
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: '0'
93
+ required_rubygems_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ requirements: []
99
+ rubyforge_project:
100
+ rubygems_version: 2.2.2
101
+ signing_key:
102
+ specification_version: 4
103
+ summary: Utilities for working with COBOL copybooks and file conversion.
104
+ test_files: []