globe-composite_primary_keys 3.0.1
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.
- data/History.txt +203 -0
- data/Manifest.txt +121 -0
- data/README.txt +41 -0
- data/README_DB2.txt +33 -0
- data/Rakefile +30 -0
- data/composite_primary_keys.gemspec +17 -0
- data/lib/adapter_helper/base.rb +63 -0
- data/lib/adapter_helper/mysql.rb +13 -0
- data/lib/adapter_helper/oracle.rb +12 -0
- data/lib/adapter_helper/oracle_enhanced.rb +12 -0
- data/lib/adapter_helper/postgresql.rb +13 -0
- data/lib/adapter_helper/sqlite3.rb +13 -0
- data/lib/composite_primary_keys.rb +63 -0
- data/lib/composite_primary_keys/association_preload.rb +162 -0
- data/lib/composite_primary_keys/associations.rb +159 -0
- data/lib/composite_primary_keys/attribute_methods.rb +84 -0
- data/lib/composite_primary_keys/base.rb +200 -0
- data/lib/composite_primary_keys/composite_arrays.rb +29 -0
- data/lib/composite_primary_keys/connection_adapters/abstract_adapter.rb +9 -0
- data/lib/composite_primary_keys/connection_adapters/ibm_db_adapter.rb +21 -0
- data/lib/composite_primary_keys/connection_adapters/oracle_adapter.rb +15 -0
- data/lib/composite_primary_keys/connection_adapters/oracle_enhanced_adapter.rb +17 -0
- data/lib/composite_primary_keys/connection_adapters/postgresql_adapter.rb +53 -0
- data/lib/composite_primary_keys/connection_adapters/sqlite3_adapter.rb +15 -0
- data/lib/composite_primary_keys/finder_methods.rb +68 -0
- data/lib/composite_primary_keys/fixtures.rb +8 -0
- data/lib/composite_primary_keys/read.rb +25 -0
- data/lib/composite_primary_keys/reflection.rb +39 -0
- data/lib/composite_primary_keys/relation.rb +31 -0
- data/lib/composite_primary_keys/through_association_scope.rb +212 -0
- data/lib/composite_primary_keys/validations/uniqueness.rb +118 -0
- data/lib/composite_primary_keys/version.rb +9 -0
- data/loader.rb +24 -0
- data/local/database_connections.rb.sample +12 -0
- data/local/paths.rb.sample +2 -0
- data/local/tasks.rb.sample +2 -0
- data/scripts/console.rb +48 -0
- data/scripts/txt2html +67 -0
- data/scripts/txt2js +59 -0
- data/tasks/activerecord_selection.rake +43 -0
- data/tasks/databases.rake +12 -0
- data/tasks/databases/mysql.rake +30 -0
- data/tasks/databases/oracle.rake +25 -0
- data/tasks/databases/postgresql.rake +25 -0
- data/tasks/databases/sqlite3.rake +28 -0
- data/tasks/deployment.rake +22 -0
- data/tasks/local_setup.rake +13 -0
- data/tasks/website.rake +18 -0
- data/test/README_tests.txt +67 -0
- data/test/abstract_unit.rb +103 -0
- data/test/connections/native_ibm_db/connection.rb +23 -0
- data/test/connections/native_mysql/connection.rb +13 -0
- data/test/connections/native_oracle/connection.rb +14 -0
- data/test/connections/native_oracle_enhanced/connection.rb +20 -0
- data/test/connections/native_postgresql/connection.rb +8 -0
- data/test/connections/native_sqlite/connection.rb +9 -0
- data/test/fixtures/article.rb +5 -0
- data/test/fixtures/article_group.rb +4 -0
- data/test/fixtures/article_groups.yml +7 -0
- data/test/fixtures/articles.yml +6 -0
- data/test/fixtures/comment.rb +6 -0
- data/test/fixtures/comments.yml +16 -0
- data/test/fixtures/db_definitions/db2-create-tables.sql +113 -0
- data/test/fixtures/db_definitions/db2-drop-tables.sql +16 -0
- data/test/fixtures/db_definitions/mysql.sql +181 -0
- data/test/fixtures/db_definitions/oracle.drop.sql +39 -0
- data/test/fixtures/db_definitions/oracle.sql +188 -0
- data/test/fixtures/db_definitions/postgresql.sql +206 -0
- data/test/fixtures/db_definitions/sqlite.sql +166 -0
- data/test/fixtures/department.rb +5 -0
- data/test/fixtures/departments.yml +3 -0
- data/test/fixtures/dorm.rb +3 -0
- data/test/fixtures/dorms.yml +2 -0
- data/test/fixtures/employee.rb +4 -0
- data/test/fixtures/employees.yml +9 -0
- data/test/fixtures/group.rb +3 -0
- data/test/fixtures/groups.yml +3 -0
- data/test/fixtures/hack.rb +6 -0
- data/test/fixtures/hacks.yml +2 -0
- data/test/fixtures/kitchen_sink.rb +3 -0
- data/test/fixtures/kitchen_sinks.yml +5 -0
- data/test/fixtures/membership.rb +10 -0
- data/test/fixtures/membership_status.rb +3 -0
- data/test/fixtures/membership_statuses.yml +10 -0
- data/test/fixtures/memberships.yml +6 -0
- data/test/fixtures/product.rb +7 -0
- data/test/fixtures/product_tariff.rb +5 -0
- data/test/fixtures/product_tariffs.yml +12 -0
- data/test/fixtures/products.yml +6 -0
- data/test/fixtures/reading.rb +4 -0
- data/test/fixtures/readings.yml +10 -0
- data/test/fixtures/reference_code.rb +7 -0
- data/test/fixtures/reference_codes.yml +28 -0
- data/test/fixtures/reference_type.rb +7 -0
- data/test/fixtures/reference_types.yml +9 -0
- data/test/fixtures/restaurant.rb +6 -0
- data/test/fixtures/restaurants.yml +5 -0
- data/test/fixtures/restaurants_suburbs.yml +11 -0
- data/test/fixtures/room.rb +10 -0
- data/test/fixtures/room_assignment.rb +4 -0
- data/test/fixtures/room_assignments.yml +4 -0
- data/test/fixtures/room_attribute.rb +3 -0
- data/test/fixtures/room_attribute_assignment.rb +5 -0
- data/test/fixtures/room_attribute_assignments.yml +4 -0
- data/test/fixtures/room_attributes.yml +3 -0
- data/test/fixtures/rooms.yml +3 -0
- data/test/fixtures/seat.rb +5 -0
- data/test/fixtures/seats.yml +4 -0
- data/test/fixtures/street.rb +3 -0
- data/test/fixtures/streets.yml +15 -0
- data/test/fixtures/student.rb +4 -0
- data/test/fixtures/students.yml +2 -0
- data/test/fixtures/suburb.rb +6 -0
- data/test/fixtures/suburbs.yml +9 -0
- data/test/fixtures/tariff.rb +6 -0
- data/test/fixtures/tariffs.yml +13 -0
- data/test/fixtures/user.rb +10 -0
- data/test/fixtures/users.yml +6 -0
- data/test/hash_tricks.rb +34 -0
- data/test/plugins/pagination.rb +405 -0
- data/test/plugins/pagination_helper.rb +135 -0
- data/test/test_associations.rb +178 -0
- data/test/test_attribute_methods.rb +22 -0
- data/test/test_attributes.rb +80 -0
- data/test/test_clone.rb +34 -0
- data/test/test_composite_arrays.rb +32 -0
- data/test/test_create.rb +68 -0
- data/test/test_delete.rb +83 -0
- data/test/test_exists.rb +25 -0
- data/test/test_find.rb +73 -0
- data/test/test_ids.rb +90 -0
- data/test/test_miscellaneous.rb +39 -0
- data/test/test_pagination.rb +38 -0
- data/test/test_polymorphic.rb +32 -0
- data/test/test_santiago.rb +27 -0
- data/test/test_suite.rb +19 -0
- data/test/test_tutorial_example.rb +26 -0
- data/test/test_update.rb +40 -0
- data/test/test_validations.rb +11 -0
- data/website/index.html +195 -0
- data/website/index.txt +159 -0
- data/website/javascripts/rounded_corners_lite.inc.js +285 -0
- data/website/stylesheets/screen.css +126 -0
- data/website/template.js +3 -0
- data/website/template.rhtml +53 -0
- data/website/version-raw.js +3 -0
- data/website/version-raw.txt +2 -0
- data/website/version.js +4 -0
- data/website/version.txt +3 -0
- metadata +339 -0
data/loader.rb
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Load local config files in /local
|
|
2
|
+
begin
|
|
3
|
+
local_file_supported = Dir[File.join(PROJECT_ROOT, 'local/*.sample')].map { |path| File.basename(path).sub(".sample","") }
|
|
4
|
+
local_file_supported.each do |file|
|
|
5
|
+
require "local/#{file}"
|
|
6
|
+
end
|
|
7
|
+
rescue LoadError
|
|
8
|
+
puts <<-EOS
|
|
9
|
+
This Gem supports local developer extensions in local/ folder.
|
|
10
|
+
Supported files:
|
|
11
|
+
#{local_file_supported.map { |f| "local/#{f}"}.join(', ')}
|
|
12
|
+
|
|
13
|
+
Setup default sample files:
|
|
14
|
+
rake local:setup
|
|
15
|
+
|
|
16
|
+
Current warning: #{$!}
|
|
17
|
+
|
|
18
|
+
EOS
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
# Now load Rake tasks from /tasks
|
|
23
|
+
rakefiles = Dir[File.join(File.dirname(__FILE__), "tasks/**/*.rake")]
|
|
24
|
+
rakefiles.each { |rakefile| load File.expand_path(rakefile) }
|
data/scripts/console.rb
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
#
|
|
4
|
+
# if run as script, load the file as library while starting irb
|
|
5
|
+
#
|
|
6
|
+
if __FILE__ == $0
|
|
7
|
+
irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
|
|
8
|
+
ENV['ADAPTER'] = ARGV[0]
|
|
9
|
+
exec "#{irb} -f -r #{$0} --simple-prompt"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
#
|
|
13
|
+
# check if the given adapter is supported (default: mysql)
|
|
14
|
+
#
|
|
15
|
+
adapters = %w[mysql sqlite oracle oracle_enhanced postgresql ibm_db]
|
|
16
|
+
adapter = ENV['ADAPTER'] || 'mysql'
|
|
17
|
+
unless adapters.include? adapter
|
|
18
|
+
puts "Usage: #{__FILE__} <adapter>"
|
|
19
|
+
puts ''
|
|
20
|
+
puts 'Adapters: '
|
|
21
|
+
puts adapters.map{ |adapter| " #{adapter}" }.join("\n")
|
|
22
|
+
exit 1
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
#
|
|
26
|
+
# load all necessary libraries
|
|
27
|
+
#
|
|
28
|
+
require 'rubygems'
|
|
29
|
+
require 'local/database_connections'
|
|
30
|
+
|
|
31
|
+
$LOAD_PATH.unshift 'lib'
|
|
32
|
+
|
|
33
|
+
begin
|
|
34
|
+
require 'local/paths'
|
|
35
|
+
$LOAD_PATH.unshift "#{ENV['EDGE_RAILS_DIR']}/activerecord/lib" if ENV['EDGE_RAILS_DIR']
|
|
36
|
+
$LOAD_PATH.unshift "#{ENV['EDGE_RAILS_DIR']}/activesupport/lib" if ENV['EDGE_RAILS_DIR']
|
|
37
|
+
rescue
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
require 'active_support'
|
|
41
|
+
require 'active_record'
|
|
42
|
+
|
|
43
|
+
require "test/connections/native_#{adapter}/connection"
|
|
44
|
+
require 'composite_primary_keys'
|
|
45
|
+
|
|
46
|
+
PROJECT_ROOT = File.join(File.dirname(__FILE__), '..')
|
|
47
|
+
Dir[File.join(PROJECT_ROOT,'test/fixtures/*.rb')].each { |model| require model }
|
|
48
|
+
|
data/scripts/txt2html
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'rubygems'
|
|
4
|
+
require 'redcloth'
|
|
5
|
+
require 'syntax/convertors/html'
|
|
6
|
+
require 'erb'
|
|
7
|
+
require File.dirname(__FILE__) + '/../lib/composite_primary_keys/version.rb'
|
|
8
|
+
|
|
9
|
+
version = CompositePrimaryKeys::VERSION::STRING
|
|
10
|
+
download = 'http://rubyforge.org/projects/compositekeys'
|
|
11
|
+
|
|
12
|
+
class Fixnum
|
|
13
|
+
def ordinal
|
|
14
|
+
# teens
|
|
15
|
+
return 'th' if (10..19).include?(self % 100)
|
|
16
|
+
# others
|
|
17
|
+
case self % 10
|
|
18
|
+
when 1: return 'st'
|
|
19
|
+
when 2: return 'nd'
|
|
20
|
+
when 3: return 'rd'
|
|
21
|
+
else return 'th'
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
class Time
|
|
27
|
+
def pretty
|
|
28
|
+
return "#{mday}#{mday.ordinal} #{strftime('%B')} #{year}"
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def convert_syntax(syntax, source)
|
|
33
|
+
return Syntax::Convertors::HTML.for_syntax(syntax).convert(source).gsub(%r!^<pre>|</pre>$!,'')
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
if ARGV.length >= 1
|
|
37
|
+
src, template = ARGV
|
|
38
|
+
template ||= File.dirname(__FILE__) + '/../website/template.rhtml'
|
|
39
|
+
|
|
40
|
+
else
|
|
41
|
+
puts("Usage: #{File.split($0).last} source.txt [template.rhtml] > output.html")
|
|
42
|
+
exit!
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
template = ERB.new(File.open(template).read)
|
|
46
|
+
|
|
47
|
+
title = nil
|
|
48
|
+
body = nil
|
|
49
|
+
File.open(src) do |fsrc|
|
|
50
|
+
title_text = fsrc.readline
|
|
51
|
+
body_text = fsrc.read
|
|
52
|
+
syntax_items = []
|
|
53
|
+
body_text.gsub!(%r!<(pre|code)[^>]*?syntax=['"]([^'"]+)[^>]*>(.*?)</\1>!m){
|
|
54
|
+
ident = syntax_items.length
|
|
55
|
+
element, syntax, source = $1, $2, $3
|
|
56
|
+
syntax_items << "<#{element} class=\"syntax\">#{convert_syntax(syntax, source)}</#{element}>"
|
|
57
|
+
"syntax-temp-#{ident}"
|
|
58
|
+
}
|
|
59
|
+
title = RedCloth.new(title_text).to_html.gsub(%r!<.*?>!,'').strip
|
|
60
|
+
body = RedCloth.new(body_text).to_html
|
|
61
|
+
body.gsub!(%r!(?:<pre><code>)?syntax-temp-(\d+)(?:</code></pre>)?!){ syntax_items[$1.to_i] }
|
|
62
|
+
end
|
|
63
|
+
stat = File.stat(src)
|
|
64
|
+
created = stat.ctime
|
|
65
|
+
modified = stat.mtime
|
|
66
|
+
|
|
67
|
+
$stdout << template.result(binding)
|
data/scripts/txt2js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'rubygems'
|
|
4
|
+
require 'redcloth'
|
|
5
|
+
require 'syntax/convertors/html'
|
|
6
|
+
require 'erb'
|
|
7
|
+
require 'active_support'
|
|
8
|
+
require File.dirname(__FILE__) + '/../lib/composite_primary_keys/version.rb'
|
|
9
|
+
|
|
10
|
+
version = CompositePrimaryKeys::VERSION::STRING
|
|
11
|
+
download = 'http://rubyforge.org/projects/compositekeys'
|
|
12
|
+
|
|
13
|
+
class Fixnum
|
|
14
|
+
def ordinal
|
|
15
|
+
# teens
|
|
16
|
+
return 'th' if (10..19).include?(self % 100)
|
|
17
|
+
# others
|
|
18
|
+
case self % 10
|
|
19
|
+
when 1: return 'st'
|
|
20
|
+
when 2: return 'nd'
|
|
21
|
+
when 3: return 'rd'
|
|
22
|
+
else return 'th'
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
class Time
|
|
28
|
+
def pretty
|
|
29
|
+
return "#{mday}#{mday.ordinal} #{strftime('%B')} #{year}"
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def convert_syntax(syntax, source)
|
|
34
|
+
return Syntax::Convertors::HTML.for_syntax(syntax).convert(source).gsub(%r!^<pre>|</pre>$!,'')
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
if ARGV.length >= 1
|
|
38
|
+
src, template = ARGV
|
|
39
|
+
template ||= File.dirname(__FILE__) + '/../website/template.js'
|
|
40
|
+
else
|
|
41
|
+
puts("Usage: #{File.split($0).last} source.txt [template.js] > output.html")
|
|
42
|
+
exit!
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
template = ERB.new(File.open(template).read)
|
|
46
|
+
|
|
47
|
+
title = nil
|
|
48
|
+
body = nil
|
|
49
|
+
File.open(src) do |fsrc|
|
|
50
|
+
title_text = fsrc.readline
|
|
51
|
+
body_text = fsrc.read
|
|
52
|
+
title = RedCloth.new(title_text).to_html.gsub(%r!<.*?>!,'').strip
|
|
53
|
+
body = RedCloth.new(body_text)
|
|
54
|
+
end
|
|
55
|
+
stat = File.stat(src)
|
|
56
|
+
created = stat.ctime
|
|
57
|
+
modified = stat.mtime
|
|
58
|
+
|
|
59
|
+
$stdout << template.result(binding)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
namespace :ar do
|
|
2
|
+
desc 'Pre-load edge rails ActiveRecord'
|
|
3
|
+
task :edge do
|
|
4
|
+
unless path = ENV['EDGE_RAILS_DIR'] || ENV['EDGE_RAILS']
|
|
5
|
+
puts <<-EOS
|
|
6
|
+
|
|
7
|
+
Need to define env var EDGE_RAILS_DIR or EDGE_RAILS- root of edge rails on your machine.
|
|
8
|
+
i) Get copy of Edge Rails - http://dev.rubyonrails.org
|
|
9
|
+
ii) Set EDGE_RAILS_DIR to this folder in local/paths.rb - see local/paths.rb.sample for example
|
|
10
|
+
or
|
|
11
|
+
a) Set folder from environment or command line (rake ar:edge EDGE_RAILS_DIR=/path/to/rails)
|
|
12
|
+
|
|
13
|
+
EOS
|
|
14
|
+
exit
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
ENV['AR_LOAD_PATH'] = File.join(path, "activerecord/lib")
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
desc 'Pre-load ActiveRecord using VERSION=X.Y.Z, instead of latest'
|
|
21
|
+
task :set do
|
|
22
|
+
unless version = ENV['VERSION']
|
|
23
|
+
puts <<-EOS
|
|
24
|
+
Usage: rake ar:get_version VERSION=1.15.3
|
|
25
|
+
Specify the version number with VERSION=X.Y.Z; and make sure you have that activerecord gem version installed.
|
|
26
|
+
|
|
27
|
+
EOS
|
|
28
|
+
end
|
|
29
|
+
version = nil if version == "" || version == []
|
|
30
|
+
begin
|
|
31
|
+
version ? gem('activerecord', version) : gem('activerecord')
|
|
32
|
+
require 'active_record'
|
|
33
|
+
ENV['AR_LOAD_PATH'] = $:.reverse.find { |path| /activerecord/ =~ path }
|
|
34
|
+
rescue LoadError
|
|
35
|
+
puts <<-EOS
|
|
36
|
+
Missing: Cannot find activerecord #{version} installed.
|
|
37
|
+
Install: gem install activerecord -v #{version}
|
|
38
|
+
|
|
39
|
+
EOS
|
|
40
|
+
exit
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
require 'active_record'
|
|
2
|
+
|
|
3
|
+
# UNTESTED - firebird sqlserver sqlserver_odbc db2 sybase openbase
|
|
4
|
+
for adapter in %w( mysql sqlite oracle oracle_enhanced postgresql ibm_db )
|
|
5
|
+
Rake::TestTask.new("test_#{adapter}") { |t|
|
|
6
|
+
t.libs << "test" << "test/connections/native_#{adapter}"
|
|
7
|
+
t.pattern = "test/test_*.rb"
|
|
8
|
+
t.verbose = true
|
|
9
|
+
}
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
SCHEMA_PATH = File.join(PROJECT_ROOT, *%w(test fixtures db_definitions))
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
namespace :mysql do
|
|
2
|
+
desc 'Build the MySQL test databases'
|
|
3
|
+
task :build_databases => :load_connection do
|
|
4
|
+
puts File.join(SCHEMA_PATH, 'mysql.sql')
|
|
5
|
+
options_str = ENV['cpk_adapter_options_str']
|
|
6
|
+
# creates something like "-u#{username} -p#{password} -S#{socket}"
|
|
7
|
+
sh %{ mysqladmin #{options_str} create "#{GEM_NAME}_unittest" }
|
|
8
|
+
sh %{ mysql #{options_str} "#{GEM_NAME}_unittest" < #{File.join(SCHEMA_PATH, 'mysql.sql')} }
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
desc 'Drop the MySQL test databases'
|
|
12
|
+
task :drop_databases => :load_connection do
|
|
13
|
+
options_str = ENV['cpk_adapter_options_str']
|
|
14
|
+
sh %{ mysqladmin #{options_str} -f drop "#{GEM_NAME}_unittest" }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
desc 'Rebuild the MySQL test databases'
|
|
18
|
+
task :rebuild_databases => [:drop_databases, :build_databases]
|
|
19
|
+
|
|
20
|
+
task :load_connection do
|
|
21
|
+
require File.join(PROJECT_ROOT, %w[lib adapter_helper mysql])
|
|
22
|
+
spec = AdapterHelper::MySQL.load_connection_from_env
|
|
23
|
+
options = {}
|
|
24
|
+
options['u'] = spec[:username] if spec[:username]
|
|
25
|
+
options['p'] = spec[:password] if spec[:password]
|
|
26
|
+
options['S'] = spec[:sock] if spec[:sock]
|
|
27
|
+
options_str = options.map { |key, value| "-#{key}#{value}" }.join(" ")
|
|
28
|
+
ENV['cpk_adapter_options_str'] = options_str
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
namespace :oracle do
|
|
2
|
+
desc 'Build the Oracle test databases'
|
|
3
|
+
task :build_databases => :load_connection do
|
|
4
|
+
puts File.join(SCHEMA_PATH, 'oracle.sql')
|
|
5
|
+
options_str = ENV['cpk_adapter_options_str']
|
|
6
|
+
sh %( sqlplus #{options_str} < #{File.join(SCHEMA_PATH, 'oracle.sql')} )
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
desc 'Drop the Oracle test databases'
|
|
10
|
+
task :drop_databases => :load_connection do
|
|
11
|
+
puts File.join(SCHEMA_PATH, 'oracle.drop.sql')
|
|
12
|
+
options_str = ENV['cpk_adapter_options_str']
|
|
13
|
+
sh %( sqlplus #{options_str} < #{File.join(SCHEMA_PATH, 'oracle.drop.sql')} )
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
desc 'Rebuild the Oracle test databases'
|
|
17
|
+
task :rebuild_databases => [:drop_databases, :build_databases]
|
|
18
|
+
|
|
19
|
+
task :load_connection do
|
|
20
|
+
require File.join(PROJECT_ROOT, %w[lib adapter_helper oracle])
|
|
21
|
+
spec = AdapterHelper::Oracle.load_connection_from_env
|
|
22
|
+
ENV['cpk_adapter_options_str'] = "#{spec[:username]}/#{spec[:password]}@#{spec[:host]}"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
namespace :postgresql do
|
|
2
|
+
desc 'Build the PostgreSQL test databases'
|
|
3
|
+
task :build_databases => :load_connection do
|
|
4
|
+
sh %{ createdb #{ENV['cpk_adapter_options_str']} "#{GEM_NAME}_unittest" }
|
|
5
|
+
sh %{ psql #{ENV['cpk_adapter_options_str']} "#{GEM_NAME}_unittest" -f #{File.join(SCHEMA_PATH, 'postgresql.sql')} }
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
desc 'Drop the PostgreSQL test databases'
|
|
9
|
+
task :drop_databases => :load_connection do
|
|
10
|
+
sh %{ dropdb "#{GEM_NAME}_unittest" }
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
desc 'Rebuild the PostgreSQL test databases'
|
|
14
|
+
task :rebuild_databases => [:drop_databases, :build_databases]
|
|
15
|
+
|
|
16
|
+
task :load_connection do
|
|
17
|
+
require File.join(PROJECT_ROOT, %w[lib adapter_helper postgresql])
|
|
18
|
+
spec = AdapterHelper::Postgresql.load_connection_from_env
|
|
19
|
+
options = {}
|
|
20
|
+
options['U'] = spec[:username] if spec[:username]
|
|
21
|
+
options['p'] = spec[:password] if spec[:password]
|
|
22
|
+
options_str = options.map { |key, value| "-#{key} #{value}" }.join(" ")
|
|
23
|
+
ENV['cpk_adapter_options_str'] = options_str
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
namespace :sqlite3 do
|
|
2
|
+
desc 'Build the sqlite test databases'
|
|
3
|
+
task :build_databases => :load_connection do
|
|
4
|
+
file = File.join(SCHEMA_PATH, 'sqlite.sql')
|
|
5
|
+
dbfile = File.join(PROJECT_ROOT, ENV['cpk_adapter_options_str'])
|
|
6
|
+
cmd = "mkdir -p #{File.dirname(dbfile)}"
|
|
7
|
+
puts cmd
|
|
8
|
+
sh %{ #{cmd} }
|
|
9
|
+
cmd = "sqlite3 #{dbfile} < #{file}"
|
|
10
|
+
puts cmd
|
|
11
|
+
sh %{ #{cmd} }
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
desc 'Drop the sqlite test databases'
|
|
15
|
+
task :drop_databases => :load_connection do
|
|
16
|
+
dbfile = ENV['cpk_adapter_options_str']
|
|
17
|
+
sh %{ rm -f #{dbfile} }
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
desc 'Rebuild the sqlite test databases'
|
|
21
|
+
task :rebuild_databases => [:drop_databases, :build_databases]
|
|
22
|
+
|
|
23
|
+
task :load_connection do
|
|
24
|
+
require File.join(PROJECT_ROOT, %w[lib adapter_helper sqlite3])
|
|
25
|
+
spec = AdapterHelper::Sqlite3.load_connection_from_env
|
|
26
|
+
ENV['cpk_adapter_options_str'] = spec[:dbfile]
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
desc 'Release the website and new gem version'
|
|
2
|
+
task :deploy => [:check_version, :website, :release] do
|
|
3
|
+
puts "Remember to create SVN tag:"
|
|
4
|
+
puts "svn copy svn+ssh://#{RUBYFORGE_USERNAME}@rubyforge.org/var/svn/#{PATH}/trunk " +
|
|
5
|
+
"svn+ssh://#{RUBYFORGE_USERNAME}@rubyforge.org/var/svn/#{PATH}/tags/REL-#{VERS} "
|
|
6
|
+
puts "Suggested comment:"
|
|
7
|
+
puts "Tagging release #{CHANGES}"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
desc 'Runs tasks website_generate and install_gem as a local deployment of the gem'
|
|
11
|
+
task :local_deploy => [:website_generate, :install_gem]
|
|
12
|
+
|
|
13
|
+
task :check_version do
|
|
14
|
+
unless ENV['VERSION']
|
|
15
|
+
puts 'Must pass a VERSION=x.y.z release version'
|
|
16
|
+
exit
|
|
17
|
+
end
|
|
18
|
+
unless ENV['VERSION'] == VERS
|
|
19
|
+
puts "Please update your version.rb to match the release version, currently #{VERS}"
|
|
20
|
+
exit
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
namespace :local do
|
|
2
|
+
desc 'Copies over the same local files ready for editing'
|
|
3
|
+
task :setup do
|
|
4
|
+
sample_files = Dir[File.join(PROJECT_ROOT, "local/*.rb.sample")]
|
|
5
|
+
sample_files.each do |sample_file|
|
|
6
|
+
file = sample_file.sub(".sample","")
|
|
7
|
+
unless File.exists?(file)
|
|
8
|
+
puts "Copying #{sample_file} -> #{file}"
|
|
9
|
+
sh %{ cp #{sample_file} #{file} }
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|