dbf 1.5.3 → 1.6.0

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,30 +1,26 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dbf (1.5.2)
5
- activesupport (~> 3.0.0)
4
+ dbf (1.6.0)
6
5
  fastercsv (= 1.5.4)
7
- i18n (~> 0.5.0)
8
6
 
9
7
  GEM
10
8
  remote: http://rubygems.org/
11
9
  specs:
12
- activesupport (3.0.5)
13
- diff-lcs (1.1.2)
10
+ diff-lcs (1.1.3)
14
11
  fastercsv (1.5.4)
15
- i18n (0.5.0)
16
- rspec (2.5.0)
17
- rspec-core (~> 2.5.0)
18
- rspec-expectations (~> 2.5.0)
19
- rspec-mocks (~> 2.5.0)
20
- rspec-core (2.5.1)
21
- rspec-expectations (2.5.0)
12
+ rspec (2.6.0)
13
+ rspec-core (~> 2.6.0)
14
+ rspec-expectations (~> 2.6.0)
15
+ rspec-mocks (~> 2.6.0)
16
+ rspec-core (2.6.4)
17
+ rspec-expectations (2.6.0)
22
18
  diff-lcs (~> 1.1.2)
23
- rspec-mocks (2.5.0)
19
+ rspec-mocks (2.6.0)
24
20
 
25
21
  PLATFORMS
26
22
  ruby
27
23
 
28
24
  DEPENDENCIES
29
25
  dbf!
30
- rspec (= 2.5.0)
26
+ rspec (= 2.6.0)
data/README.md CHANGED
@@ -28,8 +28,8 @@ Load a DBF file:
28
28
  Enumerate all records
29
29
 
30
30
  widgets.each do |record|
31
- puts widget.name
32
- puts widget.email
31
+ puts record.name
32
+ puts record.email
33
33
  end
34
34
 
35
35
  Load a single record using <tt>find</tt>
data/Rakefile CHANGED
@@ -8,7 +8,7 @@ RSpec::Core::RakeTask.new :spec do |t|
8
8
  end
9
9
 
10
10
  require 'rake'
