composite_primary_keys 0.7.5 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. data/Manifest.txt +75 -0
  2. data/Rakefile +83 -101
  3. data/lib/composite_primary_keys.rb +8 -0
  4. data/lib/composite_primary_keys/associations.rb +66 -18
  5. data/lib/composite_primary_keys/base.rb +169 -159
  6. data/lib/composite_primary_keys/calculations.rb +63 -0
  7. data/lib/composite_primary_keys/connection_adapters/postgresql_adapter.rb +11 -0
  8. data/lib/composite_primary_keys/version.rb +2 -2
  9. data/scripts/txt2html +4 -2
  10. data/scripts/txt2js +3 -2
  11. data/test/abstract_unit.rb +9 -2
  12. data/test/connections/native_mysql/connection.rb +5 -2
  13. data/test/connections/native_postgresql/connection.rb +15 -0
  14. data/test/connections/native_sqlite/connection.rb +10 -0
  15. data/test/fixtures/db_definitions/mysql.sql +20 -0
  16. data/test/fixtures/db_definitions/postgresql.sql +100 -0
  17. data/test/fixtures/db_definitions/sqlite.sql +84 -0
  18. data/test/fixtures/group.rb +3 -0
  19. data/test/fixtures/groups.yml +3 -0
  20. data/test/fixtures/membership.rb +7 -0
  21. data/test/fixtures/membership_status.rb +3 -0
  22. data/test/fixtures/membership_statuses.yml +8 -0
  23. data/test/fixtures/memberships.yml +6 -0
  24. data/test/{associations_test.rb → test_associations.rb} +22 -12
  25. data/test/{attributes_test.rb → test_attributes.rb} +4 -5
  26. data/test/{clone_test.rb → test_clone.rb} +2 -3
  27. data/test/{create_test.rb → test_create.rb} +2 -3
  28. data/test/{delete_test.rb → test_delete.rb} +2 -3
  29. data/test/{dummy_test.rb → test_dummy.rb} +4 -5
  30. data/test/{find_test.rb → test_find.rb} +3 -4
  31. data/test/{ids_test.rb → test_ids.rb} +4 -4
  32. data/test/{miscellaneous_test.rb → test_miscellaneous.rb} +2 -3
  33. data/test/{pagination_test.rb → test_pagination.rb} +4 -3
  34. data/test/{santiago_test.rb → test_santiago.rb} +5 -3
  35. data/test/test_tutorial_examle.rb +29 -0
  36. data/test/{update_test.rb → test_update.rb} +2 -3
  37. data/website/index.html +267 -201
  38. data/website/index.txt +74 -70
  39. data/website/stylesheets/screen.css +33 -3
  40. data/website/version-raw.js +1 -1
  41. data/website/version.js +1 -1
  42. metadata +80 -66
  43. data/scripts/http-access2-2.0.6.gem +0 -0
  44. data/scripts/rubyforge +0 -217
  45. data/scripts/rubyforge-orig +0 -217
  46. data/test/fixtures/db_definitions/mysql.drop.sql +0 -10
