diff --git a/CHANGELOG.md b/CHANGELOG.md
index fa738d3..45efc9a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,120 +1,215 @@
-# 3.0.5
-  - Override table name for schema output
+# Changelog
 
-# 3.0.4
-  - Adds -v command-line option to print version
-  - Adds -r command-line option to create Sequel migration
+## 4.2.0
 
-# 3.0.3
-  - Uninitialized (N)umbers should return nil
+- Initial support for dBase 7 files
 
-# 3.0.2
-  - Performance improvements for large files
+## 4.1.6
 
-# 3.0.1
-  - Support FoxPro (G) general field type
-  - Fix ruby warnings
+- Add support for file type 32
 
-# 3.0.0
-  - Requires Ruby version 2.0 and above
-  - Support the (G) General Foxpro field type
+## 4.1.5
 
-# 2.0.13
-  - Support 64-bit currency signed currency values
-    (see https://github.com/infused/dbf/pull/71)
+- Better handling for PIPE errors when using command line utility
 
-# 2.0.12
-  - Parse (I) values as signed
-    (see https://github.com/infused/dbf/pull/70)
+## 4.1.4
 
-# 2.0.11
-  - Foxpro doubles should always return the full stored precision
-    (see https://github.com/infused/dbf/pull/69)
+- Add full support for FoxBase files
 
-# 2.0.10
-  - allow 0 length fields, but always return nil as value
+## 4.1.3
 
-# 2.0.9
-  - fix dBase IV attributes when memo file is missing
+- Raise DBF::NoColumnsDefined error when attempting to read records if no columns are defined
 
-# 2.0.8
-  - fix FoxPro currency fields on some builds of Ruby 1.9.3 and 2.0.0
+## 4.1.1
 
-# 2.0.7
-  - fix the dbf binary on some linux systems
+- Add required_ruby_version to gemspec
 
-# 2.0.6
-  - build_memo returns nil on errors
+## 4.1.0
 
-# 2.0.5
-  - use correct FoxPro memo block size
+- Return Time instead of DateTime
 
-# 2.0.4
-  - memo fields return nil if memo file is missing
+## 4.0.0
 
-# 2.0.3
-  - set encoding if table encoding is nil
+- Drop support for ruby-2.2 and earlier
 
-# 2.0.2
-  - Allow overriding the character encoding specified in the file
+## 3.1.3
 
-# 2.0.1
-  - Add experimental support for character encodings under Ruby 1.8
+- Ensure malformed dates return nil
 
-# 2.0.0
-  - #44 Require FasterCSV gem on all platforms
-  - Remove rdoc development dependency
-  - #42 Fixes encoding of memos
-  - #43 Improve handling of record attributes
+## 3.1.2
 
-# 1.7.5
-  - fixes FoxPro currency (Y) fields
+- Fix incorrect columns list when StringIO and encoding set
 
-# 1.7.4
-  - Replace Memo Type with Memo File boolean in command-line utility summary output
+## 3.1.1
 
-# 1.7.3
-  - find_all/find_first should ignore deleted records
+- Use Date.strptime to parse date fields
 
-# 1.7.2
-  - Fix integer division under Ruby 1.8 when requiring mathn
-    standard library (see http://bugs.ruby-lang.org/issues/2121)
+## 3.1.0
 
-# 1.7.1
-  - Fix Table.FOXPRO_VERSIONS breakage on Ruby 1.8
+- Use :binary for binary fields in ActiveRecord schemas
 
-# 1.7.0
-  - allow DBF::Table to work with dbf data in memory
-  - allow DBF::Table#to_csv to write to STDOUT
+## 3.0.8
 
-# 1.6.7
-  - memo columns return nil when no memo file found
+- Fix uninitialized constant error under Rails 5
 
-# 1.6.6
-  - add binary data type support to ActiveRecord schema output
+## 3.0.7
 
-# 1.6.5
-  - support for visual foxpro double (b) data type
+- Ignore non-existent records if header record count is incorrect
 
-# 1.6.3
-  - Replace invalid chars with 'unicode replacement character' (U+FFFD)
+## 3.0.6
+
+- This version has been yanked from rubygems due to errors
+
+## 3.0.5
+
+- Override table name for schema output
+
+## 3.0.4
+
+- Adds -v command-line option to print version
+- Adds -r command-line option to create Sequel migration
+
+## 3.0.3
+
+- Uninitialized (N)umbers should return nil
+
+## 3.0.2
+  
+- Performance improvements for large files
+
+## 3.0.1
+
+- Support FoxPro (G) general field type
+- Fix ruby warnings
+
+## 3.0.0
+
+- Requires Ruby version 2.0 and above
+- Support the (G) General Foxpro field type
+
+## 2.0.13
+
+- Support 64-bit currency signed currency values
+  (see https://github.com/infused/dbf/pull/71)
+
+## 2.0.12
+
+- Parse (I) values as signed
+  (see https://github.com/infused/dbf/pull/70)
+
+## 2.0.11
+
+- Foxpro doubles should always return the full stored precision
+  (see https://github.com/infused/dbf/pull/69)
+
+## 2.0.10
+
+- allow 0 length fields, but always return nil as value
+
+## 2.0.9
+
+- fix dBase IV attributes when memo file is missing
+
+## 2.0.8
+
+- fix FoxPro currency fields on some builds of Ruby 1.9.3 and 2.0.0
+
+## 2.0.7
+
+- fix the dbf binary on some linux systems
+
+## 2.0.6
+
+- build_memo returns nil on errors
+
+## 2.0.5
+
+- use correct FoxPro memo block size
+
+## 2.0.4
+  
+- memo fields return nil if memo file is missing
+
+## 2.0.3
+
+- set encoding if table encoding is nil
+
+## 2.0.2
+
+- Allow overriding the character encoding specified in the file
+
+## 2.0.1
+
+- Add experimental support for character encodings under Ruby 1.8
+
+## 2.0.0
+
+- #44 Require FasterCSV gem on all platforms
+- Remove rdoc development dependency
+- #42 Fixes encoding of memos
+- #43 Improve handling of record attributes
+
+## 1.7.5
+  
+- fixes FoxPro currency (Y) fields
+
+## 1.7.4
+  
+- Replace Memo Type with Memo File boolean in command-line utility summary output
+
+## 1.7.3
+  
+- find_all/find_first should ignore deleted records
+
+## 1.7.2
+  
+- Fix integer division under Ruby 1.8 when requiring mathn
+  standard library (see http://bugs.ruby-lang.org/issues/2121)
+
+## 1.7.1
+
+- Fix Table.FOXPRO_VERSIONS breakage on Ruby 1.8
+
+## 1.7.0
+
+- allow DBF::Table to work with dbf data in memory
+- allow DBF::Table#to_csv to write to STDOUT
+
+## 1.6.7
+
+- memo columns return nil when no memo file found
+
+## 1.6.6
+
+- add binary data type support to ActiveRecord schema output
+
+## 1.6.5
+
+- support for visual foxpro double (b) data type
+
+## 1.6.3
+
+- Replace invalid chars with 'unicode replacement character' (U+FFFD)
 
 ## 1.6.2
-  - add Table#filename method
-  - Rakefile now loads gems with bundler
-  - add Table#supports_encoding?
-  - simplify encodings.yml loader
-  - add rake and rdoc as development dependencies
-  - simplify open_memo file search logic
-  - remove unnecessary requires in spec helper
-  - fix cli summary
+
+- add Table#filename method
+- Rakefile now loads gems with bundler
+- add Table#supports_encoding?
+- simplify encodings.yml loader
+- add rake and rdoc as development dependencies
+- simplify open_memo file search logic
+- remove unnecessary requires in spec helper
+- fix cli summary
 
 ## 1.6.1
-  - fix YAML issue when using MRI version > 1.9.1
-  - remove Table#seek_to_index and Table#current_record private methods
+
+- fix YAML issue when using MRI version > 1.9.1
+- remove Table#seek_to_index and Table#current_record private methods
 
 ## 1.6.0
-  - remove activesupport gem dependency
+
+- remove activesupport gem dependency
 
 ## 1.5.0
 
diff --git a/Gemfile b/Gemfile
index e3c0ef6..bc0e188 100644
--- a/Gemfile
+++ b/Gemfile
@@ -2,7 +2,16 @@ gemspec
 source 'https://rubygems.org'
 
 group :development, :test do
-  gem 'rspec'
+  gem 'awesome_print'
+  gem 'byebug'
+  gem 'e2mmap'
   gem 'guard'
   gem 'guard-rspec'
+  gem 'irb'
+  gem 'rake'
+  gem 'rspec'
+  gem 'rubocop'
+  gem 'rubocop-performance'
+  gem 'rubocop-rspec'
+  gem 'yard'
 end
diff --git a/Gemfile.lock b/Gemfile.lock
index 463ed0e..75ad73e 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,80 +1,113 @@
 PATH
   remote: .
   specs:
+    dbf (4.1.6)
 
 GEM
   remote: https://rubygems.org/
   specs:
-    byebug (8.2.0)
-    coderay (1.1.0)
-    diff-lcs (1.2.5)
-    ffi (1.9.10)
-    ffi (1.9.10-java)
-    formatador (0.2.5)
-    guard (2.13.0)
+    ast (2.4.2)
+    awesome_print (1.9.2)
+    byebug (11.1.3)
+    coderay (1.1.3)
+    diff-lcs (1.4.4)
+    e2mmap (0.1.0)
+    ffi (1.15.3)
+    formatador (0.3.0)
+    guard (2.18.0)
       formatador (>= 0.2.4)
-      listen (>= 2.7, <= 4.0)
-      lumberjack (~> 1.0)
+      listen (>= 2.7, < 4.0)
+      lumberjack (>= 1.0.12, < 2.0)
       nenv (~> 0.1)
       notiffany (~> 0.0)
-      pry (>= 0.9.12)
+      pry (>= 0.13.0)
       shellany (~> 0.0)
       thor (>= 0.18.1)
     guard-compat (1.2.1)
-    guard-rspec (4.6.4)
+    guard-rspec (4.7.3)
       guard (~> 2.1)
       guard-compat (~> 1.1)
       rspec (>= 2.99.0, < 4.0)
-    listen (3.0.5)
-      rb-fsevent (>= 0.9.3)
-      rb-inotify (>= 0.9)
-    lumberjack (1.0.9)
-    method_source (0.8.2)
-    nenv (0.2.0)
-    notiffany (0.0.8)
+    io-console (0.5.9)
+    irb (1.3.6)
+      reline (>= 0.2.5)
+    listen (3.6.0)
+      rb-fsevent (~> 0.10, >= 0.10.3)
+      rb-inotify (~> 0.9, >= 0.9.10)
+    lumberjack (1.2.8)
+    method_source (1.0.0)
+    nenv (0.3.0)
+    notiffany (0.1.3)
       nenv (~> 0.1)
       shellany (~> 0.0)
-    pry (0.10.3)
-      coderay (~> 1.1.0)
-      method_source (~> 0.8.1)
-      slop (~> 3.4)
-    pry (0.10.3-java)
-      coderay (~> 1.1.0)
-      method_source (~> 0.8.1)
-      slop (~> 3.4)
-      spoon (~> 0.0)
-    rb-fsevent (0.9.6)
-    rb-inotify (0.9.5)
-      ffi (>= 0.5.0)
-    rspec (3.4.0)
-      rspec-core (~> 3.4.0)
-      rspec-expectations (~> 3.4.0)
-      rspec-mocks (~> 3.4.0)
-    rspec-core (3.4.1)
-      rspec-support (~> 3.4.0)
-    rspec-expectations (3.4.0)
+    parallel (1.20.1)
+    parser (3.0.2.0)
+      ast (~> 2.4.1)
+    pry (0.14.1)
+      coderay (~> 1.1)
+      method_source (~> 1.0)
+    rainbow (3.0.0)
+    rake (13.0.6)
+    rb-fsevent (0.11.0)
+    rb-inotify (0.10.1)
+      ffi (~> 1.0)
+    regexp_parser (2.1.1)
+    reline (0.2.6)
+      io-console (~> 0.5)
+    rexml (3.2.5)
+    rspec (3.10.0)
+      rspec-core (~> 3.10.0)
+      rspec-expectations (~> 3.10.0)
+      rspec-mocks (~> 3.10.0)
+    rspec-core (3.10.1)
+      rspec-support (~> 3.10.0)
+    rspec-expectations (3.10.1)
       diff-lcs (>= 1.2.0, < 2.0)
-      rspec-support (~> 3.4.0)
-    rspec-mocks (3.4.0)
+      rspec-support (~> 3.10.0)
+    rspec-mocks (3.10.2)
       diff-lcs (>= 1.2.0, < 2.0)
-      rspec-support (~> 3.4.0)
-    rspec-support (3.4.0)
+      rspec-support (~> 3.10.0)
+    rspec-support (3.10.2)
+    rubocop (1.18.4)
+      parallel (~> 1.10)
+      parser (>= 3.0.0.0)
+      rainbow (>= 2.2.2, < 4.0)
+      regexp_parser (>= 1.8, < 3.0)
+      rexml
+      rubocop-ast (>= 1.8.0, < 2.0)
+      ruby-progressbar (~> 1.7)
+      unicode-display_width (>= 1.4.0, < 3.0)
+    rubocop-ast (1.9.0)
+      parser (>= 3.0.1.1)
+    rubocop-performance (1.11.4)
+      rubocop (>= 1.7.0, < 2.0)
+      rubocop-ast (>= 0.4.0)
+    rubocop-rspec (2.4.0)
+      rubocop (~> 1.0)
+      rubocop-ast (>= 1.1.0)
+    ruby-progressbar (1.11.0)
     shellany (0.0.1)
-    slop (3.6.0)
-    spoon (0.0.4)
-      ffi
-    thor (0.19.1)
+    thor (1.1.0)
+    unicode-display_width (2.0.0)
+    yard (0.9.26)
 
 PLATFORMS
-  java
   ruby
 
 DEPENDENCIES
+  awesome_print
   byebug
   dbf!
+  e2mmap
   guard
   guard-rspec
+  irb
+  rake
   rspec
+  rubocop
+  rubocop-performance
+  rubocop-rspec
+  yard
 
 BUNDLED WITH
-   1.10.6
+   2.2.15
diff --git a/Gemfile.travis b/Gemfile.travis
index cd887ac..4ce25b0 100644
--- a/Gemfile.travis
+++ b/Gemfile.travis
@@ -3,5 +3,6 @@ source 'https://rubygems.org'
 
 group :test do
   gem 'rspec'
-  gem 'codeclimate-test-reporter', require: false, platform: :ruby
+  gem 'simplecov', platform: :ruby
+  gem 'codeclimate-test-reporter'
 end
diff --git a/Guardfile b/Guardfile
index 1b09082..4af4736 100644
--- a/Guardfile
+++ b/Guardfile
@@ -6,6 +6,6 @@ guard :rspec, cmd: 'bundle exec rspec' do
   # watch(%r{^lib/(.+)\.rb$})     { |m| "spec/#{m[1]}_spec.rb" }
   watch(%r{^lib/(.+)\.rb$})     { 'spec' }
   watch('spec/spec_helper.rb')  { 'spec' }
-  watch(/spec\/fixtures\/(.+)/) { 'spec' }
+  watch(%r{spec/fixtures/(.+)}) { 'spec' }
   watch('Guardfile')            { 'spec' }
 end
diff --git a/LICENSE b/LICENSE
index fa8d7dd..8a6f5e5 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2006-2016 Keith Morrison <keithm@infused.org>
+Copyright (c) 2006-2021 Keith Morrison <keithm@infused.org>
 
 Permission is hereby granted, free of charge, to any person obtaining
 a copy of this software and associated documentation files (the
diff --git a/README.md b/README.md
index 00ec1f8..73f6cdb 100644
--- a/README.md
+++ b/README.md
@@ -1,29 +1,32 @@
 # DBF
-[![Version](http://img.shields.io/gem/v/dbf.svg?style=flat)](https://rubygems.org/gems/dbf)
-[![Build Status](http://img.shields.io/travis/infused/dbf/master.svg?style=flat)](http://travis-ci.org/infused/dbf)
-[![Code Quality](http://img.shields.io/codeclimate/github/infused/dbf.svg?style=flat)](https://codeclimate.com/github/infused/dbf)
-[![Test Coverage](http://img.shields.io/codeclimate/coverage/github/infused/dbf.svg?style=flat)](https://codeclimate.com/github/infused/dbf)
-[![Dependency Status](http://img.shields.io/gemnasium/infused/dbf.svg?style=flat)](https://gemnasium.com/infused/dbf)
+[![Version](https://img.shields.io/gem/v/dbf.svg?style=flat)](https://rubygems.org/gems/dbf)
+[![Build Status](https://img.shields.io/travis/infused/dbf/master.svg?style=flat)](https://travis-ci.com/infused/dbf)
+[![Code Quality](https://img.shields.io/codeclimate/maintainability/infused/dbf.svg?style=flat)](https://codeclimate.com/github/infused/dbf)
+[![Code Coverage](https://img.shields.io/codeclimate/c/infused/dbf.svg?style=flat)](https://codeclimate.com/github/infused/dbf)
 [![Total Downloads](https://img.shields.io/gem/dt/dbf.svg)](https://rubygems.org/gems/dbf/)
+[![License](https://img.shields.io/github/license/infused/dbf.svg)](https://github.com/infused/dbf)
 
 DBF is a small fast library for reading dBase, xBase, Clipper and FoxPro
 database files
 
-* Project page: <http://github.com/infused/dbf>
-* API Documentation: <http://rubydoc.info/github/infused/dbf/>
-* Report bugs: <http://github.com/infused/dbf/issues>
+* Project page: <https://github.com/infused/dbf>
+* API Documentation: <https://dbf.infused.org>
+* Report bugs: <https://github.com/infused/dbf/issues>
 * Questions: Email <mailto:keithm@infused.org> and put DBF somewhere in the
   subject line
 * Change log: <https://github.com/infused/dbf/blob/master/CHANGELOG.md>
 
-NOTE: beginning with version 3 we have dropped support for Ruby 1.8 and 1.9. If you need support for older Rubies, please use 2.0.x (https://github.com/infused/dbf/tree/2_stable)
+NOTE: Beginning with version 4 we have dropped support for Ruby 2.0, 2.1, 2.2, and 2.3. If you need support for these older Rubies,
+please use 3.0.x (https://github.com/infused.org/dbf/tree/3_stable)
+
+NOTE: Beginning with version 3 we have dropped support for Ruby 1.8 and 1.9. If you need support for older Rubies,
+please use 2.0.x (https://github.com/infused/dbf/tree/2_stable)
 
 ## Compatibility
 
 DBF is tested to work with the following versions of Ruby:
 
-* MRI Ruby 2.0.x, 2.1.x, 2.2.x, 2.3.x
-* JRuby head
+* Ruby 2.4.x, 2.5.x, 2.6.x, 2.7.x, 3.0.x, TruffleRuby
 
 ## Installation
 
@@ -55,7 +58,7 @@ data = File.open('widgets.dbf')
 widgets = DBF::Table.new(data)
 ```
 
-Open a DBF by passing in raw data (wrap the raw data with a StringIO):
+Open a DBF by passing in raw data (wrap the raw data with StringIO):
 
 ```ruby
 widgets = DBF::Table.new(StringIO.new('raw binary data'))
@@ -79,26 +82,22 @@ widget = widgets.find(6)
 Note that find() will return nil if the requested record has been deleted
 and not yet pruned from the database.
 
-The value for a attribute can be accessed via element reference in one of three
-ways
+The value for an attribute can be accessed via element reference in several
+ways.
 
 ```ruby
+widget.slot_number     # underscored field name as method
+
 widget["SlotNumber"]   # original field name in dbf file
 widget['slot_number']  # underscored field name string
 widget[:slot_number]   # underscored field name symbol
 ```
 
-Attributes can also be accessed as method using the underscored field name
-
-```ruby
-widget.slot_number
-```
-
 Get a hash of all attributes. The keys are the original column names.
 
 ```ruby
 widget.attributes
-# => {"Name" => "Thing1", "SlotNumber" => 1}
+# => {"Name" => "Thing1 | SlotNumber" => 1}
 ```
 
 Search for records using a simple hash format. Multiple search criteria are
@@ -149,9 +148,67 @@ data. Try using the 'Russion OEM' encoding:
 table = DBF::Table.new('dbf/books.dbf', nil, 'cp866')
 ```
 
-See
-[doc/supported_encodings.csv](docs/supported_encodings.csv)
-for a full list of supported encodings.
+| Code Page | Encoding | Description |
+| --------- | -------- | ----------- |
+| 01 | cp437 | U.S. MS–DOS |
+| 02 | cp850 | International MS–DOS |
+| 03 | cp1252 | Windows ANSI |
+| 08 | cp865 | Danish OEM |
+| 09 | cp437 | Dutch OEM |
+| 0a | cp850 | Dutch OEM* |
+| 0b | cp437 | Finnish OEM |
+| 0d | cp437 | French OEM |
+| 0e | cp850 | French OEM* |
+| 0f | cp437 | German OEM |
+| 10 | cp850 | German OEM* |
+| 11 | cp437 | Italian OEM |
+| 12 | cp850 | Italian OEM* |
+| 13 | cp932 | Japanese Shift-JIS |
+| 14 | cp850 | Spanish OEM* |
+| 15 | cp437 | Swedish OEM |
+| 16 | cp850 | Swedish OEM* |
+| 17 | cp865 | Norwegian OEM |
+| 18 | cp437 | Spanish OEM |
+| 19 | cp437 | English OEM (Britain) |
+| 1a | cp850 | English OEM (Britain)* |
+| 1b | cp437 | English OEM (U.S.) |
+| 1c | cp863 | French OEM (Canada) |
+| 1d | cp850 | French OEM* |
+| 1f | cp852 | Czech OEM |
+| 22 | cp852 | Hungarian OEM |
+| 23 | cp852 | Polish OEM |
+| 24 | cp860 | Portuguese OEM |
+| 25 | cp850 | Portuguese OEM* |
+| 26 | cp866 | Russian OEM |
+| 37 | cp850 | English OEM (U.S.)* |
+| 40 | cp852 | Romanian OEM |
+| 4d | cp936 | Chinese GBK (PRC) |
+| 4e | cp949 | Korean (ANSI/OEM) |
+| 4f | cp950 | Chinese Big5 (Taiwan) |
+| 50 | cp874 | Thai (ANSI/OEM) |
+| 57 | cp1252 | ANSI |
+| 58 | cp1252 | Western European ANSI |
+| 59 | cp1252 | Spanish ANSI |
+| 64 | cp852 | Eastern European MS–DOS |
+| 65 | cp866 | Russian MS–DOS |
+| 66 | cp865 | Nordic MS–DOS |
+| 67 | cp861 | Icelandic MS–DOS |
+| 6a | cp737 | Greek MS–DOS (437G) |
+| 6b | cp857 | Turkish MS–DOS |
+| 6c | cp863 | French–Canadian MS–DOS |
+| 78 | cp950 | Taiwan Big 5 |
+| 79 | cp949 | Hangul (Wansung) |
+| 7a | cp936 | PRC GBK |
+| 7b | cp932 | Japanese Shift-JIS |
+| 7c | cp874 | Thai Windows/MS–DOS |
+| 86 | cp737 | Greek OEM |
+| 87 | cp852 | Slovenian OEM |
+| 88 | cp857 | Turkish OEM |
+| c8 | cp1250 | Eastern European Windows |
+| c9 | cp1251 | Russian Windows |
+| ca | cp1254 | Turkish Windows |
+| cb | cp1253 | Greek Windows |
+| cc | cp1257 | Baltic Windows |
 
 ## Migrating to ActiveRecord
 
@@ -180,7 +237,7 @@ end
 ```
 
 If you have initalized the DBF::Table with raw data, you will need to set the
-table name manually with:
+exported table name manually:
 
 ```ruby
 table.name = 'my_table_name'
@@ -212,8 +269,8 @@ Sequel.migration do
 end
 ```
 
-If you have initalized the DBF::Table with raw data, you will need to set the
-table name manually with:
+If you have initialized the DBF::Table with raw data, you will need to set the
+exported table name manually:
 
 ```ruby
 table.name = 'my_table_name'
@@ -230,7 +287,7 @@ A small command-line utility called dbf is installed along with the gem.
       -s = print summary information
       -a = create an ActiveRecord::Schema
       -r = create a Sequel Migration
-      -c = create a csv file
+      -c = export as CSV
 
 Create an executable ActiveRecord schema:
 
@@ -246,17 +303,17 @@ Dump all records to a CSV file:
 
 ## Reading a Visual Foxpro database (v8, v9)
 
-A special Database::Foxpro class is available to read Visual Foxpro container files (.dbc-files). When using this class,
-long field names are supported and tables can be referenced without using names.
+A special Database::Foxpro class is available to read Visual Foxpro container
+files (file with .dbc extension). When using this class long field names are
+supported and tables can be referenced without using names.
 
 ```ruby
 require 'dbf'
 
-contacts = DBF::Database::Foxpro.new('contactdatabase.dbc').contacts
+contacts = DBF::Database::Foxpro.new('contact_database.dbc').contacts
 my_contact = contacts.record(1).spouses_interests
 ```
 
-
 ## dBase version compatibility
 
 The basic dBase data types are generally supported well. Support for the
@@ -265,9 +322,45 @@ supported. If you have insight into how any of the unsupported data types are
 implemented, please give me a shout. FoxBase/dBase II files are not supported
 at this time.
 
-See
-[doc/supported_types.markdown](docs/supported_types.markdown)
-for a full list of supported column types.
+### Supported data types by dBase version
+
+| Version | Description                                         | C | N | L | D | M | F | B | G | P | Y | T | I | V | X | @ | O | + |
+|---------|-----------------------------------------------------|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
+| 02      | FoxBase                                             | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
+| 03      | dBase III without memo file                         | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
+| 04      | dBase IV without memo file                          | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
+| 05      | dBase V without memo file                           | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
+| 07      | Visual Objects 1.x                                  | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
+| 30      | Visual FoxPro                                       | Y | Y | Y | Y | Y | Y | Y | Y | N | Y | N | Y | N | N | N | N | - |
+| 31      | Visual FoxPro with AutoIncrement                    | Y | Y | Y | Y | Y | Y | Y | Y | N | Y | N | Y | N | N | N | N | N |
+| 32      | Visual FoxPro with field type Varchar or Varbinary  | Y | Y | Y | Y | Y | Y | Y | Y | N | Y | N | Y | N | N | N | N | N |
+| 7b      | dBase IV with memo file                             | Y | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - |
+| 83      | dBase III with memo file                            | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - |
+| 87      | Visual Objects 1.x with memo file                   | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - |
+| 8b      | dBase IV with memo file                             | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | N | - | - | - |
+| 8e      | dBase IV with SQL table                             | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | N | - | - | - |
+| f5      | FoxPro with memo file                               | Y | Y | Y | Y | Y | Y | Y | Y | N | Y | N | Y | N | N | N | N | N |
+| fb      | FoxPro without memo file                            | Y | Y | Y | Y | - | Y | Y | Y | N | Y | N | Y | N | N | N | N | N |
+
+Data type descriptions
+
+* C = Character
+* N = Number
+* L = Logical
+* D = Date
+* M = Memo
+* F = Float
+* B = Binary
+* G = General
+* P = Picture
+* Y = Currency
+* T = DateTime
+* I = Integer
+* V = VariField
+* X = SQL compat
+* @ = Timestamp
+* O = Double
+* + = Autoincrement
 
 ## Limitations
 
@@ -276,7 +369,7 @@ for a full list of supported column types.
 
 ## License
 
-Copyright (c) 2006-2016 Keith Morrison <<keithm@infused.org>>
+Copyright (c) 2006-2021 Keith Morrison <<keithm@infused.org>>
 
 Permission is hereby granted, free of charge, to any person
 obtaining a copy of this software and associated documentation
diff --git a/Rakefile b/Rakefile
index 16a7d83..c4b6382 100644
--- a/Rakefile
+++ b/Rakefile
@@ -3,16 +3,16 @@ Bundler.setup(:default, :development)
 
 require 'rspec/core/rake_task'
 RSpec::Core::RakeTask.new :spec do |t|
-  t.rspec_opts = %w(--color)
+  t.rspec_opts = %w[--color]
 end
 
 RSpec::Core::RakeTask.new :specdoc do |t|
-  t.rspec_opts = %w(-fl)
+  t.rspec_opts = %w[-fl]
 end
 
 task default: :spec
 
-desc "Open an irb session preloaded with this library"
+desc 'Open an irb session preloaded with this library'
 task :console do
-  sh "irb -rubygems -I lib -r dbf.rb"
+  sh 'irb -rubygems -I lib -r dbf.rb'
 end
diff --git a/bin/dbf b/bin/dbf
index 1c57414..f450413 100755
--- a/bin/dbf
+++ b/bin/dbf
@@ -1,5 +1,7 @@
 #!/usr/bin/env ruby
 
+Signal.trap('PIPE', 'SYSTEM_DEFAULT')
+
 require 'dbf'
 require 'dbf/version'
 require 'optparse'
@@ -9,18 +11,18 @@ params = ARGV.getopts('h', 's', 'a', 'c', 'r', 'v')
 if params['v']
   puts "dbf version: #{DBF::VERSION}"
 
-elsif params['h'] then
+elsif params['h']
   puts "usage: #{File.basename(__FILE__)} [-h|-s|-a|-c|-r] filename"
-  puts "  -h = print this message"
-  puts "  -v = print the DBF gem version"
-  puts "  -s = print summary information"
-  puts "  -a = create an ActiveRecord::Schema"
-  puts "  -r = create a Sequel migration"
-  puts "  -c = create a CSV file"
+  puts '  -h = print this message'
+  puts '  -v = print the DBF gem version'
+  puts '  -s = print summary information'
+  puts '  -a = create an ActiveRecord::Schema'
+  puts '  -r = create a Sequel migration'
+  puts '  -c = export as CSV'
 else
 
   filename = ARGV.shift
-  abort "You must supply a filename on the command line" unless filename
+  abort 'You must supply a filename on the command line' unless filename
 
   # create an ActiveRecord::Schema
   if params['a']
@@ -43,10 +45,10 @@ else
     puts "Records: #{table.record_count}"
 
     puts "\nFields:"
-    puts "Name             Type       Length     Decimal"
-    puts "-" * 78
+    puts 'Name             Type       Length     Decimal'
+    puts '-' * 78
     table.columns.each do |f|
-      puts "%-16s %-10s %-10s %-10s" % [f.name, f.type, f.length, f.decimal]
+      puts format('%-16s %-10s %-10s %-10s', f.name, f.type, f.length, f.decimal)
     end
   end
 
diff --git a/dbf.gemspec b/dbf.gemspec
index de16487..5444505 100644
--- a/dbf.gemspec
+++ b/dbf.gemspec
@@ -1,4 +1,4 @@
-lib = File.expand_path('../lib/', __FILE__)
+lib = File.expand_path('lib', __dir__)
 $LOAD_PATH.unshift lib unless $LOAD_PATH.include?(lib)
 require 'dbf/version'
 
@@ -19,4 +19,5 @@ Gem::Specification.new do |s|
   s.test_files = Dir.glob('spec/**/*_spec.rb')
   s.require_paths = ['lib']
   s.required_rubygems_version = Gem::Requirement.new('>= 1.3.0')
+  s.required_ruby_version = Gem::Requirement.new('>= 2.4.0')
 end
diff --git a/debian/changelog b/debian/changelog
index fa3ef61..af4e068 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+ruby-dbf (4.2.0-1) UNRELEASED; urgency=low
+
+  * New upstream release.
+  * Drop patch 0002-Fix-Ruby-3-compatibility.patch, present upstream.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Sun, 15 May 2022 13:58:53 -0000
+
 ruby-dbf (3.0.5-2) unstable; urgency=medium
 
   * Team upload.
diff --git a/debian/patches/0001-default-external-encoding.patch b/debian/patches/0001-default-external-encoding.patch
index ac0a1b4..68919d6 100644
--- a/debian/patches/0001-default-external-encoding.patch
+++ b/debian/patches/0001-default-external-encoding.patch
@@ -8,10 +8,10 @@ Last-Update: 2016-07-08
  spec/spec_helper.rb | 2 ++
  1 file changed, 2 insertions(+)
 
-diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
-index d30f00d..b2bcdbf 100644
---- a/spec/spec_helper.rb
-+++ b/spec/spec_helper.rb
+Index: ruby-dbf/spec/spec_helper.rb
+===================================================================
+--- ruby-dbf.orig/spec/spec_helper.rb
++++ ruby-dbf/spec/spec_helper.rb
 @@ -4,6 +4,8 @@ begin
  rescue LoadError
  end
diff --git a/debian/patches/0002-Fix-Ruby-3-compatibility.patch b/debian/patches/0002-Fix-Ruby-3-compatibility.patch
deleted file mode 100644
index 1bb8595..0000000
--- a/debian/patches/0002-Fix-Ruby-3-compatibility.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From: Keith Morrison <keithm@infused.org>
-Date: Mon, 6 Apr 2020 14:20:01 -0700
-Subject: [PATCH] use 2.7.1 for dev
-
-Reviewed-By: Daniel Leidert <dleidert@debian.org>
-Bug-Debian: https://bugs.debian.org/996215
-Origin: https://github.com/infused/dbf/commit/c05fdddd4dc88f066040d903f7db8d6b3c576997.patch
-Forwarded: not-needed
----
- lib/dbf/column_type.rb | 9 ++-------
- 1 file changed, 2 insertions(+), 7 deletions(-)
-
-diff --git a/lib/dbf/column_type.rb b/lib/dbf/column_type.rb
-index fd7e10d..b2b1f66 100644
---- a/lib/dbf/column_type.rb
-+++ b/lib/dbf/column_type.rb
-@@ -1,11 +1,6 @@
- module DBF
-   module ColumnType
-     class Base
--      ENCODING_ARGS = [
--        Encoding.default_external,
--        {undef: :replace, invalid: :replace}
--      ]
--
-       attr_reader :decimal, :encoding
- 
-       def initialize(decimal, encoding)
-@@ -79,7 +74,7 @@ module DBF
-     class Memo < Base
-       def type_cast(value)
-         if encoding && !value.nil?
--          value.force_encoding(@encoding).encode(*ENCODING_ARGS)
-+          value.force_encoding(@encoding).encode(Encoding.default_external, undef: :replace, invalid: :replace)
-         else
-           value
-         end
-@@ -95,7 +90,7 @@ module DBF
-     class String < Base
-       def type_cast(value)
-         value = value.strip
--        @encoding ? value.force_encoding(@encoding).encode(*ENCODING_ARGS) : value
-+        @encoding ? value.force_encoding(@encoding).encode(Encoding.default_external, undef: :replace, invalid: :replace) : value
-       end
-     end
- 
diff --git a/debian/patches/series b/debian/patches/series
index 40b81e3..cc00942 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,2 +1 @@
 0001-default-external-encoding.patch
-0002-Fix-Ruby-3-compatibility.patch
diff --git a/docs/CNAME b/docs/CNAME
new file mode 100644
index 0000000..3ff9a97
--- /dev/null
+++ b/docs/CNAME
@@ -0,0 +1 @@
+dbf.infused.org
\ No newline at end of file
diff --git a/docs/DBF.html b/docs/DBF.html
new file mode 100644
index 0000000..624555c
--- /dev/null
+++ b/docs/DBF.html
@@ -0,0 +1,200 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Module: DBF
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF";
+  relpath = '';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="_index.html">Index (D)</a> &raquo;
+    
+    
+    <span class="title">DBF</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Module: DBF
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/table.rb<span class="defines">,<br />
+  lib/dbf/column.rb,<br /> lib/dbf/header.rb,<br /> lib/dbf/record.rb,<br /> lib/dbf/schema.rb,<br /> lib/dbf/version.rb,<br /> lib/dbf/encodings.rb,<br /> lib/dbf/memo/base.rb,<br /> lib/dbf/column_type.rb,<br /> lib/dbf/memo/dbase3.rb,<br /> lib/dbf/memo/dbase4.rb,<br /> lib/dbf/memo/foxpro.rb,<br /> lib/dbf/database/foxpro.rb</span>
+</dd>
+  </dl>
+  
+</div>
+
+<h2>Defined Under Namespace</h2>
+<p class="children">
+  
+    
+      <strong class="modules">Modules:</strong> <span class='object_link'><a href="DBF/ColumnType.html" title="DBF::ColumnType (module)">ColumnType</a></span>, <span class='object_link'><a href="DBF/Database.html" title="DBF::Database (module)">Database</a></span>, <span class='object_link'><a href="DBF/Memo.html" title="DBF::Memo (module)">Memo</a></span>, <span class='object_link'><a href="DBF/Schema.html" title="DBF::Schema (module)">Schema</a></span>
+    
+  
+    
+      <strong class="classes">Classes:</strong> <span class='object_link'><a href="DBF/Column.html" title="DBF::Column (class)">Column</a></span>, <span class='object_link'><a href="DBF/FileNotFoundError.html" title="DBF::FileNotFoundError (class)">FileNotFoundError</a></span>, <span class='object_link'><a href="DBF/Header.html" title="DBF::Header (class)">Header</a></span>, <span class='object_link'><a href="DBF/NoColumnsDefined.html" title="DBF::NoColumnsDefined (class)">NoColumnsDefined</a></span>, <span class='object_link'><a href="DBF/Record.html" title="DBF::Record (class)">Record</a></span>, <span class='object_link'><a href="DBF/Table.html" title="DBF::Table (class)">Table</a></span>
+    
+  
+</p>
+
+  
+    <h2>
+      Constant Summary
+      <small><a href="#" class="constants_summary_toggle">collapse</a></small>
+    </h2>
+
+    <dl class="constants">
+      
+        <dt id="VERSION-constant" class="">VERSION =
+          
+        </dt>
+        <dd><pre class="code"><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>4.1.3</span><span class='tstring_end'>&#39;</span></span><span class='period'>.</span><span class='id identifier rubyid_freeze'>freeze</span></pre></dd>
+      
+        <dt id="ENCODINGS-constant" class="">ENCODINGS =
+          
+        </dt>
+        <dd><pre class="code"><span class='lbrace'>{</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>01</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp437</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># U.S. MS-DOS
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>02</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp850</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># International MS-DOS
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>03</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp1252</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>      <span class='comment'># Windows ANSI
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>08</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp865</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Danish OEM
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>09</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp437</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Dutch OEM
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>0a</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp850</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Dutch OEM*
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>0b</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp437</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Finnish OEM
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>0d</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp437</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># French OEM
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>0e</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp850</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># French OEM*
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>0f</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp437</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># German OEM
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>10</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp850</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># German OEM*
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>11</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp437</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Italian OEM
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>12</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp850</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Italian OEM*
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>13</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp932</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Japanese Shift-JIS
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>14</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp850</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Spanish OEM*
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>15</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp437</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Swedish OEM
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>16</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp850</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Swedish OEM*
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>17</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp865</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Norwegian OEM
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>18</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp437</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Spanish OEM
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>19</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp437</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># English OEM (Britain)
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>1a</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp850</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># English OEM (Britain)*
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>1b</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp437</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># English OEM (U.S.)
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>1c</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp863</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># French OEM (Canada)
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>1d</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp850</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># French OEM*
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>1f</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp852</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Czech OEM
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>22</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp852</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Hungarian OEM
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>23</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp852</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Polish OEM
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>24</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp860</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Portuguese OEM
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>25</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp850</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Portuguese OEM*
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>26</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp866</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Russian OEM
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>37</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp850</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># English OEM (U.S.)*
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>40</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp852</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Romanian OEM
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>4d</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp936</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Chinese GBK (PRC)
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>4e</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp949</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Korean (ANSI/OEM)
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>4f</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp950</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Chinese Big5 (Taiwan)
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>50</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp874</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Thai (ANSI/OEM)
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>57</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp1252</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>      <span class='comment'># ANSI
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>58</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp1252</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>      <span class='comment'># Western European ANSI
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>59</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp1252</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>      <span class='comment'># Spanish ANSI
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>64</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp852</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Eastern European MS-DOS
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>65</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp866</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Russian MS-DOS
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>66</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp865</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Nordic MS-DOS
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>67</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp861</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Icelandic MS-DOS
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>6a</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp737</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Greek MS-DOS (437G)
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>6b</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp857</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Turkish MS-DOS
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>6c</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp863</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># French-Canadian MS-DOS
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>78</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp950</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Taiwan Big 5
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>79</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp949</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Hangul (Wansung)
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>7a</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp936</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># PRC GBK
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>7b</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp932</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Japanese Shift-JIS
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>7c</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp874</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Thai Windows/MS-DOS
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>86</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp737</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Greek OEM
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>87</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp852</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Slovenian OEM
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>88</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp857</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>       <span class='comment'># Turkish OEM
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>c8</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp1250</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>      <span class='comment'># Eastern European Windows
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>c9</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp1251</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>      <span class='comment'># Russian Windows
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ca</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp1254</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>      <span class='comment'># Turkish Windows
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cb</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp1253</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>      <span class='comment'># Greek Windows
+</span>  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cc</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp1257</span><span class='tstring_end'>&#39;</span></span>       <span class='comment'># Baltic Windows
+</span><span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_freeze'>freeze</span></pre></dd>
+      
+    </dl>
+  
+
+
+
+
+
+
+
+
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/Column.html b/docs/DBF/Column.html
new file mode 100644
index 0000000..e391763
--- /dev/null
+++ b/docs/DBF/Column.html
@@ -0,0 +1,947 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Class: DBF::Column
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::Column";
+  relpath = '../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../_index.html">Index (C)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../DBF.html" title="DBF (module)">DBF</a></span></span>
+     &raquo; 
+    <span class="title">Column</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Class: DBF::Column
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+  <dl>
+    <dt>Inherits:</dt>
+    <dd>
+      <span class="inheritName">Object</span>
+      
+        <ul class="fullTree">
+          <li>Object</li>
+          
+            <li class="next">DBF::Column</li>
+          
+        </ul>
+        <a href="#" class="inheritanceTree">show all</a>
+      
+    </dd>
+  </dl>
+  
+
+  
+  
+  <dl>
+      <dt>Extended by:</dt>
+      <dd>Forwardable</dd>
+  </dl>
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/column.rb</dd>
+  </dl>
+  
+</div>
+
+<h2>Defined Under Namespace</h2>
+<p class="children">
+  
+    
+  
+    
+      <strong class="classes">Classes:</strong> <span class='object_link'><a href="Column/LengthError.html" title="DBF::Column::LengthError (class)">LengthError</a></span>, <span class='object_link'><a href="Column/NameError.html" title="DBF::Column::NameError (class)">NameError</a></span>
+    
+  
+</p>
+
+  
+    <h2>
+      Constant Summary
+      <small><a href="#" class="constants_summary_toggle">collapse</a></small>
+    </h2>
+
+    <dl class="constants">
+      
+        <dt id="TYPE_CAST_CLASS-constant" class="">TYPE_CAST_CLASS =
+          
+        </dt>
+        <dd><pre class="code"><span class='lbrace'>{</span>
+  <span class='label'>N:</span> <span class='const'><span class='object_link'><a href="ColumnType.html" title="DBF::ColumnType (module)">ColumnType</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="ColumnType/Number.html" title="DBF::ColumnType::Number (class)">Number</a></span></span><span class='comma'>,</span>
+  <span class='label'>I:</span> <span class='const'><span class='object_link'><a href="ColumnType.html" title="DBF::ColumnType (module)">ColumnType</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="ColumnType/SignedLong.html" title="DBF::ColumnType::SignedLong (class)">SignedLong</a></span></span><span class='comma'>,</span>
+  <span class='label'>F:</span> <span class='const'><span class='object_link'><a href="ColumnType.html" title="DBF::ColumnType (module)">ColumnType</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="ColumnType/Float.html" title="DBF::ColumnType::Float (class)">Float</a></span></span><span class='comma'>,</span>
+  <span class='label'>Y:</span> <span class='const'><span class='object_link'><a href="ColumnType.html" title="DBF::ColumnType (module)">ColumnType</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="ColumnType/Currency.html" title="DBF::ColumnType::Currency (class)">Currency</a></span></span><span class='comma'>,</span>
+  <span class='label'>D:</span> <span class='const'><span class='object_link'><a href="ColumnType.html" title="DBF::ColumnType (module)">ColumnType</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="ColumnType/Date.html" title="DBF::ColumnType::Date (class)">Date</a></span></span><span class='comma'>,</span>
+  <span class='label'>T:</span> <span class='const'><span class='object_link'><a href="ColumnType.html" title="DBF::ColumnType (module)">ColumnType</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="ColumnType/DateTime.html" title="DBF::ColumnType::DateTime (class)">DateTime</a></span></span><span class='comma'>,</span>
+  <span class='label'>L:</span> <span class='const'><span class='object_link'><a href="ColumnType.html" title="DBF::ColumnType (module)">ColumnType</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="ColumnType/Boolean.html" title="DBF::ColumnType::Boolean (class)">Boolean</a></span></span><span class='comma'>,</span>
+  <span class='label'>M:</span> <span class='const'><span class='object_link'><a href="ColumnType.html" title="DBF::ColumnType (module)">ColumnType</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="ColumnType/Memo.html" title="DBF::ColumnType::Memo (class)">Memo</a></span></span><span class='comma'>,</span>
+  <span class='label'>B:</span> <span class='const'><span class='object_link'><a href="ColumnType.html" title="DBF::ColumnType (module)">ColumnType</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="ColumnType/Double.html" title="DBF::ColumnType::Double (class)">Double</a></span></span><span class='comma'>,</span>
+  <span class='label'>G:</span> <span class='const'><span class='object_link'><a href="ColumnType.html" title="DBF::ColumnType (module)">ColumnType</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="ColumnType/General.html" title="DBF::ColumnType::General (class)">General</a></span></span>
+<span class='rbrace'>}</span></pre></dd>
+      
+    </dl>
+  
+
+
+
+
+  <h2>Instance Attribute Summary <small><a href="#" class="summary_toggle">collapse</a></small></h2>
+  <ul class="summary">
+    
+      <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#decimal-instance_method" title="#decimal (instance method)">#<strong>decimal</strong>  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+    
+      <span class="note title readonly">readonly</span>
+    
+    
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Returns the value of attribute decimal.</p>
+</div></span>
+  
+</li>
+
+    
+      <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#length-instance_method" title="#length (instance method)">#<strong>length</strong>  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+    
+      <span class="note title readonly">readonly</span>
+    
+    
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Returns the value of attribute length.</p>
+</div></span>
+  
+</li>
+
+    
+      <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#name-instance_method" title="#name (instance method)">#<strong>name</strong>  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+    
+      <span class="note title readonly">readonly</span>
+    
+    
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Returns the value of attribute name.</p>
+</div></span>
+  
+</li>
+
+    
+      <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#table-instance_method" title="#table (instance method)">#<strong>table</strong>  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+    
+      <span class="note title readonly">readonly</span>
+    
+    
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Returns the value of attribute table.</p>
+</div></span>
+  
+</li>
+
+    
+      <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#type-instance_method" title="#type (instance method)">#<strong>type</strong>  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+    
+      <span class="note title readonly">readonly</span>
+    
+    
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Returns the value of attribute type.</p>
+</div></span>
+  
+</li>
+
+    
+  </ul>
+
+
+
+
+  
+    <h2>
+      Instance Method Summary
+      <small><a href="#" class="summary_toggle">collapse</a></small>
+    </h2>
+
+    <ul class="summary">
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong>(table, name, type, length, decimal)  &#x21d2; Column </a>
+    
+
+    
+  </span>
+  
+  
+    <span class="note title constructor">constructor</span>
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Initialize a new DBF::Column.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#memo%3F-instance_method" title="#memo? (instance method)">#<strong>memo?</strong>  &#x21d2; Boolean </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Returns true if the column is a memo.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#to_hash-instance_method" title="#to_hash (instance method)">#<strong>to_hash</strong>  &#x21d2; Hash </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Returns a Hash with :name, :type, :length, and :decimal keys.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#underscored_name-instance_method" title="#underscored_name (instance method)">#<strong>underscored_name</strong>  &#x21d2; String </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Underscored name.</p>
+</div></span>
+  
+</li>
+
+      
+    </ul>
+  
+
+
+  <div id="constructor_details" class="method_details_list">
+  <h2>Constructor Details</h2>
+  
+    <div class="method_details first">
+  <h3 class="signature first" id="initialize-instance_method">
+  
+    #<strong>initialize</strong>(table, name, type, length, decimal)  &#x21d2; <tt><span class='object_link'><a href="" title="DBF::Column (class)">Column</a></span></tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Initialize a new DBF::Column</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>table</span>
+      
+      
+        <span class='type'>(<tt>String</tt>)</span>
+      
+      
+      
+    </li>
+  
+    <li>
+      
+        <span class='name'>name</span>
+      
+      
+        <span class='type'>(<tt>String</tt>)</span>
+      
+      
+      
+    </li>
+  
+    <li>
+      
+        <span class='name'>type</span>
+      
+      
+        <span class='type'>(<tt>String</tt>)</span>
+      
+      
+      
+    </li>
+  
+    <li>
+      
+        <span class='name'>length</span>
+      
+      
+        <span class='type'>(<tt>Integer</tt>)</span>
+      
+      
+      
+    </li>
+  
+    <li>
+      
+        <span class='name'>decimal</span>
+      
+      
+        <span class='type'>(<tt>Integer</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/column.rb', line 36</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_table'>table</span><span class='comma'>,</span> <span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='id identifier rubyid_length'>length</span><span class='comma'>,</span> <span class='id identifier rubyid_decimal'>decimal</span><span class='rparen'>)</span>
+  <span class='ivar'>@table</span> <span class='op'>=</span> <span class='id identifier rubyid_table'>table</span>
+  <span class='ivar'>@name</span> <span class='op'>=</span> <span class='id identifier rubyid_clean'>clean</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
+  <span class='ivar'>@type</span> <span class='op'>=</span> <span class='id identifier rubyid_type'>type</span>
+  <span class='ivar'>@length</span> <span class='op'>=</span> <span class='id identifier rubyid_length'>length</span>
+  <span class='ivar'>@decimal</span> <span class='op'>=</span> <span class='id identifier rubyid_decimal'>decimal</span>
+  <span class='ivar'>@version</span> <span class='op'>=</span> <span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_version'>version</span>
+  <span class='ivar'>@encoding</span> <span class='op'>=</span> <span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_encoding'>encoding</span>
+
+  <span class='id identifier rubyid_validate_length'>validate_length</span>
+  <span class='id identifier rubyid_validate_name'>validate_name</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+  
+</div>
+
+  <div id="instance_attr_details" class="attr_details">
+    <h2>Instance Attribute Details</h2>
+    
+      
+      <span id=""></span>
+      <div class="method_details first">
+  <h3 class="signature first" id="decimal-instance_method">
+  
+    #<strong>decimal</strong>  &#x21d2; <tt>Object</tt>  <span class="extras">(readonly)</span>
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Returns the value of attribute decimal.</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+11
+12
+13</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/column.rb', line 11</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_decimal'>decimal</span>
+  <span class='ivar'>@decimal</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      
+      <span id=""></span>
+      <div class="method_details ">
+  <h3 class="signature " id="length-instance_method">
+  
+    #<strong>length</strong>  &#x21d2; <tt>Object</tt>  <span class="extras">(readonly)</span>
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Returns the value of attribute length.</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+11
+12
+13</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/column.rb', line 11</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_length'>length</span>
+  <span class='ivar'>@length</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      
+      <span id=""></span>
+      <div class="method_details ">
+  <h3 class="signature " id="name-instance_method">
+  
+    #<strong>name</strong>  &#x21d2; <tt>Object</tt>  <span class="extras">(readonly)</span>
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Returns the value of attribute name.</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+11
+12
+13</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/column.rb', line 11</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_name'>name</span>
+  <span class='ivar'>@name</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      
+      <span id=""></span>
+      <div class="method_details ">
+  <h3 class="signature " id="table-instance_method">
+  
+    #<strong>table</strong>  &#x21d2; <tt>Object</tt>  <span class="extras">(readonly)</span>
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Returns the value of attribute table.</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+11
+12
+13</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/column.rb', line 11</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_table'>table</span>
+  <span class='ivar'>@table</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      
+      <span id=""></span>
+      <div class="method_details ">
+  <h3 class="signature " id="type-instance_method">
+  
+    #<strong>type</strong>  &#x21d2; <tt>Object</tt>  <span class="extras">(readonly)</span>
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Returns the value of attribute type.</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+11
+12
+13</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/column.rb', line 11</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_type'>type</span>
+  <span class='ivar'>@type</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+
+  <div id="instance_method_details" class="method_details_list">
+    <h2>Instance Method Details</h2>
+
+    
+      <div class="method_details first">
+  <h3 class="signature first" id="memo?-instance_method">
+  
+    #<strong>memo?</strong>  &#x21d2; <tt>Boolean</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Returns true if the column is a memo</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+<p class="tag_title">Returns:</p>
+<ul class="return">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt>Boolean</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+52
+53
+54</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/column.rb', line 52</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_memo?'>memo?</span>
+  <span class='ivar'>@memo</span> <span class='op'>||=</span> <span class='id identifier rubyid_type'>type</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>M</span><span class='tstring_end'>&#39;</span></span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="to_hash-instance_method">
+  
+    #<strong>to_hash</strong>  &#x21d2; <tt>Hash</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Returns a Hash with :name, :type, :length, and :decimal keys</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+<p class="tag_title">Returns:</p>
+<ul class="return">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt>Hash</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+59
+60
+61</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/column.rb', line 59</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_to_hash'>to_hash</span>
+  <span class='lbrace'>{</span><span class='label'>name:</span> <span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='label'>type:</span> <span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='label'>length:</span> <span class='id identifier rubyid_length'>length</span><span class='comma'>,</span> <span class='label'>decimal:</span> <span class='id identifier rubyid_decimal'>decimal</span><span class='rbrace'>}</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="underscored_name-instance_method">
+  
+    #<strong>underscored_name</strong>  &#x21d2; <tt>String</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Underscored name</p>
+
+<p>This is the column name converted to underscore format. For example, MyColumn will be returned as my_column.</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+<p class="tag_title">Returns:</p>
+<ul class="return">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt>String</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+69
+70
+71
+72
+73
+74
+75
+76
+77</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/column.rb', line 69</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_underscored_name'>underscored_name</span>
+  <span class='ivar'>@underscored_name</span> <span class='op'>||=</span> <span class='kw'>begin</span>
+    <span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_gsub'>gsub</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>::</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
+      <span class='period'>.</span><span class='id identifier rubyid_gsub'>gsub</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>([A-Z]+)([A-Z][a-z])</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>\1_\2</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
+      <span class='period'>.</span><span class='id identifier rubyid_gsub'>gsub</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>([a-z\d])([A-Z])</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>\1_\2</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
+      <span class='period'>.</span><span class='id identifier rubyid_tr'>tr</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>-</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>_</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
+      <span class='period'>.</span><span class='id identifier rubyid_downcase'>downcase</span>
+  <span class='kw'>end</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/Column/LengthError.html b/docs/DBF/Column/LengthError.html
new file mode 100644
index 0000000..9b3da57
--- /dev/null
+++ b/docs/DBF/Column/LengthError.html
@@ -0,0 +1,124 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Exception: DBF::Column::LengthError
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::Column::LengthError";
+  relpath = '../../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../../_index.html">Index (L)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../../DBF.html" title="DBF (module)">DBF</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../Column.html" title="DBF::Column (class)">Column</a></span></span>
+     &raquo; 
+    <span class="title">LengthError</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Exception: DBF::Column::LengthError
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+  <dl>
+    <dt>Inherits:</dt>
+    <dd>
+      <span class="inheritName">StandardError</span>
+      
+        <ul class="fullTree">
+          <li>Object</li>
+          
+            <li class="next">StandardError</li>
+          
+            <li class="next">DBF::Column::LengthError</li>
+          
+        </ul>
+        <a href="#" class="inheritanceTree">show all</a>
+      
+    </dd>
+  </dl>
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/column.rb</dd>
+  </dl>
+  
+</div>
+
+
+
+
+
+
+
+
+
+  
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/Column/NameError.html b/docs/DBF/Column/NameError.html
new file mode 100644
index 0000000..d4f4a3b
--- /dev/null
+++ b/docs/DBF/Column/NameError.html
@@ -0,0 +1,124 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Exception: DBF::Column::NameError
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::Column::NameError";
+  relpath = '../../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../../_index.html">Index (N)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../../DBF.html" title="DBF (module)">DBF</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../Column.html" title="DBF::Column (class)">Column</a></span></span>
+     &raquo; 
+    <span class="title">NameError</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Exception: DBF::Column::NameError
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+  <dl>
+    <dt>Inherits:</dt>
+    <dd>
+      <span class="inheritName">StandardError</span>
+      
+        <ul class="fullTree">
+          <li>Object</li>
+          
+            <li class="next">StandardError</li>
+          
+            <li class="next">DBF::Column::NameError</li>
+          
+        </ul>
+        <a href="#" class="inheritanceTree">show all</a>
+      
+    </dd>
+  </dl>
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/column.rb</dd>
+  </dl>
+  
+</div>
+
+
+
+
+
+
+
+
+
+  
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/ColumnType.html b/docs/DBF/ColumnType.html
new file mode 100644
index 0000000..9b99a73
--- /dev/null
+++ b/docs/DBF/ColumnType.html
@@ -0,0 +1,115 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Module: DBF::ColumnType
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::ColumnType";
+  relpath = '../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../_index.html">Index (C)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../DBF.html" title="DBF (module)">DBF</a></span></span>
+     &raquo; 
+    <span class="title">ColumnType</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Module: DBF::ColumnType
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/column_type.rb</dd>
+  </dl>
+  
+</div>
+
+<h2>Defined Under Namespace</h2>
+<p class="children">
+  
+    
+  
+    
+      <strong class="classes">Classes:</strong> <span class='object_link'><a href="ColumnType/Base.html" title="DBF::ColumnType::Base (class)">Base</a></span>, <span class='object_link'><a href="ColumnType/Boolean.html" title="DBF::ColumnType::Boolean (class)">Boolean</a></span>, <span class='object_link'><a href="ColumnType/Currency.html" title="DBF::ColumnType::Currency (class)">Currency</a></span>, <span class='object_link'><a href="ColumnType/Date.html" title="DBF::ColumnType::Date (class)">Date</a></span>, <span class='object_link'><a href="ColumnType/DateTime.html" title="DBF::ColumnType::DateTime (class)">DateTime</a></span>, <span class='object_link'><a href="ColumnType/Double.html" title="DBF::ColumnType::Double (class)">Double</a></span>, <span class='object_link'><a href="ColumnType/Float.html" title="DBF::ColumnType::Float (class)">Float</a></span>, <span class='object_link'><a href="ColumnType/General.html" title="DBF::ColumnType::General (class)">General</a></span>, <span class='object_link'><a href="ColumnType/Memo.html" title="DBF::ColumnType::Memo (class)">Memo</a></span>, <span class='object_link'><a href="ColumnType/Nil.html" title="DBF::ColumnType::Nil (class)">Nil</a></span>, <span class='object_link'><a href="ColumnType/Number.html" title="DBF::ColumnType::Number (class)">Number</a></span>, <span class='object_link'><a href="ColumnType/SignedLong.html" title="DBF::ColumnType::SignedLong (class)">SignedLong</a></span>, <span class='object_link'><a href="ColumnType/String.html" title="DBF::ColumnType::String (class)">String</a></span>
+    
+  
+</p>
+
+
+
+
+
+
+
+
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/ColumnType/Base.html b/docs/DBF/ColumnType/Base.html
new file mode 100644
index 0000000..56422e8
--- /dev/null
+++ b/docs/DBF/ColumnType/Base.html
@@ -0,0 +1,389 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Class: DBF::ColumnType::Base
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::ColumnType::Base";
+  relpath = '../../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../../_index.html">Index (B)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../../DBF.html" title="DBF (module)">DBF</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../ColumnType.html" title="DBF::ColumnType (module)">ColumnType</a></span></span>
+     &raquo; 
+    <span class="title">Base</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Class: DBF::ColumnType::Base
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+  <dl>
+    <dt>Inherits:</dt>
+    <dd>
+      <span class="inheritName">Object</span>
+      
+        <ul class="fullTree">
+          <li>Object</li>
+          
+            <li class="next">DBF::ColumnType::Base</li>
+          
+        </ul>
+        <a href="#" class="inheritanceTree">show all</a>
+      
+    </dd>
+  </dl>
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/column_type.rb</dd>
+  </dl>
+  
+</div>
+
+<div id="subclasses">
+  <h2>Direct Known Subclasses</h2>
+  <p class="children"><span class='object_link'><a href="Boolean.html" title="DBF::ColumnType::Boolean (class)">Boolean</a></span>, <span class='object_link'><a href="Currency.html" title="DBF::ColumnType::Currency (class)">Currency</a></span>, <span class='object_link'><a href="Date.html" title="DBF::ColumnType::Date (class)">Date</a></span>, <span class='object_link'><a href="DateTime.html" title="DBF::ColumnType::DateTime (class)">DateTime</a></span>, <span class='object_link'><a href="Double.html" title="DBF::ColumnType::Double (class)">Double</a></span>, <span class='object_link'><a href="Float.html" title="DBF::ColumnType::Float (class)">Float</a></span>, <span class='object_link'><a href="General.html" title="DBF::ColumnType::General (class)">General</a></span>, <span class='object_link'><a href="Memo.html" title="DBF::ColumnType::Memo (class)">Memo</a></span>, <span class='object_link'><a href="Nil.html" title="DBF::ColumnType::Nil (class)">Nil</a></span>, <span class='object_link'><a href="Number.html" title="DBF::ColumnType::Number (class)">Number</a></span>, <span class='object_link'><a href="SignedLong.html" title="DBF::ColumnType::SignedLong (class)">SignedLong</a></span>, <span class='object_link'><a href="String.html" title="DBF::ColumnType::String (class)">String</a></span></p>
+</div>
+
+
+
+
+  <h2>Instance Attribute Summary <small><a href="#" class="summary_toggle">collapse</a></small></h2>
+  <ul class="summary">
+    
+      <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#decimal-instance_method" title="#decimal (instance method)">#<strong>decimal</strong>  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+    
+      <span class="note title readonly">readonly</span>
+    
+    
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Returns the value of attribute decimal.</p>
+</div></span>
+  
+</li>
+
+    
+      <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#encoding-instance_method" title="#encoding (instance method)">#<strong>encoding</strong>  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+    
+      <span class="note title readonly">readonly</span>
+    
+    
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Returns the value of attribute encoding.</p>
+</div></span>
+  
+</li>
+
+    
+  </ul>
+
+
+
+
+  
+    <h2>
+      Instance Method Summary
+      <small><a href="#" class="summary_toggle">collapse</a></small>
+    </h2>
+
+    <ul class="summary">
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong>(decimal, encoding)  &#x21d2; Base </a>
+    
+
+    
+  </span>
+  
+  
+    <span class="note title constructor">constructor</span>
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>A new instance of Base.</p>
+</div></span>
+  
+</li>
+
+      
+    </ul>
+  
+
+<div id="constructor_details" class="method_details_list">
+  <h2>Constructor Details</h2>
+  
+    <div class="method_details first">
+  <h3 class="signature first" id="initialize-instance_method">
+  
+    #<strong>initialize</strong>(decimal, encoding)  &#x21d2; <tt><span class='object_link'><a href="" title="DBF::ColumnType::Base (class)">Base</a></span></tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Returns a new instance of Base.</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>decimal</span>
+      
+      
+        <span class='type'>(<tt>Integer</tt>)</span>
+      
+      
+      
+    </li>
+  
+    <li>
+      
+        <span class='name'>encoding</span>
+      
+      
+        <span class='type'>(<tt><span class='object_link'><a href="String.html" title="DBF::ColumnType::String (class)">String</a></span></tt>, <tt>Encoding</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+8
+9
+10
+11</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/column_type.rb', line 8</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_decimal'>decimal</span><span class='comma'>,</span> <span class='id identifier rubyid_encoding'>encoding</span><span class='rparen'>)</span>
+  <span class='ivar'>@decimal</span> <span class='op'>=</span> <span class='id identifier rubyid_decimal'>decimal</span>
+  <span class='ivar'>@encoding</span> <span class='op'>=</span> <span class='id identifier rubyid_encoding'>encoding</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+  
+</div>
+
+  <div id="instance_attr_details" class="attr_details">
+    <h2>Instance Attribute Details</h2>
+    
+      
+      <span id=""></span>
+      <div class="method_details first">
+  <h3 class="signature first" id="decimal-instance_method">
+  
+    #<strong>decimal</strong>  &#x21d2; <tt>Object</tt>  <span class="extras">(readonly)</span>
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Returns the value of attribute decimal.</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+4
+5
+6</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/column_type.rb', line 4</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_decimal'>decimal</span>
+  <span class='ivar'>@decimal</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      
+      <span id=""></span>
+      <div class="method_details ">
+  <h3 class="signature " id="encoding-instance_method">
+  
+    #<strong>encoding</strong>  &#x21d2; <tt>Object</tt>  <span class="extras">(readonly)</span>
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Returns the value of attribute encoding.</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+4
+5
+6</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/column_type.rb', line 4</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_encoding'>encoding</span>
+  <span class='ivar'>@encoding</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/ColumnType/Boolean.html b/docs/DBF/ColumnType/Boolean.html
new file mode 100644
index 0000000..3b15d8c
--- /dev/null
+++ b/docs/DBF/ColumnType/Boolean.html
@@ -0,0 +1,238 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Class: DBF::ColumnType::Boolean
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::ColumnType::Boolean";
+  relpath = '../../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../../_index.html">Index (B)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../../DBF.html" title="DBF (module)">DBF</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../ColumnType.html" title="DBF::ColumnType (module)">ColumnType</a></span></span>
+     &raquo; 
+    <span class="title">Boolean</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Class: DBF::ColumnType::Boolean
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+  <dl>
+    <dt>Inherits:</dt>
+    <dd>
+      <span class="inheritName"><span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></span>
+      
+        <ul class="fullTree">
+          <li>Object</li>
+          
+            <li class="next"><span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></li>
+          
+            <li class="next">DBF::ColumnType::Boolean</li>
+          
+        </ul>
+        <a href="#" class="inheritanceTree">show all</a>
+      
+    </dd>
+  </dl>
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/column_type.rb</dd>
+  </dl>
+  
+</div>
+
+
+
+
+
+
+
+  <h2>Instance Attribute Summary</h2>
+  
+  <h3 class="inherited">Attributes inherited from <span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#decimal-instance_method" title="DBF::ColumnType::Base#decimal (method)">#decimal</a></span>, <span class='object_link'><a href="Base.html#encoding-instance_method" title="DBF::ColumnType::Base#encoding (method)">#encoding</a></span></p>
+
+
+  
+    <h2>
+      Instance Method Summary
+      <small><a href="#" class="summary_toggle">collapse</a></small>
+    </h2>
+
+    <ul class="summary">
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#type_cast-instance_method" title="#type_cast (instance method)">#<strong>type_cast</strong>(value)  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'></div></span>
+  
+</li>
+
+      
+    </ul>
+  
+
+
+  
+  
+  
+  
+  
+  
+  
+  
+  <h3 class="inherited">Methods inherited from <span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::ColumnType::Base#initialize (method)">#initialize</a></span></p>
+<div id="constructor_details" class="method_details_list">
+  <h2>Constructor Details</h2>
+  
+    <p class="notice">This class inherits a constructor from <span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::ColumnType::Base#initialize (method)">DBF::ColumnType::Base</a></span></p>
+  
+</div>
+
+
+  <div id="instance_method_details" class="method_details_list">
+    <h2>Instance Method Details</h2>
+
+    
+      <div class="method_details first">
+  <h3 class="signature first" id="type_cast-instance_method">
+  
+    #<strong>type_cast</strong>(value)  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>value</span>
+      
+      
+        <span class='type'>(<tt><span class='object_link'><a href="String.html" title="DBF::ColumnType::String (class)">String</a></span></tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+67
+68
+69</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/column_type.rb', line 67</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_type_cast'>type_cast</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
+  <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_strip'>strip</span><span class='period'>.</span><span class='id identifier rubyid_match?'>match?</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>^(y|t)$</span><span class='regexp_end'>/i</span></span><span class='rparen'>)</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/ColumnType/Currency.html b/docs/DBF/ColumnType/Currency.html
new file mode 100644
index 0000000..d408475
--- /dev/null
+++ b/docs/DBF/ColumnType/Currency.html
@@ -0,0 +1,238 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Class: DBF::ColumnType::Currency
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::ColumnType::Currency";
+  relpath = '../../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../../_index.html">Index (C)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../../DBF.html" title="DBF (module)">DBF</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../ColumnType.html" title="DBF::ColumnType (module)">ColumnType</a></span></span>
+     &raquo; 
+    <span class="title">Currency</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Class: DBF::ColumnType::Currency
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+  <dl>
+    <dt>Inherits:</dt>
+    <dd>
+      <span class="inheritName"><span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></span>
+      
+        <ul class="fullTree">
+          <li>Object</li>
+          
+            <li class="next"><span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></li>
+          
+            <li class="next">DBF::ColumnType::Currency</li>
+          
+        </ul>
+        <a href="#" class="inheritanceTree">show all</a>
+      
+    </dd>
+  </dl>
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/column_type.rb</dd>
+  </dl>
+  
+</div>
+
+
+
+
+
+
+
+  <h2>Instance Attribute Summary</h2>
+  
+  <h3 class="inherited">Attributes inherited from <span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#decimal-instance_method" title="DBF::ColumnType::Base#decimal (method)">#decimal</a></span>, <span class='object_link'><a href="Base.html#encoding-instance_method" title="DBF::ColumnType::Base#encoding (method)">#encoding</a></span></p>
+
+
+  
+    <h2>
+      Instance Method Summary
+      <small><a href="#" class="summary_toggle">collapse</a></small>
+    </h2>
+
+    <ul class="summary">
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#type_cast-instance_method" title="#type_cast (instance method)">#<strong>type_cast</strong>(value)  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'></div></span>
+  
+</li>
+
+      
+    </ul>
+  
+
+
+  
+  
+  
+  
+  
+  
+  
+  
+  <h3 class="inherited">Methods inherited from <span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::ColumnType::Base#initialize (method)">#initialize</a></span></p>
+<div id="constructor_details" class="method_details_list">
+  <h2>Constructor Details</h2>
+  
+    <p class="notice">This class inherits a constructor from <span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::ColumnType::Base#initialize (method)">DBF::ColumnType::Base</a></span></p>
+  
+</div>
+
+
+  <div id="instance_method_details" class="method_details_list">
+    <h2>Instance Method Details</h2>
+
+    
+      <div class="method_details first">
+  <h3 class="signature first" id="type_cast-instance_method">
+  
+    #<strong>type_cast</strong>(value)  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>value</span>
+      
+      
+        <span class='type'>(<tt><span class='object_link'><a href="String.html" title="DBF::ColumnType::String (class)">String</a></span></tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+35
+36
+37</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/column_type.rb', line 35</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_type_cast'>type_cast</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
+  <span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_unpack1'>unpack1</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>q&lt;</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='op'>/</span> <span class='float'>10_000.0</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_f'>to_f</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/ColumnType/Date.html b/docs/DBF/ColumnType/Date.html
new file mode 100644
index 0000000..d284be9
--- /dev/null
+++ b/docs/DBF/ColumnType/Date.html
@@ -0,0 +1,242 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Class: DBF::ColumnType::Date
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::ColumnType::Date";
+  relpath = '../../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../../_index.html">Index (D)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../../DBF.html" title="DBF (module)">DBF</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../ColumnType.html" title="DBF::ColumnType (module)">ColumnType</a></span></span>
+     &raquo; 
+    <span class="title">Date</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Class: DBF::ColumnType::Date
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+  <dl>
+    <dt>Inherits:</dt>
+    <dd>
+      <span class="inheritName"><span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></span>
+      
+        <ul class="fullTree">
+          <li>Object</li>
+          
+            <li class="next"><span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></li>
+          
+            <li class="next">DBF::ColumnType::Date</li>
+          
+        </ul>
+        <a href="#" class="inheritanceTree">show all</a>
+      
+    </dd>
+  </dl>
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/column_type.rb</dd>
+  </dl>
+  
+</div>
+
+
+
+
+
+
+
+  <h2>Instance Attribute Summary</h2>
+  
+  <h3 class="inherited">Attributes inherited from <span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#decimal-instance_method" title="DBF::ColumnType::Base#decimal (method)">#decimal</a></span>, <span class='object_link'><a href="Base.html#encoding-instance_method" title="DBF::ColumnType::Base#encoding (method)">#encoding</a></span></p>
+
+
+  
+    <h2>
+      Instance Method Summary
+      <small><a href="#" class="summary_toggle">collapse</a></small>
+    </h2>
+
+    <ul class="summary">
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#type_cast-instance_method" title="#type_cast (instance method)">#<strong>type_cast</strong>(value)  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'></div></span>
+  
+</li>
+
+      
+    </ul>
+  
+
+
+  
+  
+  
+  
+  
+  
+  
+  
+  <h3 class="inherited">Methods inherited from <span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::ColumnType::Base#initialize (method)">#initialize</a></span></p>
+<div id="constructor_details" class="method_details_list">
+  <h2>Constructor Details</h2>
+  
+    <p class="notice">This class inherits a constructor from <span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::ColumnType::Base#initialize (method)">DBF::ColumnType::Base</a></span></p>
+  
+</div>
+
+
+  <div id="instance_method_details" class="method_details_list">
+    <h2>Instance Method Details</h2>
+
+    
+      <div class="method_details first">
+  <h3 class="signature first" id="type_cast-instance_method">
+  
+    #<strong>type_cast</strong>(value)  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>value</span>
+      
+      
+        <span class='type'>(<tt><span class='object_link'><a href="String.html" title="DBF::ColumnType::String (class)">String</a></span></tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+75
+76
+77
+78
+79</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/column_type.rb', line 75</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_type_cast'>type_cast</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
+  <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_match?'>match?</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>\d{8}</span><span class='regexp_end'>/</span></span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='op'>::</span><span class='const'>Date</span><span class='period'>.</span><span class='id identifier rubyid_strptime'>strptime</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>%Y%m%d</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
+<span class='kw'>rescue</span> <span class='const'>StandardError</span>
+  <span class='kw'>nil</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/ColumnType/DateTime.html b/docs/DBF/ColumnType/DateTime.html
new file mode 100644
index 0000000..d63bd5a
--- /dev/null
+++ b/docs/DBF/ColumnType/DateTime.html
@@ -0,0 +1,246 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Class: DBF::ColumnType::DateTime
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::ColumnType::DateTime";
+  relpath = '../../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../../_index.html">Index (D)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../../DBF.html" title="DBF (module)">DBF</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../ColumnType.html" title="DBF::ColumnType (module)">ColumnType</a></span></span>
+     &raquo; 
+    <span class="title">DateTime</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Class: DBF::ColumnType::DateTime
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+  <dl>
+    <dt>Inherits:</dt>
+    <dd>
+      <span class="inheritName"><span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></span>
+      
+        <ul class="fullTree">
+          <li>Object</li>
+          
+            <li class="next"><span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></li>
+          
+            <li class="next">DBF::ColumnType::DateTime</li>
+          
+        </ul>
+        <a href="#" class="inheritanceTree">show all</a>
+      
+    </dd>
+  </dl>
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/column_type.rb</dd>
+  </dl>
+  
+</div>
+
+
+
+
+
+
+
+  <h2>Instance Attribute Summary</h2>
+  
+  <h3 class="inherited">Attributes inherited from <span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#decimal-instance_method" title="DBF::ColumnType::Base#decimal (method)">#decimal</a></span>, <span class='object_link'><a href="Base.html#encoding-instance_method" title="DBF::ColumnType::Base#encoding (method)">#encoding</a></span></p>
+
+
+  
+    <h2>
+      Instance Method Summary
+      <small><a href="#" class="summary_toggle">collapse</a></small>
+    </h2>
+
+    <ul class="summary">
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#type_cast-instance_method" title="#type_cast (instance method)">#<strong>type_cast</strong>(value)  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'></div></span>
+  
+</li>
+
+      
+    </ul>
+  
+
+
+  
+  
+  
+  
+  
+  
+  
+  
+  <h3 class="inherited">Methods inherited from <span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::ColumnType::Base#initialize (method)">#initialize</a></span></p>
+<div id="constructor_details" class="method_details_list">
+  <h2>Constructor Details</h2>
+  
+    <p class="notice">This class inherits a constructor from <span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::ColumnType::Base#initialize (method)">DBF::ColumnType::Base</a></span></p>
+  
+</div>
+
+
+  <div id="instance_method_details" class="method_details_list">
+    <h2>Instance Method Details</h2>
+
+    
+      <div class="method_details first">
+  <h3 class="signature first" id="type_cast-instance_method">
+  
+    #<strong>type_cast</strong>(value)  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>value</span>
+      
+      
+        <span class='type'>(<tt><span class='object_link'><a href="String.html" title="DBF::ColumnType::String (class)">String</a></span></tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+85
+86
+87
+88
+89
+90
+91</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/column_type.rb', line 85</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_type_cast'>type_cast</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
+  <span class='id identifier rubyid_days'>days</span><span class='comma'>,</span> <span class='id identifier rubyid_msecs'>msecs</span> <span class='op'>=</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_unpack'>unpack</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>l2</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
+  <span class='id identifier rubyid_secs'>secs</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='id identifier rubyid_msecs'>msecs</span> <span class='op'>/</span> <span class='int'>1000</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span>
+  <span class='op'>::</span><span class='const'>DateTime</span><span class='period'>.</span><span class='id identifier rubyid_jd'>jd</span><span class='lparen'>(</span><span class='id identifier rubyid_days'>days</span><span class='comma'>,</span> <span class='lparen'>(</span><span class='id identifier rubyid_secs'>secs</span> <span class='op'>/</span> <span class='int'>3600</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span><span class='comma'>,</span> <span class='lparen'>(</span><span class='id identifier rubyid_secs'>secs</span> <span class='op'>/</span> <span class='int'>60</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span> <span class='op'>%</span> <span class='int'>60</span><span class='comma'>,</span> <span class='id identifier rubyid_secs'>secs</span> <span class='op'>%</span> <span class='int'>60</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_time'>to_time</span>
+<span class='kw'>rescue</span> <span class='const'>StandardError</span>
+  <span class='kw'>nil</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/ColumnType/Double.html b/docs/DBF/ColumnType/Double.html
new file mode 100644
index 0000000..6594d71
--- /dev/null
+++ b/docs/DBF/ColumnType/Double.html
@@ -0,0 +1,238 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Class: DBF::ColumnType::Double
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::ColumnType::Double";
+  relpath = '../../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../../_index.html">Index (D)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../../DBF.html" title="DBF (module)">DBF</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../ColumnType.html" title="DBF::ColumnType (module)">ColumnType</a></span></span>
+     &raquo; 
+    <span class="title">Double</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Class: DBF::ColumnType::Double
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+  <dl>
+    <dt>Inherits:</dt>
+    <dd>
+      <span class="inheritName"><span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></span>
+      
+        <ul class="fullTree">
+          <li>Object</li>
+          
+            <li class="next"><span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></li>
+          
+            <li class="next">DBF::ColumnType::Double</li>
+          
+        </ul>
+        <a href="#" class="inheritanceTree">show all</a>
+      
+    </dd>
+  </dl>
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/column_type.rb</dd>
+  </dl>
+  
+</div>
+
+
+
+
+
+
+
+  <h2>Instance Attribute Summary</h2>
+  
+  <h3 class="inherited">Attributes inherited from <span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#decimal-instance_method" title="DBF::ColumnType::Base#decimal (method)">#decimal</a></span>, <span class='object_link'><a href="Base.html#encoding-instance_method" title="DBF::ColumnType::Base#encoding (method)">#encoding</a></span></p>
+
+
+  
+    <h2>
+      Instance Method Summary
+      <small><a href="#" class="summary_toggle">collapse</a></small>
+    </h2>
+
+    <ul class="summary">
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#type_cast-instance_method" title="#type_cast (instance method)">#<strong>type_cast</strong>(value)  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'></div></span>
+  
+</li>
+
+      
+    </ul>
+  
+
+
+  
+  
+  
+  
+  
+  
+  
+  
+  <h3 class="inherited">Methods inherited from <span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::ColumnType::Base#initialize (method)">#initialize</a></span></p>
+<div id="constructor_details" class="method_details_list">
+  <h2>Constructor Details</h2>
+  
+    <p class="notice">This class inherits a constructor from <span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::ColumnType::Base#initialize (method)">DBF::ColumnType::Base</a></span></p>
+  
+</div>
+
+
+  <div id="instance_method_details" class="method_details_list">
+    <h2>Instance Method Details</h2>
+
+    
+      <div class="method_details first">
+  <h3 class="signature first" id="type_cast-instance_method">
+  
+    #<strong>type_cast</strong>(value)  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>value</span>
+      
+      
+        <span class='type'>(<tt><span class='object_link'><a href="String.html" title="DBF::ColumnType::String (class)">String</a></span></tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+59
+60
+61</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/column_type.rb', line 59</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_type_cast'>type_cast</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
+  <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_unpack1'>unpack1</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>E</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/ColumnType/Float.html b/docs/DBF/ColumnType/Float.html
new file mode 100644
index 0000000..3d6f962
--- /dev/null
+++ b/docs/DBF/ColumnType/Float.html
@@ -0,0 +1,238 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Class: DBF::ColumnType::Float
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::ColumnType::Float";
+  relpath = '../../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../../_index.html">Index (F)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../../DBF.html" title="DBF (module)">DBF</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../ColumnType.html" title="DBF::ColumnType (module)">ColumnType</a></span></span>
+     &raquo; 
+    <span class="title">Float</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Class: DBF::ColumnType::Float
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+  <dl>
+    <dt>Inherits:</dt>
+    <dd>
+      <span class="inheritName"><span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></span>
+      
+        <ul class="fullTree">
+          <li>Object</li>
+          
+            <li class="next"><span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></li>
+          
+            <li class="next">DBF::ColumnType::Float</li>
+          
+        </ul>
+        <a href="#" class="inheritanceTree">show all</a>
+      
+    </dd>
+  </dl>
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/column_type.rb</dd>
+  </dl>
+  
+</div>
+
+
+
+
+
+
+
+  <h2>Instance Attribute Summary</h2>
+  
+  <h3 class="inherited">Attributes inherited from <span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#decimal-instance_method" title="DBF::ColumnType::Base#decimal (method)">#decimal</a></span>, <span class='object_link'><a href="Base.html#encoding-instance_method" title="DBF::ColumnType::Base#encoding (method)">#encoding</a></span></p>
+
+
+  
+    <h2>
+      Instance Method Summary
+      <small><a href="#" class="summary_toggle">collapse</a></small>
+    </h2>
+
+    <ul class="summary">
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#type_cast-instance_method" title="#type_cast (instance method)">#<strong>type_cast</strong>(value)  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'></div></span>
+  
+</li>
+
+      
+    </ul>
+  
+
+
+  
+  
+  
+  
+  
+  
+  
+  
+  <h3 class="inherited">Methods inherited from <span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::ColumnType::Base#initialize (method)">#initialize</a></span></p>
+<div id="constructor_details" class="method_details_list">
+  <h2>Constructor Details</h2>
+  
+    <p class="notice">This class inherits a constructor from <span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::ColumnType::Base#initialize (method)">DBF::ColumnType::Base</a></span></p>
+  
+</div>
+
+
+  <div id="instance_method_details" class="method_details_list">
+    <h2>Instance Method Details</h2>
+
+    
+      <div class="method_details first">
+  <h3 class="signature first" id="type_cast-instance_method">
+  
+    #<strong>type_cast</strong>(value)  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>value</span>
+      
+      
+        <span class='type'>(<tt><span class='object_link'><a href="String.html" title="DBF::ColumnType::String (class)">String</a></span></tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+51
+52
+53</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/column_type.rb', line 51</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_type_cast'>type_cast</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
+  <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_to_f'>to_f</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/ColumnType/General.html b/docs/DBF/ColumnType/General.html
new file mode 100644
index 0000000..276ea8e
--- /dev/null
+++ b/docs/DBF/ColumnType/General.html
@@ -0,0 +1,238 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Class: DBF::ColumnType::General
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::ColumnType::General";
+  relpath = '../../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../../_index.html">Index (G)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../../DBF.html" title="DBF (module)">DBF</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../ColumnType.html" title="DBF::ColumnType (module)">ColumnType</a></span></span>
+     &raquo; 
+    <span class="title">General</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Class: DBF::ColumnType::General
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+  <dl>
+    <dt>Inherits:</dt>
+    <dd>
+      <span class="inheritName"><span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></span>
+      
+        <ul class="fullTree">
+          <li>Object</li>
+          
+            <li class="next"><span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></li>
+          
+            <li class="next">DBF::ColumnType::General</li>
+          
+        </ul>
+        <a href="#" class="inheritanceTree">show all</a>
+      
+    </dd>
+  </dl>
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/column_type.rb</dd>
+  </dl>
+  
+</div>
+
+
+
+
+
+
+
+  <h2>Instance Attribute Summary</h2>
+  
+  <h3 class="inherited">Attributes inherited from <span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#decimal-instance_method" title="DBF::ColumnType::Base#decimal (method)">#decimal</a></span>, <span class='object_link'><a href="Base.html#encoding-instance_method" title="DBF::ColumnType::Base#encoding (method)">#encoding</a></span></p>
+
+
+  
+    <h2>
+      Instance Method Summary
+      <small><a href="#" class="summary_toggle">collapse</a></small>
+    </h2>
+
+    <ul class="summary">
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#type_cast-instance_method" title="#type_cast (instance method)">#<strong>type_cast</strong>(value)  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'></div></span>
+  
+</li>
+
+      
+    </ul>
+  
+
+
+  
+  
+  
+  
+  
+  
+  
+  
+  <h3 class="inherited">Methods inherited from <span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::ColumnType::Base#initialize (method)">#initialize</a></span></p>
+<div id="constructor_details" class="method_details_list">
+  <h2>Constructor Details</h2>
+  
+    <p class="notice">This class inherits a constructor from <span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::ColumnType::Base#initialize (method)">DBF::ColumnType::Base</a></span></p>
+  
+</div>
+
+
+  <div id="instance_method_details" class="method_details_list">
+    <h2>Instance Method Details</h2>
+
+    
+      <div class="method_details first">
+  <h3 class="signature first" id="type_cast-instance_method">
+  
+    #<strong>type_cast</strong>(value)  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>value</span>
+      
+      
+        <span class='type'>(<tt><span class='object_link'><a href="String.html" title="DBF::ColumnType::String (class)">String</a></span></tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+109
+110
+111</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/column_type.rb', line 109</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_type_cast'>type_cast</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
+  <span class='id identifier rubyid_value'>value</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/ColumnType/Memo.html b/docs/DBF/ColumnType/Memo.html
new file mode 100644
index 0000000..da30870
--- /dev/null
+++ b/docs/DBF/ColumnType/Memo.html
@@ -0,0 +1,246 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Class: DBF::ColumnType::Memo
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::ColumnType::Memo";
+  relpath = '../../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../../_index.html">Index (M)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../../DBF.html" title="DBF (module)">DBF</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../ColumnType.html" title="DBF::ColumnType (module)">ColumnType</a></span></span>
+     &raquo; 
+    <span class="title">Memo</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Class: DBF::ColumnType::Memo
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+  <dl>
+    <dt>Inherits:</dt>
+    <dd>
+      <span class="inheritName"><span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></span>
+      
+        <ul class="fullTree">
+          <li>Object</li>
+          
+            <li class="next"><span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></li>
+          
+            <li class="next">DBF::ColumnType::Memo</li>
+          
+        </ul>
+        <a href="#" class="inheritanceTree">show all</a>
+      
+    </dd>
+  </dl>
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/column_type.rb</dd>
+  </dl>
+  
+</div>
+
+
+
+
+
+
+
+  <h2>Instance Attribute Summary</h2>
+  
+  <h3 class="inherited">Attributes inherited from <span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#decimal-instance_method" title="DBF::ColumnType::Base#decimal (method)">#decimal</a></span>, <span class='object_link'><a href="Base.html#encoding-instance_method" title="DBF::ColumnType::Base#encoding (method)">#encoding</a></span></p>
+
+
+  
+    <h2>
+      Instance Method Summary
+      <small><a href="#" class="summary_toggle">collapse</a></small>
+    </h2>
+
+    <ul class="summary">
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#type_cast-instance_method" title="#type_cast (instance method)">#<strong>type_cast</strong>(value)  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'></div></span>
+  
+</li>
+
+      
+    </ul>
+  
+
+
+  
+  
+  
+  
+  
+  
+  
+  
+  <h3 class="inherited">Methods inherited from <span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::ColumnType::Base#initialize (method)">#initialize</a></span></p>
+<div id="constructor_details" class="method_details_list">
+  <h2>Constructor Details</h2>
+  
+    <p class="notice">This class inherits a constructor from <span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::ColumnType::Base#initialize (method)">DBF::ColumnType::Base</a></span></p>
+  
+</div>
+
+
+  <div id="instance_method_details" class="method_details_list">
+    <h2>Instance Method Details</h2>
+
+    
+      <div class="method_details first">
+  <h3 class="signature first" id="type_cast-instance_method">
+  
+    #<strong>type_cast</strong>(value)  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>value</span>
+      
+      
+        <span class='type'>(<tt><span class='object_link'><a href="String.html" title="DBF::ColumnType::String (class)">String</a></span></tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+97
+98
+99
+100
+101
+102
+103</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/column_type.rb', line 97</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_type_cast'>type_cast</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
+  <span class='kw'>if</span> <span class='id identifier rubyid_encoding'>encoding</span> <span class='op'>&amp;&amp;</span> <span class='op'>!</span><span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
+    <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_force_encoding'>force_encoding</span><span class='lparen'>(</span><span class='ivar'>@encoding</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_encode'>encode</span><span class='lparen'>(</span><span class='const'>Encoding</span><span class='period'>.</span><span class='id identifier rubyid_default_external'>default_external</span><span class='comma'>,</span> <span class='label'>undef:</span> <span class='symbol'>:replace</span><span class='comma'>,</span> <span class='label'>invalid:</span> <span class='symbol'>:replace</span><span class='rparen'>)</span>
+  <span class='kw'>else</span>
+    <span class='id identifier rubyid_value'>value</span>
+  <span class='kw'>end</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/ColumnType/Nil.html b/docs/DBF/ColumnType/Nil.html
new file mode 100644
index 0000000..b80e14c
--- /dev/null
+++ b/docs/DBF/ColumnType/Nil.html
@@ -0,0 +1,238 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Class: DBF::ColumnType::Nil
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::ColumnType::Nil";
+  relpath = '../../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../../_index.html">Index (N)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../../DBF.html" title="DBF (module)">DBF</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../ColumnType.html" title="DBF::ColumnType (module)">ColumnType</a></span></span>
+     &raquo; 
+    <span class="title">Nil</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Class: DBF::ColumnType::Nil
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+  <dl>
+    <dt>Inherits:</dt>
+    <dd>
+      <span class="inheritName"><span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></span>
+      
+        <ul class="fullTree">
+          <li>Object</li>
+          
+            <li class="next"><span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></li>
+          
+            <li class="next">DBF::ColumnType::Nil</li>
+          
+        </ul>
+        <a href="#" class="inheritanceTree">show all</a>
+      
+    </dd>
+  </dl>
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/column_type.rb</dd>
+  </dl>
+  
+</div>
+
+
+
+
+
+
+
+  <h2>Instance Attribute Summary</h2>
+  
+  <h3 class="inherited">Attributes inherited from <span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#decimal-instance_method" title="DBF::ColumnType::Base#decimal (method)">#decimal</a></span>, <span class='object_link'><a href="Base.html#encoding-instance_method" title="DBF::ColumnType::Base#encoding (method)">#encoding</a></span></p>
+
+
+  
+    <h2>
+      Instance Method Summary
+      <small><a href="#" class="summary_toggle">collapse</a></small>
+    </h2>
+
+    <ul class="summary">
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#type_cast-instance_method" title="#type_cast (instance method)">#<strong>type_cast</strong>(_value)  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'></div></span>
+  
+</li>
+
+      
+    </ul>
+  
+
+
+  
+  
+  
+  
+  
+  
+  
+  
+  <h3 class="inherited">Methods inherited from <span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::ColumnType::Base#initialize (method)">#initialize</a></span></p>
+<div id="constructor_details" class="method_details_list">
+  <h2>Constructor Details</h2>
+  
+    <p class="notice">This class inherits a constructor from <span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::ColumnType::Base#initialize (method)">DBF::ColumnType::Base</a></span></p>
+  
+</div>
+
+
+  <div id="instance_method_details" class="method_details_list">
+    <h2>Instance Method Details</h2>
+
+    
+      <div class="method_details first">
+  <h3 class="signature first" id="type_cast-instance_method">
+  
+    #<strong>type_cast</strong>(_value)  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>_value</span>
+      
+      
+        <span class='type'>(<tt><span class='object_link'><a href="String.html" title="DBF::ColumnType::String (class)">String</a></span></tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+17
+18
+19</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/column_type.rb', line 17</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_type_cast'>type_cast</span><span class='lparen'>(</span><span class='id identifier rubyid__value'>_value</span><span class='rparen'>)</span>
+  <span class='kw'>nil</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/ColumnType/Number.html b/docs/DBF/ColumnType/Number.html
new file mode 100644
index 0000000..802e0f2
--- /dev/null
+++ b/docs/DBF/ColumnType/Number.html
@@ -0,0 +1,242 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Class: DBF::ColumnType::Number
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::ColumnType::Number";
+  relpath = '../../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../../_index.html">Index (N)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../../DBF.html" title="DBF (module)">DBF</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../ColumnType.html" title="DBF::ColumnType (module)">ColumnType</a></span></span>
+     &raquo; 
+    <span class="title">Number</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Class: DBF::ColumnType::Number
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+  <dl>
+    <dt>Inherits:</dt>
+    <dd>
+      <span class="inheritName"><span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></span>
+      
+        <ul class="fullTree">
+          <li>Object</li>
+          
+            <li class="next"><span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></li>
+          
+            <li class="next">DBF::ColumnType::Number</li>
+          
+        </ul>
+        <a href="#" class="inheritanceTree">show all</a>
+      
+    </dd>
+  </dl>
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/column_type.rb</dd>
+  </dl>
+  
+</div>
+
+
+
+
+
+
+
+  <h2>Instance Attribute Summary</h2>
+  
+  <h3 class="inherited">Attributes inherited from <span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#decimal-instance_method" title="DBF::ColumnType::Base#decimal (method)">#decimal</a></span>, <span class='object_link'><a href="Base.html#encoding-instance_method" title="DBF::ColumnType::Base#encoding (method)">#encoding</a></span></p>
+
+
+  
+    <h2>
+      Instance Method Summary
+      <small><a href="#" class="summary_toggle">collapse</a></small>
+    </h2>
+
+    <ul class="summary">
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#type_cast-instance_method" title="#type_cast (instance method)">#<strong>type_cast</strong>(value)  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'></div></span>
+  
+</li>
+
+      
+    </ul>
+  
+
+
+  
+  
+  
+  
+  
+  
+  
+  
+  <h3 class="inherited">Methods inherited from <span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::ColumnType::Base#initialize (method)">#initialize</a></span></p>
+<div id="constructor_details" class="method_details_list">
+  <h2>Constructor Details</h2>
+  
+    <p class="notice">This class inherits a constructor from <span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::ColumnType::Base#initialize (method)">DBF::ColumnType::Base</a></span></p>
+  
+</div>
+
+
+  <div id="instance_method_details" class="method_details_list">
+    <h2>Instance Method Details</h2>
+
+    
+      <div class="method_details first">
+  <h3 class="signature first" id="type_cast-instance_method">
+  
+    #<strong>type_cast</strong>(value)  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>value</span>
+      
+      
+        <span class='type'>(<tt><span class='object_link'><a href="String.html" title="DBF::ColumnType::String (class)">String</a></span></tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+25
+26
+27
+28
+29</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/column_type.rb', line 25</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_type_cast'>type_cast</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
+  <span class='kw'>return</span> <span class='kw'>nil</span> <span class='kw'>if</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_strip'>strip</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
+
+  <span class='ivar'>@decimal</span><span class='period'>.</span><span class='id identifier rubyid_zero?'>zero?</span> <span class='op'>?</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span> <span class='op'>:</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_to_f'>to_f</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/ColumnType/SignedLong.html b/docs/DBF/ColumnType/SignedLong.html
new file mode 100644
index 0000000..d1fd2c8
--- /dev/null
+++ b/docs/DBF/ColumnType/SignedLong.html
@@ -0,0 +1,238 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Class: DBF::ColumnType::SignedLong
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::ColumnType::SignedLong";
+  relpath = '../../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../../_index.html">Index (S)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../../DBF.html" title="DBF (module)">DBF</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../ColumnType.html" title="DBF::ColumnType (module)">ColumnType</a></span></span>
+     &raquo; 
+    <span class="title">SignedLong</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Class: DBF::ColumnType::SignedLong
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+  <dl>
+    <dt>Inherits:</dt>
+    <dd>
+      <span class="inheritName"><span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></span>
+      
+        <ul class="fullTree">
+          <li>Object</li>
+          
+            <li class="next"><span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></li>
+          
+            <li class="next">DBF::ColumnType::SignedLong</li>
+          
+        </ul>
+        <a href="#" class="inheritanceTree">show all</a>
+      
+    </dd>
+  </dl>
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/column_type.rb</dd>
+  </dl>
+  
+</div>
+
+
+
+
+
+
+
+  <h2>Instance Attribute Summary</h2>
+  
+  <h3 class="inherited">Attributes inherited from <span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#decimal-instance_method" title="DBF::ColumnType::Base#decimal (method)">#decimal</a></span>, <span class='object_link'><a href="Base.html#encoding-instance_method" title="DBF::ColumnType::Base#encoding (method)">#encoding</a></span></p>
+
+
+  
+    <h2>
+      Instance Method Summary
+      <small><a href="#" class="summary_toggle">collapse</a></small>
+    </h2>
+
+    <ul class="summary">
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#type_cast-instance_method" title="#type_cast (instance method)">#<strong>type_cast</strong>(value)  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'></div></span>
+  
+</li>
+
+      
+    </ul>
+  
+
+
+  
+  
+  
+  
+  
+  
+  
+  
+  <h3 class="inherited">Methods inherited from <span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::ColumnType::Base#initialize (method)">#initialize</a></span></p>
+<div id="constructor_details" class="method_details_list">
+  <h2>Constructor Details</h2>
+  
+    <p class="notice">This class inherits a constructor from <span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::ColumnType::Base#initialize (method)">DBF::ColumnType::Base</a></span></p>
+  
+</div>
+
+
+  <div id="instance_method_details" class="method_details_list">
+    <h2>Instance Method Details</h2>
+
+    
+      <div class="method_details first">
+  <h3 class="signature first" id="type_cast-instance_method">
+  
+    #<strong>type_cast</strong>(value)  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>value</span>
+      
+      
+        <span class='type'>(<tt><span class='object_link'><a href="String.html" title="DBF::ColumnType::String (class)">String</a></span></tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+43
+44
+45</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/column_type.rb', line 43</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_type_cast'>type_cast</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
+  <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_unpack1'>unpack1</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>l&lt;</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/ColumnType/String.html b/docs/DBF/ColumnType/String.html
new file mode 100644
index 0000000..ba7914f
--- /dev/null
+++ b/docs/DBF/ColumnType/String.html
@@ -0,0 +1,240 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Class: DBF::ColumnType::String
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::ColumnType::String";
+  relpath = '../../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../../_index.html">Index (S)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../../DBF.html" title="DBF (module)">DBF</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../ColumnType.html" title="DBF::ColumnType (module)">ColumnType</a></span></span>
+     &raquo; 
+    <span class="title">String</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Class: DBF::ColumnType::String
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+  <dl>
+    <dt>Inherits:</dt>
+    <dd>
+      <span class="inheritName"><span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></span>
+      
+        <ul class="fullTree">
+          <li>Object</li>
+          
+            <li class="next"><span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></li>
+          
+            <li class="next">DBF::ColumnType::String</li>
+          
+        </ul>
+        <a href="#" class="inheritanceTree">show all</a>
+      
+    </dd>
+  </dl>
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/column_type.rb</dd>
+  </dl>
+  
+</div>
+
+
+
+
+
+
+
+  <h2>Instance Attribute Summary</h2>
+  
+  <h3 class="inherited">Attributes inherited from <span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#decimal-instance_method" title="DBF::ColumnType::Base#decimal (method)">#decimal</a></span>, <span class='object_link'><a href="Base.html#encoding-instance_method" title="DBF::ColumnType::Base#encoding (method)">#encoding</a></span></p>
+
+
+  
+    <h2>
+      Instance Method Summary
+      <small><a href="#" class="summary_toggle">collapse</a></small>
+    </h2>
+
+    <ul class="summary">
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#type_cast-instance_method" title="#type_cast (instance method)">#<strong>type_cast</strong>(value)  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'></div></span>
+  
+</li>
+
+      
+    </ul>
+  
+
+
+  
+  
+  
+  
+  
+  
+  
+  
+  <h3 class="inherited">Methods inherited from <span class='object_link'><a href="Base.html" title="DBF::ColumnType::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::ColumnType::Base#initialize (method)">#initialize</a></span></p>
+<div id="constructor_details" class="method_details_list">
+  <h2>Constructor Details</h2>
+  
+    <p class="notice">This class inherits a constructor from <span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::ColumnType::Base#initialize (method)">DBF::ColumnType::Base</a></span></p>
+  
+</div>
+
+
+  <div id="instance_method_details" class="method_details_list">
+    <h2>Instance Method Details</h2>
+
+    
+      <div class="method_details first">
+  <h3 class="signature first" id="type_cast-instance_method">
+  
+    #<strong>type_cast</strong>(value)  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>value</span>
+      
+      
+        <span class='type'>(<tt><span class='object_link'><a href="" title="DBF::ColumnType::String (class)">String</a></span></tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+117
+118
+119
+120</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/column_type.rb', line 117</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_type_cast'>type_cast</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
+  <span class='id identifier rubyid_value'>value</span> <span class='op'>=</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_strip'>strip</span>
+  <span class='ivar'>@encoding</span> <span class='op'>?</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_force_encoding'>force_encoding</span><span class='lparen'>(</span><span class='ivar'>@encoding</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_encode'>encode</span><span class='lparen'>(</span><span class='const'>Encoding</span><span class='period'>.</span><span class='id identifier rubyid_default_external'>default_external</span><span class='comma'>,</span> <span class='label'>undef:</span> <span class='symbol'>:replace</span><span class='comma'>,</span> <span class='label'>invalid:</span> <span class='symbol'>:replace</span><span class='rparen'>)</span> <span class='op'>:</span> <span class='id identifier rubyid_value'>value</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/Database.html b/docs/DBF/Database.html
new file mode 100644
index 0000000..46d7544
--- /dev/null
+++ b/docs/DBF/Database.html
@@ -0,0 +1,126 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Module: DBF::Database
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::Database";
+  relpath = '../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../_index.html">Index (D)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../DBF.html" title="DBF (module)">DBF</a></span></span>
+     &raquo; 
+    <span class="title">Database</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Module: DBF::Database
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/database/foxpro.rb</dd>
+  </dl>
+  
+</div>
+
+<h2>Overview</h2><div class="docstring">
+  <div class="discussion">
+    
+<p>DBF::Database::Foxpro is the primary interface to a Visual Foxpro database container (.dbc file). When using this database container, long fieldnames are supported, and you can reference tables directly instead of instantiating Table objects yourself. Table references are created based on the filename, but it this class tries to correct the table filenames because they could be wrong for case sensitive filesystems, e.g. when a foxpro database is uploaded to a linux server.</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><h2>Defined Under Namespace</h2>
+<p class="children">
+  
+    
+  
+    
+      <strong class="classes">Classes:</strong> <span class='object_link'><a href="Database/Foxpro.html" title="DBF::Database::Foxpro (class)">Foxpro</a></span>, <span class='object_link'><a href="Database/Table.html" title="DBF::Database::Table (class)">Table</a></span>
+    
+  
+</p>
+
+
+
+
+
+
+
+
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/Database/Foxpro.html b/docs/DBF/Database/Foxpro.html
new file mode 100644
index 0000000..ade6ecc
--- /dev/null
+++ b/docs/DBF/Database/Foxpro.html
@@ -0,0 +1,653 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Class: DBF::Database::Foxpro
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::Database::Foxpro";
+  relpath = '../../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../../_index.html">Index (F)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../../DBF.html" title="DBF (module)">DBF</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../Database.html" title="DBF::Database (module)">Database</a></span></span>
+     &raquo; 
+    <span class="title">Foxpro</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Class: DBF::Database::Foxpro
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+  <dl>
+    <dt>Inherits:</dt>
+    <dd>
+      <span class="inheritName">Object</span>
+      
+        <ul class="fullTree">
+          <li>Object</li>
+          
+            <li class="next">DBF::Database::Foxpro</li>
+          
+        </ul>
+        <a href="#" class="inheritanceTree">show all</a>
+      
+    </dd>
+  </dl>
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/database/foxpro.rb</dd>
+  </dl>
+  
+</div>
+
+
+
+
+
+
+
+
+  
+    <h2>
+      Instance Method Summary
+      <small><a href="#" class="summary_toggle">collapse</a></small>
+    </h2>
+
+    <ul class="summary">
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong>(path)  &#x21d2; Foxpro </a>
+    
+
+    
+  </span>
+  
+  
+    <span class="note title constructor">constructor</span>
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Opens a DBF::Database::Foxpro Examples:   # working with a database stored on the filesystem   db = DBF::Database::Foxpro.new &#39;path_to_db/database.dbc&#39;.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#method_missing-instance_method" title="#method_missing (instance method)">#<strong>method_missing</strong>(method, *args)  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>:nodoc:.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#respond_to_missing%3F-instance_method" title="#respond_to_missing? (instance method)">#<strong>respond_to_missing?</strong>(method)  &#x21d2; Boolean </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'></div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#table-instance_method" title="#table (instance method)">#<strong>table</strong>(name)  &#x21d2; DBF::Table </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Returns table with given name.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#table_names-instance_method" title="#table_names (instance method)">#<strong>table_names</strong>  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'></div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#table_path-instance_method" title="#table_path (instance method)">#<strong>table_path</strong>(name)  &#x21d2; String </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Searches the database directory for the table&#39;s dbf file and returns the absolute path.</p>
+</div></span>
+  
+</li>
+
+      
+    </ul>
+  
+
+<div id="constructor_details" class="method_details_list">
+  <h2>Constructor Details</h2>
+  
+    <div class="method_details first">
+  <h3 class="signature first" id="initialize-instance_method">
+  
+    #<strong>initialize</strong>(path)  &#x21d2; <tt><span class='object_link'><a href="" title="DBF::Database::Foxpro (class)">Foxpro</a></span></tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Opens a DBF::Database::Foxpro Examples:</p>
+
+<pre class="code ruby"><code class="ruby"> <span class='comment'># working with a database stored on the filesystem
+</span> <span class='id identifier rubyid_db'>db</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../../DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Database.html" title="DBF::Database (module)">Database</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="" title="DBF::Database::Foxpro (class)">Foxpro</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>path_to_db/database.dbc</span><span class='tstring_end'>&#39;</span></span>
+
+<span class='comment'># Calling a table
+</span><span class='id identifier rubyid_contacts'>contacts</span> <span class='op'>=</span> <span class='id identifier rubyid_db'>db</span><span class='period'>.</span><span class='id identifier rubyid_contacts'>contacts</span><span class='period'>.</span><span class='id identifier rubyid_record'>record</span><span class='lparen'>(</span><span class='int'>0</span><span class='rparen'>)</span>
+</code></pre>
+
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>path</span>
+      
+      
+        <span class='type'>(<tt>String</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+21
+22
+23
+24
+25
+26
+27
+28</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/database/foxpro.rb', line 21</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_path'>path</span><span class='rparen'>)</span>
+  <span class='ivar'>@path</span> <span class='op'>=</span> <span class='id identifier rubyid_path'>path</span>
+  <span class='ivar'>@dirname</span> <span class='op'>=</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_dirname'>dirname</span><span class='lparen'>(</span><span class='ivar'>@path</span><span class='rparen'>)</span>
+  <span class='ivar'>@db</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../../DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Table.html" title="DBF::Table (class)">Table</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="../Table.html#initialize-instance_method" title="DBF::Table#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='ivar'>@path</span><span class='rparen'>)</span>
+  <span class='ivar'>@tables</span> <span class='op'>=</span> <span class='id identifier rubyid_extract_dbc_data'>extract_dbc_data</span>
+<span class='kw'>rescue</span> <span class='const'>Errno</span><span class='op'>::</span><span class='const'>ENOENT</span>
+  <span class='id identifier rubyid_raise'>raise</span> <span class='const'><span class='object_link'><a href="../../DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../FileNotFoundError.html" title="DBF::FileNotFoundError (class)">FileNotFoundError</a></span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>file not found: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_data'>data</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+  
+</div>
+<div id="method_missing_details" class="method_details_list">
+  <h2>Dynamic Method Handling</h2>
+  <p class="notice this">
+    This class handles dynamic methods through the <tt>method_missing</tt> method
+    
+  </p>
+  
+    <div class="method_details first">
+  <h3 class="signature first" id="method_missing-instance_method">
+  
+    #<strong>method_missing</strong>(method, *args)  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>:nodoc:</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+58
+59
+60</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/database/foxpro.rb', line 58</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_method_missing'>method_missing</span><span class='lparen'>(</span><span class='id identifier rubyid_method'>method</span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span> <span class='comment'># :nodoc:
+</span>  <span class='id identifier rubyid_table_names'>table_names</span><span class='period'>.</span><span class='id identifier rubyid_index'>index</span><span class='lparen'>(</span><span class='id identifier rubyid_method'>method</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='id identifier rubyid_table'>table</span><span class='lparen'>(</span><span class='id identifier rubyid_method'>method</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='rparen'>)</span> <span class='op'>:</span> <span class='kw'>super</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+  
+</div>
+
+
+  <div id="instance_method_details" class="method_details_list">
+    <h2>Instance Method Details</h2>
+
+    
+      <div class="method_details first">
+  <h3 class="signature first" id="respond_to_missing?-instance_method">
+  
+    #<strong>respond_to_missing?</strong>(method)  &#x21d2; <tt>Boolean</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+
+  </div>
+</div>
+<div class="tags">
+  
+<p class="tag_title">Returns:</p>
+<ul class="return">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt>Boolean</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+62
+63
+64</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/database/foxpro.rb', line 62</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_respond_to_missing?'>respond_to_missing?</span><span class='lparen'>(</span><span class='id identifier rubyid_method'>method</span><span class='comma'>,</span> <span class='op'>*</span><span class='rparen'>)</span>
+  <span class='id identifier rubyid_table_names'>table_names</span><span class='period'>.</span><span class='id identifier rubyid_index'>index</span><span class='lparen'>(</span><span class='id identifier rubyid_method'>method</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='rparen'>)</span> <span class='op'>||</span> <span class='kw'>super</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="table-instance_method">
+  
+    #<strong>table</strong>(name)  &#x21d2; <tt><span class='object_link'><a href="../Table.html" title="DBF::Table (class)">DBF::Table</a></span></tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Returns table with given name</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>name</span>
+      
+      
+        <span class='type'>(<tt>String</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+<p class="tag_title">Returns:</p>
+<ul class="return">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt><span class='object_link'><a href="../Table.html" title="DBF::Table (class)">DBF::Table</a></span></tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+38
+39
+40
+41
+42</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/database/foxpro.rb', line 38</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_table'>table</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
+  <span class='const'><span class='object_link'><a href="Table.html" title="DBF::Database::Table (class)">Table</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="../Table.html#initialize-instance_method" title="DBF::Table#initialize (method)">new</a></span></span> <span class='id identifier rubyid_table_path'>table_path</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_table'>table</span><span class='op'>|</span>
+    <span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_long_names'>long_names</span> <span class='op'>=</span> <span class='ivar'>@tables</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span>
+  <span class='kw'>end</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="table_names-instance_method">
+  
+    #<strong>table_names</strong>  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+30
+31
+32</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/database/foxpro.rb', line 30</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_table_names'>table_names</span>
+  <span class='ivar'>@tables</span><span class='period'>.</span><span class='id identifier rubyid_keys'>keys</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="table_path-instance_method">
+  
+    #<strong>table_path</strong>(name)  &#x21d2; <tt>String</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Searches the database directory for the table&#39;s dbf file and returns the absolute path. Ensures case-insensitivity on any platform.</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>name</span>
+      
+      
+        <span class='type'>(<tt>String</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+<p class="tag_title">Returns:</p>
+<ul class="return">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt>String</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+<p class="tag_title">Raises:</p>
+<ul class="raise">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt><span class='object_link'><a href="../FileNotFoundError.html" title="DBF::FileNotFoundError (class)">DBF::FileNotFoundError</a></span></tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+49
+50
+51
+52
+53
+54
+55
+56</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/database/foxpro.rb', line 49</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_table_path'>table_path</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
+  <span class='id identifier rubyid_glob'>glob</span> <span class='op'>=</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='ivar'>@dirname</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'>.dbf</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
+  <span class='id identifier rubyid_path'>path</span> <span class='op'>=</span> <span class='const'>Dir</span><span class='period'>.</span><span class='id identifier rubyid_glob'>glob</span><span class='lparen'>(</span><span class='id identifier rubyid_glob'>glob</span><span class='comma'>,</span> <span class='const'>File</span><span class='op'>::</span><span class='const'>FNM_CASEFOLD</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span>
+
+  <span class='id identifier rubyid_raise'>raise</span> <span class='const'><span class='object_link'><a href="../../DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../FileNotFoundError.html" title="DBF::FileNotFoundError (class)">FileNotFoundError</a></span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>related table not found: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>unless</span> <span class='id identifier rubyid_path'>path</span> <span class='op'>&amp;&amp;</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_exist?'>exist?</span><span class='lparen'>(</span><span class='id identifier rubyid_path'>path</span><span class='rparen'>)</span>
+
+  <span class='id identifier rubyid_path'>path</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/Database/Table.html b/docs/DBF/Database/Table.html
new file mode 100644
index 0000000..99c5faa
--- /dev/null
+++ b/docs/DBF/Database/Table.html
@@ -0,0 +1,346 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Class: DBF::Database::Table
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::Database::Table";
+  relpath = '../../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../../_index.html">Index (T)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../../DBF.html" title="DBF (module)">DBF</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../Database.html" title="DBF::Database (module)">Database</a></span></span>
+     &raquo; 
+    <span class="title">Table</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Class: DBF::Database::Table
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+  <dl>
+    <dt>Inherits:</dt>
+    <dd>
+      <span class="inheritName"><span class='object_link'><a href="../Table.html" title="DBF::Table (class)">Table</a></span></span>
+      
+        <ul class="fullTree">
+          <li>Object</li>
+          
+            <li class="next"><span class='object_link'><a href="../Table.html" title="DBF::Table (class)">Table</a></span></li>
+          
+            <li class="next">DBF::Database::Table</li>
+          
+        </ul>
+        <a href="#" class="inheritanceTree">show all</a>
+      
+    </dd>
+  </dl>
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/database/foxpro.rb</dd>
+  </dl>
+  
+</div>
+
+
+
+
+  <h2>Constant Summary</h2>
+  
+  <h3 class="inherited">Constants inherited
+     from <span class='object_link'><a href="../Table.html" title="DBF::Table (class)">Table</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="../Table.html#DBASE2_HEADER_SIZE-constant" title="DBF::Table::DBASE2_HEADER_SIZE (constant)">Table::DBASE2_HEADER_SIZE</a></span>, <span class='object_link'><a href="../Table.html#DBASE3_HEADER_SIZE-constant" title="DBF::Table::DBASE3_HEADER_SIZE (constant)">Table::DBASE3_HEADER_SIZE</a></span>, <span class='object_link'><a href="../Table.html#FOXPRO_VERSIONS-constant" title="DBF::Table::FOXPRO_VERSIONS (constant)">Table::FOXPRO_VERSIONS</a></span>, <span class='object_link'><a href="../Table.html#VERSIONS-constant" title="DBF::Table::VERSIONS (constant)">Table::VERSIONS</a></span></p>
+
+  
+  
+  <h3 class="inherited">Constants included
+     from <span class='object_link'><a href="../Schema.html" title="DBF::Schema (module)">Schema</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="../Schema.html#FORMATS-constant" title="DBF::Schema::FORMATS (constant)">Schema::FORMATS</a></span>, <span class='object_link'><a href="../Schema.html#OTHER_DATA_TYPES-constant" title="DBF::Schema::OTHER_DATA_TYPES (constant)">Schema::OTHER_DATA_TYPES</a></span></p>
+
+
+  <h2>Instance Attribute Summary <small><a href="#" class="summary_toggle">collapse</a></small></h2>
+  <ul class="summary">
+    
+      <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#long_names-instance_method" title="#long_names (instance method)">#<strong>long_names</strong>  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+    
+    
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Returns the value of attribute long_names.</p>
+</div></span>
+  
+</li>
+
+    
+  </ul>
+
+
+
+  
+  
+  <h3 class="inherited">Attributes inherited from <span class='object_link'><a href="../Table.html" title="DBF::Table (class)">Table</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="../Table.html#encoding-instance_method" title="DBF::Table#encoding (method)">#encoding</a></span>, <span class='object_link'><a href="../Table.html#name-instance_method" title="DBF::Table#name (method)">#name</a></span></p>
+
+
+  
+    <h2>
+      Instance Method Summary
+      <small><a href="#" class="summary_toggle">collapse</a></small>
+    </h2>
+
+    <ul class="summary">
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#build_columns-instance_method" title="#build_columns (instance method)">#<strong>build_columns</strong>  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>:nodoc:.</p>
+</div></span>
+  
+</li>
+
+      
+    </ul>
+  
+
+
+  
+  
+  
+  
+  
+  
+  
+  
+  <h3 class="inherited">Methods inherited from <span class='object_link'><a href="../Table.html" title="DBF::Table (class)">Table</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="../Table.html#close-instance_method" title="DBF::Table#close (method)">#close</a></span>, <span class='object_link'><a href="../Table.html#closed%3F-instance_method" title="DBF::Table#closed? (method)">#closed?</a></span>, <span class='object_link'><a href="../Table.html#column_names-instance_method" title="DBF::Table#column_names (method)">#column_names</a></span>, <span class='object_link'><a href="../Table.html#columns-instance_method" title="DBF::Table#columns (method)">#columns</a></span>, <span class='object_link'><a href="../Table.html#each-instance_method" title="DBF::Table#each (method)">#each</a></span>, <span class='object_link'><a href="../Table.html#filename-instance_method" title="DBF::Table#filename (method)">#filename</a></span>, <span class='object_link'><a href="../Table.html#find-instance_method" title="DBF::Table#find (method)">#find</a></span>, <span class='object_link'><a href="../Table.html#has_memo_file%3F-instance_method" title="DBF::Table#has_memo_file? (method)">#has_memo_file?</a></span>, <span class='object_link'><a href="../Table.html#initialize-instance_method" title="DBF::Table#initialize (method)">#initialize</a></span>, <span class='object_link'><a href="../Table.html#record-instance_method" title="DBF::Table#record (method)">#record</a></span>, <span class='object_link'><a href="../Table.html#to_csv-instance_method" title="DBF::Table#to_csv (method)">#to_csv</a></span>, <span class='object_link'><a href="../Table.html#version_description-instance_method" title="DBF::Table#version_description (method)">#version_description</a></span></p>
+
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  <h3 class="inherited">Methods included from <span class='object_link'><a href="../Schema.html" title="DBF::Schema (module)">Schema</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="../Schema.html#activerecord_schema-instance_method" title="DBF::Schema#activerecord_schema (method)">#activerecord_schema</a></span>, <span class='object_link'><a href="../Schema.html#activerecord_schema_definition-instance_method" title="DBF::Schema#activerecord_schema_definition (method)">#activerecord_schema_definition</a></span>, <span class='object_link'><a href="../Schema.html#json_schema-instance_method" title="DBF::Schema#json_schema (method)">#json_schema</a></span>, <span class='object_link'><a href="../Schema.html#number_data_type-instance_method" title="DBF::Schema#number_data_type (method)">#number_data_type</a></span>, <span class='object_link'><a href="../Schema.html#schema-instance_method" title="DBF::Schema#schema (method)">#schema</a></span>, <span class='object_link'><a href="../Schema.html#schema_data_type-instance_method" title="DBF::Schema#schema_data_type (method)">#schema_data_type</a></span>, <span class='object_link'><a href="../Schema.html#schema_name-instance_method" title="DBF::Schema#schema_name (method)">#schema_name</a></span>, <span class='object_link'><a href="../Schema.html#sequel_schema-instance_method" title="DBF::Schema#sequel_schema (method)">#sequel_schema</a></span>, <span class='object_link'><a href="../Schema.html#sequel_schema_definition-instance_method" title="DBF::Schema#sequel_schema_definition (method)">#sequel_schema_definition</a></span>, <span class='object_link'><a href="../Schema.html#string_data_format-instance_method" title="DBF::Schema#string_data_format (method)">#string_data_format</a></span></p>
+
+  <div id="constructor_details" class="method_details_list">
+  <h2>Constructor Details</h2>
+  
+    <p class="notice">This class inherits a constructor from <span class='object_link'><a href="../Table.html#initialize-instance_method" title="DBF::Table#initialize (method)">DBF::Table</a></span></p>
+  
+</div>
+
+  <div id="instance_attr_details" class="attr_details">
+    <h2>Instance Attribute Details</h2>
+    
+      
+      <span id="long_names=-instance_method"></span>
+      <div class="method_details first">
+  <h3 class="signature first" id="long_names-instance_method">
+  
+    #<strong>long_names</strong>  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Returns the value of attribute long_names.</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+113
+114
+115</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/database/foxpro.rb', line 113</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_long_names'>long_names</span>
+  <span class='ivar'>@long_names</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+
+  <div id="instance_method_details" class="method_details_list">
+    <h2>Instance Method Details</h2>
+
+    
+      <div class="method_details first">
+  <h3 class="signature first" id="build_columns-instance_method">
+  
+    #<strong>build_columns</strong>  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>:nodoc:</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/database/foxpro.rb', line 115</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_build_columns'>build_columns</span> <span class='comment'># :nodoc:
+</span>  <span class='id identifier rubyid_columns'>columns</span> <span class='op'>=</span> <span class='kw'>super</span>
+
+  <span class='comment'># modify the column definitions to use the long names as the
+</span>  <span class='comment'># columnname property is readonly, recreate the column definitions
+</span>  <span class='id identifier rubyid_columns'>columns</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_column'>column</span><span class='op'>|</span>
+    <span class='id identifier rubyid_long_name'>long_name</span> <span class='op'>=</span> <span class='id identifier rubyid_long_names'>long_names</span><span class='lbracket'>[</span><span class='id identifier rubyid_columns'>columns</span><span class='period'>.</span><span class='id identifier rubyid_index'>index</span><span class='lparen'>(</span><span class='id identifier rubyid_column'>column</span><span class='rparen'>)</span><span class='rbracket'>]</span>
+    <span class='const'><span class='object_link'><a href="../Column.html" title="DBF::Column (class)">Column</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="../Column.html#initialize-instance_method" title="DBF::Column#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='kw'>self</span><span class='comma'>,</span> <span class='id identifier rubyid_long_name'>long_name</span><span class='comma'>,</span> <span class='id identifier rubyid_column'>column</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='id identifier rubyid_column'>column</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span><span class='comma'>,</span> <span class='id identifier rubyid_column'>column</span><span class='period'>.</span><span class='id identifier rubyid_decimal'>decimal</span><span class='rparen'>)</span>
+  <span class='kw'>end</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/FileNotFoundError.html b/docs/DBF/FileNotFoundError.html
new file mode 100644
index 0000000..2e6888e
--- /dev/null
+++ b/docs/DBF/FileNotFoundError.html
@@ -0,0 +1,124 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Exception: DBF::FileNotFoundError
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::FileNotFoundError";
+  relpath = '../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../_index.html">Index (F)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../DBF.html" title="DBF (module)">DBF</a></span></span>
+     &raquo; 
+    <span class="title">FileNotFoundError</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Exception: DBF::FileNotFoundError
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+  <dl>
+    <dt>Inherits:</dt>
+    <dd>
+      <span class="inheritName">StandardError</span>
+      
+        <ul class="fullTree">
+          <li>Object</li>
+          
+            <li class="next">StandardError</li>
+          
+            <li class="next">DBF::FileNotFoundError</li>
+          
+        </ul>
+        <a href="#" class="inheritanceTree">show all</a>
+      
+    </dd>
+  </dl>
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/table.rb</dd>
+  </dl>
+  
+</div>
+
+
+
+
+
+
+
+
+
+  
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/Header.html b/docs/DBF/Header.html
new file mode 100644
index 0000000..7b30ec8
--- /dev/null
+++ b/docs/DBF/Header.html
@@ -0,0 +1,723 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Class: DBF::Header
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::Header";
+  relpath = '../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../_index.html">Index (H)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../DBF.html" title="DBF (module)">DBF</a></span></span>
+     &raquo; 
+    <span class="title">Header</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Class: DBF::Header
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+  <dl>
+    <dt>Inherits:</dt>
+    <dd>
+      <span class="inheritName">Object</span>
+      
+        <ul class="fullTree">
+          <li>Object</li>
+          
+            <li class="next">DBF::Header</li>
+          
+        </ul>
+        <a href="#" class="inheritanceTree">show all</a>
+      
+    </dd>
+  </dl>
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/header.rb</dd>
+  </dl>
+  
+</div>
+
+
+
+
+
+  <h2>Instance Attribute Summary <small><a href="#" class="summary_toggle">collapse</a></small></h2>
+  <ul class="summary">
+    
+      <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#encoding-instance_method" title="#encoding (instance method)">#<strong>encoding</strong>  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+    
+      <span class="note title readonly">readonly</span>
+    
+    
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Returns the value of attribute encoding.</p>
+</div></span>
+  
+</li>
+
+    
+      <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#encoding_key-instance_method" title="#encoding_key (instance method)">#<strong>encoding_key</strong>  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+    
+      <span class="note title readonly">readonly</span>
+    
+    
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Returns the value of attribute encoding_key.</p>
+</div></span>
+  
+</li>
+
+    
+      <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#header_length-instance_method" title="#header_length (instance method)">#<strong>header_length</strong>  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+    
+      <span class="note title readonly">readonly</span>
+    
+    
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Returns the value of attribute header_length.</p>
+</div></span>
+  
+</li>
+
+    
+      <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#record_count-instance_method" title="#record_count (instance method)">#<strong>record_count</strong>  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+    
+      <span class="note title readonly">readonly</span>
+    
+    
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Returns the value of attribute record_count.</p>
+</div></span>
+  
+</li>
+
+    
+      <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#record_length-instance_method" title="#record_length (instance method)">#<strong>record_length</strong>  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+    
+      <span class="note title readonly">readonly</span>
+    
+    
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Returns the value of attribute record_length.</p>
+</div></span>
+  
+</li>
+
+    
+      <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#version-instance_method" title="#version (instance method)">#<strong>version</strong>  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+    
+      <span class="note title readonly">readonly</span>
+    
+    
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Returns the value of attribute version.</p>
+</div></span>
+  
+</li>
+
+    
+  </ul>
+
+
+
+
+  
+    <h2>
+      Instance Method Summary
+      <small><a href="#" class="summary_toggle">collapse</a></small>
+    </h2>
+
+    <ul class="summary">
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong>(data)  &#x21d2; Header </a>
+    
+
+    
+  </span>
+  
+  
+    <span class="note title constructor">constructor</span>
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>A new instance of Header.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#unpack_header-instance_method" title="#unpack_header (instance method)">#<strong>unpack_header</strong>  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'></div></span>
+  
+</li>
+
+      
+    </ul>
+  
+
+<div id="constructor_details" class="method_details_list">
+  <h2>Constructor Details</h2>
+  
+    <div class="method_details first">
+  <h3 class="signature first" id="initialize-instance_method">
+  
+    #<strong>initialize</strong>(data)  &#x21d2; <tt><span class='object_link'><a href="" title="DBF::Header (class)">Header</a></span></tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Returns a new instance of Header.</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+10
+11
+12
+13</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/header.rb', line 10</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
+  <span class='ivar'>@data</span> <span class='op'>=</span> <span class='id identifier rubyid_data'>data</span>
+  <span class='id identifier rubyid_unpack_header'>unpack_header</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+  
+</div>
+
+  <div id="instance_attr_details" class="attr_details">
+    <h2>Instance Attribute Details</h2>
+    
+      
+      <span id=""></span>
+      <div class="method_details first">
+  <h3 class="signature first" id="encoding-instance_method">
+  
+    #<strong>encoding</strong>  &#x21d2; <tt>Object</tt>  <span class="extras">(readonly)</span>
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Returns the value of attribute encoding.</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+8
+9
+10</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/header.rb', line 8</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_encoding'>encoding</span>
+  <span class='ivar'>@encoding</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      
+      <span id=""></span>
+      <div class="method_details ">
+  <h3 class="signature " id="encoding_key-instance_method">
+  
+    #<strong>encoding_key</strong>  &#x21d2; <tt>Object</tt>  <span class="extras">(readonly)</span>
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Returns the value of attribute encoding_key.</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+7
+8
+9</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/header.rb', line 7</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_encoding_key'>encoding_key</span>
+  <span class='ivar'>@encoding_key</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      
+      <span id=""></span>
+      <div class="method_details ">
+  <h3 class="signature " id="header_length-instance_method">
+  
+    #<strong>header_length</strong>  &#x21d2; <tt>Object</tt>  <span class="extras">(readonly)</span>
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Returns the value of attribute header_length.</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+5
+6
+7</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/header.rb', line 5</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_header_length'>header_length</span>
+  <span class='ivar'>@header_length</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      
+      <span id=""></span>
+      <div class="method_details ">
+  <h3 class="signature " id="record_count-instance_method">
+  
+    #<strong>record_count</strong>  &#x21d2; <tt>Object</tt>  <span class="extras">(readonly)</span>
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Returns the value of attribute record_count.</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+4
+5
+6</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/header.rb', line 4</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_record_count'>record_count</span>
+  <span class='ivar'>@record_count</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      
+      <span id=""></span>
+      <div class="method_details ">
+  <h3 class="signature " id="record_length-instance_method">
+  
+    #<strong>record_length</strong>  &#x21d2; <tt>Object</tt>  <span class="extras">(readonly)</span>
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Returns the value of attribute record_length.</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+6
+7
+8</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/header.rb', line 6</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_record_length'>record_length</span>
+  <span class='ivar'>@record_length</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      
+      <span id=""></span>
+      <div class="method_details ">
+  <h3 class="signature " id="version-instance_method">
+  
+    #<strong>version</strong>  &#x21d2; <tt>Object</tt>  <span class="extras">(readonly)</span>
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Returns the value of attribute version.</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+3
+4
+5</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/header.rb', line 3</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_version'>version</span>
+  <span class='ivar'>@version</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+
+  <div id="instance_method_details" class="method_details_list">
+    <h2>Instance Method Details</h2>
+
+    
+      <div class="method_details first">
+  <h3 class="signature first" id="unpack_header-instance_method">
+  
+    #<strong>unpack_header</strong>  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/header.rb', line 15</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_unpack_header'>unpack_header</span>
+  <span class='ivar'>@version</span> <span class='op'>=</span> <span class='ivar'>@data</span><span class='period'>.</span><span class='id identifier rubyid_unpack'>unpack</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>H2</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span>
+
+  <span class='kw'>case</span> <span class='ivar'>@version</span>
+  <span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>02</span><span class='tstring_end'>&#39;</span></span>
+    <span class='ivar'>@record_count</span><span class='comma'>,</span> <span class='ivar'>@record_length</span> <span class='op'>=</span> <span class='ivar'>@data</span><span class='period'>.</span><span class='id identifier rubyid_unpack'>unpack</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>x v x3 v</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
+    <span class='ivar'>@header_length</span> <span class='op'>=</span> <span class='int'>521</span>
+  <span class='kw'>else</span>
+    <span class='ivar'>@record_count</span><span class='comma'>,</span> <span class='ivar'>@header_length</span><span class='comma'>,</span> <span class='ivar'>@record_length</span><span class='comma'>,</span> <span class='ivar'>@encoding_key</span> <span class='op'>=</span> <span class='ivar'>@data</span><span class='period'>.</span><span class='id identifier rubyid_unpack'>unpack</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>x x3 V v2 x17 H2</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
+    <span class='ivar'>@encoding</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../DBF.html#ENCODINGS-constant" title="DBF::ENCODINGS (constant)">ENCODINGS</a></span></span><span class='lbracket'>[</span><span class='ivar'>@encoding_key</span><span class='rbracket'>]</span>
+  <span class='kw'>end</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/Memo.html b/docs/DBF/Memo.html
new file mode 100644
index 0000000..161aa52
--- /dev/null
+++ b/docs/DBF/Memo.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Module: DBF::Memo
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::Memo";
+  relpath = '../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../_index.html">Index (M)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../DBF.html" title="DBF (module)">DBF</a></span></span>
+     &raquo; 
+    <span class="title">Memo</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Module: DBF::Memo
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/memo/base.rb<span class="defines">,<br />
+  lib/dbf/memo/dbase3.rb,<br /> lib/dbf/memo/dbase4.rb,<br /> lib/dbf/memo/foxpro.rb</span>
+</dd>
+  </dl>
+  
+</div>
+
+<h2>Defined Under Namespace</h2>
+<p class="children">
+  
+    
+  
+    
+      <strong class="classes">Classes:</strong> <span class='object_link'><a href="Memo/Base.html" title="DBF::Memo::Base (class)">Base</a></span>, <span class='object_link'><a href="Memo/Dbase3.html" title="DBF::Memo::Dbase3 (class)">Dbase3</a></span>, <span class='object_link'><a href="Memo/Dbase4.html" title="DBF::Memo::Dbase4 (class)">Dbase4</a></span>, <span class='object_link'><a href="Memo/Foxpro.html" title="DBF::Memo::Foxpro (class)">Foxpro</a></span>
+    
+  
+</p>
+
+
+
+
+
+
+
+
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/Memo/Base.html b/docs/DBF/Memo/Base.html
new file mode 100644
index 0000000..e96d679
--- /dev/null
+++ b/docs/DBF/Memo/Base.html
@@ -0,0 +1,485 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Class: DBF::Memo::Base
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::Memo::Base";
+  relpath = '../../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../../_index.html">Index (B)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../../DBF.html" title="DBF (module)">DBF</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../Memo.html" title="DBF::Memo (module)">Memo</a></span></span>
+     &raquo; 
+    <span class="title">Base</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Class: DBF::Memo::Base
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+  <dl>
+    <dt>Inherits:</dt>
+    <dd>
+      <span class="inheritName">Object</span>
+      
+        <ul class="fullTree">
+          <li>Object</li>
+          
+            <li class="next">DBF::Memo::Base</li>
+          
+        </ul>
+        <a href="#" class="inheritanceTree">show all</a>
+      
+    </dd>
+  </dl>
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/memo/base.rb</dd>
+  </dl>
+  
+</div>
+
+<div id="subclasses">
+  <h2>Direct Known Subclasses</h2>
+  <p class="children"><span class='object_link'><a href="Dbase3.html" title="DBF::Memo::Dbase3 (class)">Dbase3</a></span>, <span class='object_link'><a href="Dbase4.html" title="DBF::Memo::Dbase4 (class)">Dbase4</a></span>, <span class='object_link'><a href="Foxpro.html" title="DBF::Memo::Foxpro (class)">Foxpro</a></span></p>
+</div>
+
+  
+    <h2>
+      Constant Summary
+      <small><a href="#" class="constants_summary_toggle">collapse</a></small>
+    </h2>
+
+    <dl class="constants">
+      
+        <dt id="BLOCK_HEADER_SIZE-constant" class="">BLOCK_HEADER_SIZE =
+          
+        </dt>
+        <dd><pre class="code"><span class='int'>8</span></pre></dd>
+      
+        <dt id="BLOCK_SIZE-constant" class="">BLOCK_SIZE =
+          
+        </dt>
+        <dd><pre class="code"><span class='int'>512</span></pre></dd>
+      
+    </dl>
+  
+
+
+
+
+
+
+
+  
+    <h2>
+      Class Method Summary
+      <small><a href="#" class="summary_toggle">collapse</a></small>
+    </h2>
+
+    <ul class="summary">
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#open-class_method" title="open (class method)">.<strong>open</strong>(filename, version)  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'></div></span>
+  
+</li>
+
+      
+    </ul>
+  
+    <h2>
+      Instance Method Summary
+      <small><a href="#" class="summary_toggle">collapse</a></small>
+    </h2>
+
+    <ul class="summary">
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#close-instance_method" title="#close (instance method)">#<strong>close</strong>  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'></div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#closed%3F-instance_method" title="#closed? (instance method)">#<strong>closed?</strong>  &#x21d2; Boolean </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'></div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#get-instance_method" title="#get (instance method)">#<strong>get</strong>(start_block)  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'></div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong>(data, version)  &#x21d2; Base </a>
+    
+
+    
+  </span>
+  
+  
+    <span class="note title constructor">constructor</span>
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>A new instance of Base.</p>
+</div></span>
+  
+</li>
+
+      
+    </ul>
+  
+
+<div id="constructor_details" class="method_details_list">
+  <h2>Constructor Details</h2>
+  
+    <div class="method_details first">
+  <h3 class="signature first" id="initialize-instance_method">
+  
+    #<strong>initialize</strong>(data, version)  &#x21d2; <tt><span class='object_link'><a href="" title="DBF::Memo::Base (class)">Base</a></span></tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Returns a new instance of Base.</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+11
+12
+13
+14</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/memo/base.rb', line 11</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='comma'>,</span> <span class='id identifier rubyid_version'>version</span><span class='rparen'>)</span>
+  <span class='ivar'>@data</span> <span class='op'>=</span> <span class='id identifier rubyid_data'>data</span>
+  <span class='ivar'>@version</span> <span class='op'>=</span> <span class='id identifier rubyid_version'>version</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+  
+</div>
+
+
+  <div id="class_method_details" class="method_details_list">
+    <h2>Class Method Details</h2>
+
+    
+      <div class="method_details first">
+  <h3 class="signature first" id="open-class_method">
+  
+    .<strong>open</strong>(filename, version)  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+7
+8
+9</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/memo/base.rb', line 7</span>
+
+<span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_open'>open</span><span class='lparen'>(</span><span class='id identifier rubyid_filename'>filename</span><span class='comma'>,</span> <span class='id identifier rubyid_version'>version</span><span class='rparen'>)</span>
+  <span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_open'>open</span><span class='lparen'>(</span><span class='id identifier rubyid_filename'>filename</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>rb</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='comma'>,</span> <span class='id identifier rubyid_version'>version</span><span class='rparen'>)</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+  <div id="instance_method_details" class="method_details_list">
+    <h2>Instance Method Details</h2>
+
+    
+      <div class="method_details first">
+  <h3 class="signature first" id="close-instance_method">
+  
+    #<strong>close</strong>  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+22
+23
+24</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/memo/base.rb', line 22</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_close'>close</span>
+  <span class='ivar'>@data</span><span class='period'>.</span><span class='id identifier rubyid_close'>close</span> <span class='op'>&amp;&amp;</span> <span class='ivar'>@data</span><span class='period'>.</span><span class='id identifier rubyid_closed?'>closed?</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="closed?-instance_method">
+  
+    #<strong>closed?</strong>  &#x21d2; <tt>Boolean</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+
+  </div>
+</div>
+<div class="tags">
+  
+<p class="tag_title">Returns:</p>
+<ul class="return">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt>Boolean</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+26
+27
+28</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/memo/base.rb', line 26</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_closed?'>closed?</span>
+  <span class='ivar'>@data</span><span class='period'>.</span><span class='id identifier rubyid_closed?'>closed?</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="get-instance_method">
+  
+    #<strong>get</strong>(start_block)  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+16
+17
+18
+19
+20</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/memo/base.rb', line 16</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_get'>get</span><span class='lparen'>(</span><span class='id identifier rubyid_start_block'>start_block</span><span class='rparen'>)</span>
+  <span class='kw'>return</span> <span class='kw'>nil</span> <span class='kw'>unless</span> <span class='id identifier rubyid_start_block'>start_block</span> <span class='op'>&gt;</span> <span class='int'>0</span>
+
+  <span class='id identifier rubyid_build_memo'>build_memo</span> <span class='id identifier rubyid_start_block'>start_block</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/Memo/Dbase3.html b/docs/DBF/Memo/Dbase3.html
new file mode 100644
index 0000000..8b1a6eb
--- /dev/null
+++ b/docs/DBF/Memo/Dbase3.html
@@ -0,0 +1,242 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Class: DBF::Memo::Dbase3
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::Memo::Dbase3";
+  relpath = '../../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../../_index.html">Index (D)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../../DBF.html" title="DBF (module)">DBF</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../Memo.html" title="DBF::Memo (module)">Memo</a></span></span>
+     &raquo; 
+    <span class="title">Dbase3</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Class: DBF::Memo::Dbase3
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+  <dl>
+    <dt>Inherits:</dt>
+    <dd>
+      <span class="inheritName"><span class='object_link'><a href="Base.html" title="DBF::Memo::Base (class)">Base</a></span></span>
+      
+        <ul class="fullTree">
+          <li>Object</li>
+          
+            <li class="next"><span class='object_link'><a href="Base.html" title="DBF::Memo::Base (class)">Base</a></span></li>
+          
+            <li class="next">DBF::Memo::Dbase3</li>
+          
+        </ul>
+        <a href="#" class="inheritanceTree">show all</a>
+      
+    </dd>
+  </dl>
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/memo/dbase3.rb</dd>
+  </dl>
+  
+</div>
+
+
+
+
+  <h2>Constant Summary</h2>
+  
+  <h3 class="inherited">Constants inherited
+     from <span class='object_link'><a href="Base.html" title="DBF::Memo::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#BLOCK_HEADER_SIZE-constant" title="DBF::Memo::Base::BLOCK_HEADER_SIZE (constant)">Base::BLOCK_HEADER_SIZE</a></span>, <span class='object_link'><a href="Base.html#BLOCK_SIZE-constant" title="DBF::Memo::Base::BLOCK_SIZE (constant)">Base::BLOCK_SIZE</a></span></p>
+
+
+
+
+
+  
+    <h2>
+      Instance Method Summary
+      <small><a href="#" class="summary_toggle">collapse</a></small>
+    </h2>
+
+    <ul class="summary">
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#build_memo-instance_method" title="#build_memo (instance method)">#<strong>build_memo</strong>(start_block)  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>:nodoc:.</p>
+</div></span>
+  
+</li>
+
+      
+    </ul>
+  
+
+
+  
+  
+  
+  
+  
+  
+  
+  
+  <h3 class="inherited">Methods inherited from <span class='object_link'><a href="Base.html" title="DBF::Memo::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#close-instance_method" title="DBF::Memo::Base#close (method)">#close</a></span>, <span class='object_link'><a href="Base.html#closed%3F-instance_method" title="DBF::Memo::Base#closed? (method)">#closed?</a></span>, <span class='object_link'><a href="Base.html#get-instance_method" title="DBF::Memo::Base#get (method)">#get</a></span>, <span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::Memo::Base#initialize (method)">#initialize</a></span>, <span class='object_link'><a href="Base.html#open-class_method" title="DBF::Memo::Base.open (method)">open</a></span></p>
+<div id="constructor_details" class="method_details_list">
+  <h2>Constructor Details</h2>
+  
+    <p class="notice">This class inherits a constructor from <span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::Memo::Base#initialize (method)">DBF::Memo::Base</a></span></p>
+  
+</div>
+
+
+  <div id="instance_method_details" class="method_details_list">
+    <h2>Instance Method Details</h2>
+
+    
+      <div class="method_details first">
+  <h3 class="signature first" id="build_memo-instance_method">
+  
+    #<strong>build_memo</strong>(start_block)  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>:nodoc:</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/memo/dbase3.rb', line 4</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_build_memo'>build_memo</span><span class='lparen'>(</span><span class='id identifier rubyid_start_block'>start_block</span><span class='rparen'>)</span> <span class='comment'># :nodoc:
+</span>  <span class='ivar'>@data</span><span class='period'>.</span><span class='id identifier rubyid_seek'>seek</span> <span class='id identifier rubyid_offset'>offset</span><span class='lparen'>(</span><span class='id identifier rubyid_start_block'>start_block</span><span class='rparen'>)</span>
+  <span class='id identifier rubyid_memo_string'>memo_string</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span>
+  <span class='id identifier rubyid_loop'>loop</span> <span class='kw'>do</span>
+    <span class='id identifier rubyid_block'>block</span> <span class='op'>=</span> <span class='ivar'>@data</span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Base.html#BLOCK_SIZE-constant" title="DBF::Memo::Base::BLOCK_SIZE (constant)">BLOCK_SIZE</a></span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_gsub'>gsub</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>(\000|\032)</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
+    <span class='id identifier rubyid_memo_string'>memo_string</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_block'>block</span>
+    <span class='kw'>break</span> <span class='kw'>if</span> <span class='id identifier rubyid_block'>block</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span> <span class='op'>&lt;</span> <span class='const'><span class='object_link'><a href="Base.html#BLOCK_SIZE-constant" title="DBF::Memo::Base::BLOCK_SIZE (constant)">BLOCK_SIZE</a></span></span>
+  <span class='kw'>end</span>
+  <span class='id identifier rubyid_memo_string'>memo_string</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/Memo/Dbase4.html b/docs/DBF/Memo/Dbase4.html
new file mode 100644
index 0000000..f98de7f
--- /dev/null
+++ b/docs/DBF/Memo/Dbase4.html
@@ -0,0 +1,230 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Class: DBF::Memo::Dbase4
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::Memo::Dbase4";
+  relpath = '../../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../../_index.html">Index (D)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../../DBF.html" title="DBF (module)">DBF</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../Memo.html" title="DBF::Memo (module)">Memo</a></span></span>
+     &raquo; 
+    <span class="title">Dbase4</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Class: DBF::Memo::Dbase4
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+  <dl>
+    <dt>Inherits:</dt>
+    <dd>
+      <span class="inheritName"><span class='object_link'><a href="Base.html" title="DBF::Memo::Base (class)">Base</a></span></span>
+      
+        <ul class="fullTree">
+          <li>Object</li>
+          
+            <li class="next"><span class='object_link'><a href="Base.html" title="DBF::Memo::Base (class)">Base</a></span></li>
+          
+            <li class="next">DBF::Memo::Dbase4</li>
+          
+        </ul>
+        <a href="#" class="inheritanceTree">show all</a>
+      
+    </dd>
+  </dl>
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/memo/dbase4.rb</dd>
+  </dl>
+  
+</div>
+
+
+
+
+  <h2>Constant Summary</h2>
+  
+  <h3 class="inherited">Constants inherited
+     from <span class='object_link'><a href="Base.html" title="DBF::Memo::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#BLOCK_HEADER_SIZE-constant" title="DBF::Memo::Base::BLOCK_HEADER_SIZE (constant)">Base::BLOCK_HEADER_SIZE</a></span>, <span class='object_link'><a href="Base.html#BLOCK_SIZE-constant" title="DBF::Memo::Base::BLOCK_SIZE (constant)">Base::BLOCK_SIZE</a></span></p>
+
+
+
+
+
+  
+    <h2>
+      Instance Method Summary
+      <small><a href="#" class="summary_toggle">collapse</a></small>
+    </h2>
+
+    <ul class="summary">
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#build_memo-instance_method" title="#build_memo (instance method)">#<strong>build_memo</strong>(start_block)  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>:nodoc:.</p>
+</div></span>
+  
+</li>
+
+      
+    </ul>
+  
+
+
+  
+  
+  
+  
+  
+  
+  
+  
+  <h3 class="inherited">Methods inherited from <span class='object_link'><a href="Base.html" title="DBF::Memo::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#close-instance_method" title="DBF::Memo::Base#close (method)">#close</a></span>, <span class='object_link'><a href="Base.html#closed%3F-instance_method" title="DBF::Memo::Base#closed? (method)">#closed?</a></span>, <span class='object_link'><a href="Base.html#get-instance_method" title="DBF::Memo::Base#get (method)">#get</a></span>, <span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::Memo::Base#initialize (method)">#initialize</a></span>, <span class='object_link'><a href="Base.html#open-class_method" title="DBF::Memo::Base.open (method)">open</a></span></p>
+<div id="constructor_details" class="method_details_list">
+  <h2>Constructor Details</h2>
+  
+    <p class="notice">This class inherits a constructor from <span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::Memo::Base#initialize (method)">DBF::Memo::Base</a></span></p>
+  
+</div>
+
+
+  <div id="instance_method_details" class="method_details_list">
+    <h2>Instance Method Details</h2>
+
+    
+      <div class="method_details first">
+  <h3 class="signature first" id="build_memo-instance_method">
+  
+    #<strong>build_memo</strong>(start_block)  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>:nodoc:</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+4
+5
+6
+7</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/memo/dbase4.rb', line 4</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_build_memo'>build_memo</span><span class='lparen'>(</span><span class='id identifier rubyid_start_block'>start_block</span><span class='rparen'>)</span> <span class='comment'># :nodoc:
+</span>  <span class='ivar'>@data</span><span class='period'>.</span><span class='id identifier rubyid_seek'>seek</span> <span class='id identifier rubyid_offset'>offset</span><span class='lparen'>(</span><span class='id identifier rubyid_start_block'>start_block</span><span class='rparen'>)</span>
+  <span class='ivar'>@data</span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='ivar'>@data</span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Base.html#BLOCK_HEADER_SIZE-constant" title="DBF::Memo::Base::BLOCK_HEADER_SIZE (constant)">BLOCK_HEADER_SIZE</a></span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_unpack1'>unpack1</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>x4L</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='rparen'>)</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/Memo/Foxpro.html b/docs/DBF/Memo/Foxpro.html
new file mode 100644
index 0000000..d24819e
--- /dev/null
+++ b/docs/DBF/Memo/Foxpro.html
@@ -0,0 +1,268 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Class: DBF::Memo::Foxpro
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::Memo::Foxpro";
+  relpath = '../../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../../_index.html">Index (F)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../../DBF.html" title="DBF (module)">DBF</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../Memo.html" title="DBF::Memo (module)">Memo</a></span></span>
+     &raquo; 
+    <span class="title">Foxpro</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Class: DBF::Memo::Foxpro
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+  <dl>
+    <dt>Inherits:</dt>
+    <dd>
+      <span class="inheritName"><span class='object_link'><a href="Base.html" title="DBF::Memo::Base (class)">Base</a></span></span>
+      
+        <ul class="fullTree">
+          <li>Object</li>
+          
+            <li class="next"><span class='object_link'><a href="Base.html" title="DBF::Memo::Base (class)">Base</a></span></li>
+          
+            <li class="next">DBF::Memo::Foxpro</li>
+          
+        </ul>
+        <a href="#" class="inheritanceTree">show all</a>
+      
+    </dd>
+  </dl>
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/memo/foxpro.rb</dd>
+  </dl>
+  
+</div>
+
+
+  
+    <h2>
+      Constant Summary
+      <small><a href="#" class="constants_summary_toggle">collapse</a></small>
+    </h2>
+
+    <dl class="constants">
+      
+        <dt id="FPT_HEADER_SIZE-constant" class="">FPT_HEADER_SIZE =
+          
+        </dt>
+        <dd><pre class="code"><span class='int'>512</span></pre></dd>
+      
+    </dl>
+  
+
+
+
+  
+  
+  <h3 class="inherited">Constants inherited
+     from <span class='object_link'><a href="Base.html" title="DBF::Memo::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#BLOCK_HEADER_SIZE-constant" title="DBF::Memo::Base::BLOCK_HEADER_SIZE (constant)">Base::BLOCK_HEADER_SIZE</a></span>, <span class='object_link'><a href="Base.html#BLOCK_SIZE-constant" title="DBF::Memo::Base::BLOCK_SIZE (constant)">Base::BLOCK_SIZE</a></span></p>
+
+
+
+
+
+  
+    <h2>
+      Instance Method Summary
+      <small><a href="#" class="summary_toggle">collapse</a></small>
+    </h2>
+
+    <ul class="summary">
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#build_memo-instance_method" title="#build_memo (instance method)">#<strong>build_memo</strong>(start_block)  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>:nodoc:.</p>
+</div></span>
+  
+</li>
+
+      
+    </ul>
+  
+
+
+  
+  
+  
+  
+  
+  
+  
+  
+  <h3 class="inherited">Methods inherited from <span class='object_link'><a href="Base.html" title="DBF::Memo::Base (class)">Base</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Base.html#close-instance_method" title="DBF::Memo::Base#close (method)">#close</a></span>, <span class='object_link'><a href="Base.html#closed%3F-instance_method" title="DBF::Memo::Base#closed? (method)">#closed?</a></span>, <span class='object_link'><a href="Base.html#get-instance_method" title="DBF::Memo::Base#get (method)">#get</a></span>, <span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::Memo::Base#initialize (method)">#initialize</a></span>, <span class='object_link'><a href="Base.html#open-class_method" title="DBF::Memo::Base.open (method)">open</a></span></p>
+<div id="constructor_details" class="method_details_list">
+  <h2>Constructor Details</h2>
+  
+    <p class="notice">This class inherits a constructor from <span class='object_link'><a href="Base.html#initialize-instance_method" title="DBF::Memo::Base#initialize (method)">DBF::Memo::Base</a></span></p>
+  
+</div>
+
+
+  <div id="instance_method_details" class="method_details_list">
+    <h2>Instance Method Details</h2>
+
+    
+      <div class="method_details first">
+  <h3 class="signature first" id="build_memo-instance_method">
+  
+    #<strong>build_memo</strong>(start_block)  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>:nodoc:</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/memo/foxpro.rb', line 6</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_build_memo'>build_memo</span><span class='lparen'>(</span><span class='id identifier rubyid_start_block'>start_block</span><span class='rparen'>)</span> <span class='comment'># :nodoc:
+</span>  <span class='ivar'>@data</span><span class='period'>.</span><span class='id identifier rubyid_seek'>seek</span> <span class='id identifier rubyid_offset'>offset</span><span class='lparen'>(</span><span class='id identifier rubyid_start_block'>start_block</span><span class='rparen'>)</span>
+
+  <span class='id identifier rubyid_memo_type'>memo_type</span><span class='comma'>,</span> <span class='id identifier rubyid_memo_size'>memo_size</span><span class='comma'>,</span> <span class='id identifier rubyid_memo_string'>memo_string</span> <span class='op'>=</span> <span class='ivar'>@data</span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='id identifier rubyid_block_size'>block_size</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_unpack'>unpack</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>NNa*</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
+  <span class='kw'>return</span> <span class='kw'>nil</span> <span class='kw'>unless</span> <span class='id identifier rubyid_memo_type'>memo_type</span> <span class='op'>==</span> <span class='int'>1</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_memo_size'>memo_size</span> <span class='op'>&gt;</span> <span class='int'>0</span>
+
+  <span class='kw'>if</span> <span class='id identifier rubyid_memo_size'>memo_size</span> <span class='op'>&gt;</span> <span class='id identifier rubyid_block_content_size'>block_content_size</span>
+    <span class='id identifier rubyid_memo_string'>memo_string</span> <span class='op'>&lt;&lt;</span> <span class='ivar'>@data</span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='id identifier rubyid_content_size'>content_size</span><span class='lparen'>(</span><span class='id identifier rubyid_memo_size'>memo_size</span><span class='rparen'>)</span><span class='rparen'>)</span>
+  <span class='kw'>else</span>
+    <span class='id identifier rubyid_memo_string'>memo_string</span> <span class='op'>=</span> <span class='id identifier rubyid_memo_string'>memo_string</span><span class='lbracket'>[</span><span class='int'>0</span><span class='comma'>,</span> <span class='id identifier rubyid_memo_size'>memo_size</span><span class='rbracket'>]</span>
+  <span class='kw'>end</span>
+  <span class='id identifier rubyid_memo_string'>memo_string</span>
+<span class='kw'>rescue</span> <span class='const'>StandardError</span>
+  <span class='kw'>nil</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/NoColumnsDefined.html b/docs/DBF/NoColumnsDefined.html
new file mode 100644
index 0000000..647d5b4
--- /dev/null
+++ b/docs/DBF/NoColumnsDefined.html
@@ -0,0 +1,124 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Exception: DBF::NoColumnsDefined
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::NoColumnsDefined";
+  relpath = '../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../_index.html">Index (N)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../DBF.html" title="DBF (module)">DBF</a></span></span>
+     &raquo; 
+    <span class="title">NoColumnsDefined</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Exception: DBF::NoColumnsDefined
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+  <dl>
+    <dt>Inherits:</dt>
+    <dd>
+      <span class="inheritName">StandardError</span>
+      
+        <ul class="fullTree">
+          <li>Object</li>
+          
+            <li class="next">StandardError</li>
+          
+            <li class="next">DBF::NoColumnsDefined</li>
+          
+        </ul>
+        <a href="#" class="inheritanceTree">show all</a>
+      
+    </dd>
+  </dl>
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/table.rb</dd>
+  </dl>
+  
+</div>
+
+
+
+
+
+
+
+
+
+  
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/Record.html b/docs/DBF/Record.html
new file mode 100644
index 0000000..10eb445
--- /dev/null
+++ b/docs/DBF/Record.html
@@ -0,0 +1,773 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Class: DBF::Record
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::Record";
+  relpath = '../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../_index.html">Index (R)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../DBF.html" title="DBF (module)">DBF</a></span></span>
+     &raquo; 
+    <span class="title">Record</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Class: DBF::Record
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+  <dl>
+    <dt>Inherits:</dt>
+    <dd>
+      <span class="inheritName">Object</span>
+      
+        <ul class="fullTree">
+          <li>Object</li>
+          
+            <li class="next">DBF::Record</li>
+          
+        </ul>
+        <a href="#" class="inheritanceTree">show all</a>
+      
+    </dd>
+  </dl>
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/record.rb</dd>
+  </dl>
+  
+</div>
+
+<h2>Overview</h2><div class="docstring">
+  <div class="discussion">
+    
+<p>An instance of DBF::Record represents a row in the DBF file</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div>
+
+
+
+
+
+
+  
+    <h2>
+      Instance Method Summary
+      <small><a href="#" class="summary_toggle">collapse</a></small>
+    </h2>
+
+    <ul class="summary">
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#==-instance_method" title="#== (instance method)">#<strong>==</strong>(other)  &#x21d2; Boolean </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Equality.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#[]-instance_method" title="#[] (instance method)">#<strong>[]</strong>(name)  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Reads attributes by column name.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#attributes-instance_method" title="#attributes (instance method)">#<strong>attributes</strong>  &#x21d2; Hash </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Record attributes.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong>(data, columns, version, memo)  &#x21d2; Record </a>
+    
+
+    
+  </span>
+  
+  
+    <span class="note title constructor">constructor</span>
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Initialize a new DBF::Record.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#match%3F-instance_method" title="#match? (instance method)">#<strong>match?</strong>(options)  &#x21d2; Boolean </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Do all search parameters match?.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#to_a-instance_method" title="#to_a (instance method)">#<strong>to_a</strong>  &#x21d2; Array </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Maps a row to an array of values.</p>
+</div></span>
+  
+</li>
+
+      
+    </ul>
+  
+
+<div id="constructor_details" class="method_details_list">
+  <h2>Constructor Details</h2>
+  
+    <div class="method_details first">
+  <h3 class="signature first" id="initialize-instance_method">
+  
+    #<strong>initialize</strong>(data, columns, version, memo)  &#x21d2; <tt><span class='object_link'><a href="" title="DBF::Record (class)">Record</a></span></tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Initialize a new DBF::Record</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>data</span>
+      
+      
+        <span class='type'>(<tt>String</tt>, <tt>StringIO</tt>)</span>
+      
+      
+      
+        &mdash;
+        <div class='inline'>
+<p>data</p>
+</div>
+      
+    </li>
+  
+    <li>
+      
+        <span class='name'>columns</span>
+      
+      
+        <span class='type'>(<tt><span class='object_link'><a href="Column.html" title="DBF::Column (class)">Column</a></span></tt>)</span>
+      
+      
+      
+    </li>
+  
+    <li>
+      
+        <span class='name'>version</span>
+      
+      
+        <span class='type'>(<tt>String</tt>)</span>
+      
+      
+      
+    </li>
+  
+    <li>
+      
+        <span class='name'>memo</span>
+      
+      
+        <span class='type'>(<tt><span class='object_link'><a href="Memo.html" title="DBF::Memo (module)">DBF::Memo</a></span></tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+10
+11
+12
+13
+14
+15</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/record.rb', line 10</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='comma'>,</span> <span class='id identifier rubyid_columns'>columns</span><span class='comma'>,</span> <span class='id identifier rubyid_version'>version</span><span class='comma'>,</span> <span class='id identifier rubyid_memo'>memo</span><span class='rparen'>)</span>
+  <span class='ivar'>@data</span> <span class='op'>=</span> <span class='const'>StringIO</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
+  <span class='ivar'>@columns</span> <span class='op'>=</span> <span class='id identifier rubyid_columns'>columns</span>
+  <span class='ivar'>@version</span> <span class='op'>=</span> <span class='id identifier rubyid_version'>version</span>
+  <span class='ivar'>@memo</span> <span class='op'>=</span> <span class='id identifier rubyid_memo'>memo</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+  
+</div>
+<div id="method_missing_details" class="method_details_list">
+  <h2>Dynamic Method Handling</h2>
+  <p class="notice this">
+    This class handles dynamic methods through the <tt>method_missing</tt> method
+    
+  </p>
+  
+    <div class="method_details first">
+  <h3 class="signature first" id="method_missing-instance_method">
+  
+    #<strong>method_missing</strong>(method, *args)  &#x21d2; <tt>Object</tt>  <span class="extras">(private)</span>
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>:nodoc:</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+90
+91
+92
+93
+94
+95
+96</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/record.rb', line 90</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_method_missing'>method_missing</span><span class='lparen'>(</span><span class='id identifier rubyid_method'>method</span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span> <span class='comment'># :nodoc:
+</span>  <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_index'>index</span> <span class='op'>=</span> <span class='id identifier rubyid_underscored_column_names'>underscored_column_names</span><span class='period'>.</span><span class='id identifier rubyid_index'>index</span><span class='lparen'>(</span><span class='id identifier rubyid_method'>method</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='rparen'>)</span><span class='rparen'>)</span>
+    <span class='id identifier rubyid_attributes'>attributes</span><span class='lbracket'>[</span><span class='ivar'>@columns</span><span class='lbracket'>[</span><span class='id identifier rubyid_index'>index</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span>
+  <span class='kw'>else</span>
+    <span class='kw'>super</span>
+  <span class='kw'>end</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+  
+</div>
+
+
+  <div id="instance_method_details" class="method_details_list">
+    <h2>Instance Method Details</h2>
+
+    
+      <div class="method_details first">
+  <h3 class="signature first" id="==-instance_method">
+  
+    #<strong>==</strong>(other)  &#x21d2; <tt>Boolean</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Equality</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>other</span>
+      
+      
+        <span class='type'>(<tt><span class='object_link'><a href="" title="DBF::Record (class)">DBF::Record</a></span></tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+<p class="tag_title">Returns:</p>
+<ul class="return">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt>Boolean</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+21
+22
+23</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/record.rb', line 21</span>
+
+<span class='kw'>def</span> <span class='op'>==</span><span class='lparen'>(</span><span class='id identifier rubyid_other'>other</span><span class='rparen'>)</span>
+  <span class='id identifier rubyid_other'>other</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:attributes</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_other'>other</span><span class='period'>.</span><span class='id identifier rubyid_attributes'>attributes</span> <span class='op'>==</span> <span class='id identifier rubyid_attributes'>attributes</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="[]-instance_method">
+  
+    #<strong>[]</strong>(name)  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Reads attributes by column name</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>name</span>
+      
+      
+        <span class='type'>(<tt>String</tt>, <tt>Symbol</tt>)</span>
+      
+      
+      
+        &mdash;
+        <div class='inline'>
+<p>key</p>
+</div>
+      
+    </li>
+  
+</ul>
+
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+28
+29
+30
+31
+32
+33
+34
+35</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/record.rb', line 28</span>
+
+<span class='kw'>def</span> <span class='op'>[]</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
+  <span class='id identifier rubyid_key'>key</span> <span class='op'>=</span> <span class='id identifier rubyid_name'>name</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span>
+  <span class='kw'>if</span> <span class='id identifier rubyid_attributes'>attributes</span><span class='period'>.</span><span class='id identifier rubyid_key?'>key?</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
+    <span class='id identifier rubyid_attributes'>attributes</span><span class='lbracket'>[</span><span class='id identifier rubyid_key'>key</span><span class='rbracket'>]</span>
+  <span class='kw'>elsif</span> <span class='id identifier rubyid_index'>index</span> <span class='op'>=</span> <span class='id identifier rubyid_underscored_column_names'>underscored_column_names</span><span class='period'>.</span><span class='id identifier rubyid_index'>index</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
+    <span class='id identifier rubyid_attributes'>attributes</span><span class='lbracket'>[</span><span class='ivar'>@columns</span><span class='lbracket'>[</span><span class='id identifier rubyid_index'>index</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span>
+  <span class='kw'>end</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="attributes-instance_method">
+  
+    #<strong>attributes</strong>  &#x21d2; <tt>Hash</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Record attributes</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+<p class="tag_title">Returns:</p>
+<ul class="return">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt>Hash</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+40
+41
+42</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/record.rb', line 40</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_attributes'>attributes</span>
+  <span class='ivar'>@attributes</span> <span class='op'>||=</span> <span class='const'>Hash</span><span class='lbracket'>[</span><span class='id identifier rubyid_attribute_map'>attribute_map</span><span class='rbracket'>]</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="match?-instance_method">
+  
+    #<strong>match?</strong>(options)  &#x21d2; <tt>Boolean</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Do all search parameters match?</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>options</span>
+      
+      
+        <span class='type'>(<tt>Hash</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+<p class="tag_title">Returns:</p>
+<ul class="return">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt>Boolean</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+48
+49
+50</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/record.rb', line 48</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_match?'>match?</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
+  <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_all?'>all?</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span><span class='op'>|</span> <span class='kw'>self</span><span class='lbracket'>[</span><span class='id identifier rubyid_key'>key</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='id identifier rubyid_value'>value</span> <span class='rbrace'>}</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="to_a-instance_method">
+  
+    #<strong>to_a</strong>  &#x21d2; <tt>Array</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Maps a row to an array of values</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+<p class="tag_title">Returns:</p>
+<ul class="return">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt>Array</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+55
+56
+57</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/record.rb', line 55</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_to_a'>to_a</span>
+  <span class='ivar'>@columns</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_column'>column</span><span class='op'>|</span> <span class='id identifier rubyid_attributes'>attributes</span><span class='lbracket'>[</span><span class='id identifier rubyid_column'>column</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='rbrace'>}</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/Schema.html b/docs/DBF/Schema.html
new file mode 100644
index 0000000..a87f2fc
--- /dev/null
+++ b/docs/DBF/Schema.html
@@ -0,0 +1,980 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Module: DBF::Schema
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::Schema";
+  relpath = '../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../_index.html">Index (S)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../DBF.html" title="DBF (module)">DBF</a></span></span>
+     &raquo; 
+    <span class="title">Schema</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Module: DBF::Schema
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+
+  
+  
+  
+  
+  
+
+  
+  <dl>
+    <dt>Included in:</dt>
+    <dd><span class='object_link'><a href="Table.html" title="DBF::Table (class)">Table</a></span></dd>
+  </dl>
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/schema.rb</dd>
+  </dl>
+  
+</div>
+
+<h2>Overview</h2><div class="docstring">
+  <div class="discussion">
+    
+<p>The Schema module is mixin for the Table class</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div>
+  
+    <h2>
+      Constant Summary
+      <small><a href="#" class="constants_summary_toggle">collapse</a></small>
+    </h2>
+
+    <dl class="constants">
+      
+        <dt id="FORMATS-constant" class="">FORMATS =
+          
+        </dt>
+        <dd><pre class="code"><span class='lbracket'>[</span><span class='symbol'>:activerecord</span><span class='comma'>,</span> <span class='symbol'>:json</span><span class='comma'>,</span> <span class='symbol'>:sequel</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_freeze'>freeze</span></pre></dd>
+      
+        <dt id="OTHER_DATA_TYPES-constant" class="">OTHER_DATA_TYPES =
+          
+        </dt>
+        <dd><pre class="code"><span class='lbrace'>{</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Y</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>:decimal, :precision =&gt; 15, :scale =&gt; 4</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>D</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>:date</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>T</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>:datetime</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>L</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>:boolean</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>M</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>:text</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>B</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>:binary</span><span class='tstring_end'>&#39;</span></span>
+<span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_freeze'>freeze</span></pre></dd>
+      
+    </dl>
+  
+
+
+
+
+
+
+
+  
+    <h2>
+      Instance Method Summary
+      <small><a href="#" class="summary_toggle">collapse</a></small>
+    </h2>
+
+    <ul class="summary">
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#activerecord_schema-instance_method" title="#activerecord_schema (instance method)">#<strong>activerecord_schema</strong>(_table_only = false)  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>:nodoc:.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#activerecord_schema_definition-instance_method" title="#activerecord_schema_definition (instance method)">#<strong>activerecord_schema_definition</strong>(column)  &#x21d2; String </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>ActiveRecord schema definition.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#json_schema-instance_method" title="#json_schema (instance method)">#<strong>json_schema</strong>(_table_only = false)  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>:nodoc:.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#number_data_type-instance_method" title="#number_data_type (instance method)">#<strong>number_data_type</strong>(column)  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'></div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#schema-instance_method" title="#schema (instance method)">#<strong>schema</strong>(format = :activerecord, table_only = false)  &#x21d2; String </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Generate an ActiveRecord::Schema.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#schema_data_type-instance_method" title="#schema_data_type (instance method)">#<strong>schema_data_type</strong>(column, format = :activerecord)  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>:nodoc:.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#schema_name-instance_method" title="#schema_name (instance method)">#<strong>schema_name</strong>(format)  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>:nodoc:.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#sequel_schema-instance_method" title="#sequel_schema (instance method)">#<strong>sequel_schema</strong>(table_only = false)  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>:nodoc:.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#sequel_schema_definition-instance_method" title="#sequel_schema_definition (instance method)">#<strong>sequel_schema_definition</strong>(column)  &#x21d2; String </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Sequel schema definition.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#string_data_format-instance_method" title="#string_data_format (instance method)">#<strong>string_data_format</strong>(format, column)  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'></div></span>
+  
+</li>
+
+      
+    </ul>
+  
+
+
+
+  <div id="instance_method_details" class="method_details_list">
+    <h2>Instance Method Details</h2>
+
+    
+      <div class="method_details first">
+  <h3 class="signature first" id="activerecord_schema-instance_method">
+  
+    #<strong>activerecord_schema</strong>(_table_only = false)  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>:nodoc:</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+49
+50
+51
+52
+53
+54
+55
+56
+57</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/schema.rb', line 49</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_activerecord_schema'>activerecord_schema</span><span class='lparen'>(</span><span class='id identifier rubyid__table_only'>_table_only</span> <span class='op'>=</span> <span class='kw'>false</span><span class='rparen'>)</span> <span class='comment'># :nodoc:
+</span>  <span class='id identifier rubyid_s'>s</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>ActiveRecord::Schema.define do\n</span><span class='tstring_end'>&quot;</span></span>
+  <span class='id identifier rubyid_s'>s</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>  create_table \&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'>\&quot; do |t|\n</span><span class='tstring_end'>&quot;</span></span>
+  <span class='id identifier rubyid_columns'>columns</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_column'>column</span><span class='op'>|</span>
+    <span class='id identifier rubyid_s'>s</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>    t.column </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_activerecord_schema_definition'>activerecord_schema_definition</span><span class='lparen'>(</span><span class='id identifier rubyid_column'>column</span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
+  <span class='kw'>end</span>
+  <span class='id identifier rubyid_s'>s</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>  end\nend</span><span class='tstring_end'>&quot;</span></span>
+  <span class='id identifier rubyid_s'>s</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="activerecord_schema_definition-instance_method">
+  
+    #<strong>activerecord_schema_definition</strong>(column)  &#x21d2; <tt>String</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>ActiveRecord schema definition</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>column</span>
+      
+      
+        <span class='type'>(<tt><span class='object_link'><a href="Column.html" title="DBF::Column (class)">DBF::Column</a></span></tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+<p class="tag_title">Returns:</p>
+<ul class="return">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt>String</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+81
+82
+83</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/schema.rb', line 81</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_activerecord_schema_definition'>activerecord_schema_definition</span><span class='lparen'>(</span><span class='id identifier rubyid_column'>column</span><span class='rparen'>)</span>
+  <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>\&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_column'>column</span><span class='period'>.</span><span class='id identifier rubyid_underscored_name'>underscored_name</span><span class='embexpr_end'>}</span><span class='tstring_content'>\&quot;, </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_schema_data_type'>schema_data_type</span><span class='lparen'>(</span><span class='id identifier rubyid_column'>column</span><span class='comma'>,</span> <span class='symbol'>:activerecord</span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_content'>\n</span><span class='tstring_end'>&quot;</span></span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="json_schema-instance_method">
+  
+    #<strong>json_schema</strong>(_table_only = false)  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>:nodoc:</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+73
+74
+75</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/schema.rb', line 73</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_json_schema'>json_schema</span><span class='lparen'>(</span><span class='id identifier rubyid__table_only'>_table_only</span> <span class='op'>=</span> <span class='kw'>false</span><span class='rparen'>)</span> <span class='comment'># :nodoc:
+</span>  <span class='id identifier rubyid_columns'>columns</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='symbol'>:to_hash</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_json'>to_json</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="number_data_type-instance_method">
+  
+    #<strong>number_data_type</strong>(column)  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+104
+105
+106</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/schema.rb', line 104</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_number_data_type'>number_data_type</span><span class='lparen'>(</span><span class='id identifier rubyid_column'>column</span><span class='rparen'>)</span>
+  <span class='id identifier rubyid_column'>column</span><span class='period'>.</span><span class='id identifier rubyid_decimal'>decimal</span> <span class='op'>&gt;</span> <span class='int'>0</span> <span class='op'>?</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>:float</span><span class='tstring_end'>&#39;</span></span> <span class='op'>:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>:integer</span><span class='tstring_end'>&#39;</span></span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="schema-instance_method">
+  
+    #<strong>schema</strong>(format = :activerecord, table_only = false)  &#x21d2; <tt>String</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Generate an ActiveRecord::Schema</p>
+
+<p>xBase data types are converted to generic types as follows:</p>
+<ul><li>
+<p>Number columns with no decimals are converted to :integer</p>
+</li><li>
+<p>Number columns with decimals are converted to :float</p>
+</li><li>
+<p>Date columns are converted to :datetime</p>
+</li><li>
+<p>Logical columns are converted to :boolean</p>
+</li><li>
+<p>Memo columns are converted to :text</p>
+</li><li>
+<p>Character columns are converted to :string and the :limit option is set to the length of the character column</p>
+</li></ul>
+
+<p>Example:</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_create_table'>create_table</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>mydata</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_t'>t</span><span class='op'>|</span>
+  <span class='id identifier rubyid_t'>t</span><span class='period'>.</span><span class='id identifier rubyid_column'>column</span> <span class='symbol'>:name</span><span class='comma'>,</span> <span class='symbol'>:string</span><span class='comma'>,</span> <span class='symbol'>:limit</span> <span class='op'>=&gt;</span> <span class='int'>30</span>
+  <span class='id identifier rubyid_t'>t</span><span class='period'>.</span><span class='id identifier rubyid_column'>column</span> <span class='symbol'>:last_update</span><span class='comma'>,</span> <span class='symbol'>:datetime</span>
+  <span class='id identifier rubyid_t'>t</span><span class='period'>.</span><span class='id identifier rubyid_column'>column</span> <span class='symbol'>:is_active</span><span class='comma'>,</span> <span class='symbol'>:boolean</span>
+  <span class='id identifier rubyid_t'>t</span><span class='period'>.</span><span class='id identifier rubyid_column'>column</span> <span class='symbol'>:age</span><span class='comma'>,</span> <span class='symbol'>:integer</span>
+  <span class='id identifier rubyid_t'>t</span><span class='period'>.</span><span class='id identifier rubyid_column'>column</span> <span class='symbol'>:notes</span><span class='comma'>,</span> <span class='symbol'>:text</span>
+<span class='kw'>end</span>
+</code></pre>
+
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>format</span>
+      
+      
+        <span class='type'>(<tt>Symbol</tt>)</span>
+      
+      
+        <em class="default">(defaults to: <tt>:activerecord</tt>)</em>
+      
+      
+        &mdash;
+        <div class='inline'>
+<p>format Valid options are :activerecord and :json</p>
+</div>
+      
+    </li>
+  
+    <li>
+      
+        <span class='name'>table_only</span>
+      
+      
+        <span class='type'>(<tt>Boolean</tt>)</span>
+      
+      
+        <em class="default">(defaults to: <tt>false</tt>)</em>
+      
+      
+    </li>
+  
+</ul>
+
+<p class="tag_title">Returns:</p>
+<ul class="return">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt>String</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+38
+39
+40
+41
+42
+43</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/schema.rb', line 38</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_schema'>schema</span><span class='lparen'>(</span><span class='id identifier rubyid_format'>format</span> <span class='op'>=</span> <span class='symbol'>:activerecord</span><span class='comma'>,</span> <span class='id identifier rubyid_table_only'>table_only</span> <span class='op'>=</span> <span class='kw'>false</span><span class='rparen'>)</span>
+  <span class='id identifier rubyid_schema_method_name'>schema_method_name</span> <span class='op'>=</span> <span class='id identifier rubyid_schema_name'>schema_name</span><span class='lparen'>(</span><span class='id identifier rubyid_format'>format</span><span class='rparen'>)</span>
+  <span class='id identifier rubyid_send'>send</span><span class='lparen'>(</span><span class='id identifier rubyid_schema_method_name'>schema_method_name</span><span class='comma'>,</span> <span class='id identifier rubyid_table_only'>table_only</span><span class='rparen'>)</span>
+<span class='kw'>rescue</span> <span class='const'>NameError</span>
+  <span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>:</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_format'>format</span><span class='embexpr_end'>}</span><span class='tstring_content'> is not a valid schema. Valid schemas are: </span><span class='embexpr_beg'>#{</span><span class='const'><span class='object_link'><a href="#FORMATS-constant" title="DBF::Schema::FORMATS (constant)">FORMATS</a></span></span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>, </span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_content'>.</span><span class='tstring_end'>&quot;</span></span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="schema_data_type-instance_method">
+  
+    #<strong>schema_data_type</strong>(column, format = :activerecord)  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>:nodoc:</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/schema.rb', line 93</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_schema_data_type'>schema_data_type</span><span class='lparen'>(</span><span class='id identifier rubyid_column'>column</span><span class='comma'>,</span> <span class='id identifier rubyid_format'>format</span> <span class='op'>=</span> <span class='symbol'>:activerecord</span><span class='rparen'>)</span> <span class='comment'># :nodoc:
+</span>  <span class='kw'>case</span> <span class='id identifier rubyid_column'>column</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span>
+  <span class='kw'>when</span> <span class='op'>*</span><span class='qwords_beg'>%w[</span><span class='tstring_content'>N</span><span class='words_sep'> </span><span class='tstring_content'>F</span><span class='words_sep'> </span><span class='tstring_content'>I</span><span class='tstring_end'>]</span></span>
+    <span class='id identifier rubyid_number_data_type'>number_data_type</span><span class='lparen'>(</span><span class='id identifier rubyid_column'>column</span><span class='rparen'>)</span>
+  <span class='kw'>when</span> <span class='op'>*</span><span class='qwords_beg'>%w[</span><span class='tstring_content'>Y</span><span class='words_sep'> </span><span class='tstring_content'>D</span><span class='words_sep'> </span><span class='tstring_content'>T</span><span class='words_sep'> </span><span class='tstring_content'>L</span><span class='words_sep'> </span><span class='tstring_content'>M</span><span class='words_sep'> </span><span class='tstring_content'>B</span><span class='tstring_end'>]</span></span>
+    <span class='const'><span class='object_link'><a href="#OTHER_DATA_TYPES-constant" title="DBF::Schema::OTHER_DATA_TYPES (constant)">OTHER_DATA_TYPES</a></span></span><span class='lbracket'>[</span><span class='id identifier rubyid_column'>column</span><span class='period'>.</span><span class='id identifier rubyid_type'>type</span><span class='rbracket'>]</span>
+  <span class='kw'>else</span>
+    <span class='id identifier rubyid_string_data_format'>string_data_format</span><span class='lparen'>(</span><span class='id identifier rubyid_format'>format</span><span class='comma'>,</span> <span class='id identifier rubyid_column'>column</span><span class='rparen'>)</span>
+  <span class='kw'>end</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="schema_name-instance_method">
+  
+    #<strong>schema_name</strong>(format)  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>:nodoc:</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+45
+46
+47</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/schema.rb', line 45</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_schema_name'>schema_name</span><span class='lparen'>(</span><span class='id identifier rubyid_format'>format</span><span class='rparen'>)</span> <span class='comment'># :nodoc:
+</span>  <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_format'>format</span><span class='embexpr_end'>}</span><span class='tstring_content'>_schema</span><span class='tstring_end'>&quot;</span></span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="sequel_schema-instance_method">
+  
+    #<strong>sequel_schema</strong>(table_only = false)  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>:nodoc:</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/schema.rb', line 59</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_sequel_schema'>sequel_schema</span><span class='lparen'>(</span><span class='id identifier rubyid_table_only'>table_only</span> <span class='op'>=</span> <span class='kw'>false</span><span class='rparen'>)</span> <span class='comment'># :nodoc:
+</span>  <span class='id identifier rubyid_s'>s</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span>
+  <span class='id identifier rubyid_s'>s</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Sequel.migration do\n</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>unless</span> <span class='id identifier rubyid_table_only'>table_only</span>
+  <span class='id identifier rubyid_s'>s</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>  change do\n </span><span class='tstring_end'>&quot;</span></span> <span class='kw'>unless</span> <span class='id identifier rubyid_table_only'>table_only</span>
+  <span class='id identifier rubyid_s'>s</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>    create_table(:</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'>) do\n</span><span class='tstring_end'>&quot;</span></span>
+  <span class='id identifier rubyid_columns'>columns</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_column'>column</span><span class='op'>|</span>
+    <span class='id identifier rubyid_s'>s</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>      column </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_sequel_schema_definition'>sequel_schema_definition</span><span class='lparen'>(</span><span class='id identifier rubyid_column'>column</span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
+  <span class='kw'>end</span>
+  <span class='id identifier rubyid_s'>s</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>    end\n</span><span class='tstring_end'>&quot;</span></span>
+  <span class='id identifier rubyid_s'>s</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>  end\n</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>unless</span> <span class='id identifier rubyid_table_only'>table_only</span>
+  <span class='id identifier rubyid_s'>s</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>end\n</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>unless</span> <span class='id identifier rubyid_table_only'>table_only</span>
+  <span class='id identifier rubyid_s'>s</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="sequel_schema_definition-instance_method">
+  
+    #<strong>sequel_schema_definition</strong>(column)  &#x21d2; <tt>String</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Sequel schema definition</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>column</span>
+      
+      
+        <span class='type'>(<tt><span class='object_link'><a href="Column.html" title="DBF::Column (class)">DBF::Column</a></span></tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+<p class="tag_title">Returns:</p>
+<ul class="return">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt>String</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+89
+90
+91</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/schema.rb', line 89</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_sequel_schema_definition'>sequel_schema_definition</span><span class='lparen'>(</span><span class='id identifier rubyid_column'>column</span><span class='rparen'>)</span>
+  <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>:</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_column'>column</span><span class='period'>.</span><span class='id identifier rubyid_underscored_name'>underscored_name</span><span class='embexpr_end'>}</span><span class='tstring_content'>, </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_schema_data_type'>schema_data_type</span><span class='lparen'>(</span><span class='id identifier rubyid_column'>column</span><span class='comma'>,</span> <span class='symbol'>:sequel</span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_content'>\n</span><span class='tstring_end'>&quot;</span></span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="string_data_format-instance_method">
+  
+    #<strong>string_data_format</strong>(format, column)  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+108
+109
+110
+111
+112
+113
+114</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/schema.rb', line 108</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_string_data_format'>string_data_format</span><span class='lparen'>(</span><span class='id identifier rubyid_format'>format</span><span class='comma'>,</span> <span class='id identifier rubyid_column'>column</span><span class='rparen'>)</span>
+  <span class='kw'>if</span> <span class='id identifier rubyid_format'>format</span> <span class='op'>==</span> <span class='symbol'>:sequel</span>
+    <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>:varchar, :size =&gt; </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_column'>column</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
+  <span class='kw'>else</span>
+    <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>:string, :limit =&gt; </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_column'>column</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
+  <span class='kw'>end</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/DBF/Table.html b/docs/DBF/Table.html
new file mode 100644
index 0000000..164ac49
--- /dev/null
+++ b/docs/DBF/Table.html
@@ -0,0 +1,1571 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Class: DBF::Table
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="../css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="../css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "DBF::Table";
+  relpath = '../';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="../js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="../class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="../_index.html">Index (T)</a> &raquo;
+    <span class='title'><span class='object_link'><a href="../DBF.html" title="DBF (module)">DBF</a></span></span>
+     &raquo; 
+    <span class="title">Table</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="../class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Class: DBF::Table
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+  <dl>
+    <dt>Inherits:</dt>
+    <dd>
+      <span class="inheritName">Object</span>
+      
+        <ul class="fullTree">
+          <li>Object</li>
+          
+            <li class="next">DBF::Table</li>
+          
+        </ul>
+        <a href="#" class="inheritanceTree">show all</a>
+      
+    </dd>
+  </dl>
+  
+
+  
+  
+  <dl>
+      <dt>Extended by:</dt>
+      <dd>Forwardable</dd>
+  </dl>
+  
+  
+  
+  <dl>
+      <dt>Includes:</dt>
+      <dd><span class='object_link'><a href="Schema.html" title="DBF::Schema (module)">Schema</a></span>, Enumerable</dd>
+  </dl>
+  
+  
+
+  
+
+  
+  <dl>
+    <dt>Defined in:</dt>
+    <dd>lib/dbf/table.rb</dd>
+  </dl>
+  
+</div>
+
+<h2>Overview</h2><div class="docstring">
+  <div class="discussion">
+    
+<p>DBF::Table is the primary interface to a single DBF file and provides methods for enumerating and searching the records.</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><div id="subclasses">
+  <h2>Direct Known Subclasses</h2>
+  <p class="children"><span class='object_link'><a href="Database/Table.html" title="DBF::Database::Table (class)">Database::Table</a></span></p>
+</div>
+
+  
+    <h2>
+      Constant Summary
+      <small><a href="#" class="constants_summary_toggle">collapse</a></small>
+    </h2>
+
+    <dl class="constants">
+      
+        <dt id="DBASE2_HEADER_SIZE-constant" class="">DBASE2_HEADER_SIZE =
+          
+        </dt>
+        <dd><pre class="code"><span class='int'>8</span></pre></dd>
+      
+        <dt id="DBASE3_HEADER_SIZE-constant" class="">DBASE3_HEADER_SIZE =
+          
+        </dt>
+        <dd><pre class="code"><span class='int'>32</span></pre></dd>
+      
+        <dt id="VERSIONS-constant" class="">VERSIONS =
+          
+        </dt>
+        <dd><pre class="code"><span class='lbrace'>{</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>02</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>FoxBase</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>03</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dBase III without memo file</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>04</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dBase IV without memo file</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>05</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dBase V without memo file</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>07</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Visual Objects 1.x</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>30</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Visual FoxPro</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>31</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Visual FoxPro with AutoIncrement field</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>43</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dBASE IV SQL table files, no memo</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>63</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dBASE IV SQL system files, no memo</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>7b</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dBase IV with memo file</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>83</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dBase III with memo file</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>87</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Visual Objects 1.x with memo file</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>8b</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dBase IV with memo file</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>8e</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dBase IV with SQL table</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cb</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dBASE IV SQL table files, with memo</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>f5</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>FoxPro with memo file</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>fb</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>FoxPro without memo file</span><span class='tstring_end'>&#39;</span></span>
+<span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_freeze'>freeze</span></pre></dd>
+      
+        <dt id="FOXPRO_VERSIONS-constant" class="">FOXPRO_VERSIONS =
+          
+        </dt>
+        <dd><pre class="code"><span class='lbrace'>{</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>30</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Visual FoxPro</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>31</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Visual FoxPro with AutoIncrement field</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>f5</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>FoxPro with memo file</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
+  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>fb</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>FoxPro without memo file</span><span class='tstring_end'>&#39;</span></span>
+<span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_freeze'>freeze</span></pre></dd>
+      
+    </dl>
+  
+
+
+
+  
+  
+  <h3 class="inherited">Constants included
+     from <span class='object_link'><a href="Schema.html" title="DBF::Schema (module)">Schema</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Schema.html#FORMATS-constant" title="DBF::Schema::FORMATS (constant)">Schema::FORMATS</a></span>, <span class='object_link'><a href="Schema.html#OTHER_DATA_TYPES-constant" title="DBF::Schema::OTHER_DATA_TYPES (constant)">Schema::OTHER_DATA_TYPES</a></span></p>
+
+
+  <h2>Instance Attribute Summary <small><a href="#" class="summary_toggle">collapse</a></small></h2>
+  <ul class="summary">
+    
+      <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#encoding-instance_method" title="#encoding (instance method)">#<strong>encoding</strong>  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+    
+    
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Returns the value of attribute encoding.</p>
+</div></span>
+  
+</li>
+
+    
+      <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#name-instance_method" title="#name (instance method)">#<strong>name</strong>  &#x21d2; String </a>
+    
+
+    
+  </span>
+  
+  
+  
+    
+    
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'></div></span>
+  
+</li>
+
+    
+  </ul>
+
+
+
+
+  
+    <h2>
+      Instance Method Summary
+      <small><a href="#" class="summary_toggle">collapse</a></small>
+    </h2>
+
+    <ul class="summary">
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#close-instance_method" title="#close (instance method)">#<strong>close</strong>  &#x21d2; TrueClass, FalseClass </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Closes the table and memo file.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#closed%3F-instance_method" title="#closed? (instance method)">#<strong>closed?</strong>  &#x21d2; TrueClass, FalseClass </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'></div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#column_names-instance_method" title="#column_names (instance method)">#<strong>column_names</strong>  &#x21d2; String </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Column names.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#columns-instance_method" title="#columns (instance method)">#<strong>columns</strong>  &#x21d2; Array </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>All columns.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#each-instance_method" title="#each (instance method)">#<strong>each</strong> {|nil, DBF::Record| ... } &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Calls block once for each record in the table.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#filename-instance_method" title="#filename (instance method)">#<strong>filename</strong>  &#x21d2; String </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'></div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#find-instance_method" title="#find (instance method)">#<strong>find</strong>(command, options = {}) {|optional, DBF::Record, NilClass| ... } &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Find records using a simple ActiveRecord-like syntax.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#has_memo_file%3F-instance_method" title="#has_memo_file? (instance method)">#<strong>has_memo_file?</strong>  &#x21d2; TrueClass, FalseClass </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'></div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong>(data, memo = nil, encoding = nil) {|_self| ... } &#x21d2; Table </a>
+    
+
+    
+  </span>
+  
+  
+    <span class="note title constructor">constructor</span>
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Opens a DBF::Table Examples:   # working with a file stored on the filesystem   table = DBF::Table.new &#39;data.dbf&#39;.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#record-instance_method" title="#record (instance method)">#<strong>record</strong>(index)  &#x21d2; DBF::Record, NilClass </a>
+    
+
+    
+      (also: #row)
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Retrieve a record by index number.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#to_csv-instance_method" title="#to_csv (instance method)">#<strong>to_csv</strong>(path = nil)  &#x21d2; Object </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Dumps all records to a CSV file.</p>
+</div></span>
+  
+</li>
+
+      
+        <li class="public ">
+  <span class="summary_signature">
+    
+      <a href="#version_description-instance_method" title="#version_description (instance method)">#<strong>version_description</strong>  &#x21d2; String </a>
+    
+
+    
+  </span>
+  
+  
+  
+  
+  
+  
+  
+
+  
+    <span class="summary_desc"><div class='inline'>
+<p>Human readable version description.</p>
+</div></span>
+  
+</li>
+
+      
+    </ul>
+  
+
+
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  <h3 class="inherited">Methods included from <span class='object_link'><a href="Schema.html" title="DBF::Schema (module)">Schema</a></span></h3>
+  <p class="inherited"><span class='object_link'><a href="Schema.html#activerecord_schema-instance_method" title="DBF::Schema#activerecord_schema (method)">#activerecord_schema</a></span>, <span class='object_link'><a href="Schema.html#activerecord_schema_definition-instance_method" title="DBF::Schema#activerecord_schema_definition (method)">#activerecord_schema_definition</a></span>, <span class='object_link'><a href="Schema.html#json_schema-instance_method" title="DBF::Schema#json_schema (method)">#json_schema</a></span>, <span class='object_link'><a href="Schema.html#number_data_type-instance_method" title="DBF::Schema#number_data_type (method)">#number_data_type</a></span>, <span class='object_link'><a href="Schema.html#schema-instance_method" title="DBF::Schema#schema (method)">#schema</a></span>, <span class='object_link'><a href="Schema.html#schema_data_type-instance_method" title="DBF::Schema#schema_data_type (method)">#schema_data_type</a></span>, <span class='object_link'><a href="Schema.html#schema_name-instance_method" title="DBF::Schema#schema_name (method)">#schema_name</a></span>, <span class='object_link'><a href="Schema.html#sequel_schema-instance_method" title="DBF::Schema#sequel_schema (method)">#sequel_schema</a></span>, <span class='object_link'><a href="Schema.html#sequel_schema_definition-instance_method" title="DBF::Schema#sequel_schema_definition (method)">#sequel_schema_definition</a></span>, <span class='object_link'><a href="Schema.html#string_data_format-instance_method" title="DBF::Schema#string_data_format (method)">#string_data_format</a></span></p>
+
+  <div id="constructor_details" class="method_details_list">
+  <h2>Constructor Details</h2>
+  
+    <div class="method_details first">
+  <h3 class="signature first" id="initialize-instance_method">
+  
+    #<strong>initialize</strong>(data, memo = nil, encoding = nil) {|_self| ... } &#x21d2; <tt><span class='object_link'><a href="" title="DBF::Table (class)">Table</a></span></tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Opens a DBF::Table Examples:</p>
+
+<pre class="code ruby"><code class="ruby"><span class='comment'># working with a file stored on the filesystem
+</span><span class='id identifier rubyid_table'>table</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="" title="DBF::Table (class)">Table</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>data.dbf</span><span class='tstring_end'>&#39;</span></span>
+
+<span class='comment'># working with a misnamed memo file
+</span><span class='id identifier rubyid_table'>table</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="" title="DBF::Table (class)">Table</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>data.dbf</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>memo.dbt</span><span class='tstring_end'>&#39;</span></span>
+
+<span class='comment'># working with a dbf in memory
+</span><span class='id identifier rubyid_table'>table</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="" title="DBF::Table (class)">Table</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span> <span class='const'>StringIO</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_dbf_data'>dbf_data</span><span class='rparen'>)</span>
+
+<span class='comment'># working with a dbf and memo in memory
+</span><span class='id identifier rubyid_table'>table</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="" title="DBF::Table (class)">Table</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span> <span class='const'>StringIO</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_dbf_data'>dbf_data</span><span class='rparen'>)</span><span class='comma'>,</span> <span class='const'>StringIO</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_memo_data'>memo_data</span><span class='rparen'>)</span>
+
+<span class='comment'># working with a dbf overriding specified in the dbf encoding
+</span><span class='id identifier rubyid_table'>table</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="" title="DBF::Table (class)">Table</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>data.dbf</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp437</span><span class='tstring_end'>&#39;</span></span>
+<span class='id identifier rubyid_table'>table</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="" title="DBF::Table (class)">Table</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>data.dbf</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>memo.dbt</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='const'>Encoding</span><span class='op'>::</span><span class='const'>US_ASCII</span>
+</code></pre>
+
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>data</span>
+      
+      
+        <span class='type'>(<tt>String</tt>, <tt>StringIO</tt>)</span>
+      
+      
+      
+        &mdash;
+        <div class='inline'>
+<p>data Path to the dbf file or a StringIO object</p>
+</div>
+      
+    </li>
+  
+    <li>
+      
+        <span class='name'>memo</span>
+      
+      
+        <span class='type'>(<tt>optional String</tt>, <tt>StringIO</tt>)</span>
+      
+      
+        <em class="default">(defaults to: <tt>nil</tt>)</em>
+      
+      
+        &mdash;
+        <div class='inline'>
+<p>memo Path to the memo file or a StringIO object</p>
+</div>
+      
+    </li>
+  
+    <li>
+      
+        <span class='name'>encoding</span>
+      
+      
+        <span class='type'>(<tt>optional String</tt>, <tt>Encoding</tt>)</span>
+      
+      
+        <em class="default">(defaults to: <tt>nil</tt>)</em>
+      
+      
+        &mdash;
+        <div class='inline'>
+<p>encoding Name of the encoding or an Encoding object</p>
+</div>
+      
+    </li>
+  
+</ul>
+
+<p class="tag_title">Yields:</p>
+<ul class="yield">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt>_self</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+<p class="tag_title">Yield Parameters:</p>
+<ul class="yieldparam">
+  
+    <li>
+      
+        <span class='name'>_self</span>
+      
+      
+        <span class='type'>(<tt><span class='object_link'><a href="" title="DBF::Table (class)">DBF::Table</a></span></tt>)</span>
+      
+      
+      
+        &mdash;
+        <div class='inline'>
+<p>the object that the method was called on</p>
+</div>
+      
+    </li>
+  
+</ul>
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+74
+75
+76
+77
+78
+79</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/table.rb', line 74</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='comma'>,</span> <span class='id identifier rubyid_memo'>memo</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_encoding'>encoding</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
+  <span class='ivar'>@data</span> <span class='op'>=</span> <span class='id identifier rubyid_open_data'>open_data</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
+  <span class='ivar'>@encoding</span> <span class='op'>=</span> <span class='id identifier rubyid_encoding'>encoding</span> <span class='op'>||</span> <span class='id identifier rubyid_header'>header</span><span class='period'>.</span><span class='id identifier rubyid_encoding'>encoding</span>
+  <span class='ivar'>@memo</span> <span class='op'>=</span> <span class='id identifier rubyid_open_memo'>open_memo</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='comma'>,</span> <span class='id identifier rubyid_memo'>memo</span><span class='rparen'>)</span>
+  <span class='kw'>yield</span> <span class='kw'>self</span> <span class='kw'>if</span> <span class='id identifier rubyid_block_given?'>block_given?</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+  
+</div>
+
+  <div id="instance_attr_details" class="attr_details">
+    <h2>Instance Attribute Details</h2>
+    
+      
+      <span id="encoding=-instance_method"></span>
+      <div class="method_details first">
+  <h3 class="signature first" id="encoding-instance_method">
+  
+    #<strong>encoding</strong>  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Returns the value of attribute encoding.</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+45
+46
+47</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/table.rb', line 45</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_encoding'>encoding</span>
+  <span class='ivar'>@encoding</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      
+      <span id="name=-instance_method"></span>
+      <div class="method_details ">
+  <h3 class="signature " id="name-instance_method">
+  
+    #<strong>name</strong>  &#x21d2; <tt>String</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+
+  </div>
+</div>
+<div class="tags">
+  
+<p class="tag_title">Returns:</p>
+<ul class="return">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt>String</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+171
+172
+173</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/table.rb', line 171</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_name'>name</span>
+  <span class='ivar'>@name</span> <span class='op'>||=</span> <span class='id identifier rubyid_filename'>filename</span> <span class='op'>&amp;&amp;</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_basename'>basename</span><span class='lparen'>(</span><span class='id identifier rubyid_filename'>filename</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>.*</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+
+  <div id="instance_method_details" class="method_details_list">
+    <h2>Instance Method Details</h2>
+
+    
+      <div class="method_details first">
+  <h3 class="signature first" id="close-instance_method">
+  
+    #<strong>close</strong>  &#x21d2; <tt>TrueClass</tt>, <tt>FalseClass</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Closes the table and memo file</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+<p class="tag_title">Returns:</p>
+<ul class="return">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt>TrueClass</tt>, <tt>FalseClass</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+84
+85
+86
+87</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/table.rb', line 84</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_close'>close</span>
+  <span class='ivar'>@data</span><span class='period'>.</span><span class='id identifier rubyid_close'>close</span>
+  <span class='ivar'>@memo</span> <span class='op'>&amp;&amp;</span> <span class='ivar'>@memo</span><span class='period'>.</span><span class='id identifier rubyid_close'>close</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="closed?-instance_method">
+  
+    #<strong>closed?</strong>  &#x21d2; <tt>TrueClass</tt>, <tt>FalseClass</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+
+  </div>
+</div>
+<div class="tags">
+  
+<p class="tag_title">Returns:</p>
+<ul class="return">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt>TrueClass</tt>, <tt>FalseClass</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+90
+91
+92
+93
+94
+95
+96</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/table.rb', line 90</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_closed?'>closed?</span>
+  <span class='kw'>if</span> <span class='ivar'>@memo</span>
+    <span class='ivar'>@data</span><span class='period'>.</span><span class='id identifier rubyid_closed?'>closed?</span> <span class='op'>&amp;&amp;</span> <span class='ivar'>@memo</span><span class='period'>.</span><span class='id identifier rubyid_closed?'>closed?</span>
+  <span class='kw'>else</span>
+    <span class='ivar'>@data</span><span class='period'>.</span><span class='id identifier rubyid_closed?'>closed?</span>
+  <span class='kw'>end</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="column_names-instance_method">
+  
+    #<strong>column_names</strong>  &#x21d2; <tt>String</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Column names</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+<p class="tag_title">Returns:</p>
+<ul class="return">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt>String</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+101
+102
+103</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/table.rb', line 101</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_column_names'>column_names</span>
+  <span class='ivar'>@column_names</span> <span class='op'>||=</span> <span class='id identifier rubyid_columns'>columns</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='symbol'>:name</span><span class='rparen'>)</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="columns-instance_method">
+  
+    #<strong>columns</strong>  &#x21d2; <tt>Array</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>All columns</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+<p class="tag_title">Returns:</p>
+<ul class="return">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt>Array</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+108
+109
+110</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/table.rb', line 108</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_columns'>columns</span>
+  <span class='ivar'>@columns</span> <span class='op'>||=</span> <span class='id identifier rubyid_build_columns'>build_columns</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="each-instance_method">
+  
+    #<strong>each</strong> {|nil, DBF::Record| ... } &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Calls block once for each record in the table. The record may be nil if the record has been marked as deleted.</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+<p class="tag_title">Yields:</p>
+<ul class="yield">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt>nil</tt>, <tt><span class='object_link'><a href="Record.html" title="DBF::Record (class)">DBF::Record</a></span></tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+116
+117
+118</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/table.rb', line 116</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_each'>each</span>
+  <span class='id identifier rubyid_record_count'>record_count</span><span class='period'>.</span><span class='id identifier rubyid_times'>times</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_i'>i</span><span class='op'>|</span> <span class='kw'>yield</span> <span class='id identifier rubyid_record'>record</span><span class='lparen'>(</span><span class='id identifier rubyid_i'>i</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="filename-instance_method">
+  
+    #<strong>filename</strong>  &#x21d2; <tt>String</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+
+  </div>
+</div>
+<div class="tags">
+  
+<p class="tag_title">Returns:</p>
+<ul class="return">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt>String</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+121
+122
+123
+124
+125</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/table.rb', line 121</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_filename'>filename</span>
+  <span class='kw'>return</span> <span class='kw'>unless</span> <span class='ivar'>@data</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:path</span><span class='rparen'>)</span>
+
+  <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_basename'>basename</span><span class='lparen'>(</span><span class='ivar'>@data</span><span class='period'>.</span><span class='id identifier rubyid_path'>path</span><span class='rparen'>)</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="find-instance_method">
+  
+    #<strong>find</strong>(command, options = {}) {|optional, DBF::Record, NilClass| ... } &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Find records using a simple ActiveRecord-like syntax.</p>
+
+<p>Examples:</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_table'>table</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="" title="DBF::Table (class)">Table</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="#initialize-instance_method" title="DBF::Table#initialize (method)">new</a></span></span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>mydata.dbf</span><span class='tstring_end'>&#39;</span></span>
+
+<span class='comment'># Find record number 5
+</span><span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span><span class='lparen'>(</span><span class='int'>5</span><span class='rparen'>)</span>
+
+<span class='comment'># Find all records for Keith Morrison
+</span><span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span> <span class='symbol'>:all</span><span class='comma'>,</span> <span class='label'>first_name:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Keith</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>last_name:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Morrison</span><span class='tstring_end'>&quot;</span></span>
+
+<span class='comment'># Find first record
+</span><span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span> <span class='symbol'>:first</span><span class='comma'>,</span> <span class='label'>first_name:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Keith</span><span class='tstring_end'>&quot;</span></span>
+</code></pre>
+
+<p>The <strong>command</strong> may be a record index, :all, or :first. <strong>options</strong> is optional and, if specified, should be a hash where the keys correspond to column names in the database.  The values will be matched exactly with the value in the database.  If you specify more than one key, all values must match in order for the record to be returned.  The equivalent SQL would be “WHERE key1 = &#39;value1&#39; AND key2 = &#39;value2&#39;”.</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>command</span>
+      
+      
+        <span class='type'>(<tt>Integer</tt>, <tt>Symbol</tt>)</span>
+      
+      
+      
+        &mdash;
+        <div class='inline'>
+<p>command</p>
+</div>
+      
+    </li>
+  
+    <li>
+      
+        <span class='name'>options</span>
+      
+      
+        <span class='type'>(<tt>optional</tt>, <tt>Hash</tt>)</span>
+      
+      
+        <em class="default">(defaults to: <tt>{}</tt>)</em>
+      
+      
+        &mdash;
+        <div class='inline'>
+<p>options Hash of search parameters</p>
+</div>
+      
+    </li>
+  
+</ul>
+
+<p class="tag_title">Yields:</p>
+<ul class="yield">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt>optional</tt>, <tt><span class='object_link'><a href="Record.html" title="DBF::Record (class)">DBF::Record</a></span></tt>, <tt>NilClass</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/table.rb', line 152</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_find'>find</span><span class='lparen'>(</span><span class='id identifier rubyid_command'>command</span><span class='comma'>,</span> <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
+  <span class='kw'>case</span> <span class='id identifier rubyid_command'>command</span>
+  <span class='kw'>when</span> <span class='const'>Integer</span>
+    <span class='id identifier rubyid_record'>record</span><span class='lparen'>(</span><span class='id identifier rubyid_command'>command</span><span class='rparen'>)</span>
+  <span class='kw'>when</span> <span class='const'>Array</span>
+    <span class='id identifier rubyid_command'>command</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_i'>i</span><span class='op'>|</span> <span class='id identifier rubyid_record'>record</span><span class='lparen'>(</span><span class='id identifier rubyid_i'>i</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
+  <span class='kw'>when</span> <span class='symbol'>:all</span>
+    <span class='id identifier rubyid_find_all'>find_all</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
+  <span class='kw'>when</span> <span class='symbol'>:first</span>
+    <span class='id identifier rubyid_find_first'>find_first</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
+  <span class='kw'>end</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="has_memo_file?-instance_method">
+  
+    #<strong>has_memo_file?</strong>  &#x21d2; <tt>TrueClass</tt>, <tt>FalseClass</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+
+  </div>
+</div>
+<div class="tags">
+  
+<p class="tag_title">Returns:</p>
+<ul class="return">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt>TrueClass</tt>, <tt>FalseClass</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+166
+167
+168</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/table.rb', line 166</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_has_memo_file?'>has_memo_file?</span>
+  <span class='op'>!</span><span class='op'>!</span><span class='ivar'>@memo</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="record-instance_method">
+  
+    #<strong>record</strong>(index)  &#x21d2; <tt><span class='object_link'><a href="Record.html" title="DBF::Record (class)">DBF::Record</a></span></tt>, <tt>NilClass</tt> 
+  
+
+  
+    <span class="aliases">Also known as:
+    <span class="names"><span id='row-instance_method'>row</span></span>
+    </span>
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Retrieve a record by index number. The record will be nil if it has been deleted, but not yet pruned from the database.</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>index</span>
+      
+      
+        <span class='type'>(<tt>Integer</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+<p class="tag_title">Returns:</p>
+<ul class="return">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt><span class='object_link'><a href="Record.html" title="DBF::Record (class)">DBF::Record</a></span></tt>, <tt>NilClass</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+<p class="tag_title">Raises:</p>
+<ul class="raise">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt><span class='object_link'><a href="NoColumnsDefined.html" title="DBF::NoColumnsDefined (class)">DBF::NoColumnsDefined</a></span></tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+181
+182
+183
+184
+185
+186
+187
+188
+189</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/table.rb', line 181</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_record'>record</span><span class='lparen'>(</span><span class='id identifier rubyid_index'>index</span><span class='rparen'>)</span>
+  <span class='id identifier rubyid_raise'>raise</span> <span class='const'><span class='object_link'><a href="../DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="NoColumnsDefined.html" title="DBF::NoColumnsDefined (class)">NoColumnsDefined</a></span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>The DBF file has no columns defined</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_columns'>columns</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
+
+  <span class='id identifier rubyid_seek_to_record'>seek_to_record</span><span class='lparen'>(</span><span class='id identifier rubyid_index'>index</span><span class='rparen'>)</span>
+  <span class='kw'>return</span> <span class='kw'>nil</span> <span class='kw'>if</span> <span class='id identifier rubyid_deleted_record?'>deleted_record?</span>
+
+  <span class='id identifier rubyid_record_data'>record_data</span> <span class='op'>=</span> <span class='ivar'>@data</span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='id identifier rubyid_record_length'>record_length</span><span class='rparen'>)</span>
+  <span class='const'><span class='object_link'><a href="../DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Record.html" title="DBF::Record (class)">Record</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Record.html#initialize-instance_method" title="DBF::Record#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_record_data'>record_data</span><span class='comma'>,</span> <span class='id identifier rubyid_columns'>columns</span><span class='comma'>,</span> <span class='id identifier rubyid_version'>version</span><span class='comma'>,</span> <span class='ivar'>@memo</span><span class='rparen'>)</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="to_csv-instance_method">
+  
+    #<strong>to_csv</strong>(path = nil)  &#x21d2; <tt>Object</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Dumps all records to a CSV file.  If no filename is given then CSV is output to STDOUT.</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  <p class="tag_title">Parameters:</p>
+<ul class="param">
+  
+    <li>
+      
+        <span class='name'>path</span>
+      
+      
+        <span class='type'>(<tt>optional String</tt>)</span>
+      
+      
+        <em class="default">(defaults to: <tt>nil</tt>)</em>
+      
+      
+        &mdash;
+        <div class='inline'>
+<p>Defaults to STDOUT</p>
+</div>
+      
+    </li>
+  
+</ul>
+
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+197
+198
+199
+200
+201
+202</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/table.rb', line 197</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_to_csv'>to_csv</span><span class='lparen'>(</span><span class='id identifier rubyid_path'>path</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
+  <span class='id identifier rubyid_out_io'>out_io</span> <span class='op'>=</span> <span class='id identifier rubyid_path'>path</span> <span class='op'>?</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_open'>open</span><span class='lparen'>(</span><span class='id identifier rubyid_path'>path</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>w</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='op'>:</span> <span class='gvar'>$stdout</span>
+  <span class='id identifier rubyid_csv'>csv</span> <span class='op'>=</span> <span class='const'>CSV</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_out_io'>out_io</span><span class='comma'>,</span> <span class='label'>force_quotes:</span> <span class='kw'>true</span><span class='rparen'>)</span>
+  <span class='id identifier rubyid_csv'>csv</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_column_names'>column_names</span>
+  <span class='id identifier rubyid_each'>each</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_record'>record</span><span class='op'>|</span> <span class='id identifier rubyid_csv'>csv</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_record'>record</span><span class='period'>.</span><span class='id identifier rubyid_to_a'>to_a</span> <span class='rbrace'>}</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+      <div class="method_details ">
+  <h3 class="signature " id="version_description-instance_method">
+  
+    #<strong>version_description</strong>  &#x21d2; <tt>String</tt> 
+  
+
+  
+
+  
+</h3><div class="docstring">
+  <div class="discussion">
+    
+<p>Human readable version description</p>
+
+
+  </div>
+</div>
+<div class="tags">
+  
+<p class="tag_title">Returns:</p>
+<ul class="return">
+  
+    <li>
+      
+      
+        <span class='type'>(<tt>String</tt>)</span>
+      
+      
+      
+    </li>
+  
+</ul>
+
+</div><table class="source_code">
+  <tr>
+    <td>
+      <pre class="lines">
+
+
+207
+208
+209</pre>
+    </td>
+    <td>
+      <pre class="code"><span class="info file"># File 'lib/dbf/table.rb', line 207</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_version_description'>version_description</span>
+  <span class='const'><span class='object_link'><a href="#VERSIONS-constant" title="DBF::Table::VERSIONS (constant)">VERSIONS</a></span></span><span class='lbracket'>[</span><span class='id identifier rubyid_version'>version</span><span class='rbracket'>]</span>
+<span class='kw'>end</span></pre>
+    </td>
+  </tr>
+</table>
+</div>
+    
+  </div>
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:08 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/_index.html b/docs/_index.html
new file mode 100644
index 0000000..431c8ff
--- /dev/null
+++ b/docs/_index.html
@@ -0,0 +1,415 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = null;
+  relpath = '';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1 class="noborder title">Documentation by YARD 0.9.26</h1>
+<div id="listing">
+  <h1 class="alphaindex">Alphabetic Index</h1>
+  
+  <h2>File Listing</h2>
+  <ul id="files" class="index_inline_list">
+  
+  
+    <li class="r1"><a href="index.html" title="README">README</a></li>
+    
+  
+  </ul>
+
+<div class="clear"></div>
+<h2>Namespace Listing A-Z</h2>
+
+
+
+
+<table>
+  <tr>
+    <td valign='top' width="33%">
+      
+        
+        <ul id="alpha_B" class="alpha">
+          <li class="letter">B</li>
+          <ul>
+            
+              <li>
+                <span class='object_link'><a href="DBF/Memo/Base.html" title="DBF::Memo::Base (class)">Base</a></span>
+                
+                  <small>(DBF::Memo)</small>
+                
+              </li>
+            
+              <li>
+                <span class='object_link'><a href="DBF/ColumnType/Base.html" title="DBF::ColumnType::Base (class)">Base</a></span>
+                
+                  <small>(DBF::ColumnType)</small>
+                
+              </li>
+            
+              <li>
+                <span class='object_link'><a href="DBF/ColumnType/Boolean.html" title="DBF::ColumnType::Boolean (class)">Boolean</a></span>
+                
+                  <small>(DBF::ColumnType)</small>
+                
+              </li>
+            
+          </ul>
+        </ul>
+      
+        
+        <ul id="alpha_C" class="alpha">
+          <li class="letter">C</li>
+          <ul>
+            
+              <li>
+                <span class='object_link'><a href="DBF/Column.html" title="DBF::Column (class)">Column</a></span>
+                
+                  <small>(DBF)</small>
+                
+              </li>
+            
+              <li>
+                <span class='object_link'><a href="DBF/ColumnType.html" title="DBF::ColumnType (module)">ColumnType</a></span>
+                
+                  <small>(DBF)</small>
+                
+              </li>
+            
+              <li>
+                <span class='object_link'><a href="DBF/ColumnType/Currency.html" title="DBF::ColumnType::Currency (class)">Currency</a></span>
+                
+                  <small>(DBF::ColumnType)</small>
+                
+              </li>
+            
+          </ul>
+        </ul>
+      
+        
+        <ul id="alpha_D" class="alpha">
+          <li class="letter">D</li>
+          <ul>
+            
+              <li>
+                <span class='object_link'><a href="DBF.html" title="DBF (module)">DBF</a></span>
+                
+              </li>
+            
+              <li>
+                <span class='object_link'><a href="DBF/Database.html" title="DBF::Database (module)">Database</a></span>
+                
+                  <small>(DBF)</small>
+                
+              </li>
+            
+              <li>
+                <span class='object_link'><a href="DBF/ColumnType/Date.html" title="DBF::ColumnType::Date (class)">Date</a></span>
+                
+                  <small>(DBF::ColumnType)</small>
+                
+              </li>
+            
+              <li>
+                <span class='object_link'><a href="DBF/ColumnType/DateTime.html" title="DBF::ColumnType::DateTime (class)">DateTime</a></span>
+                
+                  <small>(DBF::ColumnType)</small>
+                
+              </li>
+            
+              <li>
+                <span class='object_link'><a href="DBF/Memo/Dbase3.html" title="DBF::Memo::Dbase3 (class)">Dbase3</a></span>
+                
+                  <small>(DBF::Memo)</small>
+                
+              </li>
+            
+              <li>
+                <span class='object_link'><a href="DBF/Memo/Dbase4.html" title="DBF::Memo::Dbase4 (class)">Dbase4</a></span>
+                
+                  <small>(DBF::Memo)</small>
+                
+              </li>
+            
+              <li>
+                <span class='object_link'><a href="DBF/ColumnType/Double.html" title="DBF::ColumnType::Double (class)">Double</a></span>
+                
+                  <small>(DBF::ColumnType)</small>
+                
+              </li>
+            
+          </ul>
+        </ul>
+      
+        
+        <ul id="alpha_F" class="alpha">
+          <li class="letter">F</li>
+          <ul>
+            
+              <li>
+                <span class='object_link'><a href="DBF/FileNotFoundError.html" title="DBF::FileNotFoundError (class)">FileNotFoundError</a></span>
+                
+                  <small>(DBF)</small>
+                
+              </li>
+            
+              <li>
+                <span class='object_link'><a href="DBF/ColumnType/Float.html" title="DBF::ColumnType::Float (class)">Float</a></span>
+                
+                  <small>(DBF::ColumnType)</small>
+                
+              </li>
+            
+              <li>
+                <span class='object_link'><a href="DBF/Database/Foxpro.html" title="DBF::Database::Foxpro (class)">Foxpro</a></span>
+                
+                  <small>(DBF::Database)</small>
+                
+              </li>
+            
+              <li>
+                <span class='object_link'><a href="DBF/Memo/Foxpro.html" title="DBF::Memo::Foxpro (class)">Foxpro</a></span>
+                
+                  <small>(DBF::Memo)</small>
+                
+              </li>
+            
+          </ul>
+        </ul>
+      
+        
+        <ul id="alpha_G" class="alpha">
+          <li class="letter">G</li>
+          <ul>
+            
+              <li>
+                <span class='object_link'><a href="DBF/ColumnType/General.html" title="DBF::ColumnType::General (class)">General</a></span>
+                
+                  <small>(DBF::ColumnType)</small>
+                
+              </li>
+            
+          </ul>
+        </ul>
+      
+        
+        <ul id="alpha_H" class="alpha">
+          <li class="letter">H</li>
+          <ul>
+            
+              <li>
+                <span class='object_link'><a href="DBF/Header.html" title="DBF::Header (class)">Header</a></span>
+                
+                  <small>(DBF)</small>
+                
+              </li>
+            
+          </ul>
+        </ul>
+      
+        
+        <ul id="alpha_L" class="alpha">
+          <li class="letter">L</li>
+          <ul>
+            
+              <li>
+                <span class='object_link'><a href="DBF/Column/LengthError.html" title="DBF::Column::LengthError (class)">LengthError</a></span>
+                
+                  <small>(DBF::Column)</small>
+                
+              </li>
+            
+          </ul>
+        </ul>
+      
+        
+          </td><td valign='top' width="33%">
+          
+        
+        <ul id="alpha_M" class="alpha">
+          <li class="letter">M</li>
+          <ul>
+            
+              <li>
+                <span class='object_link'><a href="DBF/Memo.html" title="DBF::Memo (module)">Memo</a></span>
+                
+                  <small>(DBF)</small>
+                
+              </li>
+            
+              <li>
+                <span class='object_link'><a href="DBF/ColumnType/Memo.html" title="DBF::ColumnType::Memo (class)">Memo</a></span>
+                
+                  <small>(DBF::ColumnType)</small>
+                
+              </li>
+            
+          </ul>
+        </ul>
+      
+        
+        <ul id="alpha_N" class="alpha">
+          <li class="letter">N</li>
+          <ul>
+            
+              <li>
+                <span class='object_link'><a href="DBF/Column/NameError.html" title="DBF::Column::NameError (class)">NameError</a></span>
+                
+                  <small>(DBF::Column)</small>
+                
+              </li>
+            
+              <li>
+                <span class='object_link'><a href="DBF/ColumnType/Nil.html" title="DBF::ColumnType::Nil (class)">Nil</a></span>
+                
+                  <small>(DBF::ColumnType)</small>
+                
+              </li>
+            
+              <li>
+                <span class='object_link'><a href="DBF/NoColumnsDefined.html" title="DBF::NoColumnsDefined (class)">NoColumnsDefined</a></span>
+                
+                  <small>(DBF)</small>
+                
+              </li>
+            
+              <li>
+                <span class='object_link'><a href="DBF/ColumnType/Number.html" title="DBF::ColumnType::Number (class)">Number</a></span>
+                
+                  <small>(DBF::ColumnType)</small>
+                
+              </li>
+            
+          </ul>
+        </ul>
+      
+        
+        <ul id="alpha_R" class="alpha">
+          <li class="letter">R</li>
+          <ul>
+            
+              <li>
+                <span class='object_link'><a href="DBF/Record.html" title="DBF::Record (class)">Record</a></span>
+                
+                  <small>(DBF)</small>
+                
+              </li>
+            
+          </ul>
+        </ul>
+      
+        
+        <ul id="alpha_S" class="alpha">
+          <li class="letter">S</li>
+          <ul>
+            
+              <li>
+                <span class='object_link'><a href="DBF/Schema.html" title="DBF::Schema (module)">Schema</a></span>
+                
+                  <small>(DBF)</small>
+                
+              </li>
+            
+              <li>
+                <span class='object_link'><a href="DBF/ColumnType/SignedLong.html" title="DBF::ColumnType::SignedLong (class)">SignedLong</a></span>
+                
+                  <small>(DBF::ColumnType)</small>
+                
+              </li>
+            
+              <li>
+                <span class='object_link'><a href="DBF/ColumnType/String.html" title="DBF::ColumnType::String (class)">String</a></span>
+                
+                  <small>(DBF::ColumnType)</small>
+                
+              </li>
+            
+          </ul>
+        </ul>
+      
+        
+        <ul id="alpha_T" class="alpha">
+          <li class="letter">T</li>
+          <ul>
+            
+              <li>
+                <span class='object_link'><a href="DBF/Table.html" title="DBF::Table (class)">Table</a></span>
+                
+                  <small>(DBF)</small>
+                
+              </li>
+            
+              <li>
+                <span class='object_link'><a href="DBF/Database/Table.html" title="DBF::Database::Table (class)">Table</a></span>
+                
+                  <small>(DBF::Database)</small>
+                
+              </li>
+            
+          </ul>
+        </ul>
+      
+    </td>
+  </tr>
+</table>
+
+</div>
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:05 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/class_list.html b/docs/class_list.html
new file mode 100644
index 0000000..a787292
--- /dev/null
+++ b/docs/class_list.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta charset="utf-8" />
+    
+      <link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen" />
+    
+      <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" />
+    
+
+    
+      <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
+    
+      <script type="text/javascript" charset="utf-8" src="js/full_list.js"></script>
+    
+
+    <title>Class List</title>
+    <base id="base_target" target="_parent" />
+  </head>
+  <body>
+    <div id="content">
+      <div class="fixed_header">
+        <h1 id="full_list_header">Class List</h1>
+        <div id="full_list_nav">
+          
+            <span><a target="_self" href="class_list.html">
+              Classes
+            </a></span>
+          
+            <span><a target="_self" href="method_list.html">
+              Methods
+            </a></span>
+          
+            <span><a target="_self" href="file_list.html">
+              Files
+            </a></span>
+          
+        </div>
+
+        <div id="search">Search: <input type="text" /></div>
+      </div>
+
+      <ul id="full_list" class="class">
+        <li id="object_" class="odd"><div class="item" style="padding-left:30px"><span class='object_link'><a href="top-level-namespace.html" title="Top Level Namespace (root)">Top Level Namespace</a></span></div></li>
+<li id='object_DBF' class='even'><div class='item' style='padding-left:30px'><a class='toggle'></a> <span class='object_link'><a href="DBF.html" title="DBF (module)">DBF</a></span><small class='search_info'>Top Level Namespace</small></div><ul><li id='object_DBF::Column' class='collapsed odd'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="DBF/Column.html" title="DBF::Column (class)">Column</a></span> &lt; Object<small class='search_info'>DBF</small></div><ul><li id='object_DBF::Column::LengthError' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="DBF/Column/LengthError.html" title="DBF::Column::LengthError (class)">LengthError</a></span> &lt; StandardError<small class='search_info'>DBF::Column</small></div></li><li id='object_DBF::Column::NameError' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="DBF/Column/NameError.html" title="DBF::Column::NameError (class)">NameError</a></span> &lt; StandardError<small class='search_info'>DBF::Column</small></div></li></ul></li><li id='object_DBF::ColumnType' class='collapsed even'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="DBF/ColumnType.html" title="DBF::ColumnType (module)">ColumnType</a></span><small class='search_info'>DBF</small></div><ul><li id='object_DBF::ColumnType::Base' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="DBF/ColumnType/Base.html" title="DBF::ColumnType::Base (class)">Base</a></span> &lt; Object<small class='search_info'>DBF::ColumnType</small></div></li><li id='object_DBF::ColumnType::Boolean' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="DBF/ColumnType/Boolean.html" title="DBF::ColumnType::Boolean (class)">Boolean</a></span> &lt; Base<small class='search_info'>DBF::ColumnType</small></div></li><li id='object_DBF::ColumnType::Currency' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="DBF/ColumnType/Currency.html" title="DBF::ColumnType::Currency (class)">Currency</a></span> &lt; Base<small class='search_info'>DBF::ColumnType</small></div></li><li id='object_DBF::ColumnType::Date' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="DBF/ColumnType/Date.html" title="DBF::ColumnType::Date (class)">Date</a></span> &lt; Base<small class='search_info'>DBF::ColumnType</small></div></li><li id='object_DBF::ColumnType::DateTime' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="DBF/ColumnType/DateTime.html" title="DBF::ColumnType::DateTime (class)">DateTime</a></span> &lt; Base<small class='search_info'>DBF::ColumnType</small></div></li><li id='object_DBF::ColumnType::Double' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="DBF/ColumnType/Double.html" title="DBF::ColumnType::Double (class)">Double</a></span> &lt; Base<small class='search_info'>DBF::ColumnType</small></div></li><li id='object_DBF::ColumnType::Float' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="DBF/ColumnType/Float.html" title="DBF::ColumnType::Float (class)">Float</a></span> &lt; Base<small class='search_info'>DBF::ColumnType</small></div></li><li id='object_DBF::ColumnType::General' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="DBF/ColumnType/General.html" title="DBF::ColumnType::General (class)">General</a></span> &lt; Base<small class='search_info'>DBF::ColumnType</small></div></li><li id='object_DBF::ColumnType::Memo' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="DBF/ColumnType/Memo.html" title="DBF::ColumnType::Memo (class)">Memo</a></span> &lt; Base<small class='search_info'>DBF::ColumnType</small></div></li><li id='object_DBF::ColumnType::Nil' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="DBF/ColumnType/Nil.html" title="DBF::ColumnType::Nil (class)">Nil</a></span> &lt; Base<small class='search_info'>DBF::ColumnType</small></div></li><li id='object_DBF::ColumnType::Number' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="DBF/ColumnType/Number.html" title="DBF::ColumnType::Number (class)">Number</a></span> &lt; Base<small class='search_info'>DBF::ColumnType</small></div></li><li id='object_DBF::ColumnType::SignedLong' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="DBF/ColumnType/SignedLong.html" title="DBF::ColumnType::SignedLong (class)">SignedLong</a></span> &lt; Base<small class='search_info'>DBF::ColumnType</small></div></li><li id='object_DBF::ColumnType::String' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="DBF/ColumnType/String.html" title="DBF::ColumnType::String (class)">String</a></span> &lt; Base<small class='search_info'>DBF::ColumnType</small></div></li></ul></li><li id='object_DBF::Database' class='collapsed odd'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="DBF/Database.html" title="DBF::Database (module)">Database</a></span><small class='search_info'>DBF</small></div><ul><li id='object_DBF::Database::Foxpro' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="DBF/Database/Foxpro.html" title="DBF::Database::Foxpro (class)">Foxpro</a></span> &lt; Object<small class='search_info'>DBF::Database</small></div></li><li id='object_DBF::Database::Table' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="DBF/Database/Table.html" title="DBF::Database::Table (class)">Table</a></span> &lt; Table<small class='search_info'>DBF::Database</small></div></li></ul></li><li id='object_DBF::FileNotFoundError' class='collapsed even'><div class='item' style='padding-left:45px'><span class='object_link'><a href="DBF/FileNotFoundError.html" title="DBF::FileNotFoundError (class)">FileNotFoundError</a></span> &lt; StandardError<small class='search_info'>DBF</small></div></li><li id='object_DBF::Header' class='collapsed odd'><div class='item' style='padding-left:45px'><span class='object_link'><a href="DBF/Header.html" title="DBF::Header (class)">Header</a></span> &lt; Object<small class='search_info'>DBF</small></div></li><li id='object_DBF::Memo' class='collapsed even'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="DBF/Memo.html" title="DBF::Memo (module)">Memo</a></span><small class='search_info'>DBF</small></div><ul><li id='object_DBF::Memo::Base' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="DBF/Memo/Base.html" title="DBF::Memo::Base (class)">Base</a></span> &lt; Object<small class='search_info'>DBF::Memo</small></div></li><li id='object_DBF::Memo::Dbase3' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="DBF/Memo/Dbase3.html" title="DBF::Memo::Dbase3 (class)">Dbase3</a></span> &lt; Base<small class='search_info'>DBF::Memo</small></div></li><li id='object_DBF::Memo::Dbase4' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="DBF/Memo/Dbase4.html" title="DBF::Memo::Dbase4 (class)">Dbase4</a></span> &lt; Base<small class='search_info'>DBF::Memo</small></div></li><li id='object_DBF::Memo::Foxpro' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="DBF/Memo/Foxpro.html" title="DBF::Memo::Foxpro (class)">Foxpro</a></span> &lt; Base<small class='search_info'>DBF::Memo</small></div></li></ul></li><li id='object_DBF::NoColumnsDefined' class='collapsed odd'><div class='item' style='padding-left:45px'><span class='object_link'><a href="DBF/NoColumnsDefined.html" title="DBF::NoColumnsDefined (class)">NoColumnsDefined</a></span> &lt; StandardError<small class='search_info'>DBF</small></div></li><li id='object_DBF::Record' class='collapsed even'><div class='item' style='padding-left:45px'><span class='object_link'><a href="DBF/Record.html" title="DBF::Record (class)">Record</a></span> &lt; Object<small class='search_info'>DBF</small></div></li><li id='object_DBF::Schema' class='collapsed odd'><div class='item' style='padding-left:45px'><span class='object_link'><a href="DBF/Schema.html" title="DBF::Schema (module)">Schema</a></span><small class='search_info'>DBF</small></div></li><li id='object_DBF::Table' class='collapsed even'><div class='item' style='padding-left:45px'><span class='object_link'><a href="DBF/Table.html" title="DBF::Table (class)">Table</a></span> &lt; Object<small class='search_info'>DBF</small></div></li></ul></li>
+
+      </ul>
+    </div>
+  </body>
+</html>
diff --git a/docs/css/common.css b/docs/css/common.css
new file mode 100644
index 0000000..cf25c45
--- /dev/null
+++ b/docs/css/common.css
@@ -0,0 +1 @@
+/* Override this file with custom rules */
\ No newline at end of file
diff --git a/docs/css/full_list.css b/docs/css/full_list.css
new file mode 100644
index 0000000..fa35982
--- /dev/null
+++ b/docs/css/full_list.css
@@ -0,0 +1,58 @@
+body {
+  margin: 0;
+  font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif;
+  font-size: 13px;
+  height: 101%;
+  overflow-x: hidden;
+  background: #fafafa;
+}
+
+h1 { padding: 12px 10px; padding-bottom: 0; margin: 0; font-size: 1.4em; }
+.clear { clear: both; }
+.fixed_header { position: fixed; background: #fff; width: 100%; padding-bottom: 10px; margin-top: 0; top: 0; z-index: 9999; height: 70px; }
+#search { position: absolute; right: 5px; top: 9px; padding-left: 24px; }
+#content.insearch #search, #content.insearch #noresults { background: url(data:image/gif;base64,R0lGODlhEAAQAPYAAP///wAAAPr6+pKSkoiIiO7u7sjIyNjY2J6engAAAI6OjsbGxjIyMlJSUuzs7KamppSUlPLy8oKCghwcHLKysqSkpJqamvT09Pj4+KioqM7OzkRERAwMDGBgYN7e3ujo6Ly8vCoqKjY2NkZGRtTU1MTExDw8PE5OTj4+PkhISNDQ0MrKylpaWrS0tOrq6nBwcKysrLi4uLq6ul5eXlxcXGJiYoaGhuDg4H5+fvz8/KKiohgYGCwsLFZWVgQEBFBQUMzMzDg4OFhYWBoaGvDw8NbW1pycnOLi4ubm5kBAQKqqqiQkJCAgIK6urnJyckpKSjQ0NGpqatLS0sDAwCYmJnx8fEJCQlRUVAoKCggICLCwsOTk5ExMTPb29ra2tmZmZmhoaNzc3KCgoBISEiIiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCAAAACwAAAAAEAAQAAAHaIAAgoMgIiYlg4kACxIaACEJCSiKggYMCRselwkpghGJBJEcFgsjJyoAGBmfggcNEx0flBiKDhQFlIoCCA+5lAORFb4AJIihCRbDxQAFChAXw9HSqb60iREZ1omqrIPdJCTe0SWI09GBACH5BAkIAAAALAAAAAAQABAAAAdrgACCgwc0NTeDiYozCQkvOTo9GTmDKy8aFy+NOBA7CTswgywJDTIuEjYFIY0JNYMtKTEFiRU8Pjwygy4ws4owPyCKwsMAJSTEgiQlgsbIAMrO0dKDGMTViREZ14kYGRGK38nHguHEJcvTyIEAIfkECQgAAAAsAAAAABAAEAAAB2iAAIKDAggPg4iJAAMJCRUAJRIqiRGCBI0WQEEJJkWDERkYAAUKEBc4Po1GiKKJHkJDNEeKig4URLS0ICImJZAkuQAhjSi/wQyNKcGDCyMnk8u5rYrTgqDVghgZlYjcACTA1sslvtHRgQAh+QQJCAAAACwAAAAAEAAQAAAHZ4AAgoOEhYaCJSWHgxGDJCQARAtOUoQRGRiFD0kJUYWZhUhKT1OLhR8wBaaFBzQ1NwAlkIszCQkvsbOHL7Y4q4IuEjaqq0ZQD5+GEEsJTDCMmIUhtgk1lo6QFUwJVDKLiYJNUd6/hoEAIfkECQgAAAAsAAAAABAAEAAAB2iAAIKDhIWGgiUlh4MRgyQkjIURGRiGGBmNhJWHm4uen4ICCA+IkIsDCQkVACWmhwSpFqAABQoQF6ALTkWFnYMrVlhWvIKTlSAiJiVVPqlGhJkhqShHV1lCW4cMqSkAR1ofiwsjJyqGgQAh+QQJCAAAACwAAAAAEAAQAAAHZ4AAgoOEhYaCJSWHgxGDJCSMhREZGIYYGY2ElYebi56fhyWQniSKAKKfpaCLFlAPhl0gXYNGEwkhGYREUywag1wJwSkHNDU3D0kJYIMZQwk8MjPBLx9eXwuETVEyAC/BOKsuEjYFhoEAIfkECQgAAAAsAAAAABAAEAAAB2eAAIKDhIWGgiUlh4MRgyQkjIURGRiGGBmNhJWHm4ueICImip6CIQkJKJ4kigynKaqKCyMnKqSEK05StgAGQRxPYZaENqccFgIID4KXmQBhXFkzDgOnFYLNgltaSAAEpxa7BQoQF4aBACH5BAkIAAAALAAAAAAQABAAAAdogACCg4SFggJiPUqCJSWGgkZjCUwZACQkgxGEXAmdT4UYGZqCGWQ+IjKGGIUwPzGPhAc0NTewhDOdL7Ykji+dOLuOLhI2BbaFETICx4MlQitdqoUsCQ2vhKGjglNfU0SWmILaj43M5oEAOwAAAAAAAAAAAA==) no-repeat center left; }
+#full_list { padding: 0; list-style: none; margin-left: 0; margin-top: 80px; font-size: 1.1em; }
+#full_list ul { padding: 0; }
+#full_list li { padding: 0; margin: 0; list-style: none; }
+#full_list li .item { padding: 5px 5px 5px 12px; }
+#noresults { padding: 7px 12px; background: #fff; }
+#content.insearch #noresults { margin-left: 7px; }
+li.collapsed ul { display: none; }
+li a.toggle { cursor: default; position: relative; left: -5px; top: 4px; text-indent: -999px; width: 10px; height: 9px; margin-left: -10px; display: block; float: left; background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK8AAACvABQqw0mAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTM5jWRgMAAAAVdEVYdENyZWF0aW9uIFRpbWUAMy8xNC8wOeNZPpQAAAE2SURBVDiNrZTBccIwEEXfelIAHUA6CZ24BGaWO+FuzZAK4k6gg5QAdGAq+Bxs2Yqx7BzyL7Llp/VfzZeQhCTc/ezuGzKKnKSzpCxXJM8fwNXda3df5RZETlIt6YUzSQDs93sl8w3wBZxCCE10GM1OcWbWjB2mWgEH4Mfdyxm3PSepBHibgQE2wLe7r4HjEidpnXMYdQPKEMJcsZ4zs2POYQOcaPfwMVOo58zsAdMt18BuoVDPxUJRacELbXv3hUIX2vYmOUvi8C8ydz/ThjXrqKqqLbDIAdsCKBd+Wo7GWa7o9qzOQHVVVXeAbs+yHHCH4aTsaCOQqunmUy1yBUAXkdMIfMlgF5EXLo2OpV/c/Up7jG4hhHcYLgWzAZXUc2b2ixsfvc/RmNNfOXD3Q/oeL9axJE1yT9IOoUu6MGUkAAAAAElFTkSuQmCC) no-repeat bottom left; }
+li.collapsed a.toggle { opacity: 0.5; cursor: default; background-position: top left; }
+li { color: #888; cursor: pointer; }
+li.deprecated { text-decoration: line-through; font-style: italic; }
+li.odd { background: #f0f0f0; }
+li.even { background: #fafafa; }
+.item:hover { background: #ddd; }
+li small:before { content: "("; }
+li small:after { content: ")"; }
+li small.search_info { display: none; }
+a, a:visited { text-decoration: none; color: #05a; }
+li.clicked > .item { background: #05a; color: #ccc; }
+li.clicked > .item a, li.clicked > .item a:visited { color: #eee; }
+li.clicked > .item a.toggle { opacity: 0.5; background-position: bottom right; }
+li.collapsed.clicked a.toggle { background-position: top right; }
+#search input { border: 1px solid #bbb; border-radius: 3px; }
+#full_list_nav { margin-left: 10px; font-size: 0.9em; display: block; color: #aaa; }
+#full_list_nav a, #nav a:visited { color: #358; }
+#full_list_nav a:hover { background: transparent; color: #5af; }
+#full_list_nav span:after { content: ' | '; }
+#full_list_nav span:last-child:after { content: ''; }
+
+#content h1 { margin-top: 0; }
+li { white-space: nowrap; cursor: normal; }
+li small { display: block; font-size: 0.8em; }
+li small:before { content: ""; }
+li small:after { content: ""; }
+li small.search_info { display: none; }
+#search { width: 170px; position: static; margin: 3px; margin-left: 10px; font-size: 0.9em; color: #888; padding-left: 0; padding-right: 24px; }
+#content.insearch #search { background-position: center right; }
+#search input { width: 110px; }
+
+#full_list.insearch ul { display: block; }
+#full_list.insearch .item { display: none; }
+#full_list.insearch .found { display: block; padding-left: 11px !important; }
+#full_list.insearch li a.toggle { display: none; }
+#full_list.insearch li small.search_info { display: block; }
diff --git a/docs/css/style.css b/docs/css/style.css
new file mode 100644
index 0000000..eb0dbc8
--- /dev/null
+++ b/docs/css/style.css
@@ -0,0 +1,497 @@
+html {
+  width: 100%;
+  height: 100%;
+}
+body {
+  font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif;
+  font-size: 13px;
+  width: 100%;
+  margin: 0;
+  padding: 0;
+  display: flex;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+}
+
+#nav {
+  position: relative;
+  width: 100%;
+  height: 100%;
+  border: 0;
+  border-right: 1px dotted #eee;
+  overflow: auto;
+}
+.nav_wrap {
+  margin: 0;
+  padding: 0;
+  width: 20%;
+  height: 100%;
+  position: relative;
+  display: flex;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  flex-shrink: 0;
+  -webkit-flex-shrink: 0;
+  -ms-flex: 1 0;
+}
+#resizer {
+  position: absolute;
+  right: -5px;
+  top: 0;
+  width: 10px;
+  height: 100%;
+  cursor: col-resize;
+  z-index: 9999;
+}
+#main {
+  flex: 5 1;
+  -webkit-flex: 5 1;
+  -ms-flex: 5 1;
+  outline: none;
+  position: relative;
+  background: #fff;
+  padding: 1.2em;
+  padding-top: 0.2em;
+  box-sizing: border-box;
+}
+
+@media (max-width: 920px) {
+  .nav_wrap { width: 100%; top: 0; right: 0; overflow: visible; position: absolute; }
+  #resizer { display: none; }
+  #nav {
+    z-index: 9999;
+    background: #fff;
+    display: none;
+    position: absolute;
+    top: 40px;
+    right: 12px;
+    width: 500px;
+    max-width: 80%;
+    height: 80%;
+    overflow-y: scroll;
+    border: 1px solid #999;
+    border-collapse: collapse;
+    box-shadow: -7px 5px 25px #aaa;
+    border-radius: 2px;
+  }
+}
+
+@media (min-width: 920px) {
+  body { height: 100%; overflow: hidden; }
+  #main { height: 100%; overflow: auto; }
+  #search { display: none; }
+}
+
+#main img { max-width: 100%; }
+h1 { font-size: 25px; margin: 1em 0 0.5em; padding-top: 4px; border-top: 1px dotted #d5d5d5; }
+h1.noborder { border-top: 0px; margin-top: 0; padding-top: 4px; }
+h1.title { margin-bottom: 10px; }
+h1.alphaindex { margin-top: 0; font-size: 22px; }
+h2 {
+  padding: 0;
+  padding-bottom: 3px;
+  border-bottom: 1px #aaa solid;
+  font-size: 1.4em;
+  margin: 1.8em 0 0.5em;
+  position: relative;
+}
+h2 small { font-weight: normal; font-size: 0.7em; display: inline; position: absolute; right: 0; }
+h2 small a {
+  display: block;
+  height: 20px;
+  border: 1px solid #aaa;
+  border-bottom: 0;
+  border-top-left-radius: 5px;
+  background: #f8f8f8;
+  position: relative;
+  padding: 2px 7px;
+}
+.clear { clear: both; }
+.inline { display: inline; }
+.inline p:first-child { display: inline; }
+.docstring, .tags, #filecontents { font-size: 15px; line-height: 1.5145em; }
+.docstring p > code, .docstring p > tt, .tags p > code, .tags p > tt {
+  color: #c7254e; background: #f9f2f4; padding: 2px 4px; font-size: 1em;
+  border-radius: 4px;
+}
+.docstring h1, .docstring h2, .docstring h3, .docstring h4 { padding: 0; border: 0; border-bottom: 1px dotted #bbb; }
+.docstring h1 { font-size: 1.2em; }
+.docstring h2 { font-size: 1.1em; }
+.docstring h3, .docstring h4 { font-size: 1em; border-bottom: 0; padding-top: 10px; }
+.summary_desc .object_link a, .docstring .object_link a {
+  font-family: monospace; font-size: 1.05em;
+  color: #05a; background: #EDF4FA; padding: 2px 4px; font-size: 1em;
+  border-radius: 4px;
+}
+.rdoc-term { padding-right: 25px; font-weight: bold; }
+.rdoc-list p { margin: 0; padding: 0; margin-bottom: 4px; }
+.summary_desc pre.code .object_link a, .docstring pre.code .object_link a {
+  padding: 0px; background: inherit; color: inherit; border-radius: inherit;
+}
+
+/* style for <table> */
+#filecontents table, .docstring table { border-collapse: collapse; }
+#filecontents table th, #filecontents table td,
+.docstring table th, .docstring table td { border: 1px solid #ccc; padding: 8px; padding-right: 17px; }
+#filecontents table tr:nth-child(odd),
+.docstring table tr:nth-child(odd) { background: #eee; }
+#filecontents table tr:nth-child(even),
+.docstring table tr:nth-child(even) { background: #fff; }
+#filecontents table th, .docstring table th { background: #fff; }
+
+/* style for <ul> */
+#filecontents li > p, .docstring li > p { margin: 0px; }
+#filecontents ul, .docstring ul { padding-left: 20px; }
+/* style for <dl> */
+#filecontents dl, .docstring dl { border: 1px solid #ccc; }
+#filecontents dt, .docstring dt { background: #ddd; font-weight: bold; padding: 3px 5px; }
+#filecontents dd, .docstring dd { padding: 5px 0px; margin-left: 18px; }
+#filecontents dd > p, .docstring dd > p { margin: 0px; }
+
+.note {
+  color: #222;
+  margin: 20px 0;
+  padding: 10px;
+  border: 1px solid #eee;
+  border-radius: 3px;
+  display: block;
+}
+.docstring .note {
+  border-left-color: #ccc;
+  border-left-width: 5px;
+}
+.note.todo { background: #ffffc5; border-color: #ececaa; }
+.note.returns_void { background: #efefef; }
+.note.deprecated { background: #ffe5e5; border-color: #e9dada; }
+.note.title.deprecated { background: #ffe5e5; border-color: #e9dada; }
+.note.private { background: #ffffc5; border-color: #ececaa; }
+.note.title { padding: 3px 6px; font-size: 0.9em; font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif; display: inline; }
+.summary_signature + .note.title { margin-left: 7px; }
+h1 .note.title { font-size: 0.5em; font-weight: normal; padding: 3px 5px; position: relative; top: -3px; text-transform: capitalize; }
+.note.title { background: #efefef; }
+.note.title.constructor { color: #fff; background: #6a98d6; border-color: #6689d6; }
+.note.title.writeonly { color: #fff; background: #45a638; border-color: #2da31d; }
+.note.title.readonly { color: #fff; background: #6a98d6; border-color: #6689d6; }
+.note.title.private { background: #d5d5d5; border-color: #c5c5c5; }
+.note.title.not_defined_here { background: transparent; border: none; font-style: italic; }
+.discussion .note { margin-top: 6px; }
+.discussion .note:first-child { margin-top: 0; }
+
+h3.inherited {
+  font-style: italic;
+  font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif;
+  font-weight: normal;
+  padding: 0;
+  margin: 0;
+  margin-top: 12px;
+  margin-bottom: 3px;
+  font-size: 13px;
+}
+p.inherited {
+  padding: 0;
+  margin: 0;
+  margin-left: 25px;
+}
+
+.box_info dl {
+  margin: 0;
+  border: 0;
+  width: 100%;
+  font-size: 1em;
+  display: flex;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+}
+.box_info dl dt {
+  flex-shrink: 0;
+  -webkit-flex-shrink: 1;
+  -ms-flex-shrink: 1;
+  width: 100px;
+  text-align: right;
+  font-weight: bold;
+  border: 1px solid #aaa;
+  border-width: 1px 0px 0px 1px;
+  padding: 6px 0;
+  padding-right: 10px;
+}
+.box_info dl dd {
+  flex-grow: 1;
+  -webkit-flex-grow: 1;
+  -ms-flex: 1;
+  max-width: 420px;
+  padding: 6px 0;
+  padding-right: 20px;
+  border: 1px solid #aaa;
+  border-width: 1px 1px 0 0;
+  overflow: hidden;
+  position: relative;
+}
+.box_info dl:last-child > * {
+  border-bottom: 1px solid #aaa;
+}
+.box_info dl:nth-child(odd) > * { background: #eee; }
+.box_info dl:nth-child(even) > * { background: #fff; }
+.box_info dl > * { margin: 0; }
+
+ul.toplevel { list-style: none; padding-left: 0; font-size: 1.1em; }
+.index_inline_list { padding-left: 0; font-size: 1.1em; }
+
+.index_inline_list li {
+  list-style: none;
+  display: inline-block;
+  padding: 0 12px;
+  line-height: 30px;
+  margin-bottom: 5px;
+}
+
+dl.constants { margin-left: 10px; }
+dl.constants dt { font-weight: bold; font-size: 1.1em; margin-bottom: 5px; }
+dl.constants.compact dt { display: inline-block; font-weight: normal }
+dl.constants dd { width: 75%; white-space: pre; font-family: monospace; margin-bottom: 18px; }
+dl.constants .docstring .note:first-child { margin-top: 5px; }
+
+.summary_desc {
+  margin-left: 32px;
+  display: block;
+  font-family: sans-serif;
+  font-size: 1.1em;
+  margin-top: 8px;
+  line-height: 1.5145em;
+  margin-bottom: 0.8em;
+}
+.summary_desc tt { font-size: 0.9em; }
+dl.constants .note { padding: 2px 6px; padding-right: 12px; margin-top: 6px; }
+dl.constants .docstring { margin-left: 32px; font-size: 0.9em; font-weight: normal; }
+dl.constants .tags { padding-left: 32px; font-size: 0.9em; line-height: 0.8em; }
+dl.constants .discussion *:first-child { margin-top: 0; }
+dl.constants .discussion *:last-child { margin-bottom: 0; }
+
+.method_details { border-top: 1px dotted #ccc; margin-top: 25px; padding-top: 0; }
+.method_details.first { border: 0; margin-top: 5px; }
+.method_details.first h3.signature { margin-top: 1em; }
+p.signature, h3.signature {
+  font-size: 1.1em; font-weight: normal; font-family: Monaco, Consolas, Courier, monospace;
+  padding: 6px 10px; margin-top: 1em;
+  background: #E8F4FF; border: 1px solid #d8d8e5; border-radius: 5px;
+}
+p.signature tt,
+h3.signature tt { font-family: Monaco, Consolas, Courier, monospace; }
+p.signature .overload,
+h3.signature .overload { display: block; }
+p.signature .extras,
+h3.signature .extras { font-weight: normal; font-family: sans-serif; color: #444; font-size: 1em; }
+p.signature .not_defined_here,
+h3.signature .not_defined_here,
+p.signature .aliases,
+h3.signature .aliases { display: block; font-weight: normal; font-size: 0.9em; font-family: sans-serif; margin-top: 0px; color: #555; }
+p.signature .aliases .names,
+h3.signature .aliases .names { font-family: Monaco, Consolas, Courier, monospace; font-weight: bold; color: #000; font-size: 1.2em; }
+
+.tags .tag_title { font-size: 1.05em; margin-bottom: 0; font-weight: bold; }
+.tags .tag_title tt { color: initial; padding: initial; background: initial; }
+.tags ul { margin-top: 5px; padding-left: 30px; list-style: square; }
+.tags ul li { margin-bottom: 3px; }
+.tags ul .name { font-family: monospace; font-weight: bold; }
+.tags ul .note { padding: 3px 6px; }
+.tags { margin-bottom: 12px; }
+
+.tags .examples .tag_title { margin-bottom: 10px; font-weight: bold; }
+.tags .examples .inline p { padding: 0; margin: 0; font-weight: bold; font-size: 1em; }
+.tags .examples .inline p:before { content: "▸"; font-size: 1em; margin-right: 5px; }
+
+.tags .overload .overload_item { list-style: none; margin-bottom: 25px; }
+.tags .overload .overload_item .signature {
+  padding: 2px 8px;
+  background: #F1F8FF; border: 1px solid #d8d8e5; border-radius: 3px;
+}
+.tags .overload .signature { margin-left: -15px; font-family: monospace; display: block; font-size: 1.1em; }
+.tags .overload .docstring { margin-top: 15px; }
+
+.defines { display: none; }
+
+#method_missing_details .notice.this { position: relative; top: -8px; color: #888; padding: 0; margin: 0; }
+
+.showSource { font-size: 0.9em; }
+.showSource a, .showSource a:visited { text-decoration: none; color: #666; }
+
+#content a, #content a:visited { text-decoration: none; color: #05a; }
+#content a:hover { background: #ffffa5; }
+
+ul.summary {
+  list-style: none;
+  font-family: monospace;
+  font-size: 1em;
+  line-height: 1.5em;
+  padding-left: 0px;
+}
+ul.summary a, ul.summary a:visited {
+  text-decoration: none; font-size: 1.1em;
+}
+ul.summary li { margin-bottom: 5px; }
+.summary_signature { padding: 4px 8px; background: #f8f8f8; border: 1px solid #f0f0f0; border-radius: 5px; }
+.summary_signature:hover { background: #CFEBFF; border-color: #A4CCDA; cursor: pointer; }
+.summary_signature.deprecated { background: #ffe5e5; border-color: #e9dada; }
+ul.summary.compact li { display: inline-block; margin: 0px 5px 0px 0px; line-height: 2.6em;}
+ul.summary.compact .summary_signature { padding: 5px 7px; padding-right: 4px; }
+#content .summary_signature:hover a,
+#content .summary_signature:hover a:visited {
+  background: transparent;
+  color: #049;
+}
+
+p.inherited a { font-family: monospace; font-size: 0.9em; }
+p.inherited { word-spacing: 5px; font-size: 1.2em; }
+
+p.children { font-size: 1.2em; }
+p.children a { font-size: 0.9em; }
+p.children strong { font-size: 0.8em; }
+p.children strong.modules { padding-left: 5px; }
+
+ul.fullTree { display: none; padding-left: 0; list-style: none; margin-left: 0; margin-bottom: 10px; }
+ul.fullTree ul { margin-left: 0; padding-left: 0; list-style: none; }
+ul.fullTree li { text-align: center; padding-top: 18px; padding-bottom: 12px; background: url(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAHtJREFUeNqMzrEJAkEURdGzuhgZbSoYWcAWoBVsB4JgZAGmphsZCZYzTQgWNCYrDN9RvMmHx+X916SUBFbo8CzD1idXrLErw1mQttgXtyrOcQ/Ny5p4Qh+2XqLYYazsPWNTiuMkRxa4vcV+evuNAUOLIx5+c2hyzv7hNQC67Q+/HHmlEwAAAABJRU5ErkJggg==) no-repeat top center; }
+ul.fullTree li:first-child { padding-top: 0; background: transparent; }
+ul.fullTree li:last-child { padding-bottom: 0; }
+.showAll ul.fullTree { display: block; }
+.showAll .inheritName { display: none; }
+
+#search { position: absolute; right: 12px; top: 0px; z-index: 9000; }
+#search a {
+  display: block; float: left;
+  padding: 4px 8px; text-decoration: none; color: #05a; fill: #05a;
+  border: 1px solid #d8d8e5;
+  border-bottom-left-radius: 3px; border-bottom-right-radius: 3px;
+  background: #F1F8FF;
+  box-shadow: -1px 1px 3px #ddd;
+}
+#search a:hover { background: #f5faff; color: #06b; fill: #06b; }
+#search a.active {
+  background: #568; padding-bottom: 20px; color: #fff; fill: #fff;
+  border: 1px solid #457;
+  border-top-left-radius: 5px; border-top-right-radius: 5px;
+}
+#search a.inactive { color: #999; fill: #999; }
+.inheritanceTree, .toggleDefines {
+  float: right;
+  border-left: 1px solid #aaa;
+  position: absolute; top: 0; right: 0;
+  height: 100%;
+  background: #f6f6f6;
+  padding: 5px;
+  min-width: 55px;
+  text-align: center;
+}
+
+#menu { font-size: 1.3em; color: #bbb; }
+#menu .title, #menu a { font-size: 0.7em; }
+#menu .title a { font-size: 1em; }
+#menu .title { color: #555; }
+#menu a, #menu a:visited { color: #333; text-decoration: none; border-bottom: 1px dotted #bbd; }
+#menu a:hover { color: #05a; }
+
+#footer { margin-top: 15px; border-top: 1px solid #ccc; text-align: center; padding: 7px 0; color: #999; }
+#footer a, #footer a:visited { color: #444; text-decoration: none; border-bottom: 1px dotted #bbd; }
+#footer a:hover { color: #05a; }
+
+#listing ul.alpha { font-size: 1.1em; }
+#listing ul.alpha { margin: 0; padding: 0; padding-bottom: 10px; list-style: none; }
+#listing ul.alpha li.letter { font-size: 1.4em; padding-bottom: 10px; }
+#listing ul.alpha ul { margin: 0; padding-left: 15px; }
+#listing ul small { color: #666; font-size: 0.7em; }
+
+li.r1 { background: #f0f0f0; }
+li.r2 { background: #fafafa; }
+
+#content ul.summary li.deprecated .summary_signature a,
+#content ul.summary li.deprecated .summary_signature a:visited { text-decoration: line-through; font-style: italic; }
+
+#toc {
+  position: relative;
+  float: right;
+  overflow-x: auto;
+  right: -3px;
+  margin-left: 20px;
+  margin-bottom: 20px;
+  padding: 20px; padding-right: 30px;
+  max-width: 300px;
+  z-index: 5000;
+  background: #fefefe;
+  border: 1px solid #ddd;
+  box-shadow: -2px 2px 6px #bbb;
+}
+#toc .title { margin: 0; }
+#toc ol { padding-left: 1.8em; }
+#toc li { font-size: 1.1em; line-height: 1.7em; }
+#toc > ol > li { font-size: 1.1em; font-weight: bold; }
+#toc ol > li > ol { font-size: 0.9em; }
+#toc ol ol > li > ol { padding-left: 2.3em; }
+#toc ol + li { margin-top: 0.3em; }
+#toc.hidden { padding: 10px; background: #fefefe; box-shadow: none; }
+#toc.hidden:hover { background: #fafafa; }
+#filecontents h1 + #toc.nofloat { margin-top: 0; }
+@media (max-width: 560px) {
+  #toc {
+    margin-left: 0;
+    margin-top: 16px;
+    float: none;
+    max-width: none;
+  }
+}
+
+/* syntax highlighting */
+.source_code { display: none; padding: 3px 8px; border-left: 8px solid #ddd; margin-top: 5px; }
+#filecontents pre.code, .docstring pre.code, .source_code pre { font-family: monospace; }
+#filecontents pre.code, .docstring pre.code { display: block; }
+.source_code .lines { padding-right: 12px; color: #555; text-align: right; }
+#filecontents pre.code, .docstring pre.code,
+.tags pre.example {
+  padding: 9px 14px;
+  margin-top: 4px;
+  border: 1px solid #e1e1e8;
+  background: #f7f7f9;
+  border-radius: 4px;
+  font-size: 1em;
+  overflow-x: auto;
+  line-height: 1.2em;
+}
+pre.code { color: #000; tab-size: 2; }
+pre.code .info.file { color: #555; }
+pre.code .val { color: #036A07; }
+pre.code .tstring_content,
+pre.code .heredoc_beg, pre.code .heredoc_end,
+pre.code .qwords_beg, pre.code .qwords_end, pre.code .qwords_sep,
+pre.code .words_beg, pre.code .words_end, pre.code .words_sep,
+pre.code .qsymbols_beg, pre.code .qsymbols_end, pre.code .qsymbols_sep,
+pre.code .symbols_beg, pre.code .symbols_end, pre.code .symbols_sep,
+pre.code .tstring, pre.code .dstring { color: #036A07; }
+pre.code .fid, pre.code .rubyid_new, pre.code .rubyid_to_s,
+pre.code .rubyid_to_sym, pre.code .rubyid_to_f,
+pre.code .dot + pre.code .id,
+pre.code .rubyid_to_i pre.code .rubyid_each { color: #0085FF; }
+pre.code .comment { color: #0066FF; }
+pre.code .const, pre.code .constant { color: #585CF6; }
+pre.code .label,
+pre.code .symbol { color: #C5060B; }
+pre.code .kw,
+pre.code .rubyid_require,
+pre.code .rubyid_extend,
+pre.code .rubyid_include { color: #0000FF; }
+pre.code .ivar { color: #318495; }
+pre.code .gvar,
+pre.code .rubyid_backref,
+pre.code .rubyid_nth_ref { color: #6D79DE; }
+pre.code .regexp, .dregexp { color: #036A07; }
+pre.code a { border-bottom: 1px dotted #bbf; }
+/* inline code */
+*:not(pre) > code {
+	padding: 1px 3px 1px 3px;
+	border: 1px solid #E1E1E8;
+	background: #F7F7F9;
+	border-radius: 4px;
+}
+
+/* Color fix for links */
+#content .summary_desc pre.code .id > .object_link a, /* identifier */
+#content .docstring pre.code .id > .object_link a { color: #0085FF; }
+#content .summary_desc pre.code .const > .object_link a, /* constant */
+#content .docstring pre.code .const > .object_link a { color: #585CF6; }
diff --git a/docs/file.README.html b/docs/file.README.html
new file mode 100644
index 0000000..03157ab
--- /dev/null
+++ b/docs/file.README.html
@@ -0,0 +1,359 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  File: README
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "README";
+  relpath = '';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="file_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="_index.html">Index</a> &raquo; 
+    <span class="title">File: README</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><div id='filecontents'>
+<h1 id="label-DBF">DBF</h1>
+
+<p><a href="https://rubygems.org/gems/dbf"><img src="https://img.shields.io/gem/v/dbf.svg?style=flat"></a> <a href="https://travis-ci.com/infused/dbf"><img src="https://img.shields.io/travis/infused/dbf/master.svg?style=flat"></a> <a href="https://codeclimate.com/github/infused/dbf"><img src="https://img.shields.io/codeclimate/maintainability/infused/dbf.svg?style=flat"></a> <a href="https://codeclimate.com/github/infused/dbf"><img src="https://img.shields.io/codeclimate/c/infused/dbf.svg?style=flat"></a> <a href="https://rubygems.org/gems/dbf/"><img src="https://img.shields.io/gem/dt/dbf.svg"></a> <a href="https://github.com/infused/dbf"><img src="https://img.shields.io/github/license/infused/dbf.svg"></a></p>
+
+<p>DBF is a small fast library for reading dBase, xBase, Clipper and FoxPro database files</p>
+<ul><li>
+<p>Project page: <a href="https://github.com/infused/dbf">github.com/infused/dbf</a></p>
+</li><li>
+<p>API Documentation: <a href="https://dbf.infused.org">dbf.infused.org</a></p>
+</li><li>
+<p>Report bugs: <a href="https://github.com/infused/dbf/issues">github.com/infused/dbf/issues</a></p>
+</li><li>
+<p>Questions: Email <a href="mailto:keithm@infused.org">keithm@infused.org</a> and put DBF somewhere in the  subject line</p>
+</li><li>
+<p>Change log: <a href="https://github.com/infused/dbf/blob/master/CHANGELOG.md">github.com/infused/dbf/blob/master/CHANGELOG.md</a></p>
+</li></ul>
+
+<p>NOTE: Beginning with version 4 we have dropped support for Ruby 2.0, 2.1, 2.2, and 2.3. If you need support for these older Rubies, please use 3.0.x (<a href="https://github.com/infused.org/dbf/tree/3_stable">github.com/infused.org/dbf/tree/3_stable</a>)</p>
+
+<p>NOTE: Beginning with version 3 we have dropped support for Ruby 1.8 and 1.9. If you need support for older Rubies, please use 2.0.x (<a href="https://github.com/infused/dbf/tree/2_stable">github.com/infused/dbf/tree/2_stable</a>)</p>
+
+<h2 id="label-Compatibility">Compatibility</h2>
+
+<p>DBF is tested to work with the following versions of Ruby:</p>
+<ul><li>
+<p>Ruby 2.4.x, 2.5.x, 2.6.x, 2.7.x, 3.0.x, TruffleRuby</p>
+</li></ul>
+
+<h2 id="label-Installation">Installation</h2>
+
+<p>Install the gem manually:</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_gem'>gem</span> <span class='id identifier rubyid_install'>install</span> <span class='id identifier rubyid_dbf'>dbf</span>
+</code></pre>
+
+<p>Or add to your Gemfile:</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_gem'>gem</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dbf</span><span class='tstring_end'>&#39;</span></span>
+</code></pre>
+
+<h2 id="label-Basic+Usage">Basic Usage</h2>
+
+<p>Open a DBF file using a path:</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dbf</span><span class='tstring_end'>&#39;</span></span>
+<span class='id identifier rubyid_widgets'>widgets</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="DBF/Table.html" title="DBF::Table (class)">Table</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="DBF/Table.html#initialize-instance_method" title="DBF::Table#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>widgets.dbf</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
+</code></pre>
+
+<p>Open a DBF file using an IO object:</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_data'>data</span> <span class='op'>=</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_open'>open</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>widgets.dbf</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
+<span class='id identifier rubyid_widgets'>widgets</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="DBF/Table.html" title="DBF::Table (class)">Table</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="DBF/Table.html#initialize-instance_method" title="DBF::Table#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
+</code></pre>
+
+<p>Open a DBF by passing in raw data (wrap the raw data with StringIO):</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_widgets'>widgets</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="DBF/Table.html" title="DBF::Table (class)">Table</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="DBF/Table.html#initialize-instance_method" title="DBF::Table#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='const'>StringIO</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>raw binary data</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='rparen'>)</span>
+</code></pre>
+
+<p>Enumerate all records</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_widgets'>widgets</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_record'>record</span><span class='op'>|</span>
+  <span class='id identifier rubyid_puts'>puts</span> <span class='id identifier rubyid_record'>record</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span>
+  <span class='id identifier rubyid_puts'>puts</span> <span class='id identifier rubyid_record'>record</span><span class='period'>.</span><span class='id identifier rubyid_email'>email</span>
+<span class='kw'>end</span>
+</code></pre>
+
+<p>Find a single record</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_widget'>widget</span> <span class='op'>=</span> <span class='id identifier rubyid_widgets'>widgets</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span><span class='lparen'>(</span><span class='int'>6</span><span class='rparen'>)</span>
+</code></pre>
+
+<p>Note that find() will return nil if the requested record has been deleted and not yet pruned from the database.</p>
+
+<p>The value for an attribute can be accessed via element reference in several ways.</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_widget'>widget</span><span class='period'>.</span><span class='id identifier rubyid_slot_number'>slot_number</span>     <span class='comment'># underscored field name as method
+</span>
+<span class='id identifier rubyid_widget'>widget</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>SlotNumber</span><span class='tstring_end'>&quot;</span></span><span class='rbracket'>]</span>   <span class='comment'># original field name in dbf file
+</span><span class='id identifier rubyid_widget'>widget</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>slot_number</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>  <span class='comment'># underscored field name string
+</span><span class='id identifier rubyid_widget'>widget</span><span class='lbracket'>[</span><span class='symbol'>:slot_number</span><span class='rbracket'>]</span>   <span class='comment'># underscored field name symbol
+</span></code></pre>
+
+<p>Get a hash of all attributes. The keys are the original column names.</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_widget'>widget</span><span class='period'>.</span><span class='id identifier rubyid_attributes'>attributes</span>
+<span class='comment'># =&gt; {&quot;Name&quot; =&gt; &quot;Thing1 | SlotNumber&quot; =&gt; 1}
+</span></code></pre>
+
+<p>Search for records using a simple hash format. Multiple search criteria are ANDed. Use the block form if the resulting recordset could be large, otherwise all records will be loaded into memory.</p>
+
+<pre class="code ruby"><code class="ruby"><span class='comment'># find all records with slot_number equal to s42
+</span><span class='id identifier rubyid_widgets'>widgets</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span><span class='lparen'>(</span><span class='symbol'>:all</span><span class='comma'>,</span> <span class='label'>slot_number:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>s42</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_widget'>widget</span><span class='op'>|</span>
+  <span class='comment'># the record will be nil if deleted, but not yet pruned from the database
+</span>  <span class='kw'>if</span> <span class='id identifier rubyid_widget'>widget</span>
+    <span class='id identifier rubyid_puts'>puts</span> <span class='id identifier rubyid_widget'>widget</span><span class='period'>.</span><span class='id identifier rubyid_serial_number'>serial_number</span>
+  <span class='kw'>end</span>
+<span class='kw'>end</span>
+
+<span class='comment'># find the first record with slot_number equal to s42
+</span><span class='id identifier rubyid_widgets'>widgets</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span> <span class='symbol'>:first</span><span class='comma'>,</span> <span class='label'>slot_number:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>s42</span><span class='tstring_end'>&#39;</span></span>
+
+<span class='comment'># find record number 10
+</span><span class='id identifier rubyid_widgets'>widgets</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span><span class='lparen'>(</span><span class='int'>10</span><span class='rparen'>)</span>
+</code></pre>
+
+<h2 id="label-Enumeration">Enumeration</h2>
+
+<p>DBF::Table is a Ruby Enumerable. This means you can use any Enumerable method. This means that you get a bunch of traversal, searching and sorting methods for free. For example, let&#39;s get only records created before January 1st, 2015:</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_widgets'>widgets</span><span class='period'>.</span><span class='id identifier rubyid_select'>select</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_w'>w</span><span class='op'>|</span> <span class='id identifier rubyid_w'>w</span><span class='period'>.</span><span class='id identifier rubyid_created_date'>created_date</span> <span class='op'>&lt;</span> <span class='const'>Date</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='int'>2015</span><span class='comma'>,</span> <span class='int'>1</span><span class='comma'>,</span> <span class='int'>1</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
+</code></pre>
+
+<p>Or custom sorting:</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_widgets'>widgets</span><span class='period'>.</span><span class='id identifier rubyid_sort_by'>sort_by</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_w'>w</span><span class='op'>|</span> <span class='id identifier rubyid_w'>w</span><span class='period'>.</span><span class='id identifier rubyid_created_date'>created_date</span> <span class='rbrace'>}</span>
+</code></pre>
+
+<h2 id="label-Encodings+-28Code+Pages-29">Encodings (Code Pages)</h2>
+
+<p>dBase supports encoding non-english characters in different formats. Unfortunately, the format used is not always set, so you may have to specify it manually. For example, you have a DBF file from Russia and you are getting bad data. Try using the &#39;Russion OEM&#39; encoding:</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_table'>table</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="DBF/Table.html" title="DBF::Table (class)">Table</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="DBF/Table.html#initialize-instance_method" title="DBF::Table#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dbf/books.dbf</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp866</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
+</code></pre>
+
+<p>| Code Page | Encoding | Description | | ——— | ——– | ———– | | 01 | cp437 | U.S. MS–DOS | | 02 | cp850 | International MS–DOS | | 03 | cp1252 | Windows ANSI | | 08 | cp865 | Danish OEM | | 09 | cp437 | Dutch OEM | | 0a | cp850 | Dutch OEM* | | 0b | cp437 | Finnish OEM | | 0d | cp437 | French OEM | | 0e | cp850 | French OEM* | | 0f | cp437 | German OEM | | 10 | cp850 | German OEM* | | 11 | cp437 | Italian OEM | | 12 | cp850 | Italian OEM* | | 13 | cp932 | Japanese Shift-JIS | | 14 | cp850 | Spanish OEM* | | 15 | cp437 | Swedish OEM | | 16 | cp850 | Swedish OEM* | | 17 | cp865 | Norwegian OEM | | 18 | cp437 | Spanish OEM | | 19 | cp437 | English OEM (Britain) | | 1a | cp850 | English OEM (Britain)* | | 1b | cp437 | English OEM (U.S.) | | 1c | cp863 | French OEM (Canada) | | 1d | cp850 | French OEM* | | 1f | cp852 | Czech OEM | | 22 | cp852 | Hungarian OEM | | 23 | cp852 | Polish OEM | | 24 | cp860 | Portuguese OEM | | 25 | cp850 | Portuguese OEM* | | 26 | cp866 | Russian OEM | | 37 | cp850 | English OEM (U.S.)* | | 40 | cp852 | Romanian OEM | | 4d | cp936 | Chinese GBK (PRC) | | 4e | cp949 | Korean (ANSI/OEM) | | 4f | cp950 | Chinese Big5 (Taiwan) | | 50 | cp874 | Thai (ANSI/OEM) | | 57 | cp1252 | ANSI | | 58 | cp1252 | Western European ANSI | | 59 | cp1252 | Spanish ANSI | | 64 | cp852 | Eastern European MS–DOS | | 65 | cp866 | Russian MS–DOS | | 66 | cp865 | Nordic MS–DOS | | 67 | cp861 | Icelandic MS–DOS | | 6a | cp737 | Greek MS–DOS (437G) | | 6b | cp857 | Turkish MS–DOS | | 6c | cp863 | French–Canadian MS–DOS | | 78 | cp950 | Taiwan Big 5 | | 79 | cp949 | Hangul (Wansung) | | 7a | cp936 | PRC GBK | | 7b | cp932 | Japanese Shift-JIS | | 7c | cp874 | Thai Windows/MS–DOS | | 86 | cp737 | Greek OEM | | 87 | cp852 | Slovenian OEM | | 88 | cp857 | Turkish OEM | | c8 | cp1250 | Eastern European Windows | | c9 | cp1251 | Russian Windows | | ca | cp1254 | Turkish Windows | | cb | cp1253 | Greek Windows | | cc | cp1257 | Baltic Windows |</p>
+
+<h2 id="label-Migrating+to+ActiveRecord">Migrating to ActiveRecord</h2>
+
+<p>An example of migrating a DBF book table to ActiveRecord using a migration:</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dbf</span><span class='tstring_end'>&#39;</span></span>
+
+<span class='kw'>class</span> <span class='const'>Book</span> <span class='op'>&lt;</span> <span class='const'>ActiveRecord</span><span class='op'>::</span><span class='const'>Base</span><span class='semicolon'>;</span> <span class='kw'>end</span>
+
+<span class='kw'>class</span> <span class='const'>CreateBooks</span> <span class='op'>&lt;</span> <span class='const'>ActiveRecord</span><span class='op'>::</span><span class='const'>Migration</span>
+  <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_up'>up</span>
+    <span class='id identifier rubyid_table'>table</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="DBF/Table.html" title="DBF::Table (class)">Table</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="DBF/Table.html#initialize-instance_method" title="DBF::Table#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>db/dbf/books.dbf</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
+    <span class='id identifier rubyid_eval'>eval</span><span class='lparen'>(</span><span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_schema'>schema</span><span class='rparen'>)</span>
+
+    <span class='const'>Book</span><span class='period'>.</span><span class='id identifier rubyid_reset_column_information'>reset_column_information</span>
+    <span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_record'>record</span><span class='op'>|</span>
+      <span class='const'>Book</span><span class='period'>.</span><span class='id identifier rubyid_create'>create</span><span class='lparen'>(</span><span class='label'>title:</span> <span class='id identifier rubyid_record'>record</span><span class='period'>.</span><span class='id identifier rubyid_title'>title</span><span class='comma'>,</span> <span class='label'>author:</span> <span class='id identifier rubyid_record'>record</span><span class='period'>.</span><span class='id identifier rubyid_author'>author</span><span class='rparen'>)</span>
+    <span class='kw'>end</span>
+  <span class='kw'>end</span>
+
+  <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_down'>down</span>
+    <span class='id identifier rubyid_drop_table'>drop_table</span> <span class='symbol'>:books</span>
+  <span class='kw'>end</span>
+<span class='kw'>end</span>
+</code></pre>
+
+<p>If you have initalized the DBF::Table with raw data, you will need to set the exported table name manually:</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>my_table_name</span><span class='tstring_end'>&#39;</span></span>
+</code></pre>
+
+<h2 id="label-Migrating+to+Sequel">Migrating to Sequel</h2>
+
+<p>An example of migrating a DBF book table to Sequel using a migration:</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dbf</span><span class='tstring_end'>&#39;</span></span>
+
+<span class='kw'>class</span> <span class='const'>Book</span> <span class='op'>&lt;</span> <span class='const'>Sequel</span><span class='op'>::</span><span class='const'>Model</span><span class='semicolon'>;</span> <span class='kw'>end</span>
+
+<span class='const'>Sequel</span><span class='period'>.</span><span class='id identifier rubyid_migration'>migration</span> <span class='kw'>do</span>
+  <span class='id identifier rubyid_up'>up</span> <span class='kw'>do</span>
+    <span class='id identifier rubyid_table'>table</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="DBF/Table.html" title="DBF::Table (class)">Table</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="DBF/Table.html#initialize-instance_method" title="DBF::Table#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>db/dbf/books.dbf</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
+    <span class='id identifier rubyid_eval'>eval</span><span class='lparen'>(</span><span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_schema'>schema</span><span class='lparen'>(</span><span class='symbol'>:sequel</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rparen'>)</span><span class='rparen'>)</span> <span class='comment'># passing true to limit output to create_table() only
+</span>
+    <span class='const'>Book</span><span class='period'>.</span><span class='id identifier rubyid_reset_column_information'>reset_column_information</span>
+    <span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_record'>record</span><span class='op'>|</span>
+      <span class='const'>Book</span><span class='period'>.</span><span class='id identifier rubyid_create'>create</span><span class='lparen'>(</span><span class='label'>title:</span> <span class='id identifier rubyid_record'>record</span><span class='period'>.</span><span class='id identifier rubyid_title'>title</span><span class='comma'>,</span> <span class='label'>author:</span> <span class='id identifier rubyid_record'>record</span><span class='period'>.</span><span class='id identifier rubyid_author'>author</span><span class='rparen'>)</span>
+    <span class='kw'>end</span>
+  <span class='kw'>end</span>
+
+  <span class='id identifier rubyid_down'>down</span> <span class='kw'>do</span>
+    <span class='id identifier rubyid_drop_table'>drop_table</span><span class='lparen'>(</span><span class='symbol'>:books</span><span class='rparen'>)</span>
+  <span class='kw'>end</span>
+<span class='kw'>end</span>
+</code></pre>
+
+<p>If you have initialized the DBF::Table with raw data, you will need to set the exported table name manually:</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>my_table_name</span><span class='tstring_end'>&#39;</span></span>
+</code></pre>
+
+<h2 id="label-Command-line+utility">Command-line utility</h2>
+
+<p>A small command-line utility called dbf is installed along with the gem.</p>
+
+<pre class="code ruby"><code class="ruby">$ dbf -h
+usage: dbf [-h|-s|-a] filename
+  -h = print this message
+  -v = print the version number
+  -s = print summary information
+  -a = create an ActiveRecord::Schema
+  -r = create a Sequel Migration
+  -c = export as CSV
+</code></pre>
+
+<p>Create an executable ActiveRecord schema:</p>
+
+<pre class="code ruby"><code class="ruby">dbf -a books.dbf &gt; books_schema.rb
+</code></pre>
+
+<p>Create an executable Sequel schema:</p>
+
+<pre class="code ruby"><code class="ruby">dbf -r books.dbf &gt; migrate/001_create_books.rb
+</code></pre>
+
+<p>Dump all records to a CSV file:</p>
+
+<pre class="code ruby"><code class="ruby">dbf -c books.dbf &gt; books.csv
+</code></pre>
+
+<h2 id="label-Reading+a+Visual+Foxpro+database+-28v8-2C+v9-29">Reading a Visual Foxpro database (v8, v9)</h2>
+
+<p>A special Database::Foxpro class is available to read Visual Foxpro container files (file with .dbc extension). When using this class long field names are supported and tables can be referenced without using names.</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dbf</span><span class='tstring_end'>&#39;</span></span>
+
+<span class='id identifier rubyid_contacts'>contacts</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="DBF/Database.html" title="DBF::Database (module)">Database</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="DBF/Database/Foxpro.html" title="DBF::Database::Foxpro (class)">Foxpro</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="DBF/Database/Foxpro.html#initialize-instance_method" title="DBF::Database::Foxpro#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>contact_database.dbc</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_contacts'>contacts</span>
+<span class='id identifier rubyid_my_contact'>my_contact</span> <span class='op'>=</span> <span class='id identifier rubyid_contacts'>contacts</span><span class='period'>.</span><span class='id identifier rubyid_record'>record</span><span class='lparen'>(</span><span class='int'>1</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_spouses_interests'>spouses_interests</span>
+</code></pre>
+
+<h2 id="label-dBase+version+compatibility">dBase version compatibility</h2>
+
+<p>The basic dBase data types are generally supported well. Support for the advanced data types in dbase V and FoxPro are still experimental or not supported. If you have insight into how any of the unsupported data types are implemented, please give me a shout. FoxBase/dBase II files are not supported at this time.</p>
+
+<h3 id="label-Supported+data+types+by+dBase+version">Supported data types by dBase version</h3>
+
+<p>| Version | Description | C | N | L | D | M | F | B | G | P | Y | T | I | V | X | @ | O | + | |———|———————————–|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—| | 02 | FoxBase | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - | | 03 | dBase III without memo file | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - | | 04 | dBase IV without memo file | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - | | 05 | dBase V without memo file | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - | | 07 | Visual Objects 1.x | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - | | 30 | Visual FoxPro | Y | Y | Y | Y | Y | Y | Y | Y | N | Y | N | Y | N | N | N | N | - | | 31 | Visual FoxPro with AutoIncrement | Y | Y | Y | Y | Y | Y | Y | Y | N | Y | N | Y | N | N | N | N | N | | 7b | dBase IV with memo file | Y | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | | 83 | dBase III with memo file | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | | 87 | Visual Objects 1.x with memo file | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | | 8b | dBase IV with memo file | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | N | - | - | - | | 8e | dBase IV with SQL table | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | N | - | - | - | | f5 | FoxPro with memo file | Y | Y | Y | Y | Y | Y | Y | Y | N | Y | N | Y | N | N | N | N | N | | fb | FoxPro without memo file | Y | Y | Y | Y | - | Y | Y | Y | N | Y | N | Y | N | N | N | N | N |</p>
+
+<p>Data type descriptions</p>
+<ul><li>
+<p>C = Character</p>
+</li><li>
+<p>N = Number</p>
+</li><li>
+<p>L = Logical</p>
+</li><li>
+<p>D = Date</p>
+</li><li>
+<p>M = Memo</p>
+</li><li>
+<p>F = Float</p>
+</li><li>
+<p>B = Binary</p>
+</li><li>
+<p>G = General</p>
+</li><li>
+<p>P = Picture</p>
+</li><li>
+<p>Y = Currency</p>
+</li><li>
+<p>T = DateTime</p>
+</li><li>
+<p>I = Integer</p>
+</li><li>
+<p>V = VariField</p>
+</li><li>
+<p>X = SQL compat</p>
+</li><li>
+<p>@ = Timestamp</p>
+</li><li>
+<p>O = Double</p>
+</li><li><ul><li>
+<p>= Autoincrement</p>
+</li></ul>
+</li></ul>
+
+<h2 id="label-Limitations">Limitations</h2>
+<ul><li>
+<p>DBF is read-only</p>
+</li><li>
+<p>Index files are not utilized</p>
+</li></ul>
+
+<h2 id="label-License">License</h2>
+
+<p>Copyright © 2006-2021 Keith Morrison &lt;<a href="mailto:keithm@infused.org">keithm@infused.org</a>&gt;</p>
+
+<p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:</p>
+
+<p>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.</p>
+
+<p>THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</p>
+</div></div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:07 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/file_list.html b/docs/file_list.html
new file mode 100644
index 0000000..2b6df40
--- /dev/null
+++ b/docs/file_list.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta charset="utf-8" />
+    
+      <link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen" />
+    
+      <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" />
+    
+
+    
+      <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
+    
+      <script type="text/javascript" charset="utf-8" src="js/full_list.js"></script>
+    
+
+    <title>File List</title>
+    <base id="base_target" target="_parent" />
+  </head>
+  <body>
+    <div id="content">
+      <div class="fixed_header">
+        <h1 id="full_list_header">File List</h1>
+        <div id="full_list_nav">
+          
+            <span><a target="_self" href="class_list.html">
+              Classes
+            </a></span>
+          
+            <span><a target="_self" href="method_list.html">
+              Methods
+            </a></span>
+          
+            <span><a target="_self" href="file_list.html">
+              Files
+            </a></span>
+          
+        </div>
+
+        <div id="search">Search: <input type="text" /></div>
+      </div>
+
+      <ul id="full_list" class="file">
+        
+
+  <li id="object_README" class="odd">
+    <div class="item"><span class="object_link"><a href="index.html" title="README">README</a></span></div>
+  </li>
+  
+
+
+      </ul>
+    </div>
+  </body>
+</html>
diff --git a/docs/frames.html b/docs/frames.html
new file mode 100644
index 0000000..1310783
--- /dev/null
+++ b/docs/frames.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+	<title>Documentation by YARD 0.9.26</title>
+</head>
+<script type="text/javascript">
+  var match = unescape(window.location.hash).match(/^#!(.+)/);
+  var name = match ? match[1] : 'index.html';
+  name = name.replace(/^(\w+):\/\//, '').replace(/^\/\//, '');
+  window.top.location = name;
+</script>
+<noscript>
+  <h1>Oops!</h1>
+  <h2>YARD requires JavaScript!</h2>
+</noscript>
+</html>
diff --git a/docs/index.html b/docs/index.html
new file mode 100644
index 0000000..d9ba705
--- /dev/null
+++ b/docs/index.html
@@ -0,0 +1,359 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  File: README
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "README";
+  relpath = '';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="_index.html">Index</a> &raquo; 
+    <span class="title">File: README</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><div id='filecontents'>
+<h1 id="label-DBF">DBF</h1>
+
+<p><a href="https://rubygems.org/gems/dbf"><img src="https://img.shields.io/gem/v/dbf.svg?style=flat"></a> <a href="https://travis-ci.com/infused/dbf"><img src="https://img.shields.io/travis/infused/dbf/master.svg?style=flat"></a> <a href="https://codeclimate.com/github/infused/dbf"><img src="https://img.shields.io/codeclimate/maintainability/infused/dbf.svg?style=flat"></a> <a href="https://codeclimate.com/github/infused/dbf"><img src="https://img.shields.io/codeclimate/c/infused/dbf.svg?style=flat"></a> <a href="https://rubygems.org/gems/dbf/"><img src="https://img.shields.io/gem/dt/dbf.svg"></a> <a href="https://github.com/infused/dbf"><img src="https://img.shields.io/github/license/infused/dbf.svg"></a></p>
+
+<p>DBF is a small fast library for reading dBase, xBase, Clipper and FoxPro database files</p>
+<ul><li>
+<p>Project page: <a href="https://github.com/infused/dbf">github.com/infused/dbf</a></p>
+</li><li>
+<p>API Documentation: <a href="https://dbf.infused.org">dbf.infused.org</a></p>
+</li><li>
+<p>Report bugs: <a href="https://github.com/infused/dbf/issues">github.com/infused/dbf/issues</a></p>
+</li><li>
+<p>Questions: Email <a href="mailto:keithm@infused.org">keithm@infused.org</a> and put DBF somewhere in the  subject line</p>
+</li><li>
+<p>Change log: <a href="https://github.com/infused/dbf/blob/master/CHANGELOG.md">github.com/infused/dbf/blob/master/CHANGELOG.md</a></p>
+</li></ul>
+
+<p>NOTE: Beginning with version 4 we have dropped support for Ruby 2.0, 2.1, 2.2, and 2.3. If you need support for these older Rubies, please use 3.0.x (<a href="https://github.com/infused.org/dbf/tree/3_stable">github.com/infused.org/dbf/tree/3_stable</a>)</p>
+
+<p>NOTE: Beginning with version 3 we have dropped support for Ruby 1.8 and 1.9. If you need support for older Rubies, please use 2.0.x (<a href="https://github.com/infused/dbf/tree/2_stable">github.com/infused/dbf/tree/2_stable</a>)</p>
+
+<h2 id="label-Compatibility">Compatibility</h2>
+
+<p>DBF is tested to work with the following versions of Ruby:</p>
+<ul><li>
+<p>Ruby 2.4.x, 2.5.x, 2.6.x, 2.7.x, 3.0.x, TruffleRuby</p>
+</li></ul>
+
+<h2 id="label-Installation">Installation</h2>
+
+<p>Install the gem manually:</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_gem'>gem</span> <span class='id identifier rubyid_install'>install</span> <span class='id identifier rubyid_dbf'>dbf</span>
+</code></pre>
+
+<p>Or add to your Gemfile:</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_gem'>gem</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dbf</span><span class='tstring_end'>&#39;</span></span>
+</code></pre>
+
+<h2 id="label-Basic+Usage">Basic Usage</h2>
+
+<p>Open a DBF file using a path:</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dbf</span><span class='tstring_end'>&#39;</span></span>
+<span class='id identifier rubyid_widgets'>widgets</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="DBF/Table.html" title="DBF::Table (class)">Table</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="DBF/Table.html#initialize-instance_method" title="DBF::Table#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>widgets.dbf</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
+</code></pre>
+
+<p>Open a DBF file using an IO object:</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_data'>data</span> <span class='op'>=</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_open'>open</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>widgets.dbf</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
+<span class='id identifier rubyid_widgets'>widgets</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="DBF/Table.html" title="DBF::Table (class)">Table</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="DBF/Table.html#initialize-instance_method" title="DBF::Table#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
+</code></pre>
+
+<p>Open a DBF by passing in raw data (wrap the raw data with StringIO):</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_widgets'>widgets</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="DBF/Table.html" title="DBF::Table (class)">Table</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="DBF/Table.html#initialize-instance_method" title="DBF::Table#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='const'>StringIO</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>raw binary data</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='rparen'>)</span>
+</code></pre>
+
+<p>Enumerate all records</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_widgets'>widgets</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_record'>record</span><span class='op'>|</span>
+  <span class='id identifier rubyid_puts'>puts</span> <span class='id identifier rubyid_record'>record</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span>
+  <span class='id identifier rubyid_puts'>puts</span> <span class='id identifier rubyid_record'>record</span><span class='period'>.</span><span class='id identifier rubyid_email'>email</span>
+<span class='kw'>end</span>
+</code></pre>
+
+<p>Find a single record</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_widget'>widget</span> <span class='op'>=</span> <span class='id identifier rubyid_widgets'>widgets</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span><span class='lparen'>(</span><span class='int'>6</span><span class='rparen'>)</span>
+</code></pre>
+
+<p>Note that find() will return nil if the requested record has been deleted and not yet pruned from the database.</p>
+
+<p>The value for an attribute can be accessed via element reference in several ways.</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_widget'>widget</span><span class='period'>.</span><span class='id identifier rubyid_slot_number'>slot_number</span>     <span class='comment'># underscored field name as method
+</span>
+<span class='id identifier rubyid_widget'>widget</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>SlotNumber</span><span class='tstring_end'>&quot;</span></span><span class='rbracket'>]</span>   <span class='comment'># original field name in dbf file
+</span><span class='id identifier rubyid_widget'>widget</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>slot_number</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>  <span class='comment'># underscored field name string
+</span><span class='id identifier rubyid_widget'>widget</span><span class='lbracket'>[</span><span class='symbol'>:slot_number</span><span class='rbracket'>]</span>   <span class='comment'># underscored field name symbol
+</span></code></pre>
+
+<p>Get a hash of all attributes. The keys are the original column names.</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_widget'>widget</span><span class='period'>.</span><span class='id identifier rubyid_attributes'>attributes</span>
+<span class='comment'># =&gt; {&quot;Name&quot; =&gt; &quot;Thing1 | SlotNumber&quot; =&gt; 1}
+</span></code></pre>
+
+<p>Search for records using a simple hash format. Multiple search criteria are ANDed. Use the block form if the resulting recordset could be large, otherwise all records will be loaded into memory.</p>
+
+<pre class="code ruby"><code class="ruby"><span class='comment'># find all records with slot_number equal to s42
+</span><span class='id identifier rubyid_widgets'>widgets</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span><span class='lparen'>(</span><span class='symbol'>:all</span><span class='comma'>,</span> <span class='label'>slot_number:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>s42</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_widget'>widget</span><span class='op'>|</span>
+  <span class='comment'># the record will be nil if deleted, but not yet pruned from the database
+</span>  <span class='kw'>if</span> <span class='id identifier rubyid_widget'>widget</span>
+    <span class='id identifier rubyid_puts'>puts</span> <span class='id identifier rubyid_widget'>widget</span><span class='period'>.</span><span class='id identifier rubyid_serial_number'>serial_number</span>
+  <span class='kw'>end</span>
+<span class='kw'>end</span>
+
+<span class='comment'># find the first record with slot_number equal to s42
+</span><span class='id identifier rubyid_widgets'>widgets</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span> <span class='symbol'>:first</span><span class='comma'>,</span> <span class='label'>slot_number:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>s42</span><span class='tstring_end'>&#39;</span></span>
+
+<span class='comment'># find record number 10
+</span><span class='id identifier rubyid_widgets'>widgets</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span><span class='lparen'>(</span><span class='int'>10</span><span class='rparen'>)</span>
+</code></pre>
+
+<h2 id="label-Enumeration">Enumeration</h2>
+
+<p>DBF::Table is a Ruby Enumerable. This means you can use any Enumerable method. This means that you get a bunch of traversal, searching and sorting methods for free. For example, let&#39;s get only records created before January 1st, 2015:</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_widgets'>widgets</span><span class='period'>.</span><span class='id identifier rubyid_select'>select</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_w'>w</span><span class='op'>|</span> <span class='id identifier rubyid_w'>w</span><span class='period'>.</span><span class='id identifier rubyid_created_date'>created_date</span> <span class='op'>&lt;</span> <span class='const'>Date</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='int'>2015</span><span class='comma'>,</span> <span class='int'>1</span><span class='comma'>,</span> <span class='int'>1</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
+</code></pre>
+
+<p>Or custom sorting:</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_widgets'>widgets</span><span class='period'>.</span><span class='id identifier rubyid_sort_by'>sort_by</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_w'>w</span><span class='op'>|</span> <span class='id identifier rubyid_w'>w</span><span class='period'>.</span><span class='id identifier rubyid_created_date'>created_date</span> <span class='rbrace'>}</span>
+</code></pre>
+
+<h2 id="label-Encodings+-28Code+Pages-29">Encodings (Code Pages)</h2>
+
+<p>dBase supports encoding non-english characters in different formats. Unfortunately, the format used is not always set, so you may have to specify it manually. For example, you have a DBF file from Russia and you are getting bad data. Try using the &#39;Russion OEM&#39; encoding:</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_table'>table</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="DBF/Table.html" title="DBF::Table (class)">Table</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="DBF/Table.html#initialize-instance_method" title="DBF::Table#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dbf/books.dbf</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cp866</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
+</code></pre>
+
+<p>| Code Page | Encoding | Description | | ——— | ——– | ———– | | 01 | cp437 | U.S. MS–DOS | | 02 | cp850 | International MS–DOS | | 03 | cp1252 | Windows ANSI | | 08 | cp865 | Danish OEM | | 09 | cp437 | Dutch OEM | | 0a | cp850 | Dutch OEM* | | 0b | cp437 | Finnish OEM | | 0d | cp437 | French OEM | | 0e | cp850 | French OEM* | | 0f | cp437 | German OEM | | 10 | cp850 | German OEM* | | 11 | cp437 | Italian OEM | | 12 | cp850 | Italian OEM* | | 13 | cp932 | Japanese Shift-JIS | | 14 | cp850 | Spanish OEM* | | 15 | cp437 | Swedish OEM | | 16 | cp850 | Swedish OEM* | | 17 | cp865 | Norwegian OEM | | 18 | cp437 | Spanish OEM | | 19 | cp437 | English OEM (Britain) | | 1a | cp850 | English OEM (Britain)* | | 1b | cp437 | English OEM (U.S.) | | 1c | cp863 | French OEM (Canada) | | 1d | cp850 | French OEM* | | 1f | cp852 | Czech OEM | | 22 | cp852 | Hungarian OEM | | 23 | cp852 | Polish OEM | | 24 | cp860 | Portuguese OEM | | 25 | cp850 | Portuguese OEM* | | 26 | cp866 | Russian OEM | | 37 | cp850 | English OEM (U.S.)* | | 40 | cp852 | Romanian OEM | | 4d | cp936 | Chinese GBK (PRC) | | 4e | cp949 | Korean (ANSI/OEM) | | 4f | cp950 | Chinese Big5 (Taiwan) | | 50 | cp874 | Thai (ANSI/OEM) | | 57 | cp1252 | ANSI | | 58 | cp1252 | Western European ANSI | | 59 | cp1252 | Spanish ANSI | | 64 | cp852 | Eastern European MS–DOS | | 65 | cp866 | Russian MS–DOS | | 66 | cp865 | Nordic MS–DOS | | 67 | cp861 | Icelandic MS–DOS | | 6a | cp737 | Greek MS–DOS (437G) | | 6b | cp857 | Turkish MS–DOS | | 6c | cp863 | French–Canadian MS–DOS | | 78 | cp950 | Taiwan Big 5 | | 79 | cp949 | Hangul (Wansung) | | 7a | cp936 | PRC GBK | | 7b | cp932 | Japanese Shift-JIS | | 7c | cp874 | Thai Windows/MS–DOS | | 86 | cp737 | Greek OEM | | 87 | cp852 | Slovenian OEM | | 88 | cp857 | Turkish OEM | | c8 | cp1250 | Eastern European Windows | | c9 | cp1251 | Russian Windows | | ca | cp1254 | Turkish Windows | | cb | cp1253 | Greek Windows | | cc | cp1257 | Baltic Windows |</p>
+
+<h2 id="label-Migrating+to+ActiveRecord">Migrating to ActiveRecord</h2>
+
+<p>An example of migrating a DBF book table to ActiveRecord using a migration:</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dbf</span><span class='tstring_end'>&#39;</span></span>
+
+<span class='kw'>class</span> <span class='const'>Book</span> <span class='op'>&lt;</span> <span class='const'>ActiveRecord</span><span class='op'>::</span><span class='const'>Base</span><span class='semicolon'>;</span> <span class='kw'>end</span>
+
+<span class='kw'>class</span> <span class='const'>CreateBooks</span> <span class='op'>&lt;</span> <span class='const'>ActiveRecord</span><span class='op'>::</span><span class='const'>Migration</span>
+  <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_up'>up</span>
+    <span class='id identifier rubyid_table'>table</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="DBF/Table.html" title="DBF::Table (class)">Table</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="DBF/Table.html#initialize-instance_method" title="DBF::Table#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>db/dbf/books.dbf</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
+    <span class='id identifier rubyid_eval'>eval</span><span class='lparen'>(</span><span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_schema'>schema</span><span class='rparen'>)</span>
+
+    <span class='const'>Book</span><span class='period'>.</span><span class='id identifier rubyid_reset_column_information'>reset_column_information</span>
+    <span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_record'>record</span><span class='op'>|</span>
+      <span class='const'>Book</span><span class='period'>.</span><span class='id identifier rubyid_create'>create</span><span class='lparen'>(</span><span class='label'>title:</span> <span class='id identifier rubyid_record'>record</span><span class='period'>.</span><span class='id identifier rubyid_title'>title</span><span class='comma'>,</span> <span class='label'>author:</span> <span class='id identifier rubyid_record'>record</span><span class='period'>.</span><span class='id identifier rubyid_author'>author</span><span class='rparen'>)</span>
+    <span class='kw'>end</span>
+  <span class='kw'>end</span>
+
+  <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_down'>down</span>
+    <span class='id identifier rubyid_drop_table'>drop_table</span> <span class='symbol'>:books</span>
+  <span class='kw'>end</span>
+<span class='kw'>end</span>
+</code></pre>
+
+<p>If you have initalized the DBF::Table with raw data, you will need to set the exported table name manually:</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>my_table_name</span><span class='tstring_end'>&#39;</span></span>
+</code></pre>
+
+<h2 id="label-Migrating+to+Sequel">Migrating to Sequel</h2>
+
+<p>An example of migrating a DBF book table to Sequel using a migration:</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dbf</span><span class='tstring_end'>&#39;</span></span>
+
+<span class='kw'>class</span> <span class='const'>Book</span> <span class='op'>&lt;</span> <span class='const'>Sequel</span><span class='op'>::</span><span class='const'>Model</span><span class='semicolon'>;</span> <span class='kw'>end</span>
+
+<span class='const'>Sequel</span><span class='period'>.</span><span class='id identifier rubyid_migration'>migration</span> <span class='kw'>do</span>
+  <span class='id identifier rubyid_up'>up</span> <span class='kw'>do</span>
+    <span class='id identifier rubyid_table'>table</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="DBF/Table.html" title="DBF::Table (class)">Table</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="DBF/Table.html#initialize-instance_method" title="DBF::Table#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>db/dbf/books.dbf</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
+    <span class='id identifier rubyid_eval'>eval</span><span class='lparen'>(</span><span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_schema'>schema</span><span class='lparen'>(</span><span class='symbol'>:sequel</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rparen'>)</span><span class='rparen'>)</span> <span class='comment'># passing true to limit output to create_table() only
+</span>
+    <span class='const'>Book</span><span class='period'>.</span><span class='id identifier rubyid_reset_column_information'>reset_column_information</span>
+    <span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_record'>record</span><span class='op'>|</span>
+      <span class='const'>Book</span><span class='period'>.</span><span class='id identifier rubyid_create'>create</span><span class='lparen'>(</span><span class='label'>title:</span> <span class='id identifier rubyid_record'>record</span><span class='period'>.</span><span class='id identifier rubyid_title'>title</span><span class='comma'>,</span> <span class='label'>author:</span> <span class='id identifier rubyid_record'>record</span><span class='period'>.</span><span class='id identifier rubyid_author'>author</span><span class='rparen'>)</span>
+    <span class='kw'>end</span>
+  <span class='kw'>end</span>
+
+  <span class='id identifier rubyid_down'>down</span> <span class='kw'>do</span>
+    <span class='id identifier rubyid_drop_table'>drop_table</span><span class='lparen'>(</span><span class='symbol'>:books</span><span class='rparen'>)</span>
+  <span class='kw'>end</span>
+<span class='kw'>end</span>
+</code></pre>
+
+<p>If you have initialized the DBF::Table with raw data, you will need to set the exported table name manually:</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>my_table_name</span><span class='tstring_end'>&#39;</span></span>
+</code></pre>
+
+<h2 id="label-Command-line+utility">Command-line utility</h2>
+
+<p>A small command-line utility called dbf is installed along with the gem.</p>
+
+<pre class="code ruby"><code class="ruby">$ dbf -h
+usage: dbf [-h|-s|-a] filename
+  -h = print this message
+  -v = print the version number
+  -s = print summary information
+  -a = create an ActiveRecord::Schema
+  -r = create a Sequel Migration
+  -c = export as CSV
+</code></pre>
+
+<p>Create an executable ActiveRecord schema:</p>
+
+<pre class="code ruby"><code class="ruby">dbf -a books.dbf &gt; books_schema.rb
+</code></pre>
+
+<p>Create an executable Sequel schema:</p>
+
+<pre class="code ruby"><code class="ruby">dbf -r books.dbf &gt; migrate/001_create_books.rb
+</code></pre>
+
+<p>Dump all records to a CSV file:</p>
+
+<pre class="code ruby"><code class="ruby">dbf -c books.dbf &gt; books.csv
+</code></pre>
+
+<h2 id="label-Reading+a+Visual+Foxpro+database+-28v8-2C+v9-29">Reading a Visual Foxpro database (v8, v9)</h2>
+
+<p>A special Database::Foxpro class is available to read Visual Foxpro container files (file with .dbc extension). When using this class long field names are supported and tables can be referenced without using names.</p>
+
+<pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dbf</span><span class='tstring_end'>&#39;</span></span>
+
+<span class='id identifier rubyid_contacts'>contacts</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="DBF.html" title="DBF (module)">DBF</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="DBF/Database.html" title="DBF::Database (module)">Database</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="DBF/Database/Foxpro.html" title="DBF::Database::Foxpro (class)">Foxpro</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="DBF/Database/Foxpro.html#initialize-instance_method" title="DBF::Database::Foxpro#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>contact_database.dbc</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_contacts'>contacts</span>
+<span class='id identifier rubyid_my_contact'>my_contact</span> <span class='op'>=</span> <span class='id identifier rubyid_contacts'>contacts</span><span class='period'>.</span><span class='id identifier rubyid_record'>record</span><span class='lparen'>(</span><span class='int'>1</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_spouses_interests'>spouses_interests</span>
+</code></pre>
+
+<h2 id="label-dBase+version+compatibility">dBase version compatibility</h2>
+
+<p>The basic dBase data types are generally supported well. Support for the advanced data types in dbase V and FoxPro are still experimental or not supported. If you have insight into how any of the unsupported data types are implemented, please give me a shout. FoxBase/dBase II files are not supported at this time.</p>
+
+<h3 id="label-Supported+data+types+by+dBase+version">Supported data types by dBase version</h3>
+
+<p>| Version | Description | C | N | L | D | M | F | B | G | P | Y | T | I | V | X | @ | O | + | |———|———————————–|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—|—| | 02 | FoxBase | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - | | 03 | dBase III without memo file | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - | | 04 | dBase IV without memo file | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - | | 05 | dBase V without memo file | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - | | 07 | Visual Objects 1.x | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - | | 30 | Visual FoxPro | Y | Y | Y | Y | Y | Y | Y | Y | N | Y | N | Y | N | N | N | N | - | | 31 | Visual FoxPro with AutoIncrement | Y | Y | Y | Y | Y | Y | Y | Y | N | Y | N | Y | N | N | N | N | N | | 7b | dBase IV with memo file | Y | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | | 83 | dBase III with memo file | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | | 87 | Visual Objects 1.x with memo file | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | | 8b | dBase IV with memo file | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | N | - | - | - | | 8e | dBase IV with SQL table | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | N | - | - | - | | f5 | FoxPro with memo file | Y | Y | Y | Y | Y | Y | Y | Y | N | Y | N | Y | N | N | N | N | N | | fb | FoxPro without memo file | Y | Y | Y | Y | - | Y | Y | Y | N | Y | N | Y | N | N | N | N | N |</p>
+
+<p>Data type descriptions</p>
+<ul><li>
+<p>C = Character</p>
+</li><li>
+<p>N = Number</p>
+</li><li>
+<p>L = Logical</p>
+</li><li>
+<p>D = Date</p>
+</li><li>
+<p>M = Memo</p>
+</li><li>
+<p>F = Float</p>
+</li><li>
+<p>B = Binary</p>
+</li><li>
+<p>G = General</p>
+</li><li>
+<p>P = Picture</p>
+</li><li>
+<p>Y = Currency</p>
+</li><li>
+<p>T = DateTime</p>
+</li><li>
+<p>I = Integer</p>
+</li><li>
+<p>V = VariField</p>
+</li><li>
+<p>X = SQL compat</p>
+</li><li>
+<p>@ = Timestamp</p>
+</li><li>
+<p>O = Double</p>
+</li><li><ul><li>
+<p>= Autoincrement</p>
+</li></ul>
+</li></ul>
+
+<h2 id="label-Limitations">Limitations</h2>
+<ul><li>
+<p>DBF is read-only</p>
+</li><li>
+<p>Index files are not utilized</p>
+</li></ul>
+
+<h2 id="label-License">License</h2>
+
+<p>Copyright © 2006-2021 Keith Morrison &lt;<a href="mailto:keithm@infused.org">keithm@infused.org</a>&gt;</p>
+
+<p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:</p>
+
+<p>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.</p>
+
+<p>THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</p>
+</div></div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:06 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/docs/js/app.js b/docs/js/app.js
new file mode 100644
index 0000000..8d067fe
--- /dev/null
+++ b/docs/js/app.js
@@ -0,0 +1,314 @@
+(function() {
+
+var localStorage = {}, sessionStorage = {};
+try { localStorage = window.localStorage; } catch (e) { }
+try { sessionStorage = window.sessionStorage; } catch (e) { }
+
+function createSourceLinks() {
+    $('.method_details_list .source_code').
+        before("<span class='showSource'>[<a href='#' class='toggleSource'>View source</a>]</span>");
+    $('.toggleSource').toggle(function() {
+       $(this).parent().nextAll('.source_code').slideDown(100);
+       $(this).text("Hide source");
+    },
+    function() {
+        $(this).parent().nextAll('.source_code').slideUp(100);
+        $(this).text("View source");
+    });
+}
+
+function createDefineLinks() {
+    var tHeight = 0;
+    $('.defines').after(" <a href='#' class='toggleDefines'>more...</a>");
+    $('.toggleDefines').toggle(function() {
+        tHeight = $(this).parent().prev().height();
+        $(this).prev().css('display', 'inline');
+        $(this).parent().prev().height($(this).parent().height());
+        $(this).text("(less)");
+    },
+    function() {
+        $(this).prev().hide();
+        $(this).parent().prev().height(tHeight);
+        $(this).text("more...");
+    });
+}
+
+function createFullTreeLinks() {
+    var tHeight = 0;
+    $('.inheritanceTree').toggle(function() {
+        tHeight = $(this).parent().prev().height();
+        $(this).parent().toggleClass('showAll');
+        $(this).text("(hide)");
+        $(this).parent().prev().height($(this).parent().height());
+    },
+    function() {
+        $(this).parent().toggleClass('showAll');
+        $(this).parent().prev().height(tHeight);
+        $(this).text("show all");
+    });
+}
+
+function searchFrameButtons() {
+  $('.full_list_link').click(function() {
+    toggleSearchFrame(this, $(this).attr('href'));
+    return false;
+  });
+  window.addEventListener('message', function(e) {
+    if (e.data === 'navEscape') {
+      $('#nav').slideUp(100);
+      $('#search a').removeClass('active inactive');
+      $(window).focus();
+    }
+  });
+
+  $(window).resize(function() {
+    if ($('#search:visible').length === 0) {
+      $('#nav').removeAttr('style');
+      $('#search a').removeClass('active inactive');
+      $(window).focus();
+    }
+  });
+}
+
+function toggleSearchFrame(id, link) {
+  var frame = $('#nav');
+  $('#search a').removeClass('active').addClass('inactive');
+  if (frame.attr('src') === link && frame.css('display') !== "none") {
+    frame.slideUp(100);
+    $('#search a').removeClass('active inactive');
+  }
+  else {
+    $(id).addClass('active').removeClass('inactive');
+    if (frame.attr('src') !== link) frame.attr('src', link);
+    frame.slideDown(100);
+  }
+}
+
+function linkSummaries() {
+  $('.summary_signature').click(function() {
+    document.location = $(this).find('a').attr('href');
+  });
+}
+
+function summaryToggle() {
+  $('.summary_toggle').click(function(e) {
+    e.preventDefault();
+    localStorage.summaryCollapsed = $(this).text();
+    $('.summary_toggle').each(function() {
+      $(this).text($(this).text() == "collapse" ? "expand" : "collapse");
+      var next = $(this).parent().parent().nextAll('ul.summary').first();
+      if (next.hasClass('compact')) {
+        next.toggle();
+        next.nextAll('ul.summary').first().toggle();
+      }
+      else if (next.hasClass('summary')) {
+        var list = $('<ul class="summary compact" />');
+        list.html(next.html());
+        list.find('.summary_desc, .note').remove();
+        list.find('a').each(function() {
+          $(this).html($(this).find('strong').html());
+          $(this).parent().html($(this)[0].outerHTML);
+        });
+        next.before(list);
+        next.toggle();
+      }
+    });
+    return false;
+  });
+  if (localStorage.summaryCollapsed == "collapse") {
+    $('.summary_toggle').first().click();
+  } else { localStorage.summaryCollapsed = "expand"; }
+}
+
+function constantSummaryToggle() {
+  $('.constants_summary_toggle').click(function(e) {
+    e.preventDefault();
+    localStorage.summaryCollapsed = $(this).text();
+    $('.constants_summary_toggle').each(function() {
+      $(this).text($(this).text() == "collapse" ? "expand" : "collapse");
+      var next = $(this).parent().parent().nextAll('dl.constants').first();
+      if (next.hasClass('compact')) {
+        next.toggle();
+        next.nextAll('dl.constants').first().toggle();
+      }
+      else if (next.hasClass('constants')) {
+        var list = $('<dl class="constants compact" />');
+        list.html(next.html());
+        list.find('dt').each(function() {
+           $(this).addClass('summary_signature');
+           $(this).text( $(this).text().split('=')[0]);
+          if ($(this).has(".deprecated").length) {
+             $(this).addClass('deprecated');
+          };
+        });
+        // Add the value of the constant as "Tooltip" to the summary object
+        list.find('pre.code').each(function() {
+          console.log($(this).parent());
+          var dt_element = $(this).parent().prev();
+          var tooltip = $(this).text();
+          if (dt_element.hasClass("deprecated")) {
+             tooltip = 'Deprecated. ' + tooltip;
+          };
+          dt_element.attr('title', tooltip);
+        });
+        list.find('.docstring, .tags, dd').remove();
+        next.before(list);
+        next.toggle();
+      }
+    });
+    return false;
+  });
+  if (localStorage.summaryCollapsed == "collapse") {
+    $('.constants_summary_toggle').first().click();
+  } else { localStorage.summaryCollapsed = "expand"; }
+}
+
+function generateTOC() {
+  if ($('#filecontents').length === 0) return;
+  var _toc = $('<ol class="top"></ol>');
+  var show = false;
+  var toc = _toc;
+  var counter = 0;
+  var tags = ['h2', 'h3', 'h4', 'h5', 'h6'];
+  var i;
+  var curli;
+  if ($('#filecontents h1').length > 1) tags.unshift('h1');
+  for (i = 0; i < tags.length; i++) { tags[i] = '#filecontents ' + tags[i]; }
+  var lastTag = parseInt(tags[0][1], 10);
+  $(tags.join(', ')).each(function() {
+    if ($(this).parents('.method_details .docstring').length != 0) return;
+    if (this.id == "filecontents") return;
+    show = true;
+    var thisTag = parseInt(this.tagName[1], 10);
+    if (this.id.length === 0) {
+      var proposedId = $(this).attr('toc-id');
+      if (typeof(proposedId) != "undefined") this.id = proposedId;
+      else {
+        var proposedId = $(this).text().replace(/[^a-z0-9-]/ig, '_');
+        if ($('#' + proposedId).length > 0) { proposedId += counter; counter++; }
+        this.id = proposedId;
+      }
+    }
+    if (thisTag > lastTag) {
+      for (i = 0; i < thisTag - lastTag; i++) {
+        if ( typeof(curli) == "undefined" ) {
+          curli = $('<li/>');
+          toc.append(curli);
+        }
+        toc = $('<ol/>');
+        curli.append(toc);
+        curli = undefined;
+      }
+    }
+    if (thisTag < lastTag) {
+      for (i = 0; i < lastTag - thisTag; i++) {
+        toc = toc.parent();
+        toc = toc.parent();
+      }
+    }
+    var title = $(this).attr('toc-title');
+    if (typeof(title) == "undefined") title = $(this).text();
+    curli =$('<li><a href="#' + this.id + '">' + title + '</a></li>'); 
+    toc.append(curli);
+    lastTag = thisTag;
+  });
+  if (!show) return;
+  html = '<div id="toc"><p class="title hide_toc"><a href="#"><strong>Table of Contents</strong></a></p></div>';
+  $('#content').prepend(html);
+  $('#toc').append(_toc);
+  $('#toc .hide_toc').toggle(function() {
+    $('#toc .top').slideUp('fast');
+    $('#toc').toggleClass('hidden');
+    $('#toc .title small').toggle();
+  }, function() {
+    $('#toc .top').slideDown('fast');
+    $('#toc').toggleClass('hidden');
+    $('#toc .title small').toggle();
+  });
+}
+
+function navResizeFn(e) {
+  if (e.which !== 1) {
+    navResizeFnStop();
+    return;
+  }
+
+  sessionStorage.navWidth = e.pageX.toString();
+  $('.nav_wrap').css('width', e.pageX);
+  $('.nav_wrap').css('-ms-flex', 'inherit');
+}
+
+function navResizeFnStop() {
+  $(window).unbind('mousemove', navResizeFn);
+  window.removeEventListener('message', navMessageFn, false);
+}
+
+function navMessageFn(e) {
+  if (e.data.action === 'mousemove') navResizeFn(e.data.event);
+  if (e.data.action === 'mouseup') navResizeFnStop();
+}
+
+function navResizer() {
+  $('#resizer').mousedown(function(e) {
+    e.preventDefault();
+    $(window).mousemove(navResizeFn);
+    window.addEventListener('message', navMessageFn, false);
+  });
+  $(window).mouseup(navResizeFnStop);
+
+  if (sessionStorage.navWidth) {
+    navResizeFn({which: 1, pageX: parseInt(sessionStorage.navWidth, 10)});
+  }
+}
+
+function navExpander() {
+  var done = false, timer = setTimeout(postMessage, 500);
+  function postMessage() {
+    if (done) return;
+    clearTimeout(timer);
+    var opts = { action: 'expand', path: pathId };
+    document.getElementById('nav').contentWindow.postMessage(opts, '*');
+    done = true;
+  }
+
+  window.addEventListener('message', function(event) {
+    if (event.data === 'navReady') postMessage();
+    return false;
+  }, false);
+}
+
+function mainFocus() {
+  var hash = window.location.hash;
+  if (hash !== '' && $(hash)[0]) {
+    $(hash)[0].scrollIntoView();
+  }
+
+  setTimeout(function() { $('#main').focus(); }, 10);
+}
+
+function navigationChange() {
+  // This works around the broken anchor navigation with the YARD template.
+  window.onpopstate = function() {
+    var hash = window.location.hash;
+    if (hash !== '' && $(hash)[0]) {
+      $(hash)[0].scrollIntoView();
+    }
+  };
+}
+
+$(document).ready(function() {
+  navResizer();
+  navExpander();
+  createSourceLinks();
+  createDefineLinks();
+  createFullTreeLinks();
+  searchFrameButtons();
+  linkSummaries();
+  summaryToggle();
+  constantSummaryToggle();
+  generateTOC();
+  mainFocus();
+  navigationChange();
+});
+
+})();
diff --git a/docs/js/full_list.js b/docs/js/full_list.js
new file mode 100644
index 0000000..59069c5
--- /dev/null
+++ b/docs/js/full_list.js
@@ -0,0 +1,216 @@
+(function() {
+
+var $clicked = $(null);
+var searchTimeout = null;
+var searchCache = [];
+var caseSensitiveMatch = false;
+var ignoreKeyCodeMin = 8;
+var ignoreKeyCodeMax = 46;
+var commandKey = 91;
+
+RegExp.escape = function(text) {
+    return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
+}
+
+function escapeShortcut() {
+  $(document).keydown(function(evt) {
+    if (evt.which == 27) {
+      window.parent.postMessage('navEscape', '*');
+    }
+  });
+}
+
+function navResizer() {
+  $(window).mousemove(function(e) {
+    window.parent.postMessage({
+      action: 'mousemove', event: {pageX: e.pageX, which: e.which}
+    }, '*');
+  }).mouseup(function(e) {
+    window.parent.postMessage({action: 'mouseup'}, '*');
+  });
+  window.parent.postMessage("navReady", "*");
+}
+
+function clearSearchTimeout() {
+  clearTimeout(searchTimeout);
+  searchTimeout = null;
+}
+
+function enableLinks() {
+  // load the target page in the parent window
+  $('#full_list li').on('click', function(evt) {
+    $('#full_list li').removeClass('clicked');
+    $clicked = $(this);
+    $clicked.addClass('clicked');
+    evt.stopPropagation();
+
+    if (evt.target.tagName === 'A') return true;
+
+    var elem = $clicked.find('> .item .object_link a')[0];
+    var e = evt.originalEvent;
+    var newEvent = new MouseEvent(evt.originalEvent.type);
+    newEvent.initMouseEvent(e.type, e.canBubble, e.cancelable, e.view, e.detail, e.screenX, e.screenY, e.clientX, e.clientY, e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, e.button, e.relatedTarget);
+    elem.dispatchEvent(newEvent);
+    evt.preventDefault();
+    return false;
+  });
+}
+
+function enableToggles() {
+  // show/hide nested classes on toggle click
+  $('#full_list a.toggle').on('click', function(evt) {
+    evt.stopPropagation();
+    evt.preventDefault();
+    $(this).parent().parent().toggleClass('collapsed');
+    highlight();
+  });
+}
+
+function populateSearchCache() {
+  $('#full_list li .item').each(function() {
+    var $node = $(this);
+    var $link = $node.find('.object_link a');
+    if ($link.length > 0) {
+      searchCache.push({
+        node: $node,
+        link: $link,
+        name: $link.text(),
+        fullName: $link.attr('title').split(' ')[0]
+      });
+    }
+  });
+}
+
+function enableSearch() {
+  $('#search input').keyup(function(event) {
+    if (ignoredKeyPress(event)) return;
+    if (this.value === "") {
+      clearSearch();
+    } else {
+      performSearch(this.value);
+    }
+  });
+
+  $('#full_list').after("<div id='noresults' style='display:none'></div>");
+}
+
+function ignoredKeyPress(event) {
+  if (
+    (event.keyCode > ignoreKeyCodeMin && event.keyCode < ignoreKeyCodeMax) ||
+    (event.keyCode == commandKey)
+  ) {
+    return true;
+  } else {
+    return false;
+  }
+}
+
+function clearSearch() {
+  clearSearchTimeout();
+  $('#full_list .found').removeClass('found').each(function() {
+    var $link = $(this).find('.object_link a');
+    $link.text($link.text());
+  });
+  $('#full_list, #content').removeClass('insearch');
+  $clicked.parents().removeClass('collapsed');
+  highlight();
+}
+
+function performSearch(searchString) {
+  clearSearchTimeout();
+  $('#full_list, #content').addClass('insearch');
+  $('#noresults').text('').hide();
+  partialSearch(searchString, 0);
+}
+
+function partialSearch(searchString, offset) {
+  var lastRowClass = '';
+  var i = null;
+  for (i = offset; i < Math.min(offset + 50, searchCache.length); i++) {
+    var item = searchCache[i];
+    var searchName = (searchString.indexOf('::') != -1 ? item.fullName : item.name);
+    var matchString = buildMatchString(searchString);
+    var matchRegexp = new RegExp(matchString, caseSensitiveMatch ? "" : "i");
+    if (searchName.match(matchRegexp) == null) {
+      item.node.removeClass('found');
+      item.link.text(item.link.text());
+    }
+    else {
+      item.node.addClass('found');
+      item.node.removeClass(lastRowClass).addClass(lastRowClass == 'r1' ? 'r2' : 'r1');
+      lastRowClass = item.node.hasClass('r1') ? 'r1' : 'r2';
+      item.link.html(item.name.replace(matchRegexp, "<strong>$&</strong>"));
+    }
+  }
+  if(i == searchCache.length) {
+    searchDone();
+  } else {
+    searchTimeout = setTimeout(function() {
+      partialSearch(searchString, i);
+    }, 0);
+  }
+}
+
+function searchDone() {
+  searchTimeout = null;
+  highlight();
+  if ($('#full_list li:visible').size() === 0) {
+    $('#noresults').text('No results were found.').hide().fadeIn();
+  } else {
+    $('#noresults').text('').hide();
+  }
+  $('#content').removeClass('insearch');
+}
+
+function buildMatchString(searchString, event) {
+  caseSensitiveMatch = searchString.match(/[A-Z]/) != null;
+  var regexSearchString = RegExp.escape(searchString);
+  if (caseSensitiveMatch) {
+    regexSearchString += "|" +
+      $.map(searchString.split(''), function(e) { return RegExp.escape(e); }).
+      join('.+?');
+  }
+  return regexSearchString;
+}
+
+function highlight() {
+  $('#full_list li:visible').each(function(n) {
+    $(this).removeClass('even odd').addClass(n % 2 == 0 ? 'odd' : 'even');
+  });
+}
+
+/**
+ * Expands the tree to the target element and its immediate
+ * children.
+ */
+function expandTo(path) {
+  var $target = $(document.getElementById('object_' + path));
+  $target.addClass('clicked');
+  $target.removeClass('collapsed');
+  $target.parentsUntil('#full_list', 'li').removeClass('collapsed');
+  if($target[0]) {
+    window.scrollTo(window.scrollX, $target.offset().top - 250);
+    highlight();
+  }
+}
+
+function windowEvents(event) {
+  var msg = event.data;
+  if (msg.action === "expand") {
+    expandTo(msg.path);
+  }
+  return false;
+}
+
+window.addEventListener("message", windowEvents, false);
+
+$(document).ready(function() {
+  escapeShortcut();
+  navResizer();
+  enableLinks();
+  enableToggles();
+  populateSearchCache();
+  enableSearch();
+});
+
+})();
diff --git a/docs/js/jquery.js b/docs/js/jquery.js
new file mode 100644
index 0000000..198b3ff
--- /dev/null
+++ b/docs/js/jquery.js
@@ -0,0 +1,4 @@
+/*! jQuery v1.7.1 jquery.com | jquery.org/license */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
+f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
+{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
\ No newline at end of file
diff --git a/docs/method_list.html b/docs/method_list.html
new file mode 100644
index 0000000..b431fc4
--- /dev/null
+++ b/docs/method_list.html
@@ -0,0 +1,675 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta charset="utf-8" />
+    
+      <link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen" />
+    
+      <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" />
+    
+
+    
+      <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
+    
+      <script type="text/javascript" charset="utf-8" src="js/full_list.js"></script>
+    
+
+    <title>Method List</title>
+    <base id="base_target" target="_parent" />
+  </head>
+  <body>
+    <div id="content">
+      <div class="fixed_header">
+        <h1 id="full_list_header">Method List</h1>
+        <div id="full_list_nav">
+          
+            <span><a target="_self" href="class_list.html">
+              Classes
+            </a></span>
+          
+            <span><a target="_self" href="method_list.html">
+              Methods
+            </a></span>
+          
+            <span><a target="_self" href="file_list.html">
+              Files
+            </a></span>
+          
+        </div>
+
+        <div id="search">Search: <input type="text" /></div>
+      </div>
+
+      <ul id="full_list" class="method">
+        
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Record.html#==-instance_method" title="DBF::Record#== (method)">#==</a></span>
+      <small>DBF::Record</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Record.html#[]-instance_method" title="DBF::Record#[] (method)">#[]</a></span>
+      <small>DBF::Record</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Schema.html#activerecord_schema-instance_method" title="DBF::Schema#activerecord_schema (method)">#activerecord_schema</a></span>
+      <small>DBF::Schema</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Schema.html#activerecord_schema_definition-instance_method" title="DBF::Schema#activerecord_schema_definition (method)">#activerecord_schema_definition</a></span>
+      <small>DBF::Schema</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Record.html#attributes-instance_method" title="DBF::Record#attributes (method)">#attributes</a></span>
+      <small>DBF::Record</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Database/Table.html#build_columns-instance_method" title="DBF::Database::Table#build_columns (method)">#build_columns</a></span>
+      <small>DBF::Database::Table</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Memo/Dbase3.html#build_memo-instance_method" title="DBF::Memo::Dbase3#build_memo (method)">#build_memo</a></span>
+      <small>DBF::Memo::Dbase3</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Memo/Foxpro.html#build_memo-instance_method" title="DBF::Memo::Foxpro#build_memo (method)">#build_memo</a></span>
+      <small>DBF::Memo::Foxpro</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Memo/Dbase4.html#build_memo-instance_method" title="DBF::Memo::Dbase4#build_memo (method)">#build_memo</a></span>
+      <small>DBF::Memo::Dbase4</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Memo/Base.html#close-instance_method" title="DBF::Memo::Base#close (method)">#close</a></span>
+      <small>DBF::Memo::Base</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Table.html#close-instance_method" title="DBF::Table#close (method)">#close</a></span>
+      <small>DBF::Table</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Table.html#closed%3F-instance_method" title="DBF::Table#closed? (method)">#closed?</a></span>
+      <small>DBF::Table</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Memo/Base.html#closed%3F-instance_method" title="DBF::Memo::Base#closed? (method)">#closed?</a></span>
+      <small>DBF::Memo::Base</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Table.html#column_names-instance_method" title="DBF::Table#column_names (method)">#column_names</a></span>
+      <small>DBF::Table</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Table.html#columns-instance_method" title="DBF::Table#columns (method)">#columns</a></span>
+      <small>DBF::Table</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Column.html#decimal-instance_method" title="DBF::Column#decimal (method)">#decimal</a></span>
+      <small>DBF::Column</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/ColumnType/Base.html#decimal-instance_method" title="DBF::ColumnType::Base#decimal (method)">#decimal</a></span>
+      <small>DBF::ColumnType::Base</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Table.html#each-instance_method" title="DBF::Table#each (method)">#each</a></span>
+      <small>DBF::Table</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Table.html#encoding-instance_method" title="DBF::Table#encoding (method)">#encoding</a></span>
+      <small>DBF::Table</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Header.html#encoding-instance_method" title="DBF::Header#encoding (method)">#encoding</a></span>
+      <small>DBF::Header</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/ColumnType/Base.html#encoding-instance_method" title="DBF::ColumnType::Base#encoding (method)">#encoding</a></span>
+      <small>DBF::ColumnType::Base</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Header.html#encoding_key-instance_method" title="DBF::Header#encoding_key (method)">#encoding_key</a></span>
+      <small>DBF::Header</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Table.html#filename-instance_method" title="DBF::Table#filename (method)">#filename</a></span>
+      <small>DBF::Table</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Table.html#find-instance_method" title="DBF::Table#find (method)">#find</a></span>
+      <small>DBF::Table</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Memo/Base.html#get-instance_method" title="DBF::Memo::Base#get (method)">#get</a></span>
+      <small>DBF::Memo::Base</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Table.html#has_memo_file%3F-instance_method" title="DBF::Table#has_memo_file? (method)">#has_memo_file?</a></span>
+      <small>DBF::Table</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Header.html#header_length-instance_method" title="DBF::Header#header_length (method)">#header_length</a></span>
+      <small>DBF::Header</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Memo/Base.html#initialize-instance_method" title="DBF::Memo::Base#initialize (method)">#initialize</a></span>
+      <small>DBF::Memo::Base</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Column.html#initialize-instance_method" title="DBF::Column#initialize (method)">#initialize</a></span>
+      <small>DBF::Column</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Database/Foxpro.html#initialize-instance_method" title="DBF::Database::Foxpro#initialize (method)">#initialize</a></span>
+      <small>DBF::Database::Foxpro</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Header.html#initialize-instance_method" title="DBF::Header#initialize (method)">#initialize</a></span>
+      <small>DBF::Header</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Record.html#initialize-instance_method" title="DBF::Record#initialize (method)">#initialize</a></span>
+      <small>DBF::Record</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/ColumnType/Base.html#initialize-instance_method" title="DBF::ColumnType::Base#initialize (method)">#initialize</a></span>
+      <small>DBF::ColumnType::Base</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Table.html#initialize-instance_method" title="DBF::Table#initialize (method)">#initialize</a></span>
+      <small>DBF::Table</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Schema.html#json_schema-instance_method" title="DBF::Schema#json_schema (method)">#json_schema</a></span>
+      <small>DBF::Schema</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Column.html#length-instance_method" title="DBF::Column#length (method)">#length</a></span>
+      <small>DBF::Column</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Database/Table.html#long_names-instance_method" title="DBF::Database::Table#long_names (method)">#long_names</a></span>
+      <small>DBF::Database::Table</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Record.html#match%3F-instance_method" title="DBF::Record#match? (method)">#match?</a></span>
+      <small>DBF::Record</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Column.html#memo%3F-instance_method" title="DBF::Column#memo? (method)">#memo?</a></span>
+      <small>DBF::Column</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Database/Foxpro.html#method_missing-instance_method" title="DBF::Database::Foxpro#method_missing (method)">#method_missing</a></span>
+      <small>DBF::Database::Foxpro</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Column.html#name-instance_method" title="DBF::Column#name (method)">#name</a></span>
+      <small>DBF::Column</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Table.html#name-instance_method" title="DBF::Table#name (method)">#name</a></span>
+      <small>DBF::Table</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Schema.html#number_data_type-instance_method" title="DBF::Schema#number_data_type (method)">#number_data_type</a></span>
+      <small>DBF::Schema</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Memo/Base.html#open-class_method" title="DBF::Memo::Base.open (method)">open</a></span>
+      <small>DBF::Memo::Base</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Table.html#record-instance_method" title="DBF::Table#record (method)">#record</a></span>
+      <small>DBF::Table</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Header.html#record_count-instance_method" title="DBF::Header#record_count (method)">#record_count</a></span>
+      <small>DBF::Header</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Header.html#record_length-instance_method" title="DBF::Header#record_length (method)">#record_length</a></span>
+      <small>DBF::Header</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Database/Foxpro.html#respond_to_missing%3F-instance_method" title="DBF::Database::Foxpro#respond_to_missing? (method)">#respond_to_missing?</a></span>
+      <small>DBF::Database::Foxpro</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Schema.html#schema-instance_method" title="DBF::Schema#schema (method)">#schema</a></span>
+      <small>DBF::Schema</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Schema.html#schema_data_type-instance_method" title="DBF::Schema#schema_data_type (method)">#schema_data_type</a></span>
+      <small>DBF::Schema</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Schema.html#schema_name-instance_method" title="DBF::Schema#schema_name (method)">#schema_name</a></span>
+      <small>DBF::Schema</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Schema.html#sequel_schema-instance_method" title="DBF::Schema#sequel_schema (method)">#sequel_schema</a></span>
+      <small>DBF::Schema</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Schema.html#sequel_schema_definition-instance_method" title="DBF::Schema#sequel_schema_definition (method)">#sequel_schema_definition</a></span>
+      <small>DBF::Schema</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Schema.html#string_data_format-instance_method" title="DBF::Schema#string_data_format (method)">#string_data_format</a></span>
+      <small>DBF::Schema</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Column.html#table-instance_method" title="DBF::Column#table (method)">#table</a></span>
+      <small>DBF::Column</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Database/Foxpro.html#table-instance_method" title="DBF::Database::Foxpro#table (method)">#table</a></span>
+      <small>DBF::Database::Foxpro</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Database/Foxpro.html#table_names-instance_method" title="DBF::Database::Foxpro#table_names (method)">#table_names</a></span>
+      <small>DBF::Database::Foxpro</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Database/Foxpro.html#table_path-instance_method" title="DBF::Database::Foxpro#table_path (method)">#table_path</a></span>
+      <small>DBF::Database::Foxpro</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Record.html#to_a-instance_method" title="DBF::Record#to_a (method)">#to_a</a></span>
+      <small>DBF::Record</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Table.html#to_csv-instance_method" title="DBF::Table#to_csv (method)">#to_csv</a></span>
+      <small>DBF::Table</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Column.html#to_hash-instance_method" title="DBF::Column#to_hash (method)">#to_hash</a></span>
+      <small>DBF::Column</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Column.html#type-instance_method" title="DBF::Column#type (method)">#type</a></span>
+      <small>DBF::Column</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/ColumnType/Date.html#type_cast-instance_method" title="DBF::ColumnType::Date#type_cast (method)">#type_cast</a></span>
+      <small>DBF::ColumnType::Date</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/ColumnType/DateTime.html#type_cast-instance_method" title="DBF::ColumnType::DateTime#type_cast (method)">#type_cast</a></span>
+      <small>DBF::ColumnType::DateTime</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/ColumnType/Memo.html#type_cast-instance_method" title="DBF::ColumnType::Memo#type_cast (method)">#type_cast</a></span>
+      <small>DBF::ColumnType::Memo</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/ColumnType/General.html#type_cast-instance_method" title="DBF::ColumnType::General#type_cast (method)">#type_cast</a></span>
+      <small>DBF::ColumnType::General</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/ColumnType/String.html#type_cast-instance_method" title="DBF::ColumnType::String#type_cast (method)">#type_cast</a></span>
+      <small>DBF::ColumnType::String</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/ColumnType/Double.html#type_cast-instance_method" title="DBF::ColumnType::Double#type_cast (method)">#type_cast</a></span>
+      <small>DBF::ColumnType::Double</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/ColumnType/Float.html#type_cast-instance_method" title="DBF::ColumnType::Float#type_cast (method)">#type_cast</a></span>
+      <small>DBF::ColumnType::Float</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/ColumnType/Boolean.html#type_cast-instance_method" title="DBF::ColumnType::Boolean#type_cast (method)">#type_cast</a></span>
+      <small>DBF::ColumnType::Boolean</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/ColumnType/SignedLong.html#type_cast-instance_method" title="DBF::ColumnType::SignedLong#type_cast (method)">#type_cast</a></span>
+      <small>DBF::ColumnType::SignedLong</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/ColumnType/Currency.html#type_cast-instance_method" title="DBF::ColumnType::Currency#type_cast (method)">#type_cast</a></span>
+      <small>DBF::ColumnType::Currency</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/ColumnType/Number.html#type_cast-instance_method" title="DBF::ColumnType::Number#type_cast (method)">#type_cast</a></span>
+      <small>DBF::ColumnType::Number</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/ColumnType/Nil.html#type_cast-instance_method" title="DBF::ColumnType::Nil#type_cast (method)">#type_cast</a></span>
+      <small>DBF::ColumnType::Nil</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Column.html#underscored_name-instance_method" title="DBF::Column#underscored_name (method)">#underscored_name</a></span>
+      <small>DBF::Column</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Header.html#unpack_header-instance_method" title="DBF::Header#unpack_header (method)">#unpack_header</a></span>
+      <small>DBF::Header</small>
+    </div>
+  </li>
+  
+
+  <li class="odd ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Header.html#version-instance_method" title="DBF::Header#version (method)">#version</a></span>
+      <small>DBF::Header</small>
+    </div>
+  </li>
+  
+
+  <li class="even ">
+    <div class="item">
+      <span class='object_link'><a href="DBF/Table.html#version_description-instance_method" title="DBF::Table#version_description (method)">#version_description</a></span>
+      <small>DBF::Table</small>
+    </div>
+  </li>
+  
+
+
+      </ul>
+    </div>
+  </body>
+</html>
diff --git a/docs/supported_encodings.csv b/docs/supported_encodings.csv
deleted file mode 100644
index 97084a4..0000000
--- a/docs/supported_encodings.csv
+++ /dev/null
@@ -1,60 +0,0 @@
-"Code Page", "Encoding", "Description"
-"01", "cp437", "U.S. MS–DOS"
-"02", "cp850", "International MS–DOS"
-"03", "cp1252", "Windows ANSI"
-"08", "cp865", "Danish OEM"
-"09", "cp437", "Dutch OEM"
-"0a", "cp850", "Dutch OEM*"
-"0b", "cp437", "Finnish OEM"
-"0d", "cp437", "French OEM"
-"0e", "cp850", "French OEM*"
-"0f", "cp437", "German OEM"
-"10", "cp850", "German OEM*"
-"11", "cp437", "Italian OEM"
-"12", "cp850", "Italian OEM*"
-"13", "cp932", "Japanese Shift-JIS"
-"14", "cp850", "Spanish OEM*"
-"15", "cp437", "Swedish OEM"
-"16", "cp850", "Swedish OEM*"
-"17", "cp865", "Norwegian OEM"
-"18", "cp437", "Spanish OEM"
-"19", "cp437", "English OEM (Britain)"
-"1a", "cp850", "English OEM (Britain)*"
-"1b", "cp437", "English OEM (U.S.)"
-"1c", "cp863", "French OEM (Canada)"
-"1d", "cp850", "French OEM*"
-"1f", "cp852", "Czech OEM"
-"22", "cp852", "Hungarian OEM"
-"23", "cp852", "Polish OEM"
-"24", "cp860", "Portuguese OEM"
-"25", "cp850", "Portuguese OEM*"
-"26", "cp866", "Russian OEM"
-"37", "cp850", "English OEM (U.S.)*"
-"40", "cp852", "Romanian OEM"
-"4d", "cp936", "Chinese GBK (PRC)"
-"4e", "cp949", "Korean (ANSI/OEM)"
-"4f", "cp950", "Chinese Big5 (Taiwan)"
-"50", "cp874", "Thai (ANSI/OEM)"
-"57", "cp1252", "ANSI"
-"58", "cp1252", "Western European ANSI"
-"59", "cp1252", "Spanish ANSI"
-"64", "cp852", "Eastern European MS–DOS"
-"65", "cp866", "Russian MS–DOS"
-"66", "cp865", "Nordic MS–DOS"
-"67", "cp861", "Icelandic MS–DOS"
-"6a", "cp737", "Greek MS–DOS (437G)"
-"6b", "cp857", "Turkish MS–DOS"
-"6c", "cp863", "French–Canadian MS–DOS"
-"78", "cp950", "Taiwan Big 5"
-"79", "cp949", "Hangul (Wansung)"
-"7a", "cp936", "PRC GBK"
-"7b", "cp932", "Japanese Shift-JIS"
-"7c", "cp874", "Thai Windows/MS–DOS"
-"86", "cp737", "Greek OEM"
-"87", "cp852", "Slovenian OEM"
-"88", "cp857", "Turkish OEM"
-"c8", "cp1250", "Eastern European Windows"
-"c9", "cp1251", "Russian Windows"
-"ca", "cp1254", "Turkish Windows"
-"cb", "cp1253", "Greek Windows"
-"cc", "cp1257", "Baltic Windows"
diff --git a/docs/supported_types.markdown b/docs/supported_types.markdown
deleted file mode 100644
index 508c7ed..0000000
--- a/docs/supported_types.markdown
+++ /dev/null
@@ -1,53 +0,0 @@
-# DBF supported data types
-
-    +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
-    | Version | Description                       | C | N | L | D | M | F | B | G | P | Y | T | I | V | X | @ | O | + |
-    +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
-    | 02      | FoxBase                           | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
-    +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
-    | 03      | dBase III without memo file       | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
-    +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
-    | 04      | dBase IV without memo file        | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
-    +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
-    | 05      | dBase V without memo file         | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
-    +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
-    | 07      | Visual Objects 1.x                | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - | - |
-    +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
-    | 30      | Visual FoxPro                     | Y | Y | Y | Y | - | Y | Y | Y | N | Y | N | Y | N | N | N | N | - |
-    +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
-    | 31      | Visual FoxPro with AutoIncrement  | Y | Y | Y | Y | Y | Y | Y | Y | N | Y | N | Y | N | N | N | N | N |
-    +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
-    | 7b      | dBase IV with memo file           | Y | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - |
-    +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
-    | 83      | dBase III with memo file          | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - |
-    +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
-    | 87      | Visual Objects 1.x with memo file | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | - | - | - | - |
-    +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
-    | 8b      | dBase IV with memo file           | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | N | - | - | - |
-    +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
-    | 8e      | dBase IV with SQL table           | Y | Y | Y | Y | Y | - | - | - | - | - | - | - | - | N | - | - | - |
-    +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
-    | f5      | FoxPro with memo file             | Y | Y | Y | Y | Y | Y | Y | Y | N | Y | N | Y | N | N | N | N | N |
-    +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
-    | fb      | FoxPro without memo file          | Y | Y | Y | Y | - | Y | Y | Y | N | Y | N | Y | N | N | N | N | N |
-    +---------+-----------------------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
-
-Data type descriptions
-
-* C = Character
-* N = Number
-* L = Logical
-* D = Date
-* M = Memo
-* F = Float
-* B = Binary
-* G = General
-* P = Picture
-* Y = Currency
-* T = DateTime
-* I = Integer
-* V = VariField
-* X = SQL compat
-* @ = Timestamp
-* O = Double
-* + = Autoincrement
diff --git a/docs/top-level-namespace.html b/docs/top-level-namespace.html
new file mode 100644
index 0000000..3cbfa15
--- /dev/null
+++ b/docs/top-level-namespace.html
@@ -0,0 +1,110 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<title>
+  Top Level Namespace
+  
+    &mdash; Documentation by YARD 0.9.26
+  
+</title>
+
+  <link rel="stylesheet" href="css/style.css" type="text/css" />
+
+  <link rel="stylesheet" href="css/common.css" type="text/css" />
+
+<script type="text/javascript">
+  pathId = "";
+  relpath = '';
+</script>
+
+
+  <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
+
+  <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
+
+
+  </head>
+  <body>
+    <div class="nav_wrap">
+      <iframe id="nav" src="class_list.html?1"></iframe>
+      <div id="resizer"></div>
+    </div>
+
+    <div id="main" tabindex="-1">
+      <div id="header">
+        <div id="menu">
+  
+    <a href="_index.html">Index</a> &raquo;
+    
+    
+    <span class="title">Top Level Namespace</span>
+  
+</div>
+
+        <div id="search">
+  
+    <a class="full_list_link" id="class_list_link"
+        href="class_list.html">
+
+        <svg width="24" height="24">
+          <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
+          <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
+        </svg>
+    </a>
+  
+</div>
+        <div class="clear"></div>
+      </div>
+
+      <div id="content"><h1>Top Level Namespace
+  
+  
+  
+</h1>
+<div class="box_info">
+  
+
+  
+  
+  
+  
+  
+
+  
+
+  
+</div>
+
+<h2>Defined Under Namespace</h2>
+<p class="children">
+  
+    
+      <strong class="modules">Modules:</strong> <span class='object_link'><a href="DBF.html" title="DBF (module)">DBF</a></span>
+    
+  
+    
+  
+</p>
+
+
+
+
+
+
+
+
+
+</div>
+
+      <div id="footer">
+  Generated on Sun Aug  8 16:19:07 2021 by
+  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+  0.9.26 (ruby-3.0.1).
+</div>
+
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/lib/dbf.rb b/lib/dbf.rb
index 79740dd..2d54e5d 100644
--- a/lib/dbf.rb
+++ b/lib/dbf.rb
@@ -1,7 +1,8 @@
-require 'date'
-
 require 'csv'
+require 'date'
+require 'forwardable'
 require 'json'
+require 'time'
 
 require 'dbf/version'
 require 'dbf/schema'
diff --git a/lib/dbf/column.rb b/lib/dbf/column.rb
index 3896e61..aa90aa3 100644
--- a/lib/dbf/column.rb
+++ b/lib/dbf/column.rb
@@ -1,12 +1,15 @@
 module DBF
   class Column
-    # Raised if length is less than 1
-    class LengthError < StandardError; end
+    extend Forwardable
 
-    # Raised if name is empty
-    class NameError < StandardError; end
+    class LengthError < StandardError
+    end
+
+    class NameError < StandardError
+    end
 
     attr_reader :table, :name, :type, :length, :decimal
+    def_delegator :type_cast_class, :type_cast
 
     TYPE_CAST_CLASS = {
       N: ColumnType::Number,
@@ -18,16 +21,19 @@ module DBF
       L: ColumnType::Boolean,
       M: ColumnType::Memo,
       B: ColumnType::Double,
-      G: ColumnType::General
+      G: ColumnType::General,
+      '+'.to_sym => ColumnType::SignedLong2
     }
     TYPE_CAST_CLASS.default = ColumnType::String
+    TYPE_CAST_CLASS.freeze
 
     # Initialize a new DBF::Column
     #
-    # @param [String] name
-    # @param [String] type
-    # @param [Fixnum] length
-    # @param [Fixnum] decimal
+    # @param table [String]
+    # @param name [String]
+    # @param type [String]
+    # @param length [Integer]
+    # @param decimal [Integer]
     def initialize(table, name, type, length, decimal)
       @table = table
       @name = clean(name)
@@ -41,14 +47,6 @@ module DBF
       validate_name
     end
 
-    # Cast value to native type
-    #
-    # @param [String] value
-    # @return [Fixnum, Float, Date, DateTime, Boolean, String]
-    def type_cast(value)
-      type_cast_class.type_cast(value)
-    end
-
     # Returns true if the column is a memo
     #
     # @return [Boolean]
@@ -56,18 +54,11 @@ module DBF
       @memo ||= type == 'M'
     end
 
-    # Schema definition
+    # Returns a Hash with :name, :type, :length, and :decimal keys
     #
-    # @return [String]
-    def schema_definition
-      "\"#{underscored_name}\", #{schema_data_type}\n"
-    end
-
-    # Sequel Schema definition
-    #
-    # @return [String]
-    def sequel_schema_definition
-      ":#{underscored_name}, #{schema_data_type(:sequel)}\n"
+    # @return [Hash]
+    def to_hash
+      {name: name, type: type, length: length, decimal: decimal}
     end
 
     # Underscored name
@@ -78,88 +69,50 @@ module DBF
     # @return [String]
     def underscored_name
       @underscored_name ||= begin
-        un = name.dup
-        un.gsub!(/::/, '/')
-        un.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
-        un.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
-        un.tr!('-', '_')
-        un.downcase!
-        un
+        name.gsub(/::/, '/')
+          .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
+          .gsub(/([a-z\d])([A-Z])/, '\1_\2')
+          .tr('-', '_')
+          .downcase
       end
     end
 
-    def to_hash
-      {name: name, type: type, length: length, decimal: decimal}
-    end
-
     private
 
-    def type_cast_class # nodoc
-      @type_cast_class ||= begin
-        klass = @length == 0 ? ColumnType::Nil : TYPE_CAST_CLASS[type.to_sym]
-        klass.new(@decimal, @encoding)
-      end
+    def clean(value) # :nodoc:
+      value.strip.gsub("\x00", '').gsub(/[^\x20-\x7E]/, '')
     end
 
-    def encode(value, strip_output = false) # nodoc
-      return value if !value.respond_to?(:encoding)
+    def encode(value, strip_output = false) # :nodoc:
+      return value unless value.respond_to?(:encoding)
 
       output = @encoding ? encode_string(value) : value
       strip_output ? output.strip : output
     end
 
-    def encode_string(string)
-      string.force_encoding(@encoding).encode(*encoding_args)
-    end
-
-    def encoding_args # nodoc
+    def encoding_args # :nodoc:
       @encoding_args ||= [
         Encoding.default_external,
         {undef: :replace, invalid: :replace}
       ]
     end
 
-    def schema_data_type(format = :activerecord) # nodoc
-      case type
-      when 'N', 'F'
-        decimal > 0 ? ':float' : ':integer'
-      when 'I'
-        ':integer'
-      when 'Y'
-        ':decimal, :precision => 15, :scale => 4'
-      when 'D'
-        ':date'
-      when 'T'
-        ':datetime'
-      when 'L'
-        ':boolean'
-      when 'M'
-        ':text'
-      when 'B'
-        if DBF::Table::FOXPRO_VERSIONS.keys.include?(@version)
-          ':float'
-        else
-          ':text'
-        end
-      else
-        if format == :sequel
-          ":varchar, :size => #{length}"
-        else
-          ":string, :limit => #{length}"
-        end
-      end
+    def encode_string(string) # :nodoc:
+      string.force_encoding(@encoding).encode(*encoding_args)
     end
 
-    def clean(value) # nodoc
-      truncated_value = value.strip.partition("\x00").first
-      truncated_value.gsub(/[^\x20-\x7E]/, '')
+    def type_cast_class # :nodoc:
+      @type_cast_class ||= begin
+        klass = @length == 0 ? ColumnType::Nil : TYPE_CAST_CLASS[type.to_sym]
+        klass.new(@decimal, @encoding)
+      end
     end
 
-    def validate_length # nodoc
+    def validate_length # :nodoc:
       raise LengthError, 'field length must be 0 or greater' if length < 0
     end
 
-    def validate_name # nodoc
+    def validate_name # :nodoc:
       raise NameError, 'column name cannot be empty' if @name.empty?
     end
   end
diff --git a/lib/dbf/column_type.rb b/lib/dbf/column_type.rb
index fd7e10d..9c433a1 100644
--- a/lib/dbf/column_type.rb
+++ b/lib/dbf/column_type.rb
@@ -1,13 +1,10 @@
 module DBF
   module ColumnType
     class Base
-      ENCODING_ARGS = [
-        Encoding.default_external,
-        {undef: :replace, invalid: :replace}
-      ]
-
       attr_reader :decimal, :encoding
 
+      # @param decimal [Integer]
+      # @param encoding [String, Encoding]
       def initialize(decimal, encoding)
         @decimal = decimal
         @encoding = encoding
@@ -15,71 +12,90 @@ module DBF
     end
 
     class Nil < Base
-      def type_cast(value)
+      # @param _value [String]
+      def type_cast(_value)
         nil
       end
     end
 
     class Number < Base
+      # @param value [String]
       def type_cast(value)
         return nil if value.strip.empty?
+
         @decimal.zero? ? value.to_i : value.to_f
       end
     end
 
     class Currency < Base
+      # @param value [String]
       def type_cast(value)
-        (value.unpack('q<')[0] / 10_000.0).to_f
+        (value.unpack1('q<') / 10_000.0).to_f
       end
     end
 
     class SignedLong < Base
+      # @param value [String]
+      def type_cast(value)
+        value.unpack1('l<')
+      end
+    end
+
+    class SignedLong2 < Base
+      # @param value [String]
       def type_cast(value)
-        value.unpack('l<')[0]
+        s = value.unpack1('B*')
+        sign_multiplier = s[0] == '0' ? -1 : 1
+        s[1, 31].to_i(2) * sign_multiplier
       end
     end
 
     class Float < Base
+      # @param value [String]
       def type_cast(value)
         value.to_f
       end
     end
 
     class Double < Base
+      # @param value [String]
       def type_cast(value)
-        value.unpack('E')[0]
+        value.unpack1('E')
       end
     end
 
     class Boolean < Base
+      # @param value [String]
       def type_cast(value)
-        value.strip =~ /^(y|t)$/i ? true : false
+        value.strip.match?(/^(y|t)$/i)
       end
     end
 
     class Date < Base
+      # @param value [String]
       def type_cast(value)
-        v = value.tr(' ', '0')
-        v !~ /\S/ ? nil : ::Date.parse(v)
-      rescue
+        value.match?(/\d{8}/) && ::Date.strptime(value, '%Y%m%d')
+      rescue StandardError
         nil
       end
     end
 
     class DateTime < Base
+      # @param value [String]
       def type_cast(value)
         days, msecs = value.unpack('l2')
         secs = (msecs / 1000).to_i
-        ::DateTime.jd(days, (secs / 3600).to_i, (secs / 60).to_i % 60, secs % 60)
-      rescue
+        ::DateTime.jd(days, (secs / 3600).to_i, (secs / 60).to_i % 60, secs % 60).to_time
+      rescue StandardError
         nil
       end
     end
 
     class Memo < Base
+      # @param value [String]
       def type_cast(value)
         if encoding && !value.nil?
-          value.force_encoding(@encoding).encode(*ENCODING_ARGS)
+          value.force_encoding(@encoding).encode(Encoding.default_external, undef: :replace, invalid: :replace)
         else
           value
         end
@@ -87,17 +103,18 @@ module DBF
     end
 
     class General < Base
+      # @param value [String]
       def type_cast(value)
         value
       end
     end
 
     class String < Base
+      # @param value [String]
       def type_cast(value)
         value = value.strip
-        @encoding ? value.force_encoding(@encoding).encode(*ENCODING_ARGS) : value
+        @encoding ? value.force_encoding(@encoding).encode(Encoding.default_external, undef: :replace, invalid: :replace) : value
       end
     end
-
   end
 end
diff --git a/lib/dbf/database/foxpro.rb b/lib/dbf/database/foxpro.rb
index 09a50f8..fcc65c3 100644
--- a/lib/dbf/database/foxpro.rb
+++ b/lib/dbf/database/foxpro.rb
@@ -16,12 +16,13 @@ module DBF
       #
       #  # Calling a table
       #  contacts = db.contacts.record(0)
+      #
+      # @param path [String]
       def initialize(path)
         @path = path
         @dirname = File.dirname(@path)
         @db = DBF::Table.new(@path)
         @tables = extract_dbc_data
-
       rescue Errno::ENOENT
         raise DBF::FileNotFoundError, "file not found: #{data}"
       end
@@ -31,9 +32,11 @@ module DBF
       end
 
       # Returns table with given name
-      # @return Table
+      #
+      # @param name [String]
+      # @return [DBF::Table]
       def table(name)
-        Table.new(table_path name) do |table|
+        Table.new table_path(name) do |table|
           table.long_names = @tables[name]
         end
       end
@@ -41,25 +44,23 @@ module DBF
       # Searches the database directory for the table's dbf file
       # and returns the absolute path. Ensures case-insensitivity
       # on any platform.
-      # @return String
+      # @param name [String]
+      # @return [String]
       def table_path(name)
-        example = File.join(@dirname, "#{name}.dbf")
-        glob = File.join(@dirname, '*')
-        path = Dir.glob(glob).find { |match| match.downcase == example.downcase }
+        glob = File.join(@dirname, "#{name}.dbf")
+        path = Dir.glob(glob, File::FNM_CASEFOLD).first
 
-        unless path && File.exist?(path)
-          raise DBF::FileNotFoundError, "related table not found: #{name}"
-        end
+        raise DBF::FileNotFoundError, "related table not found: #{name}" unless path && File.exist?(path)
 
         path
       end
 
-      def method_missing(method, *args) # nodoc
-        if table_names.index(method.to_s)
-          table method.to_s
-        else
-          super
-        end
+      def method_missing(method, *args) # :nodoc:
+        table_names.index(method.to_s) ? table(method.to_s) : super
+      end
+
+      def respond_to_missing?(method, *)
+        table_names.index(method.to_s) || super
       end
 
       private
@@ -68,7 +69,7 @@ module DBF
       # just an ordinary table with a treelike structure. Field definitions
       # are in the same order as in the linked tables but only the long name
       # is provided.
-      def extract_dbc_data # nodoc
+      def extract_dbc_data # :nodoc:
         data = {}
         @db.each do |record|
           next unless record
@@ -111,7 +112,7 @@ module DBF
     class Table < DBF::Table
       attr_accessor :long_names
 
-      def build_columns # nodoc
+      def build_columns # :nodoc:
         columns = super
 
         # modify the column definitions to use the long names as the
diff --git a/lib/dbf/encodings.rb b/lib/dbf/encodings.rb
index 58d7aa2..040b254 100644
--- a/lib/dbf/encodings.rb
+++ b/lib/dbf/encodings.rb
@@ -58,6 +58,6 @@ module DBF
     'c9' => 'cp1251',      # Russian Windows
     'ca' => 'cp1254',      # Turkish Windows
     'cb' => 'cp1253',      # Greek Windows
-    'cc' => 'cp1257',      # Baltic Windows
-  }
+    'cc' => 'cp1257'       # Baltic Windows
+  }.freeze
 end
diff --git a/lib/dbf/header.rb b/lib/dbf/header.rb
index 0bc9696..968debb 100644
--- a/lib/dbf/header.rb
+++ b/lib/dbf/header.rb
@@ -9,12 +9,20 @@ module DBF
 
     def initialize(data)
       @data = data
-      @version, @record_count, @header_length, @record_length, @encoding_key = unpack_header
-      @encoding = DBF::ENCODINGS[@encoding_key]
+      unpack_header
     end
 
     def unpack_header
-      @data.unpack('H2 x3 V v2 x17H2')
+      @version = @data.unpack('H2').first
+
+      case @version
+      when '02'
+        @record_count, @record_length = @data.unpack('x v x3 v')
+        @header_length = 521
+      else
+        @record_count, @header_length, @record_length, @encoding_key = @data.unpack('x x3 V v2 x17 H2')
+        @encoding = DBF::ENCODINGS[@encoding_key]
+      end
     end
   end
 end
diff --git a/lib/dbf/memo/base.rb b/lib/dbf/memo/base.rb
index 6d99999..0179d08 100644
--- a/lib/dbf/memo/base.rb
+++ b/lib/dbf/memo/base.rb
@@ -15,6 +15,7 @@ module DBF
 
       def get(start_block)
         return nil unless start_block > 0
+
         build_memo start_block
       end
 
@@ -28,19 +29,19 @@ module DBF
 
       private
 
-      def offset(start_block) # nodoc
+      def offset(start_block) # :nodoc:
         start_block * block_size
       end
 
-      def content_size(memo_size) # nodoc
+      def content_size(memo_size) # :nodoc:
         (memo_size - block_size) + BLOCK_HEADER_SIZE
       end
 
-      def block_content_size # nodoc
+      def block_content_size # :nodoc:
         @block_content_size ||= block_size - BLOCK_HEADER_SIZE
       end
 
-      def block_size #nodoc
+      def block_size # :nodoc:
         BLOCK_SIZE
       end
     end
diff --git a/lib/dbf/memo/dbase3.rb b/lib/dbf/memo/dbase3.rb
index 41188c5..bb1c286 100644
--- a/lib/dbf/memo/dbase3.rb
+++ b/lib/dbf/memo/dbase3.rb
@@ -1,7 +1,7 @@
 module DBF
   module Memo
     class Dbase3 < Base
-      def build_memo(start_block) # nodoc
+      def build_memo(start_block) # :nodoc:
         @data.seek offset(start_block)
         memo_string = ''
         loop do
diff --git a/lib/dbf/memo/dbase4.rb b/lib/dbf/memo/dbase4.rb
index 7b47f40..1ae5b57 100644
--- a/lib/dbf/memo/dbase4.rb
+++ b/lib/dbf/memo/dbase4.rb
@@ -1,9 +1,9 @@
 module DBF
   module Memo
     class Dbase4 < Base
-      def build_memo(start_block) # nodoc
+      def build_memo(start_block) # :nodoc:
         @data.seek offset(start_block)
-        @data.read(@data.read(BLOCK_HEADER_SIZE).unpack('x4L').first)
+        @data.read(@data.read(BLOCK_HEADER_SIZE).unpack1('x4L'))
       end
     end
   end
diff --git a/lib/dbf/memo/foxpro.rb b/lib/dbf/memo/foxpro.rb
index 90e55bd..68fe7fd 100644
--- a/lib/dbf/memo/foxpro.rb
+++ b/lib/dbf/memo/foxpro.rb
@@ -3,7 +3,7 @@ module DBF
     class Foxpro < Base
       FPT_HEADER_SIZE = 512
 
-      def build_memo(start_block) # nodoc
+      def build_memo(start_block) # :nodoc:
         @data.seek offset(start_block)
 
         memo_type, memo_size, memo_string = @data.read(block_size).unpack('NNa*')
@@ -15,17 +15,16 @@ module DBF
           memo_string = memo_string[0, memo_size]
         end
         memo_string
-
-      rescue
+      rescue StandardError
         nil
       end
 
       private
 
-      def block_size # nodoc
+      def block_size # :nodoc:
         @block_size ||= begin
           @data.rewind
-          @data.read(FPT_HEADER_SIZE).unpack('x6n').first || 0
+          @data.read(FPT_HEADER_SIZE).unpack1('x6n') || 0
         end
       end
     end
diff --git a/lib/dbf/record.rb b/lib/dbf/record.rb
index 19efda3..4d91495 100644
--- a/lib/dbf/record.rb
+++ b/lib/dbf/record.rb
@@ -3,10 +3,10 @@ module DBF
   class Record
     # Initialize a new DBF::Record
     #
-    # @data [String, StringIO] data
-    # @columns [Column]
-    # @version [String]
-    # @memo [DBF::Memo]
+    # @param data [String, StringIO] data
+    # @param columns [Column]
+    # @param version [String]
+    # @param memo [DBF::Memo]
     def initialize(data, columns, version, memo)
       @data = StringIO.new(data)
       @columns = columns
@@ -22,24 +22,9 @@ module DBF
       other.respond_to?(:attributes) && other.attributes == attributes
     end
 
-    # Maps a row to an array of values
-    #
-    # @return [Array]
-    def to_a
-      @columns.map { |column| attributes[column.name] }
-    end
-
-    # Do all search parameters match?
-    #
-    # @param [Hash] options
-    # @return [Boolean]
-    def match?(options)
-      options.all? { |key, value| self[key] == value }
-    end
-
     # Reads attributes by column name
     #
-    # @param [String, Symbol] key
+    # @param name [String, Symbol] key
     def [](name)
       key = name.to_s
       if attributes.key?(key)
@@ -56,64 +41,66 @@ module DBF
       @attributes ||= Hash[attribute_map]
     end
 
-    # Overrides standard Object.respond_to? to return true if a
-    # matching column name is found.
+    # Do all search parameters match?
     #
-    # @param [String, Symbol] method
+    # @param [Hash] options
     # @return [Boolean]
-    def respond_to?(method, *args)
-      underscored_column_names.include?(method.to_s) || super
+    def match?(options)
+      options.all? { |key, value| self[key] == value }
+    end
+
+    # Maps a row to an array of values
+    #
+    # @return [Array]
+    def to_a
+      @columns.map { |column| attributes[column.name] }
     end
 
     private
 
-    def attribute_map # nodoc
+    def attribute_map # :nodoc:
       @columns.map { |column| [column.name, init_attribute(column)] }
     end
 
-    def file_offset(attribute_name) # nodoc
-      column = @columns.detect { |c| c.name == attribute_name.to_s }
-      index = @columns.index(column)
-      @columns[0, index + 1].compact.reduce(0) { |x, c| x += c.length }
+    def get_data(column) # :nodoc:
+      @data.read(column.length)
     end
 
-    def method_missing(method, *args) # nodoc
-      if (index = underscored_column_names.index(method.to_s))
-        attributes[@columns[index].name]
+    def get_memo(column) # :nodoc:
+      if @memo
+        @memo.get(memo_start_block(column))
       else
-        super
+        # the memo file is missing, so read ahead to next record and return nil
+        @data.read(column.length)
+        nil
       end
     end
 
-    def underscored_column_names # nodoc
-      @underscored_column_names ||= @columns.map(&:underscored_name)
+    def init_attribute(column) # :nodoc:
+      value = column.memo? ? get_memo(column) : get_data(column)
+      column.type_cast(value)
     end
 
-    def init_attribute(column) # nodoc
-      value = column.memo? ? memo(column) : get_data(column)
-      column.type_cast(value)
+    def memo_start_block(column) # :nodoc:
+      data = get_data(column)
+      data = data.unpack1('V') if %w[30 31].include?(@version)
+      data.to_i
     end
 
-    def memo(column) # nodoc
-      if @memo
-        @memo.get(memo_start_block(column))
+    def method_missing(method, *args) # :nodoc:
+      if (index = underscored_column_names.index(method.to_s))
+        attributes[@columns[index].name]
       else
-        # the memo file is missing, so read ahead to next record and return nil
-        @data.read(column.length)
-        nil
+        super
       end
     end
 
-    def memo_start_block(column) # nodoc
-      data = get_data(column)
-      if %w(30 31).include?(@version)
-        data = data.unpack('V').first
-      end
-      data.to_i
+    def respond_to_missing?(method, *) # :nodoc:
+      underscored_column_names.include?(method.to_s) || super
     end
 
-    def get_data(column) # nodoc
-      @data.read(column.length)
+    def underscored_column_names # :nodoc:
+      @underscored_column_names ||= @columns.map(&:underscored_name)
     end
   end
 end
diff --git a/lib/dbf/schema.rb b/lib/dbf/schema.rb
index fa53b3c..7f67462 100644
--- a/lib/dbf/schema.rb
+++ b/lib/dbf/schema.rb
@@ -1,6 +1,17 @@
 module DBF
   # The Schema module is mixin for the Table class
   module Schema
+    FORMATS = [:activerecord, :json, :sequel].freeze
+
+    OTHER_DATA_TYPES = {
+      'Y' => ':decimal, :precision => 15, :scale => 4',
+      'D' => ':date',
+      'T' => ':datetime',
+      'L' => ':boolean',
+      'M' => ':text',
+      'B' => ':binary'
+    }.freeze
+
     # Generate an ActiveRecord::Schema
     #
     # xBase data types are converted to generic types as follows:
@@ -21,43 +32,85 @@ module DBF
     #     t.column :notes, :text
     #   end
     #
-    # @param [Symbol] format Valid options are :activerecord and :json
+    # @param format [Symbol] format Valid options are :activerecord and :json
+    # @param table_only [Boolean]
     # @return [String]
     def schema(format = :activerecord, table_only = false)
-      supported_formats = [:activerecord, :json, :sequel]
-      if supported_formats.include?(format)
-        send("#{format}_schema", table_only)
-      else
-        raise ArgumentError
-      end
+      schema_method_name = schema_name(format)
+      send(schema_method_name, table_only)
+    rescue NameError
+      raise ArgumentError, ":#{format} is not a valid schema. Valid schemas are: #{FORMATS.join(', ')}."
+    end
+
+    def schema_name(format) # :nodoc:
+      "#{format}_schema"
     end
 
-    def activerecord_schema(_table_only = false)
+    def activerecord_schema(_table_only = false) # :nodoc:
       s = "ActiveRecord::Schema.define do\n"
       s << "  create_table \"#{name}\" do |t|\n"
       columns.each do |column|
-        s << "    t.column #{column.schema_definition}"
+        s << "    t.column #{activerecord_schema_definition(column)}"
       end
       s << "  end\nend"
       s
     end
 
-    def sequel_schema(table_only = false)
+    def sequel_schema(table_only = false) # :nodoc:
       s = ''
       s << "Sequel.migration do\n" unless table_only
       s << "  change do\n " unless table_only
       s << "    create_table(:#{name}) do\n"
       columns.each do |column|
-        s << "      column #{column.sequel_schema_definition}"
+        s << "      column #{sequel_schema_definition(column)}"
       end
       s << "    end\n"
-      s << "  end\n"  unless table_only
-      s << "end\n"  unless table_only
+      s << "  end\n" unless table_only
+      s << "end\n" unless table_only
       s
     end
 
-    def json_schema(_table_only = false)
+    def json_schema(_table_only = false) # :nodoc:
       columns.map(&:to_hash).to_json
     end
+
+    # ActiveRecord schema definition
+    #
+    # @param column [DBF::Column]
+    # @return [String]
+    def activerecord_schema_definition(column)
+      "\"#{column.underscored_name}\", #{schema_data_type(column, :activerecord)}\n"
+    end
+
+    # Sequel schema definition
+    #
+    # @param column [DBF::Column]
+    # @return [String]
+    def sequel_schema_definition(column)
+      ":#{column.underscored_name}, #{schema_data_type(column, :sequel)}\n"
+    end
+
+    def schema_data_type(column, format = :activerecord) # :nodoc:
+      case column.type
+      when *%w[N F I]
+        number_data_type(column)
+      when *%w[Y D T L M B]
+        OTHER_DATA_TYPES[column.type]
+      else
+        string_data_format(format, column)
+      end
+    end
+
+    def number_data_type(column)
+      column.decimal > 0 ? ':float' : ':integer'
+    end
+
+    def string_data_format(format, column)
+      if format == :sequel
+        ":varchar, :size => #{column.length}"
+      else
+        ":string, :limit => #{column.length}"
+      end
+    end
   end
 end
diff --git a/lib/dbf/table.rb b/lib/dbf/table.rb
index 1fedda9..eefbb7d 100644
--- a/lib/dbf/table.rb
+++ b/lib/dbf/table.rb
@@ -2,13 +2,19 @@ module DBF
   class FileNotFoundError < StandardError
   end
 
+  class NoColumnsDefined < StandardError
+  end
+
   # DBF::Table is the primary interface to a single DBF file and provides
   # methods for enumerating and searching the records.
   class Table
+    extend Forwardable
     include Enumerable
-    include Schema
+    include ::DBF::Schema
 
-    DBF_HEADER_SIZE = 32
+    DBASE2_HEADER_SIZE = 8
+    DBASE3_HEADER_SIZE = 32
+    DBASE7_HEADER_SIZE = 68
 
     VERSIONS = {
       '02' => 'FoxBase',
@@ -17,6 +23,7 @@ module DBF
       '05' => 'dBase V without memo file',
       '07' => 'Visual Objects 1.x',
       '30' => 'Visual FoxPro',
+      '32' => 'Visual FoxPro with field type Varchar or Varbinary',
       '31' => 'Visual FoxPro with AutoIncrement field',
       '43' => 'dBASE IV SQL table files, no memo',
       '63' => 'dBASE IV SQL system files, no memo',
@@ -24,23 +31,28 @@ module DBF
       '83' => 'dBase III with memo file',
       '87' => 'Visual Objects 1.x with memo file',
       '8b' => 'dBase IV with memo file',
+      '8c' => 'dBase 7',
       '8e' => 'dBase IV with SQL table',
       'cb' => 'dBASE IV SQL table files, with memo',
       'f5' => 'FoxPro with memo file',
       'fb' => 'FoxPro without memo file'
-    }
+    }.freeze
 
     FOXPRO_VERSIONS = {
       '30' => 'Visual FoxPro',
       '31' => 'Visual FoxPro with AutoIncrement field',
       'f5' => 'FoxPro with memo file',
       'fb' => 'FoxPro without memo file'
-    }
+    }.freeze
 
-    attr_reader :header
     attr_accessor :encoding
     attr_writer :name
 
+    def_delegator :header, :header_length
+    def_delegator :header, :record_count
+    def_delegator :header, :record_length
+    def_delegator :header, :version
+
     # Opens a DBF::Table
     # Examples:
     #   # working with a file stored on the filesystem
@@ -59,23 +71,14 @@ module DBF
     #   table = DBF::Table.new 'data.dbf', nil, 'cp437'
     #   table = DBF::Table.new 'data.dbf', 'memo.dbt', Encoding::US_ASCII
     #
-    # @param [String, StringIO] data Path to the dbf file or a StringIO object
-    # @param [optional String, StringIO] memo Path to the memo file or a StringIO object
-    # @param [optional String, Encoding] encoding Name of the encoding or an Encoding object
+    # @param data [String, StringIO] data Path to the dbf file or a StringIO object
+    # @param memo [optional String, StringIO] memo Path to the memo file or a StringIO object
+    # @param encoding [optional String, Encoding] encoding Name of the encoding or an Encoding object
     def initialize(data, memo = nil, encoding = nil)
       @data = open_data(data)
-      @data.rewind
-      @header = Header.new(@data.read DBF_HEADER_SIZE)
       @encoding = encoding || header.encoding
       @memo = open_memo(data, memo)
       yield self if block_given?
-    rescue Errno::ENOENT
-      raise DBF::FileNotFoundError, "file not found: #{data}"
-    end
-
-    # @return [TrueClass, FalseClass]
-    def has_memo_file?
-      !!@memo
     end
 
     # Closes the table and memo file
@@ -95,14 +98,18 @@ module DBF
       end
     end
 
-    # @return String
-    def filename
-      File.basename @data.path if @data.respond_to?(:path)
+    # Column names
+    #
+    # @return [String]
+    def column_names
+      @column_names ||= columns.map(&:name)
     end
 
-    # @return String
-    def name
-      @name ||= filename && File.basename(filename, ".*")
+    # All columns
+    #
+    # @return [Array]
+    def columns
+      @columns ||= build_columns
     end
 
     # Calls block once for each record in the table. The record may be nil
@@ -110,53 +117,14 @@ module DBF
     #
     # @yield [nil, DBF::Record]
     def each
-      header.record_count.times { |i| yield record(i) }
-    end
-
-    # Retrieve a record by index number.
-    # The record will be nil if it has been deleted, but not yet pruned from
-    # the database.
-    #
-    # @param [Fixnum] index
-    # @return [DBF::Record, NilClass]
-    def record(index)
-      seek_to_record(index)
-      return nil if deleted_record?
-      DBF::Record.new(@data.read(header.record_length), columns, version, @memo)
+      record_count.times { |i| yield record(i) }
     end
 
-    alias_method :row, :record
-
-    # Internal dBase version number
-    #
     # @return [String]
-    def version
-      @version ||= header.version
-    end
-
-    # Total number of records
-    #
-    # @return [Fixnum]
-    def record_count
-      @record_count ||= header.record_count
-    end
-
-    # Human readable version description
-    #
-    # @return [String]
-    def version_description
-      VERSIONS[version]
-    end
+    def filename
+      return unless @data.respond_to?(:path)
 
-    # Dumps all records to a CSV file.  If no filename is given then CSV is
-    # output to STDOUT.
-    #
-    # @param [optional String] path Defaults to STDOUT
-    def to_csv(path = nil)
-      out_io = path ? File.open(path, 'w') : $stdout
-      csv = CSV.new(out_io, force_quotes: true)
-      csv << column_names
-      each { |record| csv << record.to_a }
+      File.basename(@data.path)
     end
 
     # Find records using a simple ActiveRecord-like syntax.
@@ -181,12 +149,12 @@ module DBF
     # returned.  The equivalent SQL would be "WHERE key1 = 'value1'
     # AND key2 = 'value2'".
     #
-    # @param [Fixnum, Symbol] command
-    # @param [optional, Hash] options Hash of search parameters
+    # @param command [Integer, Symbol] command
+    # @param options [optional, Hash] options Hash of search parameters
     # @yield [optional, DBF::Record, NilClass]
     def find(command, options = {}, &block)
       case command
-      when Fixnum
+      when Integer
         record(command)
       when Array
         command.map { |i| record(i) }
@@ -197,45 +165,119 @@ module DBF
       end
     end
 
-    # All columns
+    # @return [TrueClass, FalseClass]
+    def has_memo_file?
+      !!@memo
+    end
+
+    # @return [String]
+    def name
+      @name ||= filename && File.basename(filename, '.*')
+    end
+
+    # Retrieve a record by index number.
+    # The record will be nil if it has been deleted, but not yet pruned from
+    # the database.
     #
-    # @return [Array]
-    def columns
-      @columns ||= build_columns
+    # @param [Integer] index
+    # @return [DBF::Record, NilClass]
+    def record(index)
+      raise DBF::NoColumnsDefined, 'The DBF file has no columns defined' if columns.empty?
+
+      seek_to_record(index)
+      return nil if deleted_record?
+
+      record_data = @data.read(record_length)
+      DBF::Record.new(record_data, columns, version, @memo)
     end
 
-    # Column names
+    alias row record
+
+    # Dumps all records to a CSV file.  If no filename is given then CSV is
+    # output to STDOUT.
+    #
+    # @param [optional String] path Defaults to STDOUT
+    def to_csv(path = nil)
+      out_io = path ? File.open(path, 'w') : $stdout
+      csv = CSV.new(out_io, force_quotes: true)
+      csv << column_names
+      each { |record| csv << record.to_a }
+    end
+
+    # Human readable version description
     #
     # @return [String]
-    def column_names
-      columns.map(&:name)
+    def version_description
+      VERSIONS[version]
     end
 
     private
 
-    def build_columns # nodoc
-      @data.seek(DBF_HEADER_SIZE)
-      columns = []
-      until end_of_record?
-        column_data = @data.read(DBF_HEADER_SIZE)
-        name, type, length, decimal = column_data.unpack('a10 x a x4 C2')
-        columns << Column.new(self, name, type, length, decimal)
+    def build_columns # :nodoc:
+      safe_seek do
+        @data.seek(header_size)
+        [].tap do |columns|
+          until end_of_record?
+            args = case version
+            when '02'
+              [self, *@data.read(header_size * 2).unpack('A11 a C'), 0]
+            when '8c'
+              [self, *@data.read(48).unpack('A32 a C C x13')]
+            else
+              [self, *@data.read(header_size).unpack('A11 a x4 C2')]
+            end
+
+            columns << Column.new(*args)
+          end
+        end
       end
-      columns
     end
 
-    def end_of_record? # nodoc
-      original_pos = @data.pos
-      byte = @data.read(1)
-      @data.seek(original_pos)
-      byte.ord == 13
+    def header_size
+      case version
+      when '02'
+        DBASE2_HEADER_SIZE
+      when '8c'
+        DBASE7_HEADER_SIZE
+      else 
+        DBASE3_HEADER_SIZE
+      end
+    end
+
+    def deleted_record? # :nodoc:
+      flag = @data.read(1)
+      flag ? flag.unpack1('a') == '*' : true
+    end
+
+    def end_of_record? # :nodoc:
+      safe_seek { @data.read(1).ord == 13 }
+    end
+
+    def find_all(options) # :nodoc:
+      select do |record|
+        next unless record && record.match?(options)
+
+        yield record if block_given?
+        record
+      end
+    end
+
+    def find_first(options) # :nodoc:
+      detect { |record| record && record.match?(options) }
+    end
+
+    def foxpro? # :nodoc:
+      FOXPRO_VERSIONS.key?(version)
     end
 
-    def foxpro? # nodoc
-      FOXPRO_VERSIONS.keys.include? version
+    def header # :nodoc:
+      @header ||= safe_seek do
+        @data.seek(0)
+        Header.new(@data.read(DBASE3_HEADER_SIZE))
+      end
     end
 
-    def memo_class # nodoc
+    def memo_class # :nodoc:
       @memo_class ||= begin
         if foxpro?
           Memo::Foxpro
@@ -245,49 +287,39 @@ module DBF
       end
     end
 
-    def open_data(data) # nodoc
+    def memo_search_path(io) # :nodoc:
+      dirname = File.dirname(io)
+      basename = File.basename(io, '.*')
+      "#{dirname}/#{basename}*.{fpt,FPT,dbt,DBT}"
+    end
+
+    def open_data(data) # :nodoc:
       data.is_a?(StringIO) ? data : File.open(data, 'rb')
+    rescue Errno::ENOENT
+      raise DBF::FileNotFoundError, "file not found: #{data}"
     end
 
-    def open_memo(data, memo = nil) # nodoc
+    def open_memo(data, memo = nil) # :nodoc:
       if memo
         meth = memo.is_a?(StringIO) ? :new : :open
         memo_class.send(meth, memo, version)
-      elsif !data.is_a? StringIO
-        files = Dir.glob(memo_search_path data)
+      elsif !data.is_a?(StringIO)
+        files = Dir.glob(memo_search_path(data))
         files.any? ? memo_class.open(files.first, version) : nil
       end
     end
 
-    def memo_search_path(io) # nodoc
-      dirname = File.dirname(io)
-      basename = File.basename(io, '.*')
-      "#{dirname}/#{basename}*.{fpt,FPT,dbt,DBT}"
-    end
-
-    def find_all(options) # nodoc
-      map do |record|
-        if record && record.match?(options)
-          yield record if block_given?
-          record
-        end
-      end.compact
-    end
-
-    def find_first(options) # nodoc
-      detect { |record| record && record.match?(options) }
-    end
-
-    def deleted_record? # nodoc
-      @data.read(1).unpack('a') == ['*']
+    def safe_seek # :nodoc:
+      original_pos = @data.pos
+      yield.tap { @data.seek(original_pos) }
     end
 
-    def seek(offset) # nodoc
-      @data.seek header.header_length + offset
+    def seek(offset) # :nodoc:
+      @data.seek(header_length + offset)
     end
 
-    def seek_to_record(index) # nodoc
-      seek(index * header.record_length)
+    def seek_to_record(index) # :nodoc:
+      seek(index * record_length)
     end
   end
 end
diff --git a/lib/dbf/version.rb b/lib/dbf/version.rb
index 204d08c..e6aaed0 100644
--- a/lib/dbf/version.rb
+++ b/lib/dbf/version.rb
@@ -1,3 +1,3 @@
 module DBF
-  VERSION = '3.0.5'
+  VERSION = '4.2.0'.freeze
 end
diff --git a/spec/dbf/column_spec.rb b/spec/dbf/column_spec.rb
index ee88e60..12f5eb8 100644
--- a/spec/dbf/column_spec.rb
+++ b/spec/dbf/column_spec.rb
@@ -3,7 +3,7 @@
 require 'spec_helper'
 
 RSpec.describe DBF::Column do
-  let(:table) { DBF::Table.new fixture('dbase_30.dbf')}
+  let(:table) { DBF::Table.new fixture('dbase_30.dbf') }
 
   context 'when initialized' do
     let(:column) { DBF::Column.new table, 'ColumnName', 'N', 1, 0 }
@@ -42,7 +42,7 @@ RSpec.describe DBF::Column do
     end
   end
 
-  context '#type_cast' do
+  describe '#type_cast' do
     context 'with type N (number)' do
       context 'when value is empty' do
         it 'returns nil' do
@@ -52,28 +52,28 @@ RSpec.describe DBF::Column do
         end
       end
 
-      context 'and 0 length' do
+      context 'with 0 length' do
         it 'returns nil' do
           column = DBF::Column.new table, 'ColumnName', 'N', 0, 0
           expect(column.type_cast('')).to be_nil
         end
       end
 
-      context 'and 0 decimals' do
-        it 'casts value to Fixnum' do
+      context 'with 0 decimals' do
+        it 'casts value to Integer' do
           value = '135'
           column = DBF::Column.new table, 'ColumnName', 'N', 3, 0
           expect(column.type_cast(value)).to eq 135
         end
 
-        it 'supports negative Fixnum' do
+        it 'supports negative Integer' do
           value = '-135'
           column = DBF::Column.new table, 'ColumnName', 'N', 3, 0
-          expect(column.type_cast(value)).to eq (-135)
+          expect(column.type_cast(value)).to eq(-135)
         end
       end
 
-      context 'and more than 0 decimals' do
+      context 'with more than 0 decimals' do
         it 'casts value to Float' do
           value = '13.5'
           column = DBF::Column.new table, 'ColumnName', 'N', 2, 1
@@ -83,13 +83,13 @@ RSpec.describe DBF::Column do
         it 'casts negative value to Float' do
           value = '-13.5'
           column = DBF::Column.new table, 'ColumnName', 'N', 2, 1
-          expect(column.type_cast(value)).to eq (-13.5)
+          expect(column.type_cast(value)).to eq(-13.5)
         end
       end
     end
 
     context 'with type F (float)' do
-      context 'and 0 length' do
+      context 'with 0 length' do
         it 'returns nil' do
           column = DBF::Column.new table, 'ColumnName', 'F', 0, 0
           expect(column.type_cast('')).to be_nil
@@ -105,7 +105,7 @@ RSpec.describe DBF::Column do
       it 'casts negative value to Float' do
         value = '-135'
         column = DBF::Column.new table, 'ColumnName', 'F', 3, 0
-        expect(column.type_cast(value)).to eq (-135.0)
+        expect(column.type_cast(value)).to eq(-135.0)
       end
     end
 
@@ -126,29 +126,29 @@ RSpec.describe DBF::Column do
         it 'supports negative binary' do
           column = DBF::Column.new table, 'ColumnName', 'B', 1, 2
           expect(column.type_cast("\x00\x00\x00\x00\x00\xC0\x65\xC0")).to be_a(Float)
-          expect(column.type_cast("\x00\x00\x00\x00\x00\xC0\x65\xC0")).to eq (-174.0)
+          expect(column.type_cast("\x00\x00\x00\x00\x00\xC0\x65\xC0")).to eq(-174.0)
         end
       end
     end
 
     context 'with type I (integer)' do
-      context 'and 0 length' do
+      context 'with 0 length' do
         it 'returns nil' do
           column = DBF::Column.new table, 'ColumnName', 'I', 0, 0
           expect(column.type_cast('')).to be_nil
         end
       end
 
-      it 'casts value to Fixnum' do
+      it 'casts value to Integer' do
         value = "\203\171\001\000"
         column = DBF::Column.new table, 'ColumnName', 'I', 3, 0
-        expect(column.type_cast(value)).to eq 96643
+        expect(column.type_cast(value)).to eq 96_643
       end
 
-      it 'supports negative Fixnum' do
+      it 'supports negative Integer' do
         value = "\x24\xE1\xFF\xFF"
         column = DBF::Column.new table, 'ColumnName', 'I', 3, 0
-        expect(column.type_cast(value)).to eq (-7900)
+        expect(column.type_cast(value)).to eq(-7900)
       end
     end
 
@@ -167,7 +167,7 @@ RSpec.describe DBF::Column do
         expect(column.type_cast('n')).to be false
       end
 
-      context 'and 0 length' do
+      context 'with 0 length' do
         it 'returns nil' do
           column = DBF::Column.new table, 'ColumnName', 'L', 0, 0
           expect(column.type_cast('')).to be_nil
@@ -180,7 +180,7 @@ RSpec.describe DBF::Column do
 
       context 'with valid datetime' do
         it 'casts to DateTime' do
-          expect(column.type_cast("Nl%\000\300Z\252\003")).to eq DateTime.parse('2002-10-10T17:04:56+00:00')
+          expect(column.type_cast("Nl%\000\300Z\252\003")).to eq Time.parse('2002-10-10T17:04:56+00:00')
         end
       end
 
@@ -190,7 +190,7 @@ RSpec.describe DBF::Column do
         end
       end
 
-      context 'and 0 length' do
+      context 'with 0 length' do
         it 'returns nil' do
           column = DBF::Column.new table, 'ColumnName', 'T', 0, 0
           expect(column.type_cast('')).to be_nil
@@ -203,17 +203,17 @@ RSpec.describe DBF::Column do
 
       context 'with valid date' do
         it 'casts to Date' do
-          expect(column.type_cast('20050712')).to eq Date.new(2005,7,12)
+          expect(column.type_cast('20050712')).to eq Date.new(2005, 7, 12)
         end
       end
 
       context 'with invalid date' do
         it 'casts to nil' do
-          expect(column.type_cast('0')).to be_nil
+          expect(column.type_cast('000000000')).to be_nil
         end
       end
 
-      context 'and 0 length' do
+      context 'with 0 length' do
         it 'returns nil' do
           column = DBF::Column.new table, 'ColumnName', 'D', 0, 0
           expect(column.type_cast('')).to be_nil
@@ -232,7 +232,7 @@ RSpec.describe DBF::Column do
         expect(column.type_cast(nil)).to be_nil
       end
 
-      context 'and 0 length' do
+      context 'with 0 length' do
         it 'returns nil' do
           column = DBF::Column.new table, 'ColumnName', 'M', 0, 0
           expect(column.type_cast('')).to be_nil
@@ -252,7 +252,7 @@ RSpec.describe DBF::Column do
         expect(column.type_cast(nil)).to be_nil
       end
 
-      context 'and 0 length' do
+      context 'with 0 length' do
         it 'returns nil' do
           column = DBF::Column.new table, 'ColumnName', 'G', 0, 0
           expect(column.type_cast('')).to be_nil
@@ -269,14 +269,14 @@ RSpec.describe DBF::Column do
     end
 
     it 'supports negative currency' do
-      expect(column.type_cast("\xFC\xF0\xF0\xFE\xFF\xFF\xFF\xFF")).to eq (-1776.41)
+      expect(column.type_cast("\xFC\xF0\xF0\xFE\xFF\xFF\xFF\xFF")).to eq(-1776.41)
     end
 
     it 'supports 64bit negative currency' do
-      expect(column.type_cast("pN'9\xFF\xFF\xFF\xFF")).to eq (-333609.0)
+      expect(column.type_cast("pN'9\xFF\xFF\xFF\xFF")).to eq(-333_609.0)
     end
 
-    context 'and 0 length' do
+    context 'with 0 length' do
       it 'returns nil' do
         column = DBF::Column.new table, 'ColumnName', 'Y', 0, 0
         expect(column.type_cast('')).to be_nil
@@ -284,63 +284,15 @@ RSpec.describe DBF::Column do
     end
   end
 
-  context '#schema_definition' do
-    context 'with type N (number)' do
-      it 'outputs an integer column' do
-        column = DBF::Column.new table, 'ColumnName', 'N', 1, 0
-        expect(column.schema_definition).to eq "\"column_name\", :integer\n"
-      end
-    end
-
-    context 'with type B (binary)' do
-      context 'with Foxpro dbf' do
-        it 'outputs a float column' do
-          column = DBF::Column.new table, 'ColumnName', 'B', 1, 2
-          expect(column.schema_definition).to eq "\"column_name\", :float\n"
-        end
-      end
-    end
-
-    it 'defines a float colmn if type is (N)umber with more than 0 decimals' do
-      column = DBF::Column.new table, 'ColumnName', 'N', 1, 2
-      expect(column.schema_definition).to eq "\"column_name\", :float\n"
-    end
-
-    it 'defines a date column if type is (D)ate' do
-      column = DBF::Column.new table, 'ColumnName', 'D', 8, 0
-      expect(column.schema_definition).to eq "\"column_name\", :date\n"
-    end
-
-    it 'defines a datetime column if type is (D)ate' do
-      column = DBF::Column.new table, 'ColumnName', 'T', 16, 0
-      expect(column.schema_definition).to eq "\"column_name\", :datetime\n"
-    end
-
-    it 'defines a boolean column if type is (L)ogical' do
-      column = DBF::Column.new table, 'ColumnName', 'L', 1, 0
-      expect(column.schema_definition).to eq "\"column_name\", :boolean\n"
-    end
-
-    it 'defines a text column if type is (M)emo' do
-      column = DBF::Column.new table, 'ColumnName', 'M', 1, 0
-      expect(column.schema_definition).to eq "\"column_name\", :text\n"
-    end
-
-    it 'defines a string column with length for any other data types' do
-      column = DBF::Column.new table, 'ColumnName', 'X', 20, 0
-      expect(column.schema_definition).to eq "\"column_name\", :string, :limit => 20\n"
-    end
-  end
-
-  context '#name' do
+  describe '#name' do
     it 'contains only ASCII characters' do
-      column = DBF::Column.new table, "--\x1F-\x68\x65\x6C\x6C\x6F world-\x80--", 'N', 1, 0
+      column = DBF::Column.new table, "--\x1F-\x68\x65\x6C\x6C\x6F \x00world-\x80--", 'N', 1, 0
       expect(column.name).to eq '---hello world---'
     end
 
     it 'is truncated at the null character' do
-      column = DBF::Column.new table, "--\x1F-\x68\x65\x6C\x6C\x6F \x00 world-\x80--", 'N', 1, 0
-      expect(column.name).to eq '---hello '
+      column = DBF::Column.new table, "--\x1F-\x68\x65\x6C\x6C\x6F \x00world-\x80--", 'N', 1, 0
+      expect(column.name).to eq '---hello world---'
     end
   end
 end
diff --git a/spec/dbf/database_spec.rb b/spec/dbf/database/foxpro_spec.rb
similarity index 91%
rename from spec/dbf/database_spec.rb
rename to spec/dbf/database/foxpro_spec.rb
index 7bf1bb4..2cd805b 100644
--- a/spec/dbf/database_spec.rb
+++ b/spec/dbf/database/foxpro_spec.rb
@@ -19,13 +19,13 @@ RSpec.describe DBF::Database::Foxpro do
 
     describe 'it loads the example db correctly' do
       it 'shows a correct list of tables' do
-        expect(db.table_names.sort).to eq(%w(contacts calls setup types).sort)
+        expect(db.table_names.sort).to eq(%w[contacts calls setup types].sort)
       end
     end
   end
 
   describe '#table' do
-    describe "when accessing related tables" do
+    describe 'when accessing related tables' do
       let(:db) { DBF::Database::Foxpro.new(dbf_path) }
 
       it 'loads an existing related table' do
diff --git a/spec/dbf/file_formats_spec.rb b/spec/dbf/file_formats_spec.rb
index c519b30..f14fb62 100644
--- a/spec/dbf/file_formats_spec.rb
+++ b/spec/dbf/file_formats_spec.rb
@@ -1,167 +1,219 @@
-require "spec_helper"
+require 'spec_helper'
 
 RSpec.shared_examples_for 'DBF' do
-  specify "sum of column lengths should equal record length specified in header plus one" do
-    header_record_length = table.instance_eval {@header.record_length}
-    sum_of_column_lengths = table.columns.inject(1) {|sum, column| sum += column.length}
+  let(:header_record_length) { table.instance_eval { header.record_length } }
+  let(:sum_of_column_lengths) { table.columns.inject(1) { |sum, column| sum + column.length } }
 
+  specify 'sum of column lengths should equal record length specified in header plus one' do
     expect(header_record_length).to eq sum_of_column_lengths
   end
 
-  specify "records should be instances of DBF::Record" do
-    table.each do |record|
-      expect(record).to be_kind_of(DBF::Record)
-    end
+  specify 'records should be instances of DBF::Record' do
+    expect(table).to all be_kind_of(DBF::Record)
   end
 
-  specify "record count should be the same as reported in the header" do
+  specify 'record count should be the same as reported in the header' do
     expect(table.entries.size).to eq table.record_count
   end
 
-  specify "column names should not be blank" do
+  specify 'column names should not be blank' do
     table.columns.each do |column|
-      expect(column.name).not_to be_empty
+      expect(column.name).to_not be_empty
     end
   end
 
-  specify "column types should be valid" do
-    valid_column_types = %w(C N L D M F B G P Y T I V X @ O + 0)
+  specify 'column types should be valid' do
+    valid_column_types = %w[C N L D M F B G P Y T I V X @ O + 0]
     table.columns.each do |column|
       expect(valid_column_types).to include(column.type)
     end
   end
 
-  specify "column lengths should be instances of Fixnum" do
+  specify 'column lengths should be instances of Integer' do
     table.columns.each do |column|
-      expect(column.length).to be_kind_of(Fixnum)
+      expect(column.length).to be_kind_of(Integer)
     end
   end
 
-  specify "column lengths should be larger than 0" do
+  specify 'column lengths should be larger than 0' do
     table.columns.each do |column|
       expect(column.length).to be > 0
     end
   end
 
-  specify "column decimals should be instances of Fixnum" do
+  specify 'column decimals should be instances of Integer' do
     table.columns.each do |column|
-      expect(column.decimal).to be_kind_of(Fixnum)
+      expect(column.decimal).to be_kind_of(Integer)
     end
   end
 end
 
-RSpec.describe DBF, "of type 03 (dBase III without memo file)" do
+RSpec.describe DBF, 'of type 02 (FoxBase)' do
+  let(:table) { DBF::Table.new fixture('dbase_02.dbf') }
+
+  it_behaves_like 'DBF'
+
+  it 'reports the correct version number' do
+    expect(table.version).to eq '02'
+  end
+
+  it 'reports the correct version description' do
+    expect(table.version_description).to eq 'FoxBase'
+  end
+
+  it 'determines the number of records' do
+    expect(table.record_count).to eq 9
+  end
+end
+
+RSpec.describe DBF, 'of type 03 (dBase III without memo file)' do
   let(:table) { DBF::Table.new fixture('dbase_03.dbf') }
 
-  it_should_behave_like "DBF"
+  it_behaves_like 'DBF'
 
-  it "should report the correct version number" do
-    expect(table.version).to eq "03"
+  it 'reports the correct version number' do
+    expect(table.version).to eq '03'
   end
 
-  it "should report the correct version description" do
-    expect(table.version_description).to eq "dBase III without memo file"
+  it 'reports the correct version description' do
+    expect(table.version_description).to eq 'dBase III without memo file'
   end
 
-  it "should determine the number of records" do
+  it 'determines the number of records' do
     expect(table.record_count).to eq 14
   end
 end
 
-RSpec.describe DBF, "of type 30 (Visual FoxPro)" do
+RSpec.describe DBF, 'of type 30 (Visual FoxPro)' do
   let(:table) { DBF::Table.new fixture('dbase_30.dbf') }
 
-  it_should_behave_like "DBF"
+  it_behaves_like 'DBF'
 
-  it "should report the correct version number" do
-    expect(table.version).to eq "30"
+  it 'reports the correct version number' do
+    expect(table.version).to eq '30'
   end
 
-  it "should report the correct version description" do
-    expect(table.version_description).to eq "Visual FoxPro"
+  it 'reports the correct version description' do
+    expect(table.version_description).to eq 'Visual FoxPro'
   end
 
-  it "should determine the number of records" do
+  it 'determines the number of records' do
     expect(table.record_count).to eq 34
   end
 
-  it "reads memo data" do
+  it 'reads memo data' do
     expect(table.record(3).classes).to match(/\AAgriculture.*Farming\r\n\Z/m)
   end
 end
 
-RSpec.describe DBF, "of type 31 (Visual FoxPro with AutoIncrement field)" do
+RSpec.describe DBF, 'of type 31 (Visual FoxPro with AutoIncrement field)' do
   let(:table) { DBF::Table.new fixture('dbase_31.dbf') }
 
-  it_should_behave_like "DBF"
+  it_behaves_like 'DBF'
 
-  it "should have a dBase version of 31" do
-    expect(table.version).to eq "31"
+  it 'has a dBase version of 31' do
+    expect(table.version).to eq '31'
   end
 
-  it "should report the correct version description" do
-    expect(table.version_description).to eq "Visual FoxPro with AutoIncrement field"
+  it 'reports the correct version description' do
+    expect(table.version_description).to eq 'Visual FoxPro with AutoIncrement field'
   end
 
-  it "should determine the number of records" do
+  it 'determines the number of records' do
     expect(table.record_count).to eq 77
   end
 end
 
-RSpec.describe DBF, "of type 83 (dBase III with memo file)" do
+RSpec.describe DBF, 'of type 32 (Visual FoxPro with field type Varchar or Varbinary)' do
+  let(:table) { DBF::Table.new fixture('dbase_32.dbf') }
+
+  it_behaves_like 'DBF'
+
+  it 'has a dBase version of 32' do
+    expect(table.version).to eq '32'
+  end
+
+  it 'reports the correct version description' do
+    expect(table.version_description).to eq 'Visual FoxPro with field type Varchar or Varbinary'
+  end
+
+  it 'determines the number of records' do
+    expect(table.record_count).to eq 1
+  end
+end
+
+RSpec.describe DBF, 'of type 83 (dBase III with memo file)' do
   let(:table) { DBF::Table.new fixture('dbase_83.dbf') }
 
-  it_should_behave_like "DBF"
+  it_behaves_like 'DBF'
 
-  it "should report the correct version number" do
-    expect(table.version).to eq "83"
+  it 'reports the correct version number' do
+    expect(table.version).to eq '83'
   end
 
-  it "should report the correct version description" do
-    expect(table.version_description).to eq "dBase III with memo file"
+  it 'reports the correct version description' do
+    expect(table.version_description).to eq 'dBase III with memo file'
   end
 
-  it "should determine the number of records" do
+  it 'determines the number of records' do
     expect(table.record_count).to eq 67
   end
 end
 
-RSpec.describe DBF, "of type 8b (dBase IV with memo file)" do
+RSpec.describe DBF, 'of type 8b (dBase IV with memo file)' do
   let(:table) { DBF::Table.new fixture('dbase_8b.dbf') }
 
-  it_should_behave_like "DBF"
+  it_behaves_like 'DBF'
+
+  it 'reports the correct version number' do
+    expect(table.version).to eq '8b'
+  end
+
+  it 'reports the correct version description' do
+    expect(table.version_description).to eq 'dBase IV with memo file'
+  end
+
+  it 'determines the number of records' do
+    expect(table.record_count).to eq 10
+  end
+end
+
+RSpec.describe DBF, 'of type 8c (unknown)' do
+  let(:table) { DBF::Table.new fixture('dbase_8c.dbf') }
+
+  it_behaves_like 'DBF'
 
-  it "should report the correct version number" do
-    expect(table.version).to eq "8b"
+  it 'reports the correct version number' do
+    expect(table.version).to eq '8c'
   end
 
-  it "should report the correct version description" do
-    expect(table.version_description).to eq "dBase IV with memo file"
+  it 'reports the correct version description' do
+    expect(table.version_description).to eq 'dBase 7'
   end
 
-  it "should determine the number of records" do
+  it 'determines the number of records' do
     expect(table.record_count).to eq 10
   end
 end
 
-RSpec.describe DBF, "of type f5 (FoxPro with memo file)" do
+RSpec.describe DBF, 'of type f5 (FoxPro with memo file)' do
   let(:table) { DBF::Table.new fixture('dbase_f5.dbf') }
 
-  it_should_behave_like "DBF"
+  it_behaves_like 'DBF'
 
-  it "should report the correct version number" do
-    expect(table.version).to eq "f5"
+  it 'reports the correct version number' do
+    expect(table.version).to eq 'f5'
   end
 
-  it "should report the correct version description" do
-    expect(table.version_description).to eq "FoxPro with memo file"
+  it 'reports the correct version description' do
+    expect(table.version_description).to eq 'FoxPro with memo file'
   end
 
-  it "should determine the number of records" do
+  it 'determines the number of records' do
     expect(table.record_count).to eq 975
   end
 
-  it "reads memo data" do
+  it 'reads memo data' do
     expect(table.record(3).datn.to_s).to eq '1870-06-30'
   end
 end
diff --git a/spec/dbf/record_spec.rb b/spec/dbf/record_spec.rb
index 9830912..382c198 100644
--- a/spec/dbf/record_spec.rb
+++ b/spec/dbf/record_spec.rb
@@ -1,4 +1,4 @@
-require "spec_helper"
+require 'spec_helper'
 
 RSpec.describe DBF::Record do
   describe '#to_a' do
@@ -6,7 +6,7 @@ RSpec.describe DBF::Record do
     let(:record_0) { YAML.load_file(fixture('dbase_83_record_0.yml')) }
     let(:record_9) { YAML.load_file(fixture('dbase_83_record_9.yml')) }
 
-    it 'should return an ordered array of attribute values' do
+    it 'returns an ordered array of attribute values' do
       record = table.record(0)
       expect(record.to_a).to eq record_0
 
@@ -44,13 +44,13 @@ RSpec.describe DBF::Record do
 
     describe 'when other does not have attributes' do
       it 'returns false' do
-        expect((record == double('other'))).to be_falsey
+        expect((record == instance_double('DBF::Record'))).to be_falsey
       end
     end
 
     describe 'if other attributes match' do
       let(:attributes) { {x: 1, y: 2} }
-      let(:other) { double('object', attributes: attributes) }
+      let(:other) { instance_double('DBF::Record', attributes: attributes) }
 
       before do
         allow(record).to receive(:attributes).and_return(attributes)
@@ -67,8 +67,7 @@ RSpec.describe DBF::Record do
     let(:table) { DBF::Table.new fixture('dbase_8b.dbf') }
     let(:record) { table.find(0) }
 
-    %w(character numerical date logical float memo).each do |column_name|
-
+    %w[character numerical date logical float memo].each do |column_name|
       it "defines accessor method for '#{column_name}' column" do
         expect(record).to respond_to(column_name.to_sym)
       end
@@ -81,23 +80,23 @@ RSpec.describe DBF::Record do
       let(:table) { DBF::Table.new fixture('cp1251.dbf') }
       let(:record) { table.find(0) }
 
-      it 'should automatically encodes to default system encoding' do
+      it 'encodes to default system encoding' do
         expect(record.name.encoding).to eq Encoding.default_external
 
         # russian a
-        expect(record.name.encode("UTF-8").unpack("H4")).to eq ["d0b0"]
+        expect(record.name.encode('UTF-8').unpack1('H4')).to eq 'd0b0'
       end
     end
 
     describe 'overriding specified in dbf encoding' do
-      let(:table) { DBF::Table.new fixture('cp1251.dbf'), nil, 'cp866'}
+      let(:table) { DBF::Table.new fixture('cp1251.dbf'), nil, 'cp866' }
       let(:record) { table.find(0) }
 
-      it 'should transcode from manually specified encoding to default system encoding' do
+      it 'transcodes from manually specified encoding to default system encoding' do
         expect(record.name.encoding).to eq Encoding.default_external
 
         # russian а encoded in cp1251 and read as if it was encoded in cp866
-        expect(record.name.encode("UTF-8").unpack("H4")).to eq ["d180"]
+        expect(record.name.encode('UTF-8').unpack1('H4')).to eq 'd180'
       end
     end
   end
@@ -112,7 +111,7 @@ RSpec.describe DBF::Record do
     end
 
     it 'has only original field names as keys' do
-      original_field_names = %w(CHARACTER DATE FLOAT LOGICAL MEMO NUMERICAL)
+      original_field_names = %w[CHARACTER DATE FLOAT LOGICAL MEMO NUMERICAL]
       expect(record.attributes.keys.sort).to eq original_field_names
     end
   end
diff --git a/spec/dbf/table_spec.rb b/spec/dbf/table_spec.rb
index 477d207..7d93c19 100644
--- a/spec/dbf/table_spec.rb
+++ b/spec/dbf/table_spec.rb
@@ -6,7 +6,11 @@ RSpec.describe DBF::Table do
   let(:table) { DBF::Table.new dbf_path }
 
   specify 'foxpro versions' do
-    expect(DBF::Table::FOXPRO_VERSIONS.keys.sort).to eq %w(30 31 f5 fb).sort
+    expect(DBF::Table::FOXPRO_VERSIONS.keys.sort).to eq %w[30 31 f5 fb].sort
+  end
+
+  specify 'row is an alias of record' do
+    expect(table.record(1)).to eq table.row(1)
   end
 
   describe '#initialize' do
@@ -40,7 +44,7 @@ RSpec.describe DBF::Table do
     end
   end
 
-  context '#close' do
+  describe '#close' do
     before { table.close }
 
     it 'closes the io' do
@@ -50,11 +54,18 @@ RSpec.describe DBF::Table do
 
   describe '#schema' do
     describe 'when data is IO' do
-      let(:control_schema) { File.read(fixture('dbase_83_schema.txt')) }
+      let(:control_schema) { File.read(fixture('dbase_83_schema_ar.txt')) }
 
       it 'matches the test schema fixture' do
         expect(table.schema).to eq control_schema
       end
+
+      it 'raises ArgumentError if there is no matching schema' do
+        expect { table.schema(:invalid) }.to raise_error(
+          ArgumentError,
+          ':invalid is not a valid schema. Valid schemas are: activerecord, json, sequel.'
+        )
+      end
     end
 
     describe 'when data is StringIO' do
@@ -62,7 +73,7 @@ RSpec.describe DBF::Table do
       let(:memo) { StringIO.new File.read(memo_path) }
       let(:table) { DBF::Table.new data }
 
-      let(:control_schema) { File.read(fixture('dbase_83_schema.txt')) }
+      let(:control_schema) { File.read(fixture('dbase_83_schema_ar.txt')) }
 
       it 'matches the test schema fixture' do
         table.name = 'dbase_83'
@@ -72,52 +83,14 @@ RSpec.describe DBF::Table do
   end
 
   describe '#sequel_schema' do
-    it 'should return a valid Sequel migration by default' do
-      expect(table.sequel_schema).to eq <<-SCHEMA
-Sequel.migration do
-  change do
-     create_table(:dbase_83) do
-      column :id, :integer
-      column :catcount, :integer
-      column :agrpcount, :integer
-      column :pgrpcount, :integer
-      column :order, :integer
-      column :code, :varchar, :size => 50
-      column :name, :varchar, :size => 100
-      column :thumbnail, :varchar, :size => 254
-      column :image, :varchar, :size => 254
-      column :price, :float
-      column :cost, :float
-      column :desc, :text
-      column :weight, :float
-      column :taxable, :boolean
-      column :active, :boolean
+    it 'returns a valid Sequel migration by default' do
+      control_schema = File.read(fixture('dbase_83_schema_sq.txt'))
+      expect(table.sequel_schema).to eq control_schema
     end
-  end
-end
-SCHEMA
-    end
-
-    it 'should return a limited Sequel migration when passed true' do
-      expect(table.sequel_schema(true)).to eq <<-SCHEMA
-    create_table(:dbase_83) do
-      column :id, :integer
-      column :catcount, :integer
-      column :agrpcount, :integer
-      column :pgrpcount, :integer
-      column :order, :integer
-      column :code, :varchar, :size => 50
-      column :name, :varchar, :size => 100
-      column :thumbnail, :varchar, :size => 254
-      column :image, :varchar, :size => 254
-      column :price, :float
-      column :cost, :float
-      column :desc, :text
-      column :weight, :float
-      column :taxable, :boolean
-      column :active, :boolean
-    end
-SCHEMA
+
+    it 'returns a limited Sequel migration when passed true' do
+      control_schema = File.read(fixture('dbase_83_schema_sq_lim.txt'))
+      expect(table.sequel_schema).to eq control_schema
     end
 
   end
@@ -156,13 +129,7 @@ SCHEMA
 
     describe 'when no path param passed' do
       it 'writes to STDOUT' do
-        begin
-          $stdout = StringIO.new
-          table.to_csv
-          expect($stdout.string).not_to be_empty
-        ensure
-          $stdout = STDOUT
-        end
+        expect { table.to_csv }.to output.to_stdout
       end
     end
 
@@ -170,7 +137,7 @@ SCHEMA
       before { table.to_csv('test.csv') }
 
       it 'creates a custom csv file' do
-        expect(File.exist?('test.csv')).to be_truthy
+        expect(File).to be_exist('test.csv')
       end
     end
   end
@@ -180,10 +147,18 @@ SCHEMA
       allow(table).to receive(:deleted_record?).and_return(true)
       expect(table.record(5)).to be_nil
     end
+
+    describe 'when dbf has no column definitions' do
+      let(:dbf_path) { fixture('polygon.dbf') }
+
+      it 'raises a DBF::NoColumnsDefined error' do
+        expect { DBF::Table.new(dbf_path).record(1) }.to raise_error(DBF::NoColumnsDefined, 'The DBF file has no columns defined')
+      end
+    end
   end
 
   describe '#current_record' do
-    it 'should return nil for deleted records' do
+    it 'returns nil for deleted records' do
       allow(table).to receive(:deleted_record?).and_return(true)
       expect(table.record(0)).to be_nil
     end
@@ -204,13 +179,20 @@ SCHEMA
 
     describe 'with :all' do
       let(:records) do
-        table.find(:all, weight: 0.0).inject([]) do |records, record|
-          records << record
-        end
+        table.find(:all, weight: 0.0)
+      end
+
+      it 'retrieves only matching records' do
+        expect(records.size).to eq 66
       end
 
-      it 'accepts a block' do
-        expect(records).to eq table.find(:all, weight: 0.0)
+      it 'yields to a block if given' do
+        record_count = 0
+        table.find(:all, weight: 0.0) do |record|
+          record_count += 1
+          expect(record).to be_a DBF::Record
+        end
+        expect(record_count).to eq 66
       end
 
       it 'returns all records if options are empty' do
@@ -218,27 +200,27 @@ SCHEMA
       end
 
       it 'returns matching records when used with options' do
-        expect(table.find(:all, 'WEIGHT' => 0.0)).to eq table.select {|r| r['weight'] == 0.0}
+        expect(table.find(:all, 'WEIGHT' => 0.0)).to eq table.select { |r| r['weight'] == 0.0 }
       end
 
-      it 'should AND multiple search terms' do
+      it 'ANDS multiple search terms' do
         expect(table.find(:all, 'ID' => 30, :IMAGE => 'graphics/00000001/TBC01.jpg')).to be_empty
       end
 
-      it 'should match original column names' do
-        expect(table.find(:all, 'WEIGHT' => 0.0)).not_to be_empty
+      it 'matches original column names' do
+        expect(table.find(:all, 'WEIGHT' => 0.0)).to_not be_empty
       end
 
       it 'matches symbolized column names' do
-        expect(table.find(:all, :WEIGHT => 0.0)).not_to be_empty
+        expect(table.find(:all, WEIGHT: 0.0)).to_not be_empty
       end
 
       it 'matches downcased column names' do
-        expect(table.find(:all, 'weight' => 0.0)).not_to be_empty
+        expect(table.find(:all, 'weight' => 0.0)).to_not be_empty
       end
 
       it 'matches symbolized downcased column names' do
-        expect(table.find(:all, :weight => 0.0)).not_to be_empty
+        expect(table.find(:all, weight: 0.0)).to_not be_empty
       end
     end
 
@@ -296,13 +278,13 @@ SCHEMA
       let(:table) { DBF::Table.new fixture('dbase_03.dbf') }
 
       it 'is false' do
-        expect(table.has_memo_file?).to be_falsey
+        expect(table).to_not have_memo_file
       end
     end
 
     describe 'with a memo file' do
       it 'is true' do
-        expect(table.has_memo_file?).to be_truthy
+        expect(table).to have_memo_file
       end
     end
   end
@@ -313,17 +295,76 @@ SCHEMA
     it 'is an array of Columns' do
       expect(columns).to be_an(Array)
       expect(columns).to_not be_empty
-      expect(columns.all? {|c| c.class == DBF::Column}).to be_truthy
+      expect(columns).to be_all { |c| c.is_a? DBF::Column }
     end
   end
 
   describe '#column_names' do
     let(:column_names) do
-      %w(ID CATCOUNT AGRPCOUNT PGRPCOUNT ORDER CODE NAME THUMBNAIL IMAGE PRICE COST DESC WEIGHT TAXABLE ACTIVE)
+      %w[ID CATCOUNT AGRPCOUNT PGRPCOUNT ORDER CODE NAME THUMBNAIL IMAGE PRICE COST DESC WEIGHT TAXABLE ACTIVE]
+    end
+
+    describe 'when data is an IO' do
+      it 'is an array of all column names' do
+        expect(table.column_names).to eq column_names
+      end
+    end
+
+    describe 'when data is a StringIO' do
+      let(:data) { StringIO.new File.read(dbf_path) }
+      let(:table) { DBF::Table.new data, nil, Encoding::US_ASCII }
+
+      it 'is an array of all column names' do
+        expect(table.column_names).to eq column_names
+      end
+    end
+  end
+
+  describe '#activerecord_schema_definition' do
+    context 'with type N (number)' do
+      it 'outputs an integer column' do
+        column = DBF::Column.new table, 'ColumnName', 'N', 1, 0
+        expect(table.activerecord_schema_definition(column)).to eq "\"column_name\", :integer\n"
+      end
+    end
+
+    describe 'with type B (binary)' do
+      context 'with Foxpro dbf' do
+        it 'outputs a float column' do
+          column = DBF::Column.new table, 'ColumnName', 'B', 1, 2
+          expect(table.activerecord_schema_definition(column)).to eq "\"column_name\", :binary\n"
+        end
+      end
+    end
+
+    it 'defines a float colmn if type is (N)umber with more than 0 decimals' do
+      column = DBF::Column.new table, 'ColumnName', 'N', 1, 2
+      expect(table.activerecord_schema_definition(column)).to eq "\"column_name\", :float\n"
+    end
+
+    it 'defines a date column if type is (D)ate' do
+      column = DBF::Column.new table, 'ColumnName', 'D', 8, 0
+      expect(table.activerecord_schema_definition(column)).to eq "\"column_name\", :date\n"
+    end
+
+    it 'defines a datetime column if type is (D)ate' do
+      column = DBF::Column.new table, 'ColumnName', 'T', 16, 0
+      expect(table.activerecord_schema_definition(column)).to eq "\"column_name\", :datetime\n"
+    end
+
+    it 'defines a boolean column if type is (L)ogical' do
+      column = DBF::Column.new table, 'ColumnName', 'L', 1, 0
+      expect(table.activerecord_schema_definition(column)).to eq "\"column_name\", :boolean\n"
+    end
+
+    it 'defines a text column if type is (M)emo' do
+      column = DBF::Column.new table, 'ColumnName', 'M', 1, 0
+      expect(table.activerecord_schema_definition(column)).to eq "\"column_name\", :text\n"
     end
 
-    it 'is an array of all column names' do
-      expect(table.column_names).to eq column_names
+    it 'defines a string column with length for any other data types' do
+      column = DBF::Column.new table, 'ColumnName', 'X', 20, 0
+      expect(table.activerecord_schema_definition(column)).to eq "\"column_name\", :string, :limit => 20\n"
     end
   end
 end
diff --git a/spec/fixtures/dbase_02.dbf b/spec/fixtures/dbase_02.dbf
new file mode 100644
index 0000000..1b59152
Binary files /dev/null and b/spec/fixtures/dbase_02.dbf differ
diff --git a/spec/fixtures/dbase_02_summary.txt b/spec/fixtures/dbase_02_summary.txt
new file mode 100644
index 0000000..6857c06
--- /dev/null
+++ b/spec/fixtures/dbase_02_summary.txt
@@ -0,0 +1,23 @@
+
+Database: dbase_02.dbf
+Type: (02) FoxBase
+Memo File: false
+Records: 9
+
+Fields:
+Name             Type       Length     Decimal
+------------------------------------------------------------------------------
+EMP:NMBR         N          3          0         
+LAST             C          10         0         
+FIRST            C          10         0         
+ADDR             C          20         0         
+CITY             C          15         0         
+ZIP:CODE         C          10         0         
+PHONE            C          9          0         
+SSN              C          11         0         
+HIREDATE         C          8          0         
+TERMDATE         C          8          0         
+CLASS            C          3          0         
+DEPT             C          3          0         
+PAYRATE          N          8          0         
+START:PAY        N          8          0         
diff --git a/spec/fixtures/dbase_32.dbf b/spec/fixtures/dbase_32.dbf
new file mode 100644
index 0000000..ec5affb
Binary files /dev/null and b/spec/fixtures/dbase_32.dbf differ
diff --git a/spec/fixtures/dbase_32_summary.txt b/spec/fixtures/dbase_32_summary.txt
new file mode 100644
index 0000000..bb60c85
--- /dev/null
+++ b/spec/fixtures/dbase_32_summary.txt
@@ -0,0 +1,11 @@
+
+Database: dbase_32.dbf
+Type: (32) Visual FoxPro with field type Varchar or Varbinary
+Memo File: false
+Records: 1
+
+Fields:
+Name             Type       Length     Decimal
+------------------------------------------------------------------------------
+NAME             V          250        0         
+_NullFlags       0          1          0         
diff --git a/spec/fixtures/dbase_83_schema.txt b/spec/fixtures/dbase_83_schema_ar.txt
similarity index 100%
rename from spec/fixtures/dbase_83_schema.txt
rename to spec/fixtures/dbase_83_schema_ar.txt
diff --git a/spec/fixtures/dbase_83_schema_sq.txt b/spec/fixtures/dbase_83_schema_sq.txt
new file mode 100644
index 0000000..dda8429
--- /dev/null
+++ b/spec/fixtures/dbase_83_schema_sq.txt
@@ -0,0 +1,21 @@
+Sequel.migration do
+  change do
+     create_table(:dbase_83) do
+      column :id, :integer
+      column :catcount, :integer
+      column :agrpcount, :integer
+      column :pgrpcount, :integer
+      column :order, :integer
+      column :code, :varchar, :size => 50
+      column :name, :varchar, :size => 100
+      column :thumbnail, :varchar, :size => 254
+      column :image, :varchar, :size => 254
+      column :price, :float
+      column :cost, :float
+      column :desc, :text
+      column :weight, :float
+      column :taxable, :boolean
+      column :active, :boolean
+    end
+  end
+end
diff --git a/spec/fixtures/dbase_83_schema_sq_lim.txt b/spec/fixtures/dbase_83_schema_sq_lim.txt
new file mode 100644
index 0000000..dda8429
--- /dev/null
+++ b/spec/fixtures/dbase_83_schema_sq_lim.txt
@@ -0,0 +1,21 @@
+Sequel.migration do
+  change do
+     create_table(:dbase_83) do
+      column :id, :integer
+      column :catcount, :integer
+      column :agrpcount, :integer
+      column :pgrpcount, :integer
+      column :order, :integer
+      column :code, :varchar, :size => 50
+      column :name, :varchar, :size => 100
+      column :thumbnail, :varchar, :size => 254
+      column :image, :varchar, :size => 254
+      column :price, :float
+      column :cost, :float
+      column :desc, :text
+      column :weight, :float
+      column :taxable, :boolean
+      column :active, :boolean
+    end
+  end
+end
diff --git a/spec/fixtures/dbase_8c.dbf b/spec/fixtures/dbase_8c.dbf
new file mode 100755
index 0000000..03c4b47
Binary files /dev/null and b/spec/fixtures/dbase_8c.dbf differ
diff --git a/spec/fixtures/polygon.dbf b/spec/fixtures/polygon.dbf
new file mode 100644
index 0000000..32798ce
Binary files /dev/null and b/spec/fixtures/polygon.dbf differ
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index d30f00d..1260727 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -1,6 +1,6 @@
 begin
-  require 'codeclimate-test-reporter'
-  CodeClimate::TestReporter.start
+  require 'simplecov'
+  SimpleCov.start
 rescue LoadError
 end
 
@@ -24,7 +24,7 @@ RSpec.configure do |config|
 end
 
 def fixture_path
-  @fixture_path ||= File.join(File.dirname(__FILE__), '/fixtures')
+  @fixture_path ||= File.join(File.dirname(__FILE__), 'fixtures')
 end
 
 def fixture(filename)