do_postgres 0.9.2 → 0.9.3
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +1 -0
- data/Manifest.txt +19 -0
- data/{README → README.txt} +1 -2
- data/Rakefile +21 -32
- data/ext/do_postgres_ext.c +44 -44
- data/lib/do_postgres/version.rb +5 -0
- data/spec/integration/do_postgres_spec.rb +9 -0
- data/spec/integration/logging_spec.rb +1 -1
- data/spec/spec.opts +2 -0
- metadata +37 -19
data/History.txt
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
|
data/Manifest.txt
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
History.txt
|
2
|
+
LICENSE
|
3
|
+
Manifest.txt
|
4
|
+
README.txt
|
5
|
+
Rakefile
|
6
|
+
TODO
|
7
|
+
ext/do_postgres_ext.c
|
8
|
+
ext/extconf.rb
|
9
|
+
ext/type-oids.h
|
10
|
+
lib/do_postgres.rb
|
11
|
+
lib/do_postgres/transaction.rb
|
12
|
+
lib/do_postgres/version.rb
|
13
|
+
spec/integration/do_postgres_spec.rb
|
14
|
+
spec/integration/logging_spec.rb
|
15
|
+
spec/integration/quoting_spec.rb
|
16
|
+
spec/integration/timezone_spec.rb
|
17
|
+
spec/spec.opts
|
18
|
+
spec/spec_helper.rb
|
19
|
+
spec/unit/transaction_spec.rb
|
data/{README → README.txt}
RENAMED
data/Rakefile
CHANGED
@@ -1,14 +1,10 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
require 'rake/clean'
|
3
|
-
require 'rake/gempackagetask'
|
4
2
|
require 'spec/rake/spectask'
|
5
3
|
require 'pathname'
|
6
|
-
require Pathname(__FILE__).dirname.expand_path.parent + 'tasks/ext_helper'
|
7
4
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
'ext/Makefile'
|
5
|
+
ROOT = Pathname(__FILE__).dirname.expand_path
|
6
|
+
|
7
|
+
require "lib/do_postgres/version"
|
12
8
|
|
13
9
|
JRUBY = (RUBY_PLATFORM =~ /java/) rescue nil
|
14
10
|
WINDOWS = (RUBY_PLATFORM =~ /mswin|mingw|cygwin/) rescue nil
|
@@ -16,38 +12,31 @@ WINDOWS = (RUBY_PLATFORM =~ /mswin|mingw|cygwin/) rescue nil
|
|
16
12
|
# is not entirely correct.
|
17
13
|
SUDO = (WINDOWS || JRUBY) ? '' : ('sudo' unless ENV['SUDOLESS'])
|
18
14
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
s.description = s.summary
|
27
|
-
s.author = 'Yehuda Katz'
|
28
|
-
s.email = 'wycats@gmail.com'
|
29
|
-
s.homepage = 'http://rubyforge.org/projects/dorb'
|
30
|
-
s.rubyforge_project = 'dorb'
|
31
|
-
s.require_path = 'lib'
|
32
|
-
s.extensions = %w[ ext/extconf.rb ]
|
33
|
-
s.files = FileList[ '{ext,lib,spec}/**/*.{c,h,rb}', 'Rakefile', *s.extra_rdoc_files ]
|
34
|
-
s.add_dependency('data_objects', "=#{s.version}")
|
35
|
-
end
|
15
|
+
AUTHOR = "Bernerd Schaefer"
|
16
|
+
EMAIL = "bj.schaefer@gmail.com"
|
17
|
+
GEM_NAME = "do_postgres"
|
18
|
+
GEM_VERSION = DataObjects::Postgres::VERSION
|
19
|
+
GEM_DEPENDENCIES = [["data_objects", GEM_VERSION]]
|
20
|
+
GEM_CLEAN = ['**/*.{o,so,bundle,log,a,gem,dSYM,obj,pdb,lib,def,exp,DS_Store}', 'ext/Makefile']
|
21
|
+
GEM_EXTRAS = { :extensions => %w[ ext/extconf.rb ], :has_rdoc => false }
|
36
22
|
|
37
|
-
|
38
|
-
|
39
|
-
|
23
|
+
PROJECT_NAME = "dorb"
|
24
|
+
PROJECT_URL = "http://rubyforge.org/projects/dorb"
|
25
|
+
PROJECT_DESCRIPTION = PROJECT_SUMMARY = "A DataObject.rb driver for MySQL"
|
26
|
+
|
27
|
+
DRIVER = true
|
28
|
+
|
29
|
+
require ROOT.parent + 'tasks/hoe'
|
40
30
|
|
41
|
-
#
|
42
|
-
setup_extension "#{spec.name}_ext", spec
|
31
|
+
# Installation
|
43
32
|
|
44
33
|
task :install => [ :package ] do
|
45
|
-
sh %{#{SUDO} gem install --local pkg/#{
|
34
|
+
sh %{#{SUDO} gem install --local pkg/#{GEM_NAME}-#{GEM_VERSION} --no-update-sources}, :verbose => false
|
46
35
|
end
|
47
36
|
|
48
|
-
desc "Uninstall #{
|
37
|
+
desc "Uninstall #{GEM_NAME} #{GEM_VERSION} (default ruby)"
|
49
38
|
task :uninstall => [ :clobber ] do
|
50
|
-
sh "#{SUDO} gem uninstall #{
|
39
|
+
sh "#{SUDO} gem uninstall #{GEM_NAME} -v#{GEM_VERSION} -I -x", :verbose => false
|
51
40
|
end
|
52
41
|
|
53
42
|
desc 'Run specifications'
|
data/ext/do_postgres_ext.c
CHANGED
@@ -53,7 +53,7 @@ static VALUE ePostgresError;
|
|
53
53
|
static void data_objects_debug(VALUE string) {
|
54
54
|
VALUE logger = rb_funcall(mPostgres, ID_LOGGER, 0);
|
55
55
|
int log_level = NUM2INT(rb_funcall(logger, ID_LEVEL, 0));
|
56
|
-
|
56
|
+
|
57
57
|
if (0 == log_level) {
|
58
58
|
rb_funcall(logger, ID_DEBUG, 1, string);
|
59
59
|
}
|
@@ -87,23 +87,23 @@ static VALUE parse_date(const char *date) {
|
|
87
87
|
int year, month, day;
|
88
88
|
int jd, ajd;
|
89
89
|
VALUE rational;
|
90
|
-
|
90
|
+
|
91
91
|
sscanf(date, "%4d-%2d-%2d", &year, &month, &day);
|
92
|
-
|
92
|
+
|
93
93
|
jd = jd_from_date(year, month, day);
|
94
|
-
|
94
|
+
|
95
95
|
// Math from Date.jd_to_ajd
|
96
96
|
ajd = jd * 2 - 1;
|
97
97
|
rational = rb_funcall(rb_cRational, rb_intern("new!"), 2, INT2NUM(ajd), INT2NUM(2));
|
98
|
-
|
98
|
+
|
99
99
|
return rb_funcall(rb_cDate, ID_NEW_DATE, 3, rational, INT2NUM(0), INT2NUM(2299161));
|
100
100
|
}
|
101
101
|
|
102
102
|
// Creates a Rational for use as a Timezone offset to be passed to DateTime.new!
|
103
103
|
static VALUE seconds_to_offset(do_int64 num) {
|
104
|
-
do_int64 den = 86400;
|
104
|
+
do_int64 den = 86400;
|
105
105
|
reduce(&num, &den);
|
106
|
-
return rb_funcall(rb_cRational, rb_intern("new!"), 2, rb_ll2inum(num), rb_ll2inum(den));
|
106
|
+
return rb_funcall(rb_cRational, rb_intern("new!"), 2, rb_ll2inum(num), rb_ll2inum(den));
|
107
107
|
}
|
108
108
|
|
109
109
|
static VALUE timezone_to_offset(int hour_offset, int minute_offset) {
|
@@ -121,15 +121,15 @@ static VALUE parse_date_time(const char *date) {
|
|
121
121
|
int year, month, day, hour, min, sec, usec, hour_offset, minute_offset;
|
122
122
|
int jd;
|
123
123
|
do_int64 num, den;
|
124
|
-
|
124
|
+
|
125
125
|
long int gmt_offset;
|
126
126
|
int is_dst;
|
127
|
-
|
127
|
+
|
128
128
|
time_t rawtime;
|
129
129
|
struct tm * timeinfo;
|
130
130
|
|
131
131
|
int tokens_read, max_tokens;
|
132
|
-
|
132
|
+
|
133
133
|
if (0 != strchr(date, '.')) {
|
134
134
|
// This is a datetime with sub-second precision
|
135
135
|
tokens_read = sscanf(date, "%4d-%2d-%2d %2d:%2d:%2d.%d%3d:%2d", &year, &month, &day, &hour, &min, &sec, &usec, &hour_offset, &minute_offset);
|
@@ -139,7 +139,7 @@ static VALUE parse_date_time(const char *date) {
|
|
139
139
|
tokens_read = sscanf(date, "%4d-%2d-%2d %2d:%2d:%2d%3d:%2d", &year, &month, &day, &hour, &min, &sec, &hour_offset, &minute_offset);
|
140
140
|
max_tokens = 8;
|
141
141
|
}
|
142
|
-
|
142
|
+
|
143
143
|
if (max_tokens == tokens_read) {
|
144
144
|
// We read the Date, Time, and Timezone info
|
145
145
|
minute_offset *= hour_offset < 0 ? -1 : 1;
|
@@ -150,11 +150,11 @@ static VALUE parse_date_time(const char *date) {
|
|
150
150
|
return parse_date(date);
|
151
151
|
} else if (tokens_read >= (max_tokens - 3)) {
|
152
152
|
// We read the Date and Time, default to the current locale's offset
|
153
|
-
|
153
|
+
|
154
154
|
// Get localtime
|
155
155
|
time(&rawtime);
|
156
156
|
timeinfo = localtime(&rawtime);
|
157
|
-
|
157
|
+
|
158
158
|
is_dst = timeinfo->tm_isdst * 3600;
|
159
159
|
|
160
160
|
// Reset to GM Time
|
@@ -181,7 +181,7 @@ static VALUE parse_date_time(const char *date) {
|
|
181
181
|
|
182
182
|
// Modify the numerator so when we apply the timezone everything works out
|
183
183
|
num -= (hour_offset * 1440) + (minute_offset * 24);
|
184
|
-
|
184
|
+
|
185
185
|
den = (24 * 1440);
|
186
186
|
reduce(&num, &den);
|
187
187
|
|
@@ -199,7 +199,7 @@ static VALUE parse_date_time(const char *date) {
|
|
199
199
|
|
200
200
|
ajd = rb_funcall(rb_cRational, rb_intern("new!"), 2, rb_ull2inum(num), rb_ull2inum(den));
|
201
201
|
offset = timezone_to_offset(hour_offset, minute_offset);
|
202
|
-
|
202
|
+
|
203
203
|
return rb_funcall(rb_cDateTime, ID_NEW_DATE, 3, ajd, offset, INT2NUM(2299161));
|
204
204
|
}
|
205
205
|
|
@@ -260,7 +260,7 @@ static VALUE infer_ruby_type(Oid type) {
|
|
260
260
|
}
|
261
261
|
|
262
262
|
static VALUE typecast(char *value, char *type) {
|
263
|
-
|
263
|
+
|
264
264
|
if ( strcmp(type, "Class") == 0) {
|
265
265
|
return rb_funcall(mDO, rb_intern("find_const"), 1, TAINTED_STRING(value));
|
266
266
|
} else if ( strcmp(type, "Integer") == 0 || strcmp(type, "Fixnum") == 0 || strcmp(type, "Bignum") == 0 ) {
|
@@ -324,12 +324,12 @@ static VALUE cConnection_initialize(VALUE self, VALUE uri) {
|
|
324
324
|
}
|
325
325
|
|
326
326
|
db = PQsetdbLogin(
|
327
|
-
host,
|
328
|
-
port,
|
329
|
-
NULL,
|
330
|
-
NULL,
|
331
|
-
database,
|
332
|
-
user,
|
327
|
+
host,
|
328
|
+
port,
|
329
|
+
NULL,
|
330
|
+
NULL,
|
331
|
+
database,
|
332
|
+
user,
|
333
333
|
password
|
334
334
|
);
|
335
335
|
|
@@ -375,7 +375,7 @@ static VALUE cCommand_quote_string(VALUE self, VALUE string) {
|
|
375
375
|
char *escaped;
|
376
376
|
int quoted_length = 0;
|
377
377
|
VALUE result;
|
378
|
-
|
378
|
+
|
379
379
|
length = strlen(source);
|
380
380
|
|
381
381
|
// Allocate space for the escaped version of 'string'
|
@@ -397,17 +397,17 @@ static VALUE cCommand_execute_non_query(int argc, VALUE *argv[], VALUE self) {
|
|
397
397
|
PGconn *db = DATA_PTR(rb_iv_get(rb_iv_get(self, "@connection"), "@connection"));
|
398
398
|
PGresult *response;
|
399
399
|
int status;
|
400
|
-
|
400
|
+
|
401
401
|
int affected_rows;
|
402
402
|
int insert_id;
|
403
|
-
|
403
|
+
|
404
404
|
VALUE query = build_query_from_args(self, argc, argv);
|
405
405
|
data_objects_debug(query);
|
406
|
-
|
406
|
+
|
407
407
|
response = PQexec(db, StringValuePtr(query));
|
408
|
-
|
408
|
+
|
409
409
|
status = PQresultStatus(response);
|
410
|
-
|
410
|
+
|
411
411
|
if ( status == PGRES_TUPLES_OK ) {
|
412
412
|
insert_id = atoi(PQgetvalue(response, 0, 0));
|
413
413
|
affected_rows = 1;
|
@@ -421,9 +421,9 @@ static VALUE cCommand_execute_non_query(int argc, VALUE *argv[], VALUE self) {
|
|
421
421
|
PQclear(response);
|
422
422
|
rb_raise(ePostgresError, message);
|
423
423
|
}
|
424
|
-
|
424
|
+
|
425
425
|
PQclear(response);
|
426
|
-
|
426
|
+
|
427
427
|
return rb_funcall(cResult, ID_NEW, 3, self, INT2NUM(affected_rows), INT2NUM(insert_id));
|
428
428
|
}
|
429
429
|
|
@@ -521,14 +521,14 @@ static VALUE cReader_next(VALUE self) {
|
|
521
521
|
|
522
522
|
for ( i = 0; i < field_count; i++ ) {
|
523
523
|
ruby_type = RARRAY(field_types)->ptr[i];
|
524
|
-
|
524
|
+
|
525
525
|
if ( TYPE(ruby_type) == T_STRING ) {
|
526
526
|
type = RSTRING(ruby_type)->ptr;
|
527
527
|
}
|
528
528
|
else {
|
529
529
|
type = rb_class2name(ruby_type);
|
530
530
|
}
|
531
|
-
|
531
|
+
|
532
532
|
// Always return nil if the value returned from Postgres is null
|
533
533
|
if (!PQgetisnull(reader, position, i)) {
|
534
534
|
value = typecast(PQgetvalue(reader, position, i), type);
|
@@ -546,10 +546,10 @@ static VALUE cReader_next(VALUE self) {
|
|
546
546
|
}
|
547
547
|
|
548
548
|
static VALUE cReader_values(VALUE self) {
|
549
|
-
|
549
|
+
|
550
550
|
int position = rb_iv_get(self, "@position");
|
551
551
|
int row_count = NUM2INT(rb_iv_get(self, "@row_count"));
|
552
|
-
|
552
|
+
|
553
553
|
if ( position == Qnil || NUM2INT(position) > row_count ) {
|
554
554
|
rb_raise(ePostgresError, "Reader not initialized");
|
555
555
|
}
|
@@ -565,16 +565,16 @@ static VALUE cReader_fields(VALUE self) {
|
|
565
565
|
void Init_do_postgres_ext() {
|
566
566
|
rb_require("rubygems");
|
567
567
|
rb_require("date");
|
568
|
-
|
569
|
-
// Get references classes needed for Date/Time parsing
|
568
|
+
|
569
|
+
// Get references classes needed for Date/Time parsing
|
570
570
|
rb_cDate = CONST_GET(rb_mKernel, "Date");
|
571
571
|
rb_cDateTime = CONST_GET(rb_mKernel, "DateTime");
|
572
572
|
rb_cTime = CONST_GET(rb_mKernel, "Time");
|
573
573
|
rb_cRational = CONST_GET(rb_mKernel, "Rational");
|
574
574
|
rb_cBigDecimal = CONST_GET(rb_mKernel, "BigDecimal");
|
575
|
-
|
575
|
+
|
576
576
|
rb_funcall(rb_mKernel, rb_intern("require"), 1, rb_str_new2("data_objects"));
|
577
|
-
|
577
|
+
|
578
578
|
ID_NEW_DATE = RUBY_VERSION_CODE < 186 ? rb_intern("new0") : rb_intern("new!");
|
579
579
|
ID_LOGGER = rb_intern("logger");
|
580
580
|
ID_DEBUG = rb_intern("debug");
|
@@ -587,28 +587,28 @@ void Init_do_postgres_ext() {
|
|
587
587
|
cDO_Command = CONST_GET(mDO, "Command");
|
588
588
|
cDO_Result = CONST_GET(mDO, "Result");
|
589
589
|
cDO_Reader = CONST_GET(mDO, "Reader");
|
590
|
-
|
590
|
+
|
591
591
|
mPostgres = rb_define_module_under(mDO, "Postgres");
|
592
592
|
ePostgresError = rb_define_class("PostgresError", rb_eStandardError);
|
593
|
-
|
593
|
+
|
594
594
|
cConnection = POSTGRES_CLASS("Connection", cDO_Connection);
|
595
595
|
rb_define_method(cConnection, "initialize", cConnection_initialize, 1);
|
596
596
|
rb_define_method(cConnection, "dispose", cConnection_dispose, 0);
|
597
|
-
|
597
|
+
|
598
598
|
cCommand = POSTGRES_CLASS("Command", cDO_Command);
|
599
599
|
rb_include_module(cCommand, cDO_Quoting);
|
600
600
|
rb_define_method(cCommand, "set_types", cCommand_set_types, 1);
|
601
601
|
rb_define_method(cCommand, "execute_non_query", cCommand_execute_non_query, -1);
|
602
602
|
rb_define_method(cCommand, "execute_reader", cCommand_execute_reader, -1);
|
603
603
|
rb_define_method(cCommand, "quote_string", cCommand_quote_string, 1);
|
604
|
-
|
604
|
+
|
605
605
|
cResult = POSTGRES_CLASS("Result", cDO_Result);
|
606
|
-
|
606
|
+
|
607
607
|
cReader = POSTGRES_CLASS("Reader", cDO_Reader);
|
608
608
|
rb_define_method(cReader, "close", cReader_close, 0);
|
609
609
|
rb_define_method(cReader, "next!", cReader_next, 0);
|
610
610
|
rb_define_method(cReader, "values", cReader_values, 0);
|
611
611
|
rb_define_method(cReader, "fields", cReader_fields, 0);
|
612
|
-
|
612
|
+
|
613
613
|
}
|
614
614
|
|
@@ -21,6 +21,7 @@ describe "DataObjects::Postgres::Connection" do
|
|
21
21
|
|
22
22
|
it "should connect to the db" do
|
23
23
|
connection = DataObjects::Connection.new("postgres://localhost/do_test")
|
24
|
+
connection.close
|
24
25
|
end
|
25
26
|
end
|
26
27
|
|
@@ -31,6 +32,10 @@ describe "DataObjects::Postgres::Command" do
|
|
31
32
|
@connection = ensure_users_table_and_return_connection
|
32
33
|
end
|
33
34
|
|
35
|
+
after :all do
|
36
|
+
@connection.close
|
37
|
+
end
|
38
|
+
|
34
39
|
it "should create a command" do
|
35
40
|
@connection.create_command("CREATE TABLE users").should be_a_kind_of(DataObjects::Postgres::Command)
|
36
41
|
end
|
@@ -62,6 +67,10 @@ describe "DataObjects::Postgres::Result" do
|
|
62
67
|
@connection = ensure_users_table_and_return_connection
|
63
68
|
end
|
64
69
|
|
70
|
+
after :all do
|
71
|
+
@connection.close
|
72
|
+
end
|
73
|
+
|
65
74
|
it "should raise errors on bad queries" do
|
66
75
|
command = @connection.create_command("INSER INTO users (name) VALUES ('Test')")
|
67
76
|
lambda { command.execute_non_query }.should raise_error
|
@@ -4,7 +4,7 @@ require Pathname(__FILE__).dirname.expand_path.parent + 'spec_helper'
|
|
4
4
|
describe DataObjects::Postgres::Command do
|
5
5
|
|
6
6
|
before(:each) do
|
7
|
-
@connection = DataObjects::
|
7
|
+
@connection = DataObjects::Connection.new("postgres://localhost/do_test")
|
8
8
|
end
|
9
9
|
|
10
10
|
describe "Executing a Reader" do
|
data/spec/spec.opts
ADDED
metadata
CHANGED
@@ -1,59 +1,77 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: do_postgres
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- Bernerd Schaefer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-07-24 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: data_objects
|
17
|
+
type: :runtime
|
17
18
|
version_requirement:
|
18
19
|
version_requirements: !ruby/object:Gem::Requirement
|
19
20
|
requirements:
|
20
21
|
- - "="
|
21
22
|
- !ruby/object:Gem::Version
|
22
|
-
version: 0.9.
|
23
|
+
version: 0.9.3
|
23
24
|
version:
|
24
|
-
|
25
|
-
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: hoe
|
27
|
+
type: :development
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.7.0
|
34
|
+
version:
|
35
|
+
description: A DataObject.rb driver for MySQL
|
36
|
+
email:
|
37
|
+
- bj.schaefer@gmail.com
|
26
38
|
executables: []
|
27
39
|
|
28
40
|
extensions:
|
29
41
|
- ext/extconf.rb
|
30
42
|
extra_rdoc_files:
|
31
|
-
-
|
43
|
+
- History.txt
|
44
|
+
- Manifest.txt
|
45
|
+
- README.txt
|
46
|
+
files:
|
47
|
+
- History.txt
|
32
48
|
- LICENSE
|
49
|
+
- Manifest.txt
|
50
|
+
- README.txt
|
51
|
+
- Rakefile
|
33
52
|
- TODO
|
34
|
-
files:
|
35
53
|
- ext/do_postgres_ext.c
|
36
|
-
- ext/type-oids.h
|
37
54
|
- ext/extconf.rb
|
38
|
-
-
|
55
|
+
- ext/type-oids.h
|
39
56
|
- lib/do_postgres.rb
|
57
|
+
- lib/do_postgres/transaction.rb
|
58
|
+
- lib/do_postgres/version.rb
|
40
59
|
- spec/integration/do_postgres_spec.rb
|
41
60
|
- spec/integration/logging_spec.rb
|
42
61
|
- spec/integration/quoting_spec.rb
|
43
62
|
- spec/integration/timezone_spec.rb
|
63
|
+
- spec/spec.opts
|
44
64
|
- spec/spec_helper.rb
|
45
65
|
- spec/unit/transaction_spec.rb
|
46
|
-
|
47
|
-
- README
|
48
|
-
- LICENSE
|
49
|
-
- TODO
|
50
|
-
has_rdoc: true
|
66
|
+
has_rdoc: false
|
51
67
|
homepage: http://rubyforge.org/projects/dorb
|
52
68
|
post_install_message:
|
53
|
-
rdoc_options:
|
54
|
-
|
69
|
+
rdoc_options:
|
70
|
+
- --main
|
71
|
+
- README.txt
|
55
72
|
require_paths:
|
56
73
|
- lib
|
74
|
+
- ext
|
57
75
|
required_ruby_version: !ruby/object:Gem::Requirement
|
58
76
|
requirements:
|
59
77
|
- - ">="
|
@@ -69,9 +87,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
69
87
|
requirements: []
|
70
88
|
|
71
89
|
rubyforge_project: dorb
|
72
|
-
rubygems_version: 1.0
|
90
|
+
rubygems_version: 1.2.0
|
73
91
|
signing_key:
|
74
92
|
specification_version: 2
|
75
|
-
summary: A DataObject.rb driver for
|
93
|
+
summary: A DataObject.rb driver for MySQL
|
76
94
|
test_files: []
|
77
95
|
|