11
- require 'rake/rdoctask'
11
+ require 'rdoc/task'
12
12
  Rake::RDocTask.new { |rdoc|
13
13
  rdoc.rdoc_dir = 'doc'
14
14
  rdoc.title = "DBF - A small fast library for reading dBase, xBase, Clipper and FoxPro database files."
data/lib/dbf.rb CHANGED
@@ -1,18 +1,11 @@
1
1
  require 'date'
2
- gem 'activesupport'
3
- require 'active_support/core_ext/object'
4
- require 'active_support/core_ext/date/conversions'
5
- require 'active_support/core_ext/time/conversions'
6
- require 'active_support/core_ext/date_time/conversions'
7
- require 'active_support/core_ext/string/conversions'
8
- require 'active_support/core_ext/string/inflections'
9
- require 'active_support/core_ext/enumerable'
10
2
 
11
3
  require 'csv'
12
4
  if CSV.const_defined? :Reader
13
5
  require 'fastercsv'
14
6
  end
15
7
 
8
+ require 'dbf/util'
16
9
  require 'dbf/attributes'
17
10
  require 'dbf/record'
18
11
  require 'dbf/column'
@@ -1,6 +1,6 @@
1
1
  class Attributes < Hash
2
2
  def []=(key, value)
3
3
  merge!(key => value)
4
- merge!(key.underscore => value)
4
+ merge!(Util.underscore(key) => value)
5
5
  end
6
6
  end
@@ -48,14 +48,14 @@ module DBF
48
48
  end
49
49
 
50
50
  def underscored_name
51
- @underscored_name ||= name.underscore
51
+ @underscored_name ||= Util.underscore(name)
52
52
  end
53
53
 
54
54
  private
55
55
 
56
56
  def decode_date(value) #nodoc
57
57
  value.gsub!(' ', '0')
58
- value.blank? ? nil : value.to_date
58
+ value !~ /\S/ ? nil : Date.parse(value)
59
59
  rescue
60
60
  nil
61
61
  end
@@ -3,6 +3,10 @@ module DBF
3
3
  BLOCK_HEADER_SIZE = 8
4
4
  FPT_HEADER_SIZE = 512
5
5
 
6
+ def self.open(filename, version)
7
+ self.new File.open(filename, 'rb'), version
8
+ end
9
+
6
10
  def initialize(data, version)
7
11
  @data, @version = data, version
8
12
  end
@@ -21,7 +21,7 @@ module DBF
21
21
  #
22
22
  # @return [Array]
23
23
  def to_a
24
- @columns.map { |column| attributes[column.name.underscore] }
24
+ @columns.map { |column| attributes[Util.underscore(column.name)] }
25
25
  end
26
26
 
27
27
  # Do all search parameters match?
@@ -29,7 +29,7 @@ module DBF
29
29
  # @param [Hash] options
30
30
  # @return [Boolean]
31
31
  def match?(options)
32
- options.all? {|key, value| attributes[key.to_s.underscore] == value}
32
+ options.all? {|key, value| attributes[Util.underscore(key.to_s)] == value}
33
33
  end
34
34
 
35
35
  def attributes
@@ -173,7 +173,7 @@ module DBF
173
173
  %w(fpt FPT dbt DBT).each do |extname|
174
174
  filename = path.sub(/#{File.extname(path)[1..-1]}$/, extname)
175
175
  if File.exists?(filename)
176
- return Memo.new(File.open(filename, 'rb'), version)
176
+ return Memo.open(filename, version)
177
177
  end
178
178
  end
179
179
  nil
@@ -181,7 +181,7 @@ module DBF
181
181
 
182
182
  def find_all(options) #nodoc
183
183
  map do |record|
184
- if record.try(:match?, options)
184
+ if record.match? options
185
185
  yield record if block_given?
186
186
  record
187
187
  end
@@ -189,7 +189,7 @@ module DBF
189
189
  end
190
190
 
191
191
  def find_first(options) #nodoc
192
- detect {|record| record.try(:match?, options)}
192
+ detect {|record| record.match? options}
193
193
  end
194
194
 
195
195
  def deleted_record? #nodoc
@@ -0,0 +1,9 @@
1
+ class Util
2
+ def self.underscore(string)
3
+ string.gsub(/::/, '/').
4
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
5
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').
6
+ tr('-', '_').
7
+ downcase
8
+ end
9
+ end
@@ -1,3 +1,3 @@
1
1
  module DBF
2
- VERSION = '1.5.3'
2
+ VERSION = '1.6.0'
3
3
  end
@@ -93,7 +93,7 @@ describe DBF::Column do
93
93
 
94
94
  context 'with valid datetime' do
95
95
  it "casts to DateTime" do
96
- column.type_cast("Nl%\000\300Z\252\003").should == "2002-10-10T17:04:56+00:00"
96
+ column.type_cast("Nl%\000\300Z\252\003").should == DateTime.parse("2002-10-10T17:04:56+00:00")
97
97
  end
98
98
  end
99
99
 
@@ -3,7 +3,7 @@ require "spec_helper"
3
3
  shared_examples_for 'DBF' do
4
4
  specify "sum of column lengths should equal record length specified in header plus one" do
5
5
  header_record_length = @table.instance_eval {@record_length}
6
- sum_of_column_lengths = 1 + @table.columns.sum {|column| column.length}
6
+ sum_of_column_lengths = @table.columns.inject(1) {|sum, column| sum += column.length}
7
7
 
8
8
  header_record_length.should == sum_of_column_lengths
9
9
  end
@@ -51,7 +51,7 @@ shared_examples_for 'DBF' do
51
51
  specify "column attributes should be accessible in underscored form" do
52
52
  @table.columns do |column|
53
53
  record = @table.records.first
54
- record.send(column_name).should == record.send(column_name.underscore)
54
+ record.send(column_name).should == record.send(Util.underscore(column_name))
55
55
  end
56
56
  end
57
57
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dbf
3
3
  version: !ruby/object:Gem::Version
4
- hash: 5
4
+ hash: 15
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 5
9
- - 3
10
- version: 1.5.3
8
+ - 6
9
+ - 0
10
+ version: 1.6.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Keith Morrison
@@ -15,45 +15,12 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-04-06 00:00:00 -07:00
19
- default_executable:
18
+ date: 2011-09-02 00:00:00 Z
20
19
  dependencies:
21
- - !ruby/object:Gem::Dependency
22
- name: activesupport
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ~>
28
- - !ruby/object:Gem::Version
29
- hash: 7
30
- segments:
31
- - 3
32
- - 0
33
- - 0
34
- version: 3.0.0
35
- type: :runtime
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: i18n
39
- prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ~>
44
- - !ruby/object:Gem::Version
45
- hash: 11
46
- segments:
47
- - 0
48
- - 5
49
- - 0
50
- version: 0.5.0
51
- type: :runtime
52
- version_requirements: *id002
53
20
  - !ruby/object:Gem::Dependency
54
21
  name: fastercsv
55
22
  prerelease: false
56
- requirement: &id003 !ruby/object:Gem::Requirement
23
+ requirement: &id001 !ruby/object:Gem::Requirement
57
24
  none: false
58
25
  requirements:
59
26
  - - "="
@@ -65,23 +32,23 @@ dependencies:
65
32
  - 4
66
33
  version: 1.5.4
67
34
  type: :runtime
68
- version_requirements: *id003
35
+ version_requirements: *id001
69
36
  - !ruby/object:Gem::Dependency
70
37
  name: rspec
71
38
  prerelease: false
72
- requirement: &id004 !ruby/object:Gem::Requirement
39
+ requirement: &id002 !ruby/object:Gem::Requirement
73
40
  none: false
74
41
  requirements:
75
42
  - - "="
76
43
  - !ruby/object:Gem::Version
77
- hash: 27
44
+ hash: 23
78
45
  segments:
79
46
  - 2
80
- - 5
47
+ - 6
81
48
  - 0
82
- version: 2.5.0
49
+ version: 2.6.0
83
50
  type: :development
84
- version_requirements: *id004
51
+ version_requirements: *id002
85
52
  description: A small fast library for reading dBase, xBase, Clipper and FoxPro database files.
86
53
  email: keithm@infused.org
87
54
  executables:
@@ -107,6 +74,7 @@ files:
107
74
  - lib/dbf/memo.rb
108
75
  - lib/dbf/record.rb
109
76
  - lib/dbf/table.rb
77
+ - lib/dbf/util.rb
110
78
  - lib/dbf/version.rb
111
79
  - lib/dbf.rb
112
80
  - spec/dbf/column_spec.rb
@@ -126,7 +94,6 @@ files:
126
94
  - spec/fixtures/dbase_f5.dbf
127
95
  - spec/fixtures/dbase_f5.fpt
128
96
  - spec/spec_helper.rb
129
- has_rdoc: true
130
97
  homepage: http://github.com/infused/dbf
131
98
  licenses: []
132
99
 
@@ -158,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
158
125
  requirements: []
159
126
 
160
127
  rubyforge_project:
161
- rubygems_version: 1.6.2
128
+ rubygems_version: 1.8.10
162
129
  signing_key:
163
130
  specification_version: 3
164
131
  summary: Read xBase files