dbf 2.0.0 → 2.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.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ # 2.0.1
2
+ - Add experimental support for character encodings under Ruby 1.8
3
+
1
4
  # 2.0.0
2
5
  - #44 Require FasterCSV gem on all platforms
3
6
  - Remove rdoc development dependency
data/Gemfile.lock CHANGED
@@ -1,23 +1,24 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dbf (1.7.5)
5
- fastercsv (~> 1.5.4)
4
+ dbf (1.7.4)
6
5
 
7
6
  GEM
8
7
  remote: http://rubygems.org/
9
8
  specs:
10
9
  diff-lcs (1.1.3)
11
- fastercsv (1.5.5)
10
+ json (1.6.5)
12
11
  rake (0.9.2.2)
13
- rspec (2.9.0)
14
- rspec-core (~> 2.9.0)
15
- rspec-expectations (~> 2.9.0)
16
- rspec-mocks (~> 2.9.0)
17
- rspec-core (2.9.0)
18
- rspec-expectations (2.9.1)
19
- diff-lcs (~> 1.1.3)
20
- rspec-mocks (2.9.0)
12
+ rdoc (3.12)
13
+ json (~> 1.4)
14
+ rspec (2.8.0)
15
+ rspec-core (~> 2.8.0)
16
+ rspec-expectations (~> 2.8.0)
17
+ rspec-mocks (~> 2.8.0)
18
+ rspec-core (2.8.0)
19
+ rspec-expectations (2.8.0)
20
+ diff-lcs (~> 1.1.2)
21
+ rspec-mocks (2.8.0)
21
22
 
22
23
  PLATFORMS
23
24
  ruby
@@ -25,4 +26,5 @@ PLATFORMS
25
26
  DEPENDENCIES
26
27
  dbf!
27
28
  rake (~> 0.9.2)
28
- rspec (~> 2.9.0)
29
+ rdoc (~> 3.11)
30
+ rspec (~> 2.8.0)
data/README.md CHANGED
@@ -37,16 +37,22 @@ Enumerate all records
37
37
 
38
38
  Find a single record
39
39
 
40
- widget.find(6)
40
+ widget = widgets.find(6)
41
+
42
+ Note that find() will return nil if the requested record has been deleted
43
+ and not yet pruned from the database.
44
+
45
+ The value for a attribute can be accessed via element reference in one of three
46
+ ways
41
47
 
42
- Attributes can also be accessed through the attributes hash or the record
43
- object using either the original or underscored attribute name. Note that
44
- find() will return nil if the requested record has been deleted and not yet
45
- pruned from the database.
48
+ widget["SlotNumber"] # original field name in dbf file
49
+ widget['slot_number'] # underscored field name string
50
+ widget[:slot_number] # underscored field name symbol
51
+
52
+ Get a hash of all attributes. The keys are the original column names.
46
53
 
47
- widget.find(4).attributes["SlotNumber"]
48
- widget.find(4)["SlotNumber"]
49
- widget.find(4)[:slot_number]
54
+ widgets.attributes
55
+ => {"Name" => "Thing1", "SlotNumber" => 1}
50
56
 
51
57
  Search for records using a simple hash format. Multiple search criteria are
52
58
  ANDed. Use the block form if the resulting recordset could be large, otherwise
@@ -81,7 +87,7 @@ An example of migrating a DBF book table to ActiveRecord using a migration:
81
87
 
82
88
  Book.reset_column_information
83
89
  table.each do |record|
84
- Book.create(record.attributes)
90
+ Book.create(:title => record.title, :author => record.author)
85
91
  end
86
92
  end
87
93
 
@@ -96,7 +96,15 @@ module DBF
96
96
  end
97
97
 
98
98
  def encode_string(value) #nodoc
99
- @encoding ? value.force_encoding(@encoding).encode(Encoding.default_external, :undef => :replace, :invalid => :replace) : value
99
+ if @encoding
100
+ if String.new.respond_to?(:encoding)
101
+ value.force_encoding(@encoding).encode(Encoding.default_external, :undef => :replace, :invalid => :replace)
102
+ else
103
+ Iconv.conv('UTF-8', @encoding, value)
104
+ end
105
+ else
106
+ value
107
+ end
100
108
  end
101
109
 
102
110
  def schema_data_type #nodoc
data/lib/dbf/table.rb CHANGED
@@ -209,7 +209,14 @@ module DBF
209
209
  end
210
210
 
211
211
  def supports_encoding?
212
- String.new.respond_to? :encoding
212
+ String.new.respond_to?(:encoding)
213
+ end
214
+
215
+ def supports_iconv?
216
+ require 'iconv'
217
+ true
218
+ rescue
219
+ false
213
220
  end
214
221
 
215
222
  def foxpro?
@@ -281,7 +288,7 @@ module DBF
281
288
  def get_header_info #nodoc
282
289
  @data.rewind
283
290
  @version, @record_count, @header_length, @record_length, @encoding_key = read_header
284
- @encoding = ENCODINGS[@encoding_key] if supports_encoding?
291
+ @encoding = ENCODINGS[@encoding_key] if supports_encoding? || supports_iconv?
285
292
  end
