hflr 0.11.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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