@@ -1,217 +0,0 @@
1
- #!/usr/bin/env ruby
2
- #
3
- # RENAME THIS to rubyorge, and change username/password below to your rubyforge details.
4
- # Set rubyforge file to Ignore on Subversion.
5
- # libs
6
- #
7
- $VERBOSE = nil
8
- require "getoptlong"
9
- require "enumerator"
10
- require "http-access2"
11
- #
12
- # config
13
- #
14
- config = {
15
- "username" => "nicwilliams", # this must be your username
16
- "password" => "UHUst0ck", # this must be your password
17
-
18
- "group_id" => 1953, # see source of http://rubyforge.org/frs/admin/qrs.php?package=&group_id=1953
19
-
20
- "package_ids" => { # configure shortcuts for your packages here
21
- "compositekeys" => 2327,
22
- },
23
-
24
- "uri" => "http://rubyforge.org",
25
- "cookie_jar" => File::join(File::expand_path("~"), ".rubyforge.cookie_jar"),
26
- }
27
-
28
- opts =
29
- GetoptLong::new(
30
- [ "--username" , "-u" , GetoptLong::REQUIRED_ARGUMENT ] ,
31
- [ "--password" , "-p" , GetoptLong::REQUIRED_ARGUMENT ] ,
32
- [ "--cookie_jar" , "-c" , GetoptLong::REQUIRED_ARGUMENT ]
33
- ).enum_for.inject({}){|h,kv| h.update Hash[*kv]}
34
-
35
- username = opts['username'] || config['username']
36
- password = opts['password'] || config['password']
37
- cookie_jar = opts["cookie_jar"] || config['cookie_jar']
38
- #
39
- # setup
40
- #
41
- mode = ARGV.shift
42
- abort "#{ $0 } [login|create_package (package_name)|add_package (package_id release_name release.ext)]" unless mode
43
-
44
- page, form, method = nil
45
- extheader = {}
46
-
47
- case mode
48
-
49
- when %r/login/
50
- page = "/account/login.php"
51
- method = "post_content"
52
-
53
- form = {
54
- "return_to" => "",
55
- "form_loginname" => username,
56
- "form_pw" => password,
57
- "login" => "Login"
58
- }
59
-
60
- when %r/create_package/
61
- page = "/frs/admin/index.php"
62
- method = "post_content"
63
-
64
- opts =
65
- GetoptLong::new(
66
- [ "--group_id" , "-g" , GetoptLong::REQUIRED_ARGUMENT ] ,
67
- [ "--is_private" , "-P" , GetoptLong::REQUIRED_ARGUMENT ]
68
- ).enum_for.inject({}){|h,kv| h.update Hash[*kv]}
69
-
70
- package_name = ARGV.shift
71
- abort "#{ $0 } package_name" unless package_name
72
-
73
- group_id = opts["group_id"] || config["group_id"]
74
- is_public = opts["is_private"] ? 0 : 1
75
-
76
- form = {
77
- "group_id" => group_id,
78
- "package_name" => package_name,
79
- "func" => "add_package",
80
- "is_public" => is_public,
81
- "submit" => "Create This Package",
82
- }
83
-
84
- when %r/add_release/
85
- page = "/frs/admin/qrs.php"
86
- method = "post_content"
87
-
88
- opts =
89
- GetoptLong::new(
90
- [ "--group_id" , "-g" , GetoptLong::REQUIRED_ARGUMENT ] ,
91
- [ "--release_date" , "-r" , GetoptLong::REQUIRED_ARGUMENT ] ,
92
- [ "--type_id" , "-t" , GetoptLong::REQUIRED_ARGUMENT ] ,
93
- [ "--processor_id" , "-P" , GetoptLong::REQUIRED_ARGUMENT ] ,
94
- [ "--release_nots" , "-n" , GetoptLong::REQUIRED_ARGUMENT ] ,
95
- [ "--release_changes" , "-a" , GetoptLong::REQUIRED_ARGUMENT ]
96
- ).enum_for.inject({}){|h,kv| h.update Hash[*kv]}
97
-
98
- package_id, release_name, userfile, ignored = ARGV
99
- abort "#{ $0 } package_name" unless
100
- package_id and release_name and userfile
101
-
102
- package_id = config["package_ids"][package_id] unless
103
- package_id =~ %r/^\d+$/
104
-
105
- group_id = opts["group_id"] || config["group_id"]
106
- release_date = opts["release_date"] || Time::now.strftime('%Y-%m-%d %H:%M')
107
-
108
- type_id = opts['type_id'] || userfile[%r|\.[^\./]+$|]
109
- type_id = {
110
- ".deb" => 1000,
111
- ".rpm" => 2000,
112
- ".zip" => 3000,
113
- ".bz2" => 3100,
114
- ".gz" => 3110,
115
- ".src.zip" => 5000,
116
- ".src.bz2" => 5010,
117
- ".src.gz" => 5020,
118
- ".src.rpm" => 5100,
119
- ".src" => 5900,
120
- ".jpg" => 8000,
121
- ".txt" => 8100,
122
- ".text" => 8100,
123
- ".htm" => 8200,
124
- ".html" => 8200,
125
- ".pdf" => 8300,
126
- ".oth" => 9999,
127
- ".ebuild" => 1300,
128
- ".exe" => 1100,
129
- ".dmg" => 1200,
130
- ".tar.gz" => 5000,
131
- ".tgz" => 5000,
132
- ".gem" => 1400,
133
- ".pgp" => 8150,
134
- ".sig" => 8150,
135
- }[type_id]
136
-
137
- processor_id = opts['processor_id'] || 'Any'
138
- processor_id = {
139
- "i386" => 1000,
140
- "IA64" => 6000,
141
- "Alpha" => 7000,
142
- "Any" => 8000,
143
- "PPC" => 2000,
144
- "MIPS" => 3000,
145
- "Sparc" => 4000,
146
- "UltraSparc" => 5000,
147
- "Other" => 9999,
148
- }[processor_id]
149
-
150
- release_notes = opts['release_notes'] || nil
151
- release_notes = open(release_notes) if release_notes
152
-
153
- release_changes = opts['release_changes'] || nil
154
- release_changes = open(release_changes) if release_changes
155
-
156
- userfile = open(userfile)
157
-
158
- preformatted = '1'
159
-
160
- form = {
161
- "group_id" => group_id,
162
- "package_id" => package_id,
163
- "release_name" => release_name,
164
- "release_date" => release_date,
165
- "type_id" => type_id,
166
- "processor_id" => processor_id,
167
- "preformatted" => preformatted,
168
- "userfile" => userfile,
169
- "submit" => "Release File"
170
- }
171
-
172
- boundary = Array::new(8){ "%2.2d" % rand(42) }.join('__')
173
- extheader['content-type'] = "multipart/form-data; boundary=___#{ boundary }___"
174
-
175
- else
176
- abort "#{ $0 } login create_package add_release"
177
-
178
- end
179
- #
180
- # http transaction
181
- #
182
- client = HTTPAccess2::Client::new ENV['HTTP_PROXY']
183
- client.debug_dev = STDERR if ENV['DEBUG']
184
-
185
- client.set_cookie_store cookie_jar
186
-
187
- # fixes http-access2 bug
188
- client.redirect_uri_callback = lambda do |res|
189
- page = res.header['location'].first
190
- page = page =~ %r/http/ ? page : "#{ config['uri'] }/#{ page }"
191
- page
192
- end
193
-
194
- response = client.send "#{ method }", "#{ config['uri'] }/#{ page }", form, extheader
195
-
196
- client.save_cookie_store
197
-
198
- # fixes http-access2 bug
199
- BEGIN {
200
- require "http-access2"
201
- module WebAgent::CookieUtils
202
- def domain_match(host, domain)
203
- case domain
204
- when /\d+\.\d+\.\d+\.\d+/
205
- return (host == domain)
206
- when '.'
207
- return true
208
- when /^\./
209
- #return tail_match?(domain, host)
210
- return tail_match?(host, domain)
211
- else
212
- return (host == domain)
213
- end
214
- end
215
- end
216
-
217
- }
@@ -1,217 +0,0 @@
1
- #!/usr/bin/env ruby
2
- #
3
- # RENAME THIS to rubyorge, and change username/password below to your rubyforge details.
4
- # Set rubyforge file to Ignore on Subversion.
5
- # libs
6
- #
7
- $VERBOSE = nil
8
- require "getoptlong"
9
- require "enumerator"
10
- require "http-access2"
11
- #
12
- # config
13
- #
14
- config = {
15
- "username" => "username", # this must be your username
16
- "password" => "password", # this must be your password
17
-
18
- "group_id" => 1953, # see source of http://rubyforge.org/frs/admin/qrs.php?package=&group_id=1953
19
-
20
- "package_ids" => { # configure shortcuts for your packages here
21
- "compositekeys" => 2327,
22
- },
23
-
24
- "uri" => "http://rubyforge.org",
25
- "cookie_jar" => File::join(File::expand_path("~"), ".rubyforge.cookie_jar"),
26
- }
27
-
28
- opts =
29
- GetoptLong::new(
30
- [ "--username" , "-u" , GetoptLong::REQUIRED_ARGUMENT ] ,
31
- [ "--password" , "-p" , GetoptLong::REQUIRED_ARGUMENT ] ,
32
- [ "--cookie_jar" , "-c" , GetoptLong::REQUIRED_ARGUMENT ]
33
- ).enum_for.inject({}){|h,kv| h.update Hash[*kv]}
34
-
35
- username = opts['username'] || config['username']
36
- password = opts['password'] || config['password']
37
- cookie_jar = opts["cookie_jar"] || config['cookie_jar']
38
- #
39
- # setup
40
- #
41
- mode = ARGV.shift
42
- abort "#{ $0 } [login|create_package (package_name)|add_package (package_id release_name release.ext)]" unless mode
43
-
44
- page, form, method = nil
45
- extheader = {}
46
-
47
- case mode
48
-
49
- when %r/login/
50
- page = "/account/login.php"
51
- method = "post_content"
52
-
53
- form = {
54
- "return_to" => "",
55
- "form_loginname" => username,
56
- "form_pw" => password,
57
- "login" => "Login"
58
- }
59
-
60
- when %r/create_package/
61
- page = "/frs/admin/index.php"
62
- method = "post_content"
63
-
64
- opts =
65
- GetoptLong::new(
66
- [ "--group_id" , "-g" , GetoptLong::REQUIRED_ARGUMENT ] ,
67
- [ "--is_private" , "-P" , GetoptLong::REQUIRED_ARGUMENT ]
68
- ).enum_for.inject({}){|h,kv| h.update Hash[*kv]}
69
-
70
- package_name = ARGV.shift
71
- abort "#{ $0 } package_name" unless package_name
72
-
73
- group_id = opts["group_id"] || config["group_id"]
74
- is_public = opts["is_private"] ? 0 : 1
75
-
76
- form = {
77
- "group_id" => group_id,
78
- "package_name" => package_name,
79
- "func" => "add_package",
80
- "is_public" => is_public,
81
- "submit" => "Create This Package",
82
- }
83
-
84
- when %r/add_release/
85
- page = "/frs/admin/qrs.php"
86
- method = "post_content"
87
-
88
- opts =
89
- GetoptLong::new(
90
- [ "--group_id" , "-g" , GetoptLong::REQUIRED_ARGUMENT ] ,
91
- [ "--release_date" , "-r" , GetoptLong::REQUIRED_ARGUMENT ] ,
92
- [ "--type_id" , "-t" , GetoptLong::REQUIRED_ARGUMENT ] ,
93
- [ "--processor_id" , "-P" , GetoptLong::REQUIRED_ARGUMENT ] ,
94
- [ "--release_nots" , "-n" , GetoptLong::REQUIRED_ARGUMENT ] ,
95
- [ "--release_changes" , "-a" , GetoptLong::REQUIRED_ARGUMENT ]
96
- ).enum_for.inject({}){|h,kv| h.update Hash[*kv]}
97
-
98
- package_id, release_name, userfile, ignored = ARGV
99
- abort "#{ $0 } package_name" unless
100
- package_id and release_name and userfile
101
-
102
- package_id = config["package_ids"][package_id] unless
103
- package_id =~ %r/^\d+$/
104
-
105
- group_id = opts["group_id"] || config["group_id"]
106
- release_date = opts["release_date"] || Time::now.strftime('%Y-%m-%d %H:%M')
107
-
108
- type_id = opts['type_id'] || userfile[%r|\.[^\./]+$|]
109
- type_id = {
110
- ".deb" => 1000,
111
- ".rpm" => 2000,
112
- ".zip" => 3000,
113
- ".bz2" => 3100,
114
- ".gz" => 3110,
115
- ".src.zip" => 5000,
116
- ".src.bz2" => 5010,
117
- ".src.gz" => 5020,
118
- ".src.rpm" => 5100,
119
- ".src" => 5900,
120
- ".jpg" => 8000,
121
- ".txt" => 8100,
122
- ".text" => 8100,
123
- ".htm" => 8200,
124
- ".html" => 8200,
125
- ".pdf" => 8300,
126
- ".oth" => 9999,
127
- ".ebuild" => 1300,
128
- ".exe" => 1100,
129
- ".dmg" => 1200,
130
- ".tar.gz" => 5000,
131
- ".tgz" => 5000,
132
- ".gem" => 1400,
133
- ".pgp" => 8150,
134
- ".sig" => 8150,
135
- }[type_id]
136
-
137
- processor_id = opts['processor_id'] || 'Any'
138
- processor_id = {
139
- "i386" => 1000,
140
- "IA64" => 6000,
141
- "Alpha" => 7000,
142
- "Any" => 8000,
143
- "PPC" => 2000,
144
- "MIPS" => 3000,
145
- "Sparc" => 4000,
146
- "UltraSparc" => 5000,
147
- "Other" => 9999,
148
- }[processor_id]
149
-
150
- release_notes = opts['release_notes'] || nil
151
- release_notes = open(release_notes) if release_notes
152
-
153
- release_changes = opts['release_changes'] || nil
154
- release_changes = open(release_changes) if release_changes
155
-
156
- userfile = open(userfile)
157
-
158
- preformatted = '1'
159
-
160
- form = {
161
- "group_id" => group_id,
162
- "package_id" => package_id,
163
- "release_name" => release_name,
164
- "release_date" => release_date,
165
- "type_id" => type_id,
166
- "processor_id" => processor_id,
167
- "preformatted" => preformatted,
168
- "userfile" => userfile,
169
- "submit" => "Release File"
170
- }
171
-
172
- boundary = Array::new(8){ "%2.2d" % rand(42) }.join('__')
173
- extheader['content-type'] = "multipart/form-data; boundary=___#{ boundary }___"
174
-
175
- else
176
- abort "#{ $0 } login create_package add_release"
177
-
178
- end
179
- #
180
- # http transaction
181
- #
182
- client = HTTPAccess2::Client::new ENV['HTTP_PROXY']
183
- client.debug_dev = STDERR if ENV['DEBUG']
184
-
185
- client.set_cookie_store cookie_jar
186
-
187
- # fixes http-access2 bug
188
- client.redirect_uri_callback = lambda do |res|
189
- page = res.header['location'].first
190
- page = page =~ %r/http/ ? page : "#{ config['uri'] }/#{ page }"
191
- page
192
- end
193
-
194
- response = client.send "#{ method }", "#{ config['uri'] }/#{ page }", form, extheader
195
-
196
- client.save_cookie_store
197
-
198
- # fixes http-access2 bug
199
- BEGIN {
200
- require "http-access2"
201
- module WebAgent::CookieUtils
202
- def domain_match(host, domain)
203
- case domain
204
- when /\d+\.\d+\.\d+\.\d+/
205
- return (host == domain)
206
- when '.'
207
- return true
208
- when /^\./
209
- #return tail_match?(domain, host)
210
- return tail_match?(host, domain)
211
- else
212
- return (host == domain)
213
- end
214
- end
215
- end
216
-
217
- }
@@ -1,10 +0,0 @@
1
- DROP TABLE reference_codes;
2
- DROP TABLE reference_types;
3
- DROP TABLE products;
4
- DROP TABLE tariffs;
5
- DROP TABLE product_tariffs;
6
- DROP TABLE streets;
7
- DROP TABLE suburbs;
8
- DROP TABLE users;
9
- DROP TABLE articles;
10
- DROP TABLE readings;