286
293
 
287
294
  def read_header #nodoc
data/lib/dbf/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module DBF
2
- VERSION = '2.0.0'
2
+ VERSION = '2.0.1'
3
3
  end
@@ -62,4 +62,19 @@ describe DBF::Record do
62
62
  end
63
63
  end
64
64
  end
65
+
66
+ describe '#attributes' do
67
+ let(:table) { DBF::Table.new "#{DB_PATH}/dbase_8b.dbf"}
68
+ let(:record) { table.find(0) }
69
+
70
+ it 'is a hash of attribute name/value pairs' do
71
+ record.attributes.should be_a(Hash)
72
+ record.attributes['CHARACTER'] == 'One'
73
+ end
74
+
75
+ it 'has only original field names as keys' do
76
+ original_field_names = %w(CHARACTER DATE FLOAT LOGICAL MEMO NUMERICAL)
77
+ record.attributes.keys.sort.should == original_field_names
78
+ end
79
+ end
65
80
  end
metadata CHANGED
@@ -1,75 +1,75 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: dbf
3
- version: !ruby/object:Gem::Version
4
- version: 2.0.0
5
- prerelease:
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 2
7
+ - 0
8
+ - 1
9
+ version: 2.0.1
6
10
  platform: ruby
7
- authors:
11
+ authors:
8
12
  - Keith Morrison
9
13
  autorequire:
10
14
  bindir: bin
11
15
  cert_chain: []
12
- date: 2012-08-07 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
16
+
17
+ date: 2012-09-28 00:00:00 -07:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
15
21
  name: fastercsv
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ~>
20
- - !ruby/object:Gem::Version
21
- version: 1.5.4
22
- type: :runtime
23
22
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
27
25
  - - ~>
28
- - !ruby/object:Gem::Version
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 1
29
+ - 5
30
+ - 4
29
31
  version: 1.5.4
30
- - !ruby/object:Gem::Dependency
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
31
35
  name: rspec
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ~>
36
- - !ruby/object:Gem::Version
37
- version: 2.9.0
38
- type: :development
39
36
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ requirements:
43
39
  - - ~>
44
- - !ruby/object:Gem::Version
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 2
43
+ - 9
44
+ - 0
45
45
  version: 2.9.0
46
- - !ruby/object:Gem::Dependency
47
- name: rake
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ~>
52
- - !ruby/object:Gem::Version
53
- version: 0.9.2
54
46
  type: :development
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: rake
55
50
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ requirements:
59
53
  - - ~>
60
- - !ruby/object:Gem::Version
54
+ - !ruby/object:Gem::Version
55
+ segments:
56
+ - 0
57
+ - 9
58
+ - 2
61
59
  version: 0.9.2
62
- description: A small fast library for reading dBase, xBase, Clipper and FoxPro database
63
- files.
60
+ type: :development
61
+ version_requirements: *id003
62
+ description: A small fast library for reading dBase, xBase, Clipper and FoxPro database files.
64
63
  email: keithm@infused.org
65
- executables:
64
+ executables:
66
65
  - dbf
67
66
  extensions: []
68
- extra_rdoc_files:
67
+
68
+ extra_rdoc_files:
69
69
  - README.md
70
70
  - CHANGELOG.md
71
71
  - MIT-LICENSE
72
- files:
72
+ files:
73
73
  - CHANGELOG.md
74
74
  - Gemfile
75
75
  - Gemfile.lock
@@ -109,32 +109,39 @@ files:
109
109
  - spec/rvm_ruby_runner.rb
110
110
  - spec/spec_helper.rb
111
111
  - dbf.gemspec
112
+ has_rdoc: true
112
113
  homepage: http://github.com/infused/dbf
113
114
  licenses: []
115
+
114
116
  post_install_message:
115
- rdoc_options:
117
+ rdoc_options:
116
118
  - --charset=UTF-8
117
- require_paths:
119
+ require_paths:
118
120
  - lib
119
- required_ruby_version: !ruby/object:Gem::Requirement
120
- none: false
121
- requirements:
122
- - - ! '>='
123
- - !ruby/object:Gem::Version
124
- version: '0'
125
- required_rubygems_version: !ruby/object:Gem::Requirement
126
- none: false
127
- requirements:
128
- - - ! '>='
129
- - !ruby/object:Gem::Version
121
+ required_ruby_version: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ segments:
126
+ - 0
127
+ version: "0"
128
+ required_rubygems_version: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ segments:
133
+ - 1
134
+ - 3
135
+ - 0
130
136
  version: 1.3.0
131
137
  requirements: []
138
+
132
139
  rubyforge_project:
133
- rubygems_version: 1.8.24
140
+ rubygems_version: 1.3.6
134
141
  signing_key:
135
142
  specification_version: 3
136
143
  summary: Read xBase files
137
- test_files:
144
+ test_files:
138
145
  - spec/dbf/column_spec.rb
139
146
  - spec/dbf/file_formats_spec.rb
140
147
  - spec/dbf/record_spec.rb