hflr 0.11.0 → 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.
@@ -1,4 +1,14 @@
1
+ == 1.0.1 / 2010-01-21
2
+
3
+ * Fixed warnings
4
+ * Added better exception handling for badly formatted output data
5
+
6
+
1
7
  == 0.11.0 / 2009-08-04
2
8
 
3
9
  * Removed useless files
4
10
  * Corrected version number
11
+
12
+ == 1.0.1 / 2011-02-09
13
+ * Added ability to specify file format in Ruby with Range class (see example.rb in /test.)
14
+
data/README.txt CHANGED
File without changes
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{hflr}
5
- s.version = "0.11.0"
5
+ s.version = "1.0.1"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Colin Davis"]
9
- s.date = %q{2009-08-04}
9
+ s.date = %q{2011-02-09}
10
10
  s.description = %q{HFLR -- Hierarchical Fixed Length Records
11
11
 
12
12
  Allows you to read and write files of fixed width records when the file contains one or more
@@ -17,25 +17,15 @@ Install with 'gem install hflr'
17
17
  See the tests and examples bundled with this gem.}
18
18
  s.email = %q{colin.c.davis@gmail.com}
19
19
  s.extra_rdoc_files = ["History.txt", "README.txt"]
20
- s.files = ["History.txt", "README.txt", "Rakefile", "hflr.gemspec", "lib/hflr.rb", "lib/hflr/fl_record_file.rb", "lib/hflr/hflr.rb", "lib/hflr/record_template.rb", "spec/hflr_spec.rb", "spec/spec_helper.rb", "test/customer_orders.dat", "test/customers.dat", "test/examples.rb", "test/fixed_length_record_file_test.rb", "test/record_template_test.rb", "test/sample.dat", "test/sample2_out.dat", "test/sample_activities.dat", "test/sample_out.dat", "test/test_helper.rb", "test/test_hflr.rb"]
21
- s.homepage = %q{http://ruff.rubyforge.org}
22
- s.rdoc_options = ["--main", "README.txt"]
20
+ s.files = ["History.txt", "README.txt", "hflr.gemspec",
21
+ "lib/hflr.rb", "lib/hflr/fl_record_file.rb", "lib/hflr/hflr.rb", "lib/hflr/record_template.rb",
22
+ "test/customer_orders.dat", "test/customers.dat", "test/examples.rb", "test/flrfile_test.rb","test/record_template_test.rb",
23
+ "test/sample.dat", "test/sample2_out.dat", "test/sample_activities.dat", "test/sample_out.dat", "test/test_helper.rb", "test/test_hflr.rb"]
24
+ #s.homepage = %q{http://rubygems.org}
25
+ #s.rdoc_options = ["--main", "README.txt"]
23
26
  s.require_paths = ["lib"]
24
- s.rubyforge_project = %q{hflr}
27
+
25
28
  s.rubygems_version = %q{1.3.4}
26
29
  s.summary = %q{HFLR -- Hierarchical Fixed Length Records Allows you to read and write files of fixed width records when the file contains one or more than one type of record}
27
30
  s.test_files = ["test/test_hflr.rb", "test/test_helper.rb"]
28
-
29
- if s.respond_to? :specification_version then
30
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
31
- s.specification_version = 3
32
-
33
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
34
- s.add_development_dependency(%q<bones>, [">= 2.5.1"])
35
- else
36
- s.add_dependency(%q<bones>, [">= 2.5.1"])
37
- end
38
- else
39
- s.add_dependency(%q<bones>, [">= 2.5.1"])
40
- end
41
31
  end
File without changes
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/record_template')
1
+ #require File.expand_path(File.dirname(__FILE__) + '/record_template')
2
2
 
3
3
 
4
4
 
@@ -13,7 +13,10 @@ class FLRFile
13
13
  def initialize(source, record_types, record_layouts, logical_first_column=0, extra_columns = nil)
14
14
  # Allow record layouts like
15
15
  # {:type1=>[:var1=>1..5,:var2=>7..8],:type2=>[:var1=>1..1,:var2=>3..4]}
16
- # ... todo
16
+ if record_layouts.values.first.is_a? Hash
17
+ record_layouts = create_layouts(record_layouts)
18
+ end
19
+
17
20
  @line_number = 0
18
21
  @file = source
19
22
  @record_type_labels=record_types
@@ -65,8 +68,7 @@ def get_next_known_line_type
65
68
  line = @file.gets
66
69
  record_type = line_type(line)
67
70
  end
68
- record_type == :unknown ? nil : line
69
-
71
+ record_type == :unknown ? nil : line
70
72
  end
71
73
 
72
74
  def each
@@ -105,5 +107,23 @@ def self.open(path, mode, record_types, record_layouts, logical_first_column=0)
105
107
  file.close
106
108
  end
107
109
  end
110
+
111
+ private
112
+
113
+ # If the layout is given in the convenient Ruby form
114
+ def create_layouts(layout)
115
+ var_class = Struct.new(:name,:start,:len)
116
+ new_layout = {}
117
+ layout.each_pair do |record_type,vars|
108
118
 
119
+ new_layout[record_type] = []
120
+ new_vars = vars.each_pair do |var_name, range|
121
+
122
+ new_layout[record_type] << var_class.new(var_name.to_s,range.first, range.last - range.first + 1)
123
+ end
124
+ new_layout[record_type].sort!{|a,b| a.start<=>b.start}
125
+ end
126
+ return new_layout
127
+ end
128
+
109
129
  end
File without changes
@@ -24,12 +24,12 @@ def self.create(record_layouts, record_type_symbols, first_column_location, extr
24
24
  templates = {}
25
25
  self.check_record_layouts(record_layouts)
26
26
 
27
- record_layouts.keys.each do |record_type|
27
+ record_layouts.each_pair do |record_type, vars|
28
28
  record_label = record_type_symbols == :none ? :none : record_type_symbols[record_type]
29
29
  templates[record_type] =
30
30
  self.create_template_class(record_type,
31
31
  record_label,
32
- record_layouts[record_type],
32
+ vars,
33
33
  first_column_location,
34
34
  extra_columns[record_type])
35
35
  end
File without changes
File without changes
@@ -46,5 +46,22 @@ customer_orders_file = FLRFile.new(
46
46
  show record
47
47
  end
48
48
 
49
+
50
+ puts " ----- You can also use metadata in Ruby -----"
51
+ # Use Ruby metadata
52
+
53
+ layout = {:customer=>{
54
+ :name=>1..25,
55
+ :zip=>26..30,
56
+ :balance=>31..35
49
57
 
50
-
58
+ }
59
+ }
60
+ customer_file = FLRFile.new(File.new("customers.dat"), :customer, layout, 1, [:line_number])
61
+
62
+
63
+ # You can read through the file and access the fields with methods named after the columns:
64
+ customer_file.each do |record|
65
+ puts "Customer #{customer_file.line_number.to_s} #{record.name} #{record.zip} "
66
+ end
67
+
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
metadata CHANGED
@@ -1,27 +1,23 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hflr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ prerelease: false
5
+ segments:
6
+ - 1
7
+ - 0
8
+ - 1
9
+ version: 1.0.1
5
10
  platform: ruby
6
11
  authors:
7
- - Colin Davis
12
+ - Colin Davis
8
13
  autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2009-08-04 00:00:00 -05:00
17
+ date: 2011-02-09 00:00:00 -06:00
13
18
  default_executable:
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: bones
17
- type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: 2.5.1
24
- version:
19
+ dependencies: []
20
+
25
21
  description: |-
26
22
  HFLR -- Hierarchical Fixed Length Records
27
23
 
@@ -37,71 +33,57 @@ executables: []
37
33
  extensions: []
38
34
 
39
35
  extra_rdoc_files:
40
- - History.txt
41
- - README.txt
36
+ - History.txt
37
+ - README.txt
42
38
  files:
43
- - History.txt
44
- - README.txt
45
- - Rakefile
46
- - hflr.gemspec
47
- - lib/hflr.rb
48
- - lib/hflr/fl_record_file.rb
49
- - lib/hflr/hflr.rb
50
- - lib/hflr/record_template.rb
51
- - sample2_out.dat
52
- - tasks/ann.rake
53
- - tasks/bones.rake
54
- - tasks/gem.rake
55
- - tasks/git.rake
56
- - tasks/notes.rake
57
- - tasks/post_load.rake
58
- - tasks/rdoc.rake
59
- - tasks/rubyforge.rake
60
- - tasks/setup.rb
61
- - tasks/spec.rake
62
- - tasks/svn.rake
63
- - tasks/test.rake
64
- - tasks/zentest.rake
65
- - test/customer_orders.dat
66
- - test/customers.dat
67
- - test/examples.rb
68
- - test/flrfile_test.rb
69
- - test/record_template_test.rb
70
- - test/sample.dat
71
- - test/sample2_out.dat
72
- - test/sample_activities.dat
73
- - test/sample_out.dat
74
- - test/test_helper.rb
75
- - test/test_hflr.rb
39
+ - History.txt
40
+ - README.txt
41
+ - hflr.gemspec
42
+ - lib/hflr.rb
43
+ - lib/hflr/fl_record_file.rb
44
+ - lib/hflr/hflr.rb
45
+ - lib/hflr/record_template.rb
46
+ - test/customer_orders.dat
47
+ - test/customers.dat
48
+ - test/examples.rb
49
+ - test/flrfile_test.rb
50
+ - test/record_template_test.rb
51
+ - test/sample.dat
52
+ - test/sample2_out.dat
53
+ - test/sample_activities.dat
54
+ - test/sample_out.dat
55
+ - test/test_helper.rb
56
+ - test/test_hflr.rb
76
57
  has_rdoc: true
77
- homepage: http://ruff.rubyforge.org
58
+ homepage:
78
59
  licenses: []
79
60
 
80
61
  post_install_message:
81
- rdoc_options:
82
- - --main
83
- - README.txt
62
+ rdoc_options: []
63
+
84
64
  require_paths:
85
- - lib
65
+ - lib
86
66
  required_ruby_version: !ruby/object:Gem::Requirement
87
67
  requirements:
88
- - - ">="
89
- - !ruby/object:Gem::Version
90
- version: "0"
91
- version:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ segments:
71
+ - 0
72
+ version: "0"
92
73
  required_rubygems_version: !ruby/object:Gem::Requirement
93
74
  requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: "0"
97
- version:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ segments:
78
+ - 0
79
+ version: "0"
98
80
  requirements: []
99
81
 
100
- rubyforge_project: hflr
101
- rubygems_version: 1.3.4
82
+ rubyforge_project:
83
+ rubygems_version: 1.3.6
102
84
  signing_key:
103
85
  specification_version: 3
104
86
  summary: HFLR -- Hierarchical Fixed Length Records Allows you to read and write files of fixed width records when the file contains one or more than one type of record
105
87
  test_files:
106
- - test/test_hflr.rb
107
- - test/test_helper.rb
88
+ - test/test_hflr.rb
89
+ - test/test_helper.rb
data/Rakefile DELETED
@@ -1,31 +0,0 @@
1
- # Look in the tasks/setup.rb file for the various options that can be
2
- # configured in this Rakefile. The .rake files in the tasks directory
3
- # are where the options are used.
4
-
5
- begin
6
- require 'bones'
7
- Bones.setup
8
- rescue LoadError
9
-
10
- begin
11
- load 'tasks/setup.rb'
12
- rescue LoadError
13
- raise RuntimeError, '### please install the "bones" gem ###'
14
- end
15
- end
16
-
17
- ensure_in_path 'lib'
18
- require 'hflr'
19
-
20
- task :default => 'spec:run'
21
-
22
- PROJ.name = 'hflr'
23
- PROJ.authors = 'Colin Davis'
24
- PROJ.email = 'colin.c.davis@gmail.com'
25
- PROJ.url = 'http://ruff.rubyforge.org'
26
- PROJ.version = Hflr::VERSION
27
- PROJ.rubyforge.name = 'hflr'
28
-
29
- PROJ.spec.opts << '--color'
30
-
31
- # EOF
@@ -1 +0,0 @@
1
- joe 025
@@ -1,80 +0,0 @@
1
-
2
- begin
3
- require 'bones/smtp_tls'
4
- rescue LoadError
5
- require 'net/smtp'
6
- end
7
- require 'time'
8
-
9
- namespace :ann do
10
-
11
- # A prerequisites task that all other tasks depend upon
12
- task :prereqs
13
-
14
- file PROJ.ann.file do
15
- ann = PROJ.ann
16
- puts "Generating #{ann.file}"
17
- File.open(ann.file,'w') do |fd|
18
- fd.puts("#{PROJ.name} version #{PROJ.version}")
19
- fd.puts(" by #{Array(PROJ.authors).first}") if PROJ.authors
20
- fd.puts(" #{PROJ.url}") if PROJ.url.valid?
21
- fd.puts(" (the \"#{PROJ.release_name}\" release)") if PROJ.release_name
22
- fd.puts
23
- fd.puts("== DESCRIPTION")
24
- fd.puts
25
- fd.puts(PROJ.description)
26
- fd.puts
27
- fd.puts(PROJ.changes.sub(%r/^.*$/, '== CHANGES'))
28
- fd.puts
29
- ann.paragraphs.each do |p|
30
- fd.puts "== #{p.upcase}"
31
- fd.puts
32
- fd.puts paragraphs_of(PROJ.readme_file, p).join("\n\n")
33
- fd.puts
34
- end
35
- fd.puts ann.text if ann.text
36
- end
37
- end
38
-
39
- desc "Create an announcement file"
40
- task :announcement => ['ann:prereqs', PROJ.ann.file]
41
-
42
- desc "Send an email announcement"
43
- task :email => ['ann:prereqs', PROJ.ann.file] do
44
- ann = PROJ.ann
45
- from = ann.email[:from] || Array(PROJ.authors).first || PROJ.email
46
- to = Array(ann.email[:to])
47
-
48
- ### build a mail header for RFC 822
49
- rfc822msg = "From: #{from}\n"
50
- rfc822msg << "To: #{to.join(',')}\n"
51
- rfc822msg << "Subject: [ANN] #{PROJ.name} #{PROJ.version}"
52
- rfc822msg << " (#{PROJ.release_name})" if PROJ.release_name
53
- rfc822msg << "\n"
54
- rfc822msg << "Date: #{Time.new.rfc822}\n"
55
- rfc822msg << "Message-Id: "
56
- rfc822msg << "<#{"%.8f" % Time.now.to_f}@#{ann.email[:domain]}>\n\n"
57
- rfc822msg << File.read(ann.file)
58
-
59
- params = [:server, :port, :domain, :acct, :passwd, :authtype].map do |key|
60
- ann.email[key]
61
- end
62
-
63
- params[3] = PROJ.email if params[3].nil?
64
-
65
- if params[4].nil?
66
- STDOUT.write "Please enter your e-mail password (#{params[3]}): "
67
- params[4] = STDIN.gets.chomp
68
- end
69
-
70
- ### send email
71
- Net::SMTP.start(*params) {|smtp| smtp.sendmail(rfc822msg, from, to)}
72
- end
73
- end # namespace :ann
74
-
75
- desc 'Alias to ann:announcement'
76
- task :ann => 'ann:announcement'
77
-
78
- CLOBBER << PROJ.ann.file
79
-
80
- # EOF
@@ -1,20 +0,0 @@
1
-
2
- if HAVE_BONES
3
-
4
- namespace :bones do
5
-
6
- desc 'Show the PROJ open struct'
7
- task :debug do |t|
8
- atr = if t.application.top_level_tasks.length == 2
9
- t.application.top_level_tasks.pop
10
- end
11
-
12
- if atr then Bones::Debug.show_attr(PROJ, atr)
13
- else Bones::Debug.show PROJ end
14
- end
15
-
16
- end # namespace :bones
17
-
18
- end # HAVE_BONES
19
-
20
- # EOF