do_postgres 0.9.12-java

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt ADDED
@@ -0,0 +1,8 @@
1
+ == 0.9.11 2009-01-19
2
+ * Improvements
3
+ * Ruby 1.9 support
4
+ * Fixes
5
+ * Fix build issue on certain platforms introduces with 0.9.10
6
+
7
+ == 0.9.9 2008-11-27
8
+ * No changes since 0.9.8
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2007, 2008, 2009 Yehuda Katz, Dirkjan Bussink
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Manifest.txt ADDED
@@ -0,0 +1,34 @@
1
+ .gitignore
2
+ History.txt
3
+ LICENSE
4
+ Manifest.txt
5
+ README.txt
6
+ Rakefile
7
+ autobuild.rb
8
+ buildfile
9
+ ext-java/src/main/java/DoPostgresExtService.java
10
+ ext-java/src/main/java/do_postgres/PostgresDriverDefinition.java
11
+ ext/do_postgres_ext/do_postgres_ext.c
12
+ ext/do_postgres_ext/extconf.rb
13
+ lib/do_postgres.rb
14
+ lib/do_postgres/transaction.rb
15
+ lib/do_postgres/version.rb
16
+ script/timezone_spec_runner.rb
17
+ script/timezones.txt
18
+ spec/command_spec.rb
19
+ spec/connection_spec.rb
20
+ spec/reader_spec.rb
21
+ spec/result_spec.rb
22
+ spec/spec.opts
23
+ spec/spec_helper.rb
24
+ spec/typecast/bigdecimal_spec.rb
25
+ spec/typecast/boolean_spec.rb
26
+ spec/typecast/byte_array_spec.rb
27
+ spec/typecast/class_spec.rb
28
+ spec/typecast/date_spec.rb
29
+ spec/typecast/datetime_spec.rb
30
+ spec/typecast/float_spec.rb
31
+ spec/typecast/integer_spec.rb
32
+ spec/typecast/nil_spec.rb
33
+ spec/typecast/string_spec.rb
34
+ spec/typecast/time_spec.rb
data/README.txt ADDED
@@ -0,0 +1,3 @@
1
+ = do_postgres
2
+
3
+ A PostgreSQL driver for DataObjects
data/Rakefile ADDED
@@ -0,0 +1,16 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/clean'
4
+
5
+ require 'pathname'
6
+ require 'lib/do_postgres/version'
7
+
8
+ ROOT = Pathname(__FILE__).dirname.expand_path
9
+ JRUBY = RUBY_PLATFORM =~ /java/
10
+ WINDOWS = Gem.win_platform?
11
+ SUDO = (WINDOWS || JRUBY) ? '' : ('sudo' unless ENV['SUDOLESS'])
12
+ BINARY_VERSION = '5.0.77'
13
+
14
+ Dir['tasks/*.rake'].each { |f| import f }
15
+
16
+ CLEAN.include(%w[ {tmp,pkg}/ **/*.{o,so,bundle,jar,log,a,gem,dSYM,obj,pdb,exp,DS_Store,rbc,db} ext/do_postgres_ext/Makefile ext-java/target ])
@@ -0,0 +1,40 @@
1
+ require 'rubygems'
2
+ require 'data_objects'
3
+ if RUBY_PLATFORM =~ /java/
4
+ require 'do_jdbc'
5
+ require 'java'
6
+ gem 'jdbc-postgres'
7
+ require 'jdbc/postgres' # the JDBC driver, packaged as a gem
8
+ end
9
+
10
+ require 'do_postgres_ext'
11
+ require File.expand_path(File.join(File.dirname(__FILE__), 'do_postgres', 'version'))
12
+ require File.expand_path(File.join(File.dirname(__FILE__), 'do_postgres', 'transaction'))
13
+
14
+ if RUBY_PLATFORM =~ /java/
15
+ # Another way of loading the JDBC Class. This seems to be more reliable
16
+ # than Class.forName() within the data_objects.Connection Java class,
17
+ # which is currently not working as expected.
18
+ import 'org.postgresql.Driver'
19
+
20
+ module DataObjects
21
+ module Postgres
22
+ class Connection
23
+ def self.pool_size
24
+ 20
25
+ end
26
+
27
+ def character_set
28
+ # JDBC API does not provide an easy way to get the current character set
29
+ reader = self.create_command("SELECT pg_client_encoding()").execute_reader
30
+ reader.next!
31
+ char_set = reader.values.to_s
32
+ reader.close
33
+ char_set.downcase
34
+ end
35
+
36
+ end
37
+ end
38
+ end
39
+
40
+ end
@@ -0,0 +1,37 @@
1
+
2
+ module DataObjects
3
+
4
+ module Postgres
5
+
6
+ class Transaction < DataObjects::Transaction
7
+
8
+ def begin
9
+ cmd = "BEGIN"
10
+ connection.create_command(cmd).execute_non_query
11
+ end
12
+
13
+ def commit
14
+ cmd = "COMMIT PREPARED '#{id}'"
15
+ connection.create_command(cmd).execute_non_query
16
+ end
17
+
18
+ def rollback
19
+ cmd = "ROLLBACK"
20
+ connection.create_command(cmd).execute_non_query
21
+ end
22
+
23
+ def rollback_prepared
24
+ cmd = "ROLLBACK PREPARED '#{id}'"
25
+ connection.create_command(cmd).execute_non_query
26
+ end
27
+
28
+ def prepare
29
+ cmd = "PREPARE TRANSACTION '#{id}'"
30
+ connection.create_command(cmd).execute_non_query
31
+ end
32
+
33
+ end
34
+
35
+ end
36
+
37
+ end
@@ -0,0 +1,5 @@
1
+ module DataObjects
2
+ module Postgres
3
+ VERSION = "0.9.12"
4
+ end
5
+ end
Binary file
@@ -0,0 +1,9 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
4
+ require 'data_objects/spec/command_spec'
5
+
6
+ describe DataObjects::Postgres::Command do
7
+ it_should_behave_like 'a Command'
8
+ it_should_behave_like 'a Command with async'
9
+ end
@@ -0,0 +1,19 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
4
+ require 'data_objects/spec/connection_spec'
5
+
6
+ describe DataObjects::Postgres::Connection do
7
+
8
+ before :all do
9
+ @driver = CONFIG.scheme
10
+ @user = CONFIG.user
11
+ @password = CONFIG.pass
12
+ @host = CONFIG.host
13
+ @port = CONFIG.port
14
+ @database = CONFIG.database
15
+ end
16
+
17
+ it_should_behave_like 'a Connection'
18
+ it_should_behave_like 'a Connection with authentication support'
19
+ end
@@ -0,0 +1,8 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
4
+ require 'data_objects/spec/encoding_spec'
5
+
6
+ describe DataObjects::Postgres::Connection do
7
+ it_should_behave_like 'a driver supporting encodings'
8
+ end
@@ -0,0 +1,3 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', 'data_objects', 'spec', 'lib', 'rspec_immediate_feedback_formatter'))
@@ -0,0 +1,8 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
4
+ require 'data_objects/spec/reader_spec'
5
+
6
+ describe DataObjects::Postgres::Reader do
7
+ it_should_behave_like 'a Reader'
8
+ end
@@ -0,0 +1,86 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
4
+ require 'data_objects/spec/result_spec'
5
+
6
+ describe DataObjects::Postgres::Result do
7
+ it_should_behave_like 'a Result'
8
+
9
+ before :all do
10
+ setup_test_environment
11
+ end
12
+
13
+ describe 'without using RETURNING' do
14
+
15
+ before :each do
16
+ @connection = DataObjects::Connection.new(CONFIG.uri)
17
+ @result = @connection.create_command("INSERT INTO users (name) VALUES (?)").execute_non_query("monkey")
18
+ end
19
+
20
+ after :each do
21
+ @connection.close
22
+ end
23
+
24
+ it { @result.should respond_to(:affected_rows) }
25
+
26
+ describe 'affected_rows' do
27
+
28
+ it 'should return the number of created rows' do
29
+ @result.affected_rows.should == 1
30
+ end
31
+
32
+ end
33
+
34
+ it { @result.should respond_to(:insert_id) }
35
+
36
+ describe 'insert_id' do
37
+
38
+ it 'should return nil' do
39
+ @result.insert_id.should be_nil
40
+ end
41
+
42
+ it 'should be retrievable through curr_val' do
43
+ # This is actually the 4th record inserted
44
+ reader = @connection.create_command("SELECT currval('users_id_seq')").execute_reader
45
+ reader.next!
46
+ reader.values.first.should == 4
47
+ end
48
+
49
+ end
50
+
51
+ end
52
+
53
+ describe 'when using RETURNING' do
54
+
55
+ before :each do
56
+ @connection = DataObjects::Connection.new(CONFIG.uri)
57
+ @result = @connection.create_command("INSERT INTO users (name) VALUES (?) RETURNING id").execute_non_query("monkey")
58
+ end
59
+
60
+ after :each do
61
+ @connection.close
62
+ end
63
+
64
+ it { @result.should respond_to(:affected_rows) }
65
+
66
+ describe 'affected_rows' do
67
+
68
+ it 'should return the number of created rows' do
69
+ @result.affected_rows.should == 1
70
+ end
71
+
72
+ end
73
+
74
+ it { @result.should respond_to(:insert_id) }
75
+
76
+ describe 'insert_id' do
77
+
78
+ it 'should return the generated key value' do
79
+ @result.insert_id.should == 2
80
+ end
81
+
82
+ end
83
+
84
+ end
85
+
86
+ end
@@ -0,0 +1,131 @@
1
+ $TESTING=true
2
+ JRUBY = RUBY_PLATFORM =~ /java/
3
+
4
+ require 'rubygems'
5
+
6
+ gem 'rspec', '>1.1.12'
7
+ require 'spec'
8
+
9
+ require 'date'
10
+ require 'ostruct'
11
+ require 'pathname'
12
+ require 'fileutils'
13
+
14
+ # put data_objects from repository in the load path
15
+ # DO NOT USE installed gem of data_objects!
16
+ $:.unshift File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'data_objects', 'lib'))
17
+ require 'data_objects'
18
+
19
+ DATAOBJECTS_SPEC_ROOT = Pathname(__FILE__).dirname.parent.parent + 'data_objects' + 'spec'
20
+ Pathname.glob((DATAOBJECTS_SPEC_ROOT + 'lib/**/*.rb').to_s).each { |f| require f }
21
+
22
+ if JRUBY
23
+ $:.unshift File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'do_jdbc', 'lib'))
24
+ require 'do_jdbc'
25
+ end
26
+
27
+ # put the pre-compiled extension in the path to be found
28
+ $:.unshift File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
29
+ require 'do_postgres'
30
+
31
+ log_path = File.expand_path(File.join(File.dirname(__FILE__), '..', 'log', 'do.log'))
32
+ FileUtils.mkdir_p(File.dirname(log_path))
33
+
34
+ DataObjects::Postgres.logger = DataObjects::Logger.new(log_path, :debug)
35
+
36
+ at_exit { DataObjects.logger.flush }
37
+
38
+ Spec::Runner.configure do |config|
39
+ config.include(DataObjects::Spec::PendingHelpers)
40
+ end
41
+
42
+ CONFIG = OpenStruct.new
43
+ CONFIG.scheme = 'postgres'
44
+ CONFIG.user = ENV['DO_POSTGRES_USER'] || 'postgres'
45
+ CONFIG.pass = ENV['DO_POSTGRES_PASS'] || ''
46
+ CONFIG.host = ENV['DO_POSTGRES_HOST'] || 'localhost'
47
+ CONFIG.port = ENV['DO_POSTGRES_PORT'] || '5432'
48
+ CONFIG.database = ENV['DO_POSTGRES_DATABASE'] || '/do_test'
49
+
50
+ CONFIG.uri = ENV["DO_POSTGRES_SPEC_URI"] ||"#{CONFIG.scheme}://#{CONFIG.user}:#{CONFIG.pass}@#{CONFIG.host}:#{CONFIG.port}#{CONFIG.database}"
51
+ CONFIG.sleep = "SELECT pg_sleep(1)"
52
+
53
+ module DataObjectsSpecHelpers
54
+
55
+ def setup_test_environment
56
+ conn = DataObjects::Connection.new(CONFIG.uri)
57
+
58
+ conn.create_command(<<-EOF).execute_non_query
59
+ DROP TABLE IF EXISTS "invoices"
60
+ EOF
61
+
62
+ conn.create_command(<<-EOF).execute_non_query
63
+ DROP TABLE IF EXISTS "users"
64
+ EOF
65
+
66
+ conn.create_command(<<-EOF).execute_non_query
67
+ DROP TABLE IF EXISTS "widgets"
68
+ EOF
69
+
70
+ conn.create_command(<<-EOF).execute_non_query
71
+ CREATE TABLE "users" (
72
+ "id" SERIAL,
73
+ "name" VARCHAR(200) default 'Billy' NULL,
74
+ "fired_at" timestamp,
75
+ PRIMARY KEY ("id")
76
+ );
77
+ EOF
78
+
79
+ conn.create_command(<<-EOF).execute_non_query
80
+ CREATE TABLE "invoices" (
81
+ "id" SERIAL,
82
+ "invoice_number" varchar(50) NOT NULL,
83
+ PRIMARY KEY ("id")
84
+ );
85
+ EOF
86
+
87
+ conn.create_command(<<-EOF).execute_non_query
88
+ CREATE TABLE "widgets" (
89
+ "id" SERIAL,
90
+ "code" char(8) default 'A14' NULL,
91
+ "name" varchar(200) default 'Super Widget' NULL,
92
+ "shelf_location" text NULL,
93
+ "description" text NULL,
94
+ "image_data" bytea NULL,
95
+ "ad_description" text NULL,
96
+ "ad_image" bytea NULL,
97
+ "whitepaper_text" text NULL,
98
+ "cad_drawing" bytea NULL,
99
+ "flags" boolean default false,
100
+ "number_in_stock" smallint default 500,
101
+ "number_sold" integer default 0,
102
+ "super_number" bigint default 9223372036854775807,
103
+ "weight" float default 1.23,
104
+ "cost1" double precision default 10.23,
105
+ "cost2" decimal(8,2) default 50.23,
106
+ "release_date" date default '2008-02-14',
107
+ "release_datetime" timestamp default '2008-02-14 00:31:12',
108
+ "release_timestamp" timestamp with time zone default '2008-02-14 00:31:31',
109
+ PRIMARY KEY ("id")
110
+ );
111
+ EOF
112
+
113
+ 1.upto(16) do |n|
114
+ conn.create_command(<<-EOF).execute_non_query
115
+ insert into widgets(code, name, shelf_location, description, image_data, ad_description, ad_image, whitepaper_text, cad_drawing, super_number, weight) VALUES ('W#{n.to_s.rjust(7,"0")}', 'Widget #{n}', 'A14', 'This is a description', 'IMAGE DATA', 'Buy this product now!', 'AD IMAGE DATA', 'String', 'CAD \\001 \\000 DRAWING'::bytea, 1234, 13.4);
116
+ EOF
117
+ end
118
+
119
+ conn.create_command(<<-EOF).execute_non_query
120
+ update widgets set flags = true where id = 2
121
+ EOF
122
+
123
+ conn.create_command(<<-EOF).execute_non_query
124
+ update widgets set ad_description = NULL where id = 3
125
+ EOF
126
+
127
+ conn.close
128
+
129
+ end
130
+
131
+ end
@@ -0,0 +1,8 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
4
+ require 'data_objects/spec/typecast/array_spec'
5
+
6
+ describe 'DataObjects::Postgres with Array' do
7
+ it_should_behave_like 'supporting Array'
8
+ end
@@ -0,0 +1,9 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
4
+ require 'data_objects/spec/typecast/bigdecimal_spec'
5
+
6
+ describe 'DataObjects::Postgres with BigDecimal' do
7
+ it_should_behave_like 'supporting BigDecimal'
8
+ it_should_behave_like 'supporting BigDecimal autocasting'
9
+ end
@@ -0,0 +1,9 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
4
+ require 'data_objects/spec/typecast/boolean_spec'
5
+
6
+ describe 'DataObjects::Postgres with Boolean' do
7
+ it_should_behave_like 'supporting Boolean'
8
+ it_should_behave_like 'supporting Boolean autocasting'
9
+ end
@@ -0,0 +1,8 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
4
+ require 'data_objects/spec/typecast/byte_array_spec'
5
+
6
+ describe 'DataObjects::Postgres with ByteArray' do
7
+ it_should_behave_like 'supporting ByteArray'
8
+ end
@@ -0,0 +1,8 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
4
+ require 'data_objects/spec/typecast/class_spec'
5
+
6
+ describe 'DataObjects::Postgres with Class' do
7
+ it_should_behave_like 'supporting Class'
8
+ end
@@ -0,0 +1,9 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
4
+ require 'data_objects/spec/typecast/date_spec'
5
+
6
+ describe 'DataObjects::Postgres with Date' do
7
+ it_should_behave_like 'supporting Date'
8
+ it_should_behave_like 'supporting Date autocasting'
9
+ end
@@ -0,0 +1,9 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
4
+ require 'data_objects/spec/typecast/datetime_spec'
5
+
6
+ describe 'DataObjects::Postgres with DateTime' do
7
+ it_should_behave_like 'supporting DateTime'
8
+ it_should_behave_like 'supporting DateTime autocasting'
9
+ end
@@ -0,0 +1,9 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
4
+ require 'data_objects/spec/typecast/float_spec'
5
+
6
+ describe 'DataObjects::Postgres with Float' do
7
+ it_should_behave_like 'supporting Float'
8
+ it_should_behave_like 'supporting Float autocasting'
9
+ end
@@ -0,0 +1,8 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
4
+ require 'data_objects/spec/typecast/integer_spec'
5
+
6
+ describe 'DataObjects::Postgres with Integer' do
7
+ it_should_behave_like 'supporting Integer'
8
+ end
@@ -0,0 +1,10 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
4
+ require 'data_objects/spec/typecast/nil_spec'
5
+
6
+ describe 'DataObjects::Postgres with Nil' do
7
+ it_should_behave_like 'supporting Nil'
8
+ # it_should_behave_like 'supporting writing an Nil'
9
+ it_should_behave_like 'supporting Nil autocasting'
10
+ end
@@ -0,0 +1,8 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
4
+ require 'data_objects/spec/typecast/range_spec'
5
+
6
+ describe 'DataObjects::Postgres with Range' do
7
+ it_should_behave_like 'supporting Range'
8
+ end
@@ -0,0 +1,8 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
4
+ require 'data_objects/spec/typecast/string_spec'
5
+
6
+ describe 'DataObjects::Postgres with String' do
7
+ it_should_behave_like 'supporting String'
8
+ end
@@ -0,0 +1,8 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
4
+ require 'data_objects/spec/typecast/time_spec'
5
+
6
+ describe 'DataObjects::Postgres with Time' do
7
+ it_should_behave_like 'supporting Time'
8
+ end
data/tasks/gem.rake ADDED
@@ -0,0 +1,61 @@
1
+ require 'rubygems/package_task'
2
+
3
+ GEM_SPEC = Gem::Specification.new do |s|
4
+ # basic information
5
+ s.name = "do_postgres"
6
+ s.version = DataObjects::Postgres::VERSION
7
+
8
+ # description and details
9
+ s.summary = 'DataObjects PostgreSQL Driver'
10
+ s.description = "Implements the DataObjects API for PostgreSQL"
11
+
12
+ # dependencies
13
+ s.add_dependency "addressable", "~>2.0.0"
14
+ s.add_dependency "extlib", "~>0.9.12"
15
+ s.add_dependency "data_objects", DataObjects::Postgres::VERSION
16
+
17
+ if JRUBY
18
+ s.add_dependency "jdbc-postgres", ">=8.2"
19
+ s.add_dependency "do_jdbc", DataObjects::Postgres::VERSION
20
+ s.platform = "java"
21
+ # components, files and paths
22
+ s.files = FileList["lib/**/*.rb", "spec/**/*.rb", "tasks/**/*.rake",
23
+ "LICENSE", "Rakefile", "*.{rdoc,txt,yml}", "lib/*.jar"]
24
+ else
25
+ s.platform = Gem::Platform::RUBY
26
+ s.extensions << 'ext/do_postgres_ext/extconf.rb'
27
+ # components, files and paths
28
+ s.files = FileList["lib/**/*.rb", "spec/**/*.rb", "tasks/**/*.rake", "ext/**/*.{rb,c}",
29
+ "LICENSE", "Rakefile", "*.{rdoc,txt,yml}"]
30
+ end
31
+
32
+ # development dependencies
33
+ s.add_development_dependency 'rspec', '~>1.2.0'
34
+
35
+
36
+ s.require_path = 'lib'
37
+
38
+ # documentation
39
+ s.has_rdoc = false
40
+
41
+ # project information
42
+ s.homepage = 'http://github.com/datamapper/do'
43
+ s.rubyforge_project = 'dorb'
44
+
45
+ # author and contributors
46
+ s.author = 'Dirkjan Bussink'
47
+ s.email = 'd.bussink@gmail.com'
48
+ end
49
+
50
+ gem_package = Gem::PackageTask.new(GEM_SPEC) do |pkg|
51
+ pkg.need_tar = false
52
+ pkg.need_zip = false
53
+ end
54
+
55
+ file "#{GEM_SPEC.name}.gemspec" => ['Rakefile', 'tasks/gem.rake'] do |t|
56
+ puts "Generating #{t.name}"
57
+ File.open(t.name, 'w') { |f| f.puts GEM_SPEC.to_yaml }
58
+ end
59
+
60
+ desc "Generate or update the standalone gemspec file for the project"
61
+ task :gemspec => ["#{GEM_SPEC.name}.gemspec"]
@@ -0,0 +1,15 @@
1
+ def sudo_gem(cmd)
2
+ sh "#{SUDO} #{RUBY} -S gem #{cmd}", :verbose => false
3
+ end
4
+
5
+ # Installation
6
+
7
+ desc "Install #{GEM_SPEC.name} #{GEM_SPEC.version}"
8
+ task :install => [ :package ] do
9
+ sudo_gem "install pkg/#{GEM_SPEC.name}-#{GEM_SPEC.version} --no-update-sources"
10
+ end
11
+
12
+ desc "Uninstall #{GEM_SPEC.name} #{GEM_SPEC.version}"
13
+ task :uninstall => [ :clean ] do
14
+ sudo_gem "uninstall #{GEM_SPEC.name} -v#{GEM_SPEC.version} -I -x"
15
+ end
data/tasks/native.rake ADDED
@@ -0,0 +1,35 @@
1
+ begin
2
+ gem('rake-compiler')
3
+ require 'rake/extensiontask'
4
+
5
+ Rake::ExtensionTask.new('do_postgres_ext', GEM_SPEC) do |ext|
6
+
7
+ postgres_lib = File.expand_path(File.join(File.dirname(__FILE__), '..', 'vendor', 'pgsql'))
8
+
9
+ # automatically add build options to avoid need of manual input
10
+ if RUBY_PLATFORM =~ /mswin|mingw/ then
11
+ ext.config_options << "--with-pgsql-server-include=#{postgres_lib}/include/server"
12
+ ext.config_options << "--with-pgsql-client-include=#{postgres_lib}/include"
13
+ ext.config_options << "--with-pgsql-win32-include=#{postgres_lib}/include/server/port/win32"
14
+ ext.config_options << "--with-pgsql-client-lib=#{postgres_lib}/lib"
15
+ else
16
+ ext.cross_compile = true
17
+ ext.cross_platform = ['x86-mingw32', 'x86-mswin32-60']
18
+ ext.cross_config_options << "--with-pgsql-server-include=#{postgres_lib}/include/server"
19
+ ext.cross_config_options << "--with-pgsql-client-include=#{postgres_lib}/include"
20
+ ext.cross_config_options << "--with-pgsql-win32-include=#{postgres_lib}/include/server/port/win32"
21
+ ext.cross_config_options << "--with-pgsql-client-lib=#{postgres_lib}/lib"
22
+ end
23
+
24
+ end
25
+ rescue LoadError
26
+ warn "To cross-compile, install rake-compiler (gem install rake-compiler)"
27
+
28
+ if (tasks_dir = ROOT.parent + 'tasks').directory?
29
+ require tasks_dir + 'ext_helper'
30
+ require tasks_dir + 'ext_helper_java'
31
+
32
+ setup_c_extension("#{GEM_SPEC.name}_ext", GEM_SPEC)
33
+ setup_java_extension("#{GEM_SPEC.name}_ext", GEM_SPEC)
34
+ end
35
+ end
@@ -0,0 +1,75 @@
1
+ begin
2
+ gem 'rubyforge', '~> 1.0.1'
3
+ require 'rubyforge'
4
+ rescue Exception
5
+ nil
6
+ end
7
+
8
+ if defined?(RubyForge) then
9
+ if defined?(GEM_SPEC) then
10
+ desc 'Package and upload to RubyForge'
11
+ task :release => [:package] do |t|
12
+ ver = ENV['VERSION'] or fail "Must supply VERSION (rake release VERSION=x.y.z)."
13
+
14
+ # compare versions to avoid mistakes
15
+ unless ver == GEM_SPEC.version.to_s then
16
+ fail "Version mismatch (supplied and specification versions differ)."
17
+ end
18
+
19
+ # no rubyforge project? no release for you!
20
+ if GEM_SPEC.rubyforge_project == 'TODO' or GEM_SPEC.rubyforge_project.nil? then
21
+ fail "Must define rubyforge_project in your gem specification."
22
+ end
23
+
24
+ # instantiate a RubyForge object
25
+ rf = RubyForge.new
26
+
27
+ # read project info and overview
28
+ notes = begin
29
+ r = File.read("README.rdoc")
30
+ r.split(/^(=+ .*)/)[1..4].join.strip
31
+ rescue
32
+ warn "Missing README.rdoc"
33
+ ''
34
+ end
35
+
36
+ # read changes
37
+ changes = begin
38
+ h = File.read("History.txt")
39
+ h.split(/^(==+ .*)/)[1..2].join.strip
40
+ rescue
41
+ warn "Missing History.txt"
42
+ ''
43
+ end
44
+
45
+ # build the configuration for the release
46
+ config = Hash.new
47
+ config["release_notes"] = notes
48
+ config["release_changes"] = changes
49
+ config["preformatted"] = true
50
+
51
+ # prepare configuration
52
+ rf.configure config
53
+
54
+ files = FileList["pkg/#{GEM_SPEC.name}-#{GEM_SPEC.version}*.*"].to_a
55
+ fail "No files found for the release." if files.empty?
56
+
57
+ puts "Logging in RubyForge..."
58
+ rf.login
59
+
60
+ puts "Files to upload:"
61
+ files.each do |f|
62
+ puts " * #{f}"
63
+ end
64
+
65
+ puts "Releasing #{GEM_SPEC.name} version #{GEM_SPEC.version}..."
66
+ rf.add_release GEM_SPEC.rubyforge_project, GEM_SPEC.name, GEM_SPEC.version, *files
67
+ puts "Done."
68
+ end
69
+ #Rake::Task['release'].prerequisites.unshift('clean', 'cross', 'native')
70
+ else
71
+ warn "no GEM_SPEC is found or defined. 'release' task cannot work without it."
72
+ end
73
+ else
74
+ warn "rubyforge gem is required to generate releases, please install it (gem install rubyforge)."
75
+ end
@@ -0,0 +1,79 @@
1
+ begin
2
+ gem('rake-compiler')
3
+ require 'rake/clean'
4
+ require 'rake/extensioncompiler'
5
+
6
+ # download postgres library and headers
7
+ directory "vendor"
8
+
9
+ # only on Windows or cross platform compilation
10
+ def dlltool(dllname, deffile, libfile)
11
+ # define if we are using GCC or not
12
+ if Rake::ExtensionCompiler.mingw_gcc_executable then
13
+ dir = File.dirname(Rake::ExtensionCompiler.mingw_gcc_executable)
14
+ tool = case RUBY_PLATFORM
15
+ when /mingw/
16
+ File.join(dir, 'dlltool.exe')
17
+ when /linux|darwin/
18
+ File.join(dir, "#{Rake::ExtensionCompiler.mingw_host}-dlltool")
19
+ end
20
+ return "#{tool} --dllname #{dllname} --def #{deffile} --output-lib #{libfile}"
21
+ else
22
+ if RUBY_PLATFORM =~ /mswin/ then
23
+ tool = 'lib.exe'
24
+ else
25
+ fail "Unsupported platform for cross-compilation (please, contribute some patches)."
26
+ end
27
+ return "#{tool} /DEF:#{deffile} /OUT:#{libfile}"
28
+ end
29
+ end
30
+
31
+ def copy(from, to)
32
+ if WINDOWS
33
+ from.gsub!(/\//, '\\')
34
+ to.gsub!(/\//, '\\')
35
+ end
36
+ sh "#{WINDOWS ? 'copy' : 'cp'} #{from} #{to}"
37
+ end
38
+
39
+ version = '8.3.7'
40
+ file "vendor/postgresql-#{version}-1-binaries-no-installer.zip" => ['vendor'] do |t|
41
+ url = "http://wwwmaster.postgresql.org/redir/107/h/binary/v#{version}/win32/#{File.basename(t.name)}"
42
+ when_writing "downloading #{t.name}" do
43
+ cd File.dirname(t.name) do
44
+ sh "wget -c #{url} || curl -C - -O #{url}"
45
+ end
46
+ touch t.name
47
+ end
48
+ end
49
+
50
+ file "vendor/pgsql/include/pg_config.h" => ["vendor/postgresql-#{version}-1-binaries-no-installer.zip"] do |t|
51
+ full_file = File.expand_path(t.prerequisites.last)
52
+ when_writing "creating #{t.name}" do
53
+ cd "vendor" do
54
+ sh "unzip #{full_file} pgsql/bin/** pgsql/include/** pgsql/lib/**"
55
+ end
56
+ copy "ext/do_postgres_ext/pg_config.h", "vendor/pgsql/include/pg_config.h"
57
+ copy "ext/do_postgres_ext/pg_config.h", "vendor/pgsql/include/server/pg_config.h"
58
+
59
+ # update file timestamp to avoid Rake perform this extraction again.
60
+ touch t.name
61
+ end
62
+ end
63
+
64
+ # clobber vendored packages
65
+ CLOBBER.include('vendor')
66
+
67
+ # vendor:postgres
68
+ task 'vendor:postgres' => ["vendor/pgsql/include/pg_config.h"]
69
+
70
+ # hook into cross compilation vendored postgres dependency
71
+ if RUBY_PLATFORM =~ /mingw|mswin/ then
72
+ Rake::Task['compile'].prerequisites.unshift 'vendor:postgres'
73
+ else
74
+ if Rake::Task.tasks.map {|t| t.name }.include? 'cross'
75
+ Rake::Task['cross'].prerequisites.unshift 'vendor:postgres'
76
+ end
77
+ end
78
+ rescue LoadError
79
+ end
data/tasks/spec.rake ADDED
@@ -0,0 +1,18 @@
1
+ # Specs
2
+ require 'spec/rake/spectask'
3
+
4
+ desc 'Run specifications'
5
+ Spec::Rake::SpecTask.new(:spec => [ :clean, :compile ]) do |t|
6
+ t.spec_opts << '--options' << ROOT + 'spec/spec.opts'
7
+ t.spec_files = Pathname.glob(ENV['FILES'] || 'spec/**/*_spec.rb').map { |f| f.to_s }
8
+
9
+ begin
10
+ # RCov is run by default, except on the JRuby platform
11
+ t.rcov = JRUBY ? false : (ENV.has_key?('NO_RCOV') ? ENV['NO_RCOV'] != 'true' : true)
12
+ t.rcov_opts << '--exclude' << 'spec'
13
+ t.rcov_opts << '--text-summary'
14
+ t.rcov_opts << '--sort' << 'coverage' << '--sort-reverse'
15
+ rescue Exception
16
+ # rcov not installed
17
+ end
18
+ end
metadata ADDED
@@ -0,0 +1,148 @@
1
+ --- !ruby/object:Gem::Specification
2
+ required_ruby_version: !ruby/object:Gem::Requirement
3
+ requirements:
4
+ - - '>='
5
+ - !ruby/object:Gem::Version
6
+ version: "0"
7
+ version:
8
+ email: d.bussink@gmail.com
9
+ cert_chain: []
10
+
11
+ summary: DataObjects PostgreSQL Driver
12
+ post_install_message:
13
+ extra_rdoc_files: []
14
+
15
+ homepage: http://github.com/datamapper/do
16
+ signing_key:
17
+ name: do_postgres
18
+ rdoc_options: []
19
+
20
+ rubyforge_project: dorb
21
+ autorequire:
22
+ licenses: []
23
+
24
+ executables: []
25
+
26
+ description: Implements the DataObjects API for PostgreSQL
27
+ specification_version: 3
28
+ default_executable:
29
+ files:
30
+ - lib/do_postgres.rb
31
+ - lib/do_postgres/transaction.rb
32
+ - lib/do_postgres/version.rb
33
+ - spec/command_spec.rb
34
+ - spec/connection_spec.rb
35
+ - spec/encoding_spec.rb
36
+ - spec/reader_spec.rb
37
+ - spec/result_spec.rb
38
+ - spec/spec_helper.rb
39
+ - spec/lib/rspec_immediate_feedback_formatter.rb
40
+ - spec/typecast/array_spec.rb
41
+ - spec/typecast/bigdecimal_spec.rb
42
+ - spec/typecast/boolean_spec.rb
43
+ - spec/typecast/byte_array_spec.rb
44
+ - spec/typecast/class_spec.rb
45
+ - spec/typecast/date_spec.rb
46
+ - spec/typecast/datetime_spec.rb
47
+ - spec/typecast/float_spec.rb
48
+ - spec/typecast/integer_spec.rb
49
+ - spec/typecast/nil_spec.rb
50
+ - spec/typecast/range_spec.rb
51
+ - spec/typecast/string_spec.rb
52
+ - spec/typecast/time_spec.rb
53
+ - tasks/gem.rake
54
+ - tasks/install.rake
55
+ - tasks/native.rake
56
+ - tasks/release.rake
57
+ - tasks/retrieve.rake
58
+ - tasks/spec.rake
59
+ - LICENSE
60
+ - Rakefile
61
+ - History.txt
62
+ - Manifest.txt
63
+ - README.txt
64
+ - lib/do_postgres_ext.jar
65
+ required_rubygems_version: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - '>='
68
+ - !ruby/object:Gem::Version
69
+ version: "0"
70
+ version:
71
+ extensions: []
72
+
73
+ rubygems_version: 1.3.2
74
+ requirements: []
75
+
76
+ authors:
77
+ - Dirkjan Bussink
78
+ date: 2009-05-16 22:00:00 +00:00
79
+ platform: java
80
+ test_files: []
81
+
82
+ version: !ruby/object:Gem::Version
83
+ version: 0.9.12
84
+ require_paths:
85
+ - lib
86
+ dependencies:
87
+ - !ruby/object:Gem::Dependency
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ~>
91
+ - !ruby/object:Gem::Version
92
+ version: 2.0.0
93
+ version:
94
+ type: :runtime
95
+ version_requirement:
96
+ name: addressable
97
+ - !ruby/object:Gem::Dependency
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ~>
101
+ - !ruby/object:Gem::Version
102
+ version: 0.9.12
103
+ version:
104
+ type: :runtime
105
+ version_requirement:
106
+ name: extlib
107
+ - !ruby/object:Gem::Dependency
108
+ version_requirements: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - "="
111
+ - !ruby/object:Gem::Version
112
+ version: 0.9.12
113
+ version:
114
+ type: :runtime
115
+ version_requirement:
116
+ name: data_objects
117
+ - !ruby/object:Gem::Dependency
118
+ version_requirements: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - '>='
121
+ - !ruby/object:Gem::Version
122
+ version: "8.2"
123
+ version:
124
+ type: :runtime
125
+ version_requirement:
126
+ name: jdbc-postgres
127
+ - !ruby/object:Gem::Dependency
128
+ version_requirements: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "="
131
+ - !ruby/object:Gem::Version
132
+ version: 0.9.12
133
+ version:
134
+ type: :runtime
135
+ version_requirement:
136
+ name: do_jdbc
137
+ - !ruby/object:Gem::Dependency
138
+ version_requirements: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - ~>
141
+ - !ruby/object:Gem::Version
142
+ version: 1.2.0
143
+ version:
144
+ type: :development
145
+ version_requirement:
146
+ name: rspec
147
+ bindir: bin
148
+ has_rdoc: false