infused-dbf 1.0.7 → 1.0.8

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.
data/README.txt CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  DBF is a small fast library for reading dBase, xBase, Clipper and FoxPro database files
4
4
 
5
- Copyright (c) 2006-2008 Keith Morrison <keithm@infused.org, www.infused.org>
5
+ Copyright (c) 2006-2009 Keith Morrison <keithm@infused.org, www.infused.org>
6
6
 
7
7
  * Official project page: http://rubyforge.org/projects/dbf
8
8
  * API Documentation: http://dbf.rubyforge.org/docs
@@ -91,7 +91,7 @@ A small command-line utility called dbf is installed along with the gem.
91
91
 
92
92
  (The MIT Licence)
93
93
 
94
- Copyright (c) 2006-2008 Keith Morrison <keithm@infused.org>
94
+ Copyright (c) 2006-2009 Keith Morrison <keithm@infused.org, www.infused.org>
95
95
 
96
96
  Permission is hereby granted, free of charge, to any person
97
97
  obtaining a copy of this software and associated documentation
data/Rakefile CHANGED
@@ -2,7 +2,7 @@ require 'hoe'
2
2
  require 'spec/rake/spectask'
3
3
 
4
4
  PKG_NAME = "dbf"
5
- PKG_VERSION = "1.0.7"
5
+ PKG_VERSION = "1.0.8"
6
6
  PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
7
7
 
8
8
  Hoe.new PKG_NAME, PKG_VERSION do |p|
data/dbf.gemspec CHANGED
@@ -1,15 +1,15 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = %q{dbf}
3
- s.version = "1.0.7"
3
+ s.version = "1.0.8"
4
4
 
5
5
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
6
6
  s.authors = ["Keith Morrison"]
7
- s.date = %q{2009-01-01}
7
+ s.date = %q{2009-01-02}
8
8
  s.default_executable = %q{dbf}
