dbf 1.5.3 → 1.6.0

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