mdb 0.3.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.github/workflows/ci.yml +18 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +46 -0
- data/README.md +11 -2
- data/lib/mdb/database.rb +75 -73
- data/lib/mdb/version.rb +1 -1
- data/lib/mdb.rb +3 -3
- data/mdb.gemspec +9 -6
- data/test/data/Example2000.mdb +0 -0
- data/test/data/Example2003.mdb +0 -0
- data/test/data/Protected.mdb +0 -0
- data/test/database_test.rb +54 -24
- data/test/test_helper.rb +2 -1
- metadata +58 -27
- data/.travis.yml +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: fdd6834b543dd5e1397818e9c532ab083034a1d15e0d8b1203359efbd615ca16
|
4
|
+
data.tar.gz: a7adfc129d17d6350e920a9e253ce3374c3806d943a0da3253cc76ad32432618
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c467566e7ecff206ae4c1d26b894c5661355f6f47926bab1c7463d49430f786b0db80fd2fa86c23f0dde81ccf35af66f5fe7ba73c822cc30be71c7a2893c3783
|
7
|
+
data.tar.gz: e0d160c33ed133e5a086a022c57a14a128b0ea82c3c4fbc790a23960c7488abfbf319beb2b42f24ec0e8eed9dfe6b9edc40aadc84af0733b9626d6a000ddb077
|
@@ -0,0 +1,18 @@
|
|
1
|
+
name: Tests
|
2
|
+
on: [push]
|
3
|
+
|
4
|
+
jobs:
|
5
|
+
ruby:
|
6
|
+
name: Ruby Tests
|
7
|
+
runs-on: ubuntu-latest
|
8
|
+
steps:
|
9
|
+
- name: Checkout
|
10
|
+
uses: actions/checkout@v2
|
11
|
+
- name: Setup Ruby
|
12
|
+
uses: ruby/setup-ruby@v1
|
13
|
+
with:
|
14
|
+
bundler-cache: true
|
15
|
+
- name: Install mdbtools
|
16
|
+
run: sudo apt-get -yqq install mdbtools
|
17
|
+
- name: Run tests
|
18
|
+
run: bundle exec rake test
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.6.6
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
# Change Log
|
2
|
+
|
3
|
+
## Unreleased
|
4
|
+
|
5
|
+
- None
|
6
|
+
|
7
|
+
## 0.5.0 (2021-10-19)
|
8
|
+
|
9
|
+
- Fixed compatibility with newer versions of mdbtools which require specifying date and time formats separately
|
10
|
+
|
11
|
+
## 0.4.1 (2017-03-23)
|
12
|
+
|
13
|
+
- Filled in homepage in mdb.gemspec
|
14
|
+
|
15
|
+
## 0.4.0 (2017-03-21)
|
16
|
+
|
17
|
+
- Raised `Mdb::MdbToolsNotInstalledError` when shelling out to `mdb-export` or `mdb-tables` exits with 127 rather than shelling out to check `which mdb-export`
|
18
|
+
- Raised `Mdb::Error` when shelling out to `mdb-export` or `mdb-tables` exits nonzero
|
19
|
+
|
20
|
+
## 0.3.2 (2016-04-05)
|
21
|
+
|
22
|
+
No docs yet. Contributions welcome!
|
23
|
+
|
24
|
+
## 0.3.1 (2014-02-06)
|
25
|
+
|
26
|
+
No docs yet. Contributions welcome!
|
27
|
+
|
28
|
+
## 0.3.0 (2013-11-20)
|
29
|
+
|
30
|
+
No docs yet. Contributions welcome!
|
31
|
+
|
32
|
+
## 0.0.3.rc2 (2013-10-30)
|
33
|
+
|
34
|
+
No docs yet. Contributions welcome!
|
35
|
+
|
36
|
+
## 0.0.3.rc1 (2013-10-25)
|
37
|
+
|
38
|
+
No docs yet. Contributions welcome!
|
39
|
+
|
40
|
+
## 0.0.2 (2013-05-08)
|
41
|
+
|
42
|
+
No docs yet. Contributions welcome!
|
43
|
+
|
44
|
+
## 0.0.1 (2013-05-07)
|
45
|
+
|
46
|
+
No docs yet. Contributions welcome!
|
data/README.md
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
# Mdb
|
2
2
|
|
3
|
-
[](https://rubygems.org/gems/mdb)
|
4
|
+
[](https://codeclimate.com/github/cph/mdb)
|
5
|
+
[](https://travis-ci.org/cph/mdb)
|
5
6
|
|
6
7
|
Wraps [mdb-tools](https://github.com/brianb/mdbtools) for reading Microsoft Access databases
|
7
8
|
|
@@ -31,6 +32,14 @@ database.tables
|
|
31
32
|
database[:Movies]
|
32
33
|
```
|
33
34
|
|
35
|
+
## Heroku
|
36
|
+
|
37
|
+
mdb-tools on heroku requires a custom buildpack.
|
38
|
+
|
39
|
+
Here is a sample project using this gem on heroku with configuration instructions:
|
40
|
+
|
41
|
+
https://github.com/jkotchoff/heroku_rails_microsoft_access_mdb_example
|
42
|
+
|
34
43
|
## Contributing
|
35
44
|
|
36
45
|
1. Fork it
|
data/lib/mdb/database.rb
CHANGED
@@ -1,48 +1,51 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require 'csv'
|
1
|
+
require "tempfile"
|
2
|
+
require "shellwords"
|
3
|
+
require "csv"
|
5
4
|
|
6
5
|
|
7
6
|
module Mdb
|
8
7
|
class Database
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
|
9
|
+
|
10
|
+
|
12
11
|
def initialize(file, options={})
|
13
12
|
file = file.to_path if file.respond_to?(:to_path)
|
14
13
|
raise FileDoesNotExistError, "\"#{file}\" does not exist" unless File.exist?(file)
|
15
|
-
|
14
|
+
|
16
15
|
@file = file
|
17
|
-
@delimiter = options.fetch :delimiter,
|
16
|
+
@delimiter = options.fetch :delimiter, "|"
|
18
17
|
end
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
|
19
|
+
|
20
|
+
|
22
21
|
attr_reader :file, :delimiter
|
23
|
-
|
24
|
-
|
25
|
-
|
22
|
+
|
23
|
+
|
24
|
+
|
26
25
|
def tables
|
27
26
|
@tables ||= execute("mdb-tables -1 #{file_name}").scan(/[^\n]+/)
|
28
27
|
end
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
|
29
|
+
|
30
|
+
|
32
31
|
def columns(table)
|
33
|
-
open_csv(table)
|
32
|
+
open_csv(table) do |csv|
|
33
|
+
(csv.readline || []).map(&:to_sym)
|
34
|
+
end
|
34
35
|
end
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
def read_csv(table)
|
39
|
-
|
40
|
-
|
41
|
-
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
def read_csv(table, &block)
|
40
|
+
table = table.to_s
|
41
|
+
raise TableDoesNotExistError, "#{table.inspect} does not exist in #{file_name.inspect}" unless tables.member?(table)
|
42
|
+
date_flags = "-D '%F %T'"
|
43
|
+
date_flags << " -T '%F %T'" if supports_datetime?
|
44
|
+
execute "mdb-export #{date_flags} -d #{Shellwords.escape(delimiter)} #{file_name} #{Shellwords.escape(table)}", &block
|
42
45
|
end
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
+
|
47
|
+
|
48
|
+
|
46
49
|
# Yields a hash for each record
|
47
50
|
def each_record(table, &block)
|
48
51
|
columns = nil
|
@@ -55,9 +58,9 @@ module Mdb
|
|
55
58
|
end
|
56
59
|
end
|
57
60
|
alias :each :each_record
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
+
|
62
|
+
|
63
|
+
|
61
64
|
# Returns an array of hashes. Each hash represents a record
|
62
65
|
def read_records(table)
|
63
66
|
hashes = []
|
@@ -66,66 +69,65 @@ module Mdb
|
|
66
69
|
end
|
67
70
|
alias :read :read_records
|
68
71
|
alias :[] :read_records
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
+
|
73
|
+
|
74
|
+
|
72
75
|
private
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
+
|
77
|
+
|
78
|
+
|
76
79
|
def read_each(table, &block)
|
77
80
|
count = 0
|
78
|
-
|
81
|
+
|
79
82
|
open_csv(table) do |csv|
|
80
83
|
while line = csv.readline
|
81
84
|
yield line
|
82
85
|
count += 1
|
83
86
|
end
|
84
87
|
end
|
85
|
-
|
86
|
-
empty_table!(table) if count == 0
|
87
|
-
|
88
|
+
|
88
89
|
count
|
89
90
|
end
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
def empty_table!(table)
|
94
|
-
raise MdbToolsNotInstalledError if `which mdb-export 2> /dev/null`.empty?
|
95
|
-
raise TableDoesNotExistError, "#{table.inspect} does not exist in #{file_name.inspect}" if !tables.member?(table.to_s)
|
96
|
-
raise Error, "An error occurred when reading #{table.inspect} in #{file_name.inspect}"
|
97
|
-
end
|
98
|
-
|
99
|
-
|
100
|
-
|
91
|
+
|
92
|
+
|
93
|
+
|
101
94
|
def file_name
|
102
95
|
Shellwords.escape(file)
|
103
96
|
end
|
104
|
-
|
105
|
-
|
106
|
-
|
97
|
+
|
98
|
+
|
99
|
+
|
107
100
|
def open_csv(table)
|
108
|
-
|
109
|
-
|
110
|
-
yield CSV.new(stdout, col_sep: delimiter)
|
101
|
+
read_csv(table) do |file|
|
102
|
+
yield CSV.new(file, col_sep: delimiter)
|
111
103
|
end
|
112
104
|
end
|
113
|
-
|
114
|
-
|
115
|
-
|
105
|
+
|
106
|
+
|
107
|
+
|
116
108
|
def execute(command)
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
stdout.force_encoding("Windows-1252")
|
122
|
-
stdout.encode!("utf-8")
|
109
|
+
file = Tempfile.new("mdb")
|
110
|
+
unless system "#{command} > #{file.path} 2> /dev/null"
|
111
|
+
raise MdbToolsNotInstalledError if $?.exitstatus == 127
|
112
|
+
raise Error, "#{command[/^\S+/]} exited with status #{$?.exitstatus}"
|
123
113
|
end
|
124
|
-
|
125
|
-
|
114
|
+
return file.read unless block_given?
|
115
|
+
yield file
|
116
|
+
ensure
|
117
|
+
file.close
|
118
|
+
file.unlink
|
119
|
+
end
|
120
|
+
|
121
|
+
|
122
|
+
|
123
|
+
def supports_datetime?
|
124
|
+
return @supports_datetime if instance_variable_defined?(:@supports_datetime)
|
125
|
+
|
126
|
+
version = Gem::Version.new(`mdb-ver -M`.gsub(/mdbtools v/, ""))
|
127
|
+
@supports_datetime = version >= Gem::Version.new("0.9.0")
|
126
128
|
end
|
127
|
-
|
128
|
-
|
129
|
-
|
129
|
+
|
130
|
+
|
131
|
+
|
130
132
|
end
|
131
133
|
end
|
data/lib/mdb/version.rb
CHANGED
data/lib/mdb.rb
CHANGED
@@ -2,7 +2,7 @@ require "mdb/version"
|
|
2
2
|
require "mdb/database"
|
3
3
|
|
4
4
|
module Mdb
|
5
|
-
|
5
|
+
|
6
6
|
class FileDoesNotExistError < ArgumentError; end
|
7
7
|
class TableDoesNotExistError < ArgumentError; end
|
8
8
|
class MdbToolsNotInstalledError < ArgumentError
|
@@ -11,9 +11,9 @@ module Mdb
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
class Error < RuntimeError; end
|
14
|
-
|
14
|
+
|
15
15
|
def self.open(file)
|
16
16
|
Mdb::Database.new(file)
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
end
|
data/mdb.gemspec
CHANGED
@@ -1,16 +1,17 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
lib = File.expand_path(
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require
|
4
|
+
require "mdb/version"
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "mdb"
|
8
8
|
spec.version = Mdb::VERSION
|
9
9
|
spec.authors = ["Robert Lail"]
|
10
10
|
spec.email = ["robert.lail@cph.org"]
|
11
|
+
|
11
12
|
spec.description = %q{A library for reading Microsoft Access databases}
|
12
13
|
spec.summary = %q{Wraps mdb-tools for reading and Microsoft Access databases (MDB)}
|
13
|
-
spec.homepage = ""
|
14
|
+
spec.homepage = "https://github.com/cph/mdb"
|
14
15
|
spec.license = "MIT"
|
15
16
|
|
16
17
|
spec.files = `git ls-files`.split($/)
|
@@ -18,9 +19,11 @@ Gem::Specification.new do |spec|
|
|
18
19
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
20
|
spec.require_paths = ["lib"]
|
20
21
|
|
21
|
-
spec.add_development_dependency "bundler"
|
22
|
+
spec.add_development_dependency "bundler"
|
22
23
|
spec.add_development_dependency "rake"
|
23
|
-
spec.add_development_dependency "rails", "
|
24
|
-
spec.add_development_dependency "
|
24
|
+
spec.add_development_dependency "rails", "< 7.0"
|
25
|
+
spec.add_development_dependency "shoulda-context"
|
25
26
|
spec.add_development_dependency "pry"
|
27
|
+
spec.add_development_dependency "minitest-reporters"
|
28
|
+
spec.add_development_dependency "minitest-reporters-turn_reporter"
|
26
29
|
end
|
data/test/data/Example2000.mdb
CHANGED
Binary file
|
data/test/data/Example2003.mdb
CHANGED
Binary file
|
Binary file
|
data/test/database_test.rb
CHANGED
@@ -1,37 +1,37 @@
|
|
1
1
|
require "test_helper"
|
2
2
|
|
3
3
|
class MdbTest < ActiveSupport::TestCase
|
4
|
-
|
5
|
-
|
4
|
+
|
5
|
+
|
6
6
|
{ "Access 2000" => "Example2000.mdb",
|
7
7
|
"Acesss 2003" => "Example2003.mdb" }.each do |format, file|
|
8
8
|
path = "#{File.dirname(__FILE__)}/data/#{file}"
|
9
|
-
|
9
|
+
|
10
10
|
test "should identify three tables in #{file} (#{format})" do
|
11
11
|
database = Mdb.open(path)
|
12
12
|
assert_equal %w{Actors EmptyTable Movies}, database.tables.sort
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
test "should find all the rows in each table (#{format})" do
|
16
16
|
database = Mdb.open(path)
|
17
|
-
|
17
|
+
|
18
18
|
expected_counts = {
|
19
|
-
:Actors =>
|
19
|
+
:Actors => 5,
|
20
20
|
:Movies => 7 }
|
21
21
|
expected_counts.each do |table, expected_count|
|
22
22
|
assert_equal expected_count, database[table].count, "The count of '#{table}' is off"
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
26
|
-
|
27
|
-
|
28
|
-
|
26
|
+
|
27
|
+
|
28
|
+
|
29
29
|
test "should raise an exception when instatiated with a missing database" do
|
30
30
|
assert_raises(Mdb::FileDoesNotExistError) do
|
31
31
|
Mdb.open "#{File.dirname(__FILE__)}/data/nope.mdb"
|
32
32
|
end
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
test "should raise an exception when mdb-tools is not installed" do
|
36
36
|
assert_raises(Mdb::MdbToolsNotInstalledError) do
|
37
37
|
database = Mdb.open "#{File.dirname(__FILE__)}/data/Example2000.mdb"
|
@@ -40,44 +40,74 @@ class MdbTest < ActiveSupport::TestCase
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
43
|
-
|
43
|
+
|
44
|
+
context "without permission to read the file" do
|
45
|
+
setup do
|
46
|
+
system "chmod u-r #{File.dirname(__FILE__)}/data/Protected.mdb"
|
47
|
+
end
|
48
|
+
|
49
|
+
teardown do
|
50
|
+
system "chmod u+r #{File.dirname(__FILE__)}/data/Protected.mdb"
|
51
|
+
end
|
52
|
+
|
53
|
+
should "raise an exception if mdb-tools fails for other reasons" do
|
54
|
+
assert_raises(Mdb::Error) do
|
55
|
+
database = Mdb.open "#{File.dirname(__FILE__)}/data/Protected.mdb"
|
56
|
+
database.read :Actors
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
44
61
|
test "should raise an exception if a table is not found" do
|
45
62
|
database = Mdb.open "#{File.dirname(__FILE__)}/data/Example2000.mdb"
|
46
63
|
assert_raises(Mdb::TableDoesNotExistError) do
|
47
64
|
database.read :Villains
|
48
65
|
end
|
49
66
|
end
|
50
|
-
|
67
|
+
|
51
68
|
test "should return an empty array if a table is empty" do
|
52
69
|
database = Mdb.open "#{File.dirname(__FILE__)}/data/Example2000.mdb"
|
53
70
|
assert_equal [], database.read(:EmptyTable)
|
54
71
|
end
|
55
|
-
|
56
|
-
|
57
|
-
|
72
|
+
|
73
|
+
|
74
|
+
|
58
75
|
test "should return an array of columns for at able" do
|
59
76
|
database = Mdb.open "#{File.dirname(__FILE__)}/data/Example2000.mdb"
|
60
77
|
assert_equal [:ID, :FirstName, :LastName, :Birthdate], database.columns(:Actors)
|
61
78
|
end
|
62
|
-
|
79
|
+
|
80
|
+
test "should raise an exception if asked for the columns of a nonexistent table" do
|
81
|
+
database = Mdb.open "#{File.dirname(__FILE__)}/data/Example2000.mdb"
|
82
|
+
assert_raises(Mdb::TableDoesNotExistError) do
|
83
|
+
database.columns :Directors
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
63
87
|
test "should treat quotation marks correctly" do
|
64
88
|
database = Mdb.open "#{File.dirname(__FILE__)}/data/Example2000.mdb"
|
65
89
|
actor = database.read(:Actors).first
|
66
90
|
assert_equal "Chris", actor[:FirstName] # as opposed to "\"Chris\""
|
67
91
|
end
|
68
|
-
|
69
|
-
|
70
|
-
|
92
|
+
|
93
|
+
test "should treat non-ASCII characters correctly" do
|
94
|
+
database = Mdb.open "#{File.dirname(__FILE__)}/data/Example2000.mdb"
|
95
|
+
actor = database.read(:Actors).last
|
96
|
+
assert_equal "Skarsgård", actor[:LastName]
|
97
|
+
end
|
98
|
+
|
99
|
+
|
100
|
+
|
71
101
|
test "should format dates ISO 8601" do
|
72
102
|
database = Mdb.open "#{File.dirname(__FILE__)}/data/Example2000.mdb"
|
73
103
|
actor = database.read(:Actors).first
|
74
104
|
assert_equal "1981-06-13 00:00:00", actor[:Birthdate]
|
75
105
|
end
|
76
|
-
|
77
|
-
|
78
|
-
|
106
|
+
|
107
|
+
|
108
|
+
|
79
109
|
private
|
80
|
-
|
110
|
+
|
81
111
|
def with_env(new_env)
|
82
112
|
begin
|
83
113
|
old_env = ENV.to_hash
|
@@ -87,5 +117,5 @@ private
|
|
87
117
|
ENV.replace(old_env)
|
88
118
|
end
|
89
119
|
end
|
90
|
-
|
120
|
+
|
91
121
|
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,83 +1,111 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mdb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Lail
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-10-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rails
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - "<"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: '7.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - "<"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: '7.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: shoulda-context
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: pry
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: minitest-reporters
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: minitest-reporters-turn_reporter
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
74
102
|
- !ruby/object:Gem::Version
|
75
103
|
version: '0'
|
76
104
|
type: :development
|
77
105
|
prerelease: false
|
78
106
|
version_requirements: !ruby/object:Gem::Requirement
|
79
107
|
requirements:
|
80
|
-
- -
|
108
|
+
- - ">="
|
81
109
|
- !ruby/object:Gem::Version
|
82
110
|
version: '0'
|
83
111
|
description: A library for reading Microsoft Access databases
|
@@ -87,8 +115,10 @@ executables: []
|
|
87
115
|
extensions: []
|
88
116
|
extra_rdoc_files: []
|
89
117
|
files:
|
90
|
-
- .
|
91
|
-
- .
|
118
|
+
- ".github/workflows/ci.yml"
|
119
|
+
- ".gitignore"
|
120
|
+
- ".ruby-version"
|
121
|
+
- CHANGELOG.md
|
92
122
|
- Gemfile
|
93
123
|
- LICENSE.txt
|
94
124
|
- README.md
|
@@ -99,34 +129,35 @@ files:
|
|
99
129
|
- mdb.gemspec
|
100
130
|
- test/data/Example2000.mdb
|
101
131
|
- test/data/Example2003.mdb
|
132
|
+
- test/data/Protected.mdb
|
102
133
|
- test/database_test.rb
|
103
134
|
- test/test_helper.rb
|
104
|
-
homepage:
|
135
|
+
homepage: https://github.com/cph/mdb
|
105
136
|
licenses:
|
106
137
|
- MIT
|
107
138
|
metadata: {}
|
108
|
-
post_install_message:
|
139
|
+
post_install_message:
|
109
140
|
rdoc_options: []
|
110
141
|
require_paths:
|
111
142
|
- lib
|
112
143
|
required_ruby_version: !ruby/object:Gem::Requirement
|
113
144
|
requirements:
|
114
|
-
- -
|
145
|
+
- - ">="
|
115
146
|
- !ruby/object:Gem::Version
|
116
147
|
version: '0'
|
117
148
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
118
149
|
requirements:
|
119
|
-
- -
|
150
|
+
- - ">="
|
120
151
|
- !ruby/object:Gem::Version
|
121
152
|
version: '0'
|
122
153
|
requirements: []
|
123
|
-
|
124
|
-
|
125
|
-
signing_key:
|
154
|
+
rubygems_version: 3.0.3
|
155
|
+
signing_key:
|
126
156
|
specification_version: 4
|
127
157
|
summary: Wraps mdb-tools for reading and Microsoft Access databases (MDB)
|
128
158
|
test_files:
|
129
159
|
- test/data/Example2000.mdb
|
130
160
|
- test/data/Example2003.mdb
|
161
|
+
- test/data/Protected.mdb
|
131
162
|
- test/database_test.rb
|
132
163
|
- test/test_helper.rb
|