composite_primary_keys 10.0.3 → 10.0.4
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 +4 -4
- data/History.rdoc +6 -0
- data/lib/composite_primary_keys.rb +0 -2
- data/lib/composite_primary_keys/associations/preloader/association.rb +2 -0
- data/lib/composite_primary_keys/attribute_methods/primary_key.rb +1 -1
- data/lib/composite_primary_keys/connection_adapters/abstract_adapter.rb +10 -10
- data/lib/composite_primary_keys/locking/optimistic.rb +21 -31
- data/lib/composite_primary_keys/relation.rb +14 -3
- data/lib/composite_primary_keys/version.rb +1 -1
- data/scripts/console.rb +48 -48
- data/scripts/txt2html +76 -76
- data/scripts/txt2js +65 -65
- data/tasks/website.rake +18 -18
- data/test/README_tests.rdoc +56 -56
- data/test/connections/databases.yml +40 -30
- data/test/db_test.rb +52 -52
- data/test/fixtures/articles.yml +6 -6
- data/test/fixtures/capitol.rb +3 -3
- data/test/fixtures/capitols.yml +16 -16
- data/test/fixtures/comments.yml +15 -15
- data/test/fixtures/department.rb +5 -5
- data/test/fixtures/departments.yml +15 -15
- data/test/fixtures/dorms.yml +4 -4
- data/test/fixtures/group.rb +2 -2
- data/test/fixtures/groups.yml +6 -6
- data/test/fixtures/hack.rb +4 -4
- data/test/fixtures/hacks.yml +2 -2
- data/test/fixtures/membership_status.rb +2 -2
- data/test/fixtures/product.rb +9 -9
- data/test/fixtures/product_tariff.rb +5 -5
- data/test/fixtures/products.yml +11 -11
- data/test/fixtures/reading.rb +4 -4
- data/test/fixtures/readings.yml +10 -10
- data/test/fixtures/reference_code_using_composite_key_alias.rb +8 -8
- data/test/fixtures/reference_code_using_simple_key_alias.rb +8 -8
- data/test/fixtures/reference_codes.yml +28 -28
- data/test/fixtures/reference_types.yml +9 -9
- data/test/fixtures/restaurant.rb +9 -9
- data/test/fixtures/restaurants.yml +14 -14
- data/test/fixtures/restaurants_suburbs.yml +10 -10
- data/test/fixtures/room.rb +11 -11
- data/test/fixtures/room_assignment.rb +13 -13
- data/test/fixtures/room_assignments.yml +24 -24
- data/test/fixtures/room_attribute.rb +2 -2
- data/test/fixtures/room_attribute_assignment.rb +4 -4
- data/test/fixtures/room_attribute_assignments.yml +4 -4
- data/test/fixtures/room_attributes.yml +2 -2
- data/test/fixtures/rooms.yml +12 -12
- data/test/fixtures/seat.rb +5 -5
- data/test/fixtures/seats.yml +8 -8
- data/test/fixtures/street.rb +2 -2
- data/test/fixtures/streets.yml +16 -16
- data/test/fixtures/student.rb +3 -3
- data/test/fixtures/students.yml +15 -15
- data/test/fixtures/suburbs.yml +14 -14
- data/test/plugins/pagination.rb +405 -405
- data/test/plugins/pagination_helper.rb +135 -135
- data/test/setup.rb +50 -50
- data/test/test_aliases.rb +18 -18
- data/test/test_composite_arrays.rb +24 -24
- data/test/test_counter_cache.rb +30 -30
- data/test/test_dup.rb +37 -37
- data/test/test_exists.rb +39 -39
- data/test/test_miscellaneous.rb +32 -32
- data/test/test_pagination.rb +35 -35
- data/test/test_preload.rb +7 -0
- data/test/test_validations.rb +13 -13
- metadata +5 -6
- data/lib/composite_primary_keys/attribute_set/builder.rb +0 -22
data/scripts/txt2js
CHANGED
@@ -1,65 +1,65 @@
|
|
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
|
-
|
9
|
-
version_path = File.join(File.dirname(__FILE__), '..', 'lib', 'composite_primary_keys', 'version.rb')
|
10
|
-
require File.expand_path(version_path)
|
11
|
-
|
12
|
-
version = CompositePrimaryKeys::VERSION::STRING
|
13
|
-
download = 'http://rubygems.org/gems/composite_primary_keys'
|
14
|
-
|
15
|
-
class Fixnum
|
16
|
-
def ordinal
|
17
|
-
# teens
|
18
|
-
return 'th' if (10..19).include?(self % 100)
|
19
|
-
# others
|
20
|
-
case self % 10
|
21
|
-
when 1
|
22
|
-
return 'st'
|
23
|
-
when 2
|
24
|
-
return 'nd'
|
25
|
-
when 3
|
26
|
-
return 'rd'
|
27
|
-
else
|
28
|
-
return 'th'
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
class Time
|
34
|
-
def pretty
|
35
|
-
return "#{mday}#{mday.ordinal} #{strftime('%B')} #{year}"
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def convert_syntax(syntax, source)
|
40
|
-
return Syntax::Convertors::HTML.for_syntax(syntax).convert(source).gsub(%r!^<pre>|</pre>$!,'')
|
41
|
-
end
|
42
|
-
|
43
|
-
if ARGV.length >= 1
|
44
|
-
src, template = ARGV
|
45
|
-
template ||= File.dirname(__FILE__) + '/../website/template.js'
|
46
|
-
else
|
47
|
-
puts("Usage: #{File.split($0).last} source.txt [template.js] > output.html")
|
48
|
-
exit!
|
49
|
-
end
|
50
|
-
|
51
|
-
template = ERB.new(File.open(template).read)
|
52
|
-
|
53
|
-
title = nil
|
54
|
-
body = nil
|
55
|
-
File.open(src) do |fsrc|
|
56
|
-
title_text = fsrc.readline
|
57
|
-
body_text = fsrc.read
|
58
|
-
title = RedCloth.new(title_text).to_html.gsub(%r!<.*?>!,'').strip
|
59
|
-
body = RedCloth.new(body_text)
|
60
|
-
end
|
61
|
-
stat = File.stat(src)
|
62
|
-
created = stat.ctime
|
63
|
-
modified = stat.mtime
|
64
|
-
|
65
|
-
$stdout << template.result(binding)
|
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
|
+
|
9
|
+
version_path = File.join(File.dirname(__FILE__), '..', 'lib', 'composite_primary_keys', 'version.rb')
|
10
|
+
require File.expand_path(version_path)
|
11
|
+
|
12
|
+
version = CompositePrimaryKeys::VERSION::STRING
|
13
|
+
download = 'http://rubygems.org/gems/composite_primary_keys'
|
14
|
+
|
15
|
+
class Fixnum
|
16
|
+
def ordinal
|
17
|
+
# teens
|
18
|
+
return 'th' if (10..19).include?(self % 100)
|
19
|
+
# others
|
20
|
+
case self % 10
|
21
|
+
when 1
|
22
|
+
return 'st'
|
23
|
+
when 2
|
24
|
+
return 'nd'
|
25
|
+
when 3
|
26
|
+
return 'rd'
|
27
|
+
else
|
28
|
+
return 'th'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class Time
|
34
|
+
def pretty
|
35
|
+
return "#{mday}#{mday.ordinal} #{strftime('%B')} #{year}"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def convert_syntax(syntax, source)
|
40
|
+
return Syntax::Convertors::HTML.for_syntax(syntax).convert(source).gsub(%r!^<pre>|</pre>$!,'')
|
41
|
+
end
|
42
|
+
|
43
|
+
if ARGV.length >= 1
|
44
|
+
src, template = ARGV
|
45
|
+
template ||= File.dirname(__FILE__) + '/../website/template.js'
|
46
|
+
else
|
47
|
+
puts("Usage: #{File.split($0).last} source.txt [template.js] > output.html")
|
48
|
+
exit!
|
49
|
+
end
|
50
|
+
|
51
|
+
template = ERB.new(File.open(template).read)
|
52
|
+
|
53
|
+
title = nil
|
54
|
+
body = nil
|
55
|
+
File.open(src) do |fsrc|
|
56
|
+
title_text = fsrc.readline
|
57
|
+
body_text = fsrc.read
|
58
|
+
title = RedCloth.new(title_text).to_html.gsub(%r!<.*?>!,'').strip
|
59
|
+
body = RedCloth.new(body_text)
|
60
|
+
end
|
61
|
+
stat = File.stat(src)
|
62
|
+
created = stat.ctime
|
63
|
+
modified = stat.mtime
|
64
|
+
|
65
|
+
$stdout << template.result(binding)
|
data/tasks/website.rake
CHANGED
@@ -1,18 +1,18 @@
|
|
1
|
-
desc 'Generate website files'
|
2
|
-
task :website_generate do
|
3
|
-
sh %{ ruby scripts/txt2html website/index.txt > website/index.html }
|
4
|
-
sh %{ ruby scripts/txt2js website/version.txt > website/version.js }
|
5
|
-
sh %{ ruby scripts/txt2js website/version-raw.txt > website/version-raw.js }
|
6
|
-
end
|
7
|
-
|
8
|
-
desc 'Upload website files to rubyforge'
|
9
|
-
task :website_upload do
|
10
|
-
config = YAML.load(File.read(File.expand_path("~/.rubyforge/user-config.yml")))
|
11
|
-
host = "#{config["username"]}@rubyforge.org"
|
12
|
-
remote_dir = "/var/www/gforge-projects/compositekeys/"
|
13
|
-
local_dir = 'website'
|
14
|
-
sh %{scp -r #{local_dir}/* #{host}:#{remote_dir}}
|
15
|
-
end
|
16
|
-
|
17
|
-
desc 'Generate and upload website files'
|
18
|
-
task :website => [:website_generate, :website_upload]
|
1
|
+
desc 'Generate website files'
|
2
|
+
task :website_generate do
|
3
|
+
sh %{ ruby scripts/txt2html website/index.txt > website/index.html }
|
4
|
+
sh %{ ruby scripts/txt2js website/version.txt > website/version.js }
|
5
|
+
sh %{ ruby scripts/txt2js website/version-raw.txt > website/version-raw.js }
|
6
|
+
end
|
7
|
+
|
8
|
+
desc 'Upload website files to rubyforge'
|
9
|
+
task :website_upload do
|
10
|
+
config = YAML.load(File.read(File.expand_path("~/.rubyforge/user-config.yml")))
|
11
|
+
host = "#{config["username"]}@rubyforge.org"
|
12
|
+
remote_dir = "/var/www/gforge-projects/compositekeys/"
|
13
|
+
local_dir = 'website'
|
14
|
+
sh %{scp -r #{local_dir}/* #{host}:#{remote_dir}}
|
15
|
+
end
|
16
|
+
|
17
|
+
desc 'Generate and upload website files'
|
18
|
+
task :website => [:website_generate, :website_upload]
|
data/test/README_tests.rdoc
CHANGED
@@ -1,56 +1,56 @@
|
|
1
|
-
= Composite Primary Keys - Testing Readme
|
2
|
-
|
3
|
-
== Testing an adapter
|
4
|
-
|
5
|
-
There are tests available for the following adapters:
|
6
|
-
|
7
|
-
* ibmdb
|
8
|
-
* mysql
|
9
|
-
* oracle
|
10
|
-
* oracle_enhanced
|
11
|
-
* postgresql
|
12
|
-
* sqlite3
|
13
|
-
|
14
|
-
To run the tests for one of the adapters follow these steps (using mysql in the example):
|
15
|
-
|
16
|
-
* You will need the following gems:
|
17
|
-
- rake
|
18
|
-
- activerecord (3.1.0.rc5 or later)
|
19
|
-
- mysql (or the adapter of your choice)
|
20
|
-
|
21
|
-
* Put your database connection settings in test/connections/databases.yml.
|
22
|
-
Look at databases.example.yml for examples.
|
23
|
-
|
24
|
-
mysql:
|
25
|
-
adapter: mysql
|
26
|
-
username: root
|
27
|
-
database: composite_primary_keys_unittest
|
28
|
-
|
29
|
-
* rake -T mysql
|
30
|
-
|
31
|
-
rake mysql:build_database # Build the MySQL test databases
|
32
|
-
rake mysql:drop_database # Drop the MySQL test databases
|
33
|
-
rake mysql:rebuild_database # Rebuild the MySQL test databases
|
34
|
-
rake mysql:test # Run tests using the mysql adapter
|
35
|
-
|
36
|
-
* rake mysql:build_database
|
37
|
-
* rake mysql:test
|
38
|
-
|
39
|
-
== Running tests individually
|
40
|
-
|
41
|
-
You can specify which test you'd like to run on the command line:
|
42
|
-
|
43
|
-
* rake mysql:test TEST=test/test_equal.rb
|
44
|
-
|
45
|
-
If you want to run closer to the metal you can cd into the test/
|
46
|
-
directory and run the tests like so:
|
47
|
-
|
48
|
-
* ADAPTER=mysql ruby test_equal.rb
|
49
|
-
|
50
|
-
== Logging
|
51
|
-
|
52
|
-
By default, ActiveRecord's log messages are sent to standard out when
|
53
|
-
running the tests. If you would prefer to send them to a file, specify
|
54
|
-
it as the environment variable CPK_LOGFILE:
|
55
|
-
|
56
|
-
* CPK_LOGFILE=cpk_test.log rake mysql:test
|
1
|
+
= Composite Primary Keys - Testing Readme
|
2
|
+
|
3
|
+
== Testing an adapter
|
4
|
+
|
5
|
+
There are tests available for the following adapters:
|
6
|
+
|
7
|
+
* ibmdb
|
8
|
+
* mysql
|
9
|
+
* oracle
|
10
|
+
* oracle_enhanced
|
11
|
+
* postgresql
|
12
|
+
* sqlite3
|
13
|
+
|
14
|
+
To run the tests for one of the adapters follow these steps (using mysql in the example):
|
15
|
+
|
16
|
+
* You will need the following gems:
|
17
|
+
- rake
|
18
|
+
- activerecord (3.1.0.rc5 or later)
|
19
|
+
- mysql (or the adapter of your choice)
|
20
|
+
|
21
|
+
* Put your database connection settings in test/connections/databases.yml.
|
22
|
+
Look at databases.example.yml for examples.
|
23
|
+
|
24
|
+
mysql:
|
25
|
+
adapter: mysql
|
26
|
+
username: root
|
27
|
+
database: composite_primary_keys_unittest
|
28
|
+
|
29
|
+
* rake -T mysql
|
30
|
+
|
31
|
+
rake mysql:build_database # Build the MySQL test databases
|
32
|
+
rake mysql:drop_database # Drop the MySQL test databases
|
33
|
+
rake mysql:rebuild_database # Rebuild the MySQL test databases
|
34
|
+
rake mysql:test # Run tests using the mysql adapter
|
35
|
+
|
36
|
+
* rake mysql:build_database
|
37
|
+
* rake mysql:test
|
38
|
+
|
39
|
+
== Running tests individually
|
40
|
+
|
41
|
+
You can specify which test you'd like to run on the command line:
|
42
|
+
|
43
|
+
* rake mysql:test TEST=test/test_equal.rb
|
44
|
+
|
45
|
+
If you want to run closer to the metal you can cd into the test/
|
46
|
+
directory and run the tests like so:
|
47
|
+
|
48
|
+
* ADAPTER=mysql ruby test_equal.rb
|
49
|
+
|
50
|
+
== Logging
|
51
|
+
|
52
|
+
By default, ActiveRecord's log messages are sent to standard out when
|
53
|
+
running the tests. If you would prefer to send them to a file, specify
|
54
|
+
it as the environment variable CPK_LOGFILE:
|
55
|
+
|
56
|
+
* CPK_LOGFILE=cpk_test.log rake mysql:test
|
@@ -1,30 +1,40 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
adapter:
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
1
|
+
# To run tests:
|
2
|
+
# 1. Copy this file to test/connections/databases.yml.
|
3
|
+
# 2. Update to match the databases you want to test against.
|
4
|
+
|
5
|
+
ibm_db:
|
6
|
+
database: ocdpdev
|
7
|
+
username: db2inst1
|
8
|
+
password: password
|
9
|
+
host: localhost
|
10
|
+
|
11
|
+
mysql:
|
12
|
+
adapter: mysql2
|
13
|
+
username: root
|
14
|
+
password: mysql
|
15
|
+
database: composite_primary_keys_unittest
|
16
|
+
|
17
|
+
oracle:
|
18
|
+
adapter: oracle_enhanced
|
19
|
+
database: xe
|
20
|
+
username: SYSTEM
|
21
|
+
password: oracle
|
22
|
+
host: localhost
|
23
|
+
|
24
|
+
postgresql:
|
25
|
+
adapter: postgresql
|
26
|
+
database: composite_primary_keys_unittest
|
27
|
+
username: postgres
|
28
|
+
host: localhost
|
29
|
+
|
30
|
+
sqlite:
|
31
|
+
adapter: sqlite3
|
32
|
+
database: <%= File.join(project_root, 'db', 'composite_primary_keys_unittest.sqlite') %>
|
33
|
+
|
34
|
+
sqlserver:
|
35
|
+
adapter: sqlserver
|
36
|
+
username: cpk
|
37
|
+
password: cpk
|
38
|
+
database: composite_primary_keys_unittest
|
39
|
+
host: localhost
|
40
|
+
port: 1433
|
data/test/db_test.rb
CHANGED
@@ -1,53 +1,53 @@
|
|
1
|
-
# assoc_test.rb
|
2
|
-
|
3
|
-
path = File.expand_path(File.join(File.basename(__FILE__), "..", "lib", "composite_primary_keys"))
|
4
|
-
puts path
|
5
|
-
|
6
|
-
require File.join(path)
|
7
|
-
require 'active_record'
|
8
|
-
|
9
|
-
$configuration = {
|
10
|
-
:adapter => 'postgresql',
|
11
|
-
:database => 'cpk_test',
|
12
|
-
:username => 'postgres'
|
13
|
-
}
|
14
|
-
|
15
|
-
ActiveRecord::Base.establish_connection($configuration) unless ActiveRecord::Base.connected?
|
16
|
-
|
17
|
-
module GlobePG
|
18
|
-
class PGBase < ActiveRecord::Base
|
19
|
-
self.abstract_class = true
|
20
|
-
# establish_connection($configuration) unless connected?
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
module GlobePG
|
25
|
-
class TeacherToSchool < PGBase
|
26
|
-
set_table_name 'teacher_to_school'
|
27
|
-
self.primary_keys = ['teacherid', 'schoolid']
|
28
|
-
|
29
|
-
belongs_to :globe_teacher, :foreign_key => 'teacherid'
|
30
|
-
belongs_to :globe_school, :foreign_key => 'schoolid'
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
module GlobePG
|
35
|
-
class GlobeSchool < PGBase
|
36
|
-
set_table_name 'globe_school'
|
37
|
-
self.primary_key = 'schoolid'
|
38
|
-
has_many :teacher_to_schools, :foreign_key => :schoolid
|
39
|
-
has_many :globe_teachers, :through => :teacher_to_schools
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
module GlobePG
|
44
|
-
class GlobeTeacher < PGBase
|
45
|
-
set_table_name 'globe_teacher'
|
46
|
-
self.primary_key = 'teacherid'
|
47
|
-
has_many :teacher_to_schools, :foreign_key => :teacherid
|
48
|
-
has_many :globe_schools, :through => :teacher_to_schools
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
teacher = GlobePG::GlobeTeacher.find_by_teacherid('ZZGLOBEY')
|
1
|
+
# assoc_test.rb
|
2
|
+
|
3
|
+
path = File.expand_path(File.join(File.basename(__FILE__), "..", "lib", "composite_primary_keys"))
|
4
|
+
puts path
|
5
|
+
|
6
|
+
require File.join(path)
|
7
|
+
require 'active_record'
|
8
|
+
|
9
|
+
$configuration = {
|
10
|
+
:adapter => 'postgresql',
|
11
|
+
:database => 'cpk_test',
|
12
|
+
:username => 'postgres'
|
13
|
+
}
|
14
|
+
|
15
|
+
ActiveRecord::Base.establish_connection($configuration) unless ActiveRecord::Base.connected?
|
16
|
+
|
17
|
+
module GlobePG
|
18
|
+
class PGBase < ActiveRecord::Base
|
19
|
+
self.abstract_class = true
|
20
|
+
# establish_connection($configuration) unless connected?
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
module GlobePG
|
25
|
+
class TeacherToSchool < PGBase
|
26
|
+
set_table_name 'teacher_to_school'
|
27
|
+
self.primary_keys = ['teacherid', 'schoolid']
|
28
|
+
|
29
|
+
belongs_to :globe_teacher, :foreign_key => 'teacherid'
|
30
|
+
belongs_to :globe_school, :foreign_key => 'schoolid'
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
module GlobePG
|
35
|
+
class GlobeSchool < PGBase
|
36
|
+
set_table_name 'globe_school'
|
37
|
+
self.primary_key = 'schoolid'
|
38
|
+
has_many :teacher_to_schools, :foreign_key => :schoolid
|
39
|
+
has_many :globe_teachers, :through => :teacher_to_schools
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
module GlobePG
|
44
|
+
class GlobeTeacher < PGBase
|
45
|
+
set_table_name 'globe_teacher'
|
46
|
+
self.primary_key = 'teacherid'
|
47
|
+
has_many :teacher_to_schools, :foreign_key => :teacherid
|
48
|
+
has_many :globe_schools, :through => :teacher_to_schools
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
teacher = GlobePG::GlobeTeacher.find_by_teacherid('ZZGLOBEY')
|
53
53
|
p teacher.globe_schools
|