dbf 2.0.0 → 2.0.1

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