9
- s.description = %q{DBF is a small fast library for reading dBase, xBase, Clipper and FoxPro database files Copyright (c) 2006-2008 Keith Morrison <keithm@infused.org, www.infused.org> * Official project page: http://rubyforge.org/projects/dbf * API Documentation: http://dbf.rubyforge.org/docs * To report bugs: http://www.rubyforge.org/tracker/?group_id=2009 * Questions: Email keithm@infused.org and put DBF somewhere in the subject line}
9
+ s.description = %q{DBF is a small fast library for reading dBase, xBase, Clipper and FoxPro database files Copyright (c) 2006-2009 Keith Morrison <keithm@infused.org, www.infused.org> * Official project page: http://rubyforge.org/projects/dbf * API Documentation: http://dbf.rubyforge.org/docs * To report bugs: http://www.rubyforge.org/tracker/?group_id=2009 * Questions: Email keithm@infused.org and put DBF somewhere in the subject line}
10
10
  s.email = %q{keithm@infused.org}
11
11
  s.executables = ["dbf"]
12
- s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.txt"]
12
+ s.extra_rdoc_files = ["History.txt", "README.txt"]
13
13
  s.files = ["History.txt", "Manifest.txt", "README.txt", "Rakefile", "bin/dbf", "dbf.gemspec", "lib/dbf.rb", "lib/dbf/column.rb", "lib/dbf/globals.rb", "lib/dbf/record.rb", "lib/dbf/table.rb", "spec/fixtures/dbase_03.dbf", "spec/fixtures/dbase_30.dbf", "spec/fixtures/dbase_30.fpt", "spec/fixtures/dbase_83.dbf", "spec/fixtures/dbase_83.dbt", "spec/fixtures/dbase_83_schema.txt", "spec/fixtures/dbase_8b.dbf", "spec/fixtures/dbase_8b.dbt", "spec/fixtures/dbase_f5.dbf", "spec/fixtures/dbase_f5.fpt", "spec/functional/dbf_shared.rb", "spec/functional/format_03_spec.rb", "spec/functional/format_30_spec.rb", "spec/functional/format_83_spec.rb", "spec/functional/format_8b_spec.rb", "spec/functional/format_f5_spec.rb", "spec/spec_helper.rb", "spec/unit/column_spec.rb", "spec/unit/record_spec.rb", "spec/unit/table_spec.rb"]
14
14
  s.has_rdoc = true
15
15
  s.homepage = %q{http://github.com/infused/dm-dbf/tree/master}
data/lib/dbf/column.rb CHANGED
@@ -6,8 +6,10 @@ module DBF
6
6
  attr_reader :name, :type, :length, :decimal
7
7
 
8
8
  def initialize(name, type, length, decimal)
9
- raise ColumnLengthError, "field length must be greater than 0" unless length > 0
10
9
  @name, @type, @length, @decimal = strip_non_ascii_chars(name), type, length, decimal
10
+
11
+ raise ColumnLengthError, "field length must be greater than 0" unless length > 0
12
+ raise ColumnNameError, "column name cannot be empty" if @name.length == 0
11
13
  end
12
14
 
13
15
  def type_cast(value)
@@ -31,10 +33,8 @@ module DBF
31
33
 
32
34
  def decode_datetime(value)
33
35
  days, milliseconds = value.unpack('l2')
34
- hours = (milliseconds / MS_PER_HOUR).to_i
35
- minutes = ((milliseconds - (hours * MS_PER_HOUR)) / MS_PER_MINUTE).to_i
36
- seconds = ((milliseconds - (hours * MS_PER_HOUR) - (minutes * MS_PER_MINUTE)) / MS_PER_SECOND).to_i
37
- DateTime.jd(days, hours, minutes, seconds)
36
+ seconds = milliseconds / 1000
37
+ DateTime.jd(days, seconds/3600, seconds/60 % 60, seconds % 60)
38
38
  end
39
39
 
40
40
  def unpack_integer(value)
@@ -66,19 +66,12 @@ module DBF
66
66
  "\"#{name.underscore}\", #{data_type}\n"
67
67
  end
68
68
 
69
- private
70
-
69
+ # strip all non-ascii and non-printable characters
71
70
  def strip_non_ascii_chars(s)
72
- clean = ''
73
- s.each_byte do |char|
74
- if char > 31 && char < 127
75
- clean << char
76
- else
77
- raise ColumnNameError 'column name must not be empty' if clean.length == 0
78
- return clean if char == 0
79
- end
80
- end
81
- clean
71
+ # truncate the string at the first null character
72
+ s = s[0, s.index("\x00")] if s.index("\x00")
73
+
74
+ s.gsub(/[^\x20-\x7E]/,"")
82
75
  end
83
76
  end
84
77
 
@@ -24,8 +24,13 @@ describe DBF::Column do
24
24
  end
25
25
 
26
26
  it "should raise an error if length is greater than 0" do
27
- lambda { column = DBF::Column.new "ColumnName", "N", -1, 0 }.should raise_error(DBF::ColumnLengthError)
27
+ lambda { DBF::Column.new "ColumnName", "N", -1, 0 }.should raise_error(DBF::ColumnLengthError)
28
28
  end
29
+
30
+ it "should raise error on emtpy column names" do
31
+ lambda { DBF::Column.new "\xFF\xFC", "N", 1, 0 }.should raise_error(DBF::ColumnNameError)
32
+ end
33
+
29
34
  end
30
35
 
31
36
  context "#type_cast" do
@@ -110,14 +115,16 @@ describe DBF::Column do
110
115
  end
111
116
 
112
117
  context "#strip_non_ascii_chars" do
118
+ before do
119
+ @column = DBF::Column.new "ColumnName", "N", 1, 0
120
+ end
121
+
113
122
  it "should strip characters below decimal 32 and above decimal 127" do
114
- column = DBF::Column.new "ColumnName", "N", 1, 0
115
- column.send(:strip_non_ascii_chars, "--\x1F-\x68\x65\x6C\x6C\x6F world-\x80--").should == "---hello world---"
123
+ @column.strip_non_ascii_chars("--\x1F-\x68\x65\x6C\x6C\x6F world-\x80--").should == "---hello world---"
116
124
  end
117
125
 
118
126
  it "should truncate characters with decimal 0" do
119
- column = DBF::Column.new "ColumnName", "N", 1, 0
120
- column.send(:strip_non_ascii_chars, "--\x1F-\x68\x65\x6C\x6C\x6F \x00 world-\x80--").should == "---hello "
127
+ @column.strip_non_ascii_chars("--\x1F-\x68\x65\x6C\x6C\x6F \x00 world-\x80--").should == "---hello "
121
128
  end
122
129
  end
123
130
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: infused-dbf
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.7
4
+ version: 1.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keith Morrison
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-01-01 00:00:00 -08:00
12
+ date: 2009-01-02 00:00:00 -08:00
13
13
  default_executable: dbf
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -30,7 +30,7 @@ dependencies:
30
30
  - !ruby/object:Gem::Version
31
31
  version: 1.8.2
32
32
  version:
33
- description: "DBF is a small fast library for reading dBase, xBase, Clipper and FoxPro database files Copyright (c) 2006-2008 Keith Morrison <keithm@infused.org, www.infused.org> * Official project page: http://rubyforge.org/projects/dbf * API Documentation: http://dbf.rubyforge.org/docs * To report bugs: http://www.rubyforge.org/tracker/?group_id=2009 * Questions: Email keithm@infused.org and put DBF somewhere in the subject line"
33
+ description: "DBF is a small fast library for reading dBase, xBase, Clipper and FoxPro database files Copyright (c) 2006-2009 Keith Morrison <keithm@infused.org, www.infused.org> * Official project page: http://rubyforge.org/projects/dbf * API Documentation: http://dbf.rubyforge.org/docs * To report bugs: http://www.rubyforge.org/tracker/?group_id=2009 * Questions: Email keithm@infused.org and put DBF somewhere in the subject line"
34
34
  email: keithm@infused.org
35
35
  executables:
36
36
  - dbf
@@ -38,7 +38,6 @@ extensions: []
38
38
 
39
39
  extra_rdoc_files:
40
40
  - History.txt
41
- - Manifest.txt
42
41
  - README.txt
43
42
  files:
44
43
  - History.txt