voraz-dr_nic_magic_models 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +9 -0
- data/History.txt +33 -0
- data/Manifest.txt +56 -0
- data/README +0 -0
- data/Rakefile +149 -0
- data/install.rb +30 -0
- data/lib/base.rb +12 -0
- data/lib/connection_adapters/abstract/schema_statements.rb +0 -0
- data/lib/connection_adapters/abstract_adapter.rb +32 -0
- data/lib/connection_adapters/mysql_adapter.rb +42 -0
- data/lib/connection_adapters/postgresql_adapter.rb +45 -0
- data/lib/dr_nic_magic_models/inflector.rb +14 -0
- data/lib/dr_nic_magic_models/magic_model.rb +135 -0
- data/lib/dr_nic_magic_models/schema.rb +270 -0
- data/lib/dr_nic_magic_models/validations.rb +46 -0
- data/lib/dr_nic_magic_models/version.rb +9 -0
- data/lib/dr_nic_magic_models.rb +34 -0
- data/lib/module.rb +33 -0
- data/lib/rails.rb +19 -0
- data/scripts/txt2html +66 -0
- data/scripts/txt2js +58 -0
- data/test/abstract_unit.rb +70 -0
- data/test/connections/native_mysql/connection.rb +14 -0
- data/test/connections/native_postgresql/connection.rb +12 -0
- data/test/connections/native_sqlite/connection.rb +10 -0
- data/test/dummy_test.rb +13 -0
- data/test/env_test.rb +10 -0
- data/test/fixtures/.DS_Store +0 -0
- data/test/fixtures/adjectives.yml +3 -0
- data/test/fixtures/adjectives_fun_users.yml +3 -0
- data/test/fixtures/db_definitions/mysql.drop.sql +4 -0
- data/test/fixtures/db_definitions/mysql.sql +58 -0
- data/test/fixtures/db_definitions/postgresql.sql +56 -0
- data/test/fixtures/db_definitions/sqlite.sql +49 -0
- data/test/fixtures/fun_users.yml +14 -0
- data/test/fixtures/group_memberships.yml +4 -0
- data/test/fixtures/group_tag.yml +11 -0
- data/test/fixtures/groups.yml +12 -0
- data/test/foreign_keys_test.rb +0 -0
- data/test/fun_user_plus.rb +2 -0
- data/test/invisible_model_access_test.rb +71 -0
- data/test/invisible_model_assoc_test.rb +61 -0
- data/test/invisible_model_classes_test.rb +23 -0
- data/test/magic_module_test.rb +20 -0
- data/test/test_existing_model.rb +20 -0
- data/test.db +0 -0
- data/website/index.html +409 -0
- data/website/index.txt +291 -0
- data/website/javascripts/rounded_corners_lite.inc.js +285 -0
- data/website/stylesheets/screen.css +106 -0
- data/website/template.js +3 -0
- data/website/template.rhtml +55 -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 +123 -0
@@ -0,0 +1,58 @@
|
|
1
|
+
CREATE TABLE `fun_users` (
|
2
|
+
`id` int(11) NOT NULL auto_increment,
|
3
|
+
`type` varchar(255) NOT NULL,
|
4
|
+
`firstname` varchar(50) NOT NULL,
|
5
|
+
`lastname` varchar(50) NOT NULL,
|
6
|
+
`login` varchar(50) NOT NULL,
|
7
|
+
`email` varchar(50) NULL,
|
8
|
+
PRIMARY KEY (`id`)
|
9
|
+
) TYPE=InnoDB;
|
10
|
+
|
11
|
+
CREATE TABLE `groups` (
|
12
|
+
`id` int(11) NOT NULL auto_increment,
|
13
|
+
`name` varchar(50) NOT NULL UNIQUE,
|
14
|
+
`description` varchar(50) default NULL,
|
15
|
+
`some_int` integer default NULL,
|
16
|
+
`some_float` float default NULL,
|
17
|
+
`some_bool` boolean default NULL,
|
18
|
+
PRIMARY KEY (`id`)
|
19
|
+
) TYPE=InnoDB;
|
20
|
+
|
21
|
+
CREATE TABLE `group_memberships` (
|
22
|
+
`id` int(11) NOT NULL auto_increment,
|
23
|
+
`fun_user_id` int(11) NOT NULL,
|
24
|
+
`group_id` int(11) NOT NULL,
|
25
|
+
PRIMARY KEY (`id`)
|
26
|
+
) TYPE=InnoDB;
|
27
|
+
|
28
|
+
CREATE TABLE `adjectives` (
|
29
|
+
`id` int(11) NOT NULL auto_increment,
|
30
|
+
`name` varchar(255),
|
31
|
+
PRIMARY KEY (`id`)
|
32
|
+
) TYPE=InnoDB;
|
33
|
+
|
34
|
+
CREATE TABLE `adjectives_fun_users` (
|
35
|
+
`fun_user_id` int(11) NOT NULL,
|
36
|
+
`adjective_id` int(11) NOT NULL,
|
37
|
+
PRIMARY KEY (`fun_user_id`,`adjective_id`)
|
38
|
+
) TYPE=InnoDB;
|
39
|
+
|
40
|
+
|
41
|
+
CREATE TABLE `group_tag` (
|
42
|
+
`id` int(11) NOT NULL auto_increment,
|
43
|
+
`name` varchar(50) NOT NULL,
|
44
|
+
`group_id` int(11) NOT NULL,
|
45
|
+
`referenced_group_id` int(11) NULL,
|
46
|
+
PRIMARY KEY (`id`)
|
47
|
+
) TYPE=InnoDB;
|
48
|
+
|
49
|
+
ALTER TABLE `group_tag`
|
50
|
+
ADD FOREIGN KEY (`group_id`) REFERENCES `groups` (`id`) ON DELETE CASCADE;
|
51
|
+
|
52
|
+
ALTER TABLE `group_tag`
|
53
|
+
ADD FOREIGN KEY (`referenced_group_id`) REFERENCES `groups` (`id`) ON DELETE CASCADE;
|
54
|
+
|
55
|
+
ALTER TABLE `adjectives_fun_users`
|
56
|
+
ADD FOREIGN KEY (`adjective_id`) REFERENCES `adjectives` (`id`) ON DELETE CASCADE;
|
57
|
+
|
58
|
+
|
@@ -0,0 +1,56 @@
|
|
1
|
+
CREATE TABLE "fun_users" (
|
2
|
+
"id" SERIAL NOT NULL,
|
3
|
+
"type" varchar(255) NOT NULL,
|
4
|
+
"firstname" varchar(50) NOT NULL,
|
5
|
+
"lastname" varchar(50) NOT NULL,
|
6
|
+
"login" varchar(50) NOT NULL,
|
7
|
+
"email" varchar(50) NULL,
|
8
|
+
PRIMARY KEY ("id")
|
9
|
+
);
|
10
|
+
|
11
|
+
CREATE TABLE "groups" (
|
12
|
+
"id" SERIAL NOT NULL,
|
13
|
+
"name" varchar(50) NOT NULL UNIQUE,
|
14
|
+
"description" varchar(50) default NULL,
|
15
|
+
"some_int" integer default NULL,
|
16
|
+
"some_float" float default NULL,
|
17
|
+
"some_bool" boolean default NULL,
|
18
|
+
PRIMARY KEY ("id")
|
19
|
+
);
|
20
|
+
|
21
|
+
CREATE TABLE "group_memberships" (
|
22
|
+
"id" SERIAL,
|
23
|
+
"fun_user_id" int NOT NULL,
|
24
|
+
"group_id" int NOT NULL,
|
25
|
+
PRIMARY KEY ("id")
|
26
|
+
);
|
27
|
+
|
28
|
+
CREATE TABLE "adjectives" (
|
29
|
+
"id" SERIAL,
|
30
|
+
"name" varchar(255),
|
31
|
+
PRIMARY KEY ("id")
|
32
|
+
);
|
33
|
+
|
34
|
+
CREATE TABLE "adjectives_fun_users" (
|
35
|
+
"fun_user_id" int NOT NULL,
|
36
|
+
"adjective_id" int NOT NULL,
|
37
|
+
PRIMARY KEY ("fun_user_id","adjective_id")
|
38
|
+
);
|
39
|
+
|
40
|
+
CREATE TABLE "group_tag" (
|
41
|
+
"id" SERIAL NOT NULL,
|
42
|
+
"name" varchar(50) NOT NULL,
|
43
|
+
"group_id" int NOT NULL,
|
44
|
+
"referenced_group_id" int NULL,
|
45
|
+
PRIMARY KEY ("id")
|
46
|
+
);
|
47
|
+
|
48
|
+
ALTER TABLE "group_tag"
|
49
|
+
ADD FOREIGN KEY ("group_id") REFERENCES "groups" ("id") ON DELETE CASCADE;
|
50
|
+
|
51
|
+
ALTER TABLE "group_tag"
|
52
|
+
ADD FOREIGN KEY ("referenced_group_id") REFERENCES "groups" ("id") ON DELETE CASCADE;
|
53
|
+
|
54
|
+
ALTER TABLE "adjectives_fun_users"
|
55
|
+
ADD FOREIGN KEY ("adjective_id") REFERENCES "adjectives" ("id") ON DELETE CASCADE;
|
56
|
+
|
@@ -0,0 +1,49 @@
|
|
1
|
+
CREATE TABLE `fun_users` (
|
2
|
+
`id` int(11) NOT NULL,
|
3
|
+
`type` varchar(255) NOT NULL,
|
4
|
+
`firstname` varchar(50) NOT NULL,
|
5
|
+
`lastname` varchar(50) NOT NULL,
|
6
|
+
`login` varchar(50) NOT NULL,
|
7
|
+
`email` varchar(50) NULL,
|
8
|
+
PRIMARY KEY (`id`)
|
9
|
+
);
|
10
|
+
|
11
|
+
CREATE TABLE `groups` (
|
12
|
+
`id` int(11) NOT NULL ,
|
13
|
+
`name` varchar(50) NOT NULL UNIQUE,
|
14
|
+
`description` varchar(50) default NULL,
|
15
|
+
`some_int` integer default NULL,
|
16
|
+
`some_float` float default NULL,
|
17
|
+
`some_bool` boolean default NULL,
|
18
|
+
PRIMARY KEY (`id`)
|
19
|
+
);
|
20
|
+
|
21
|
+
CREATE TABLE `group_memberships` (
|
22
|
+
`id` int(11) NOT NULL,
|
23
|
+
`fun_user_id` int(11) NOT NULL,
|
24
|
+
`group_id` int(11) NOT NULL,
|
25
|
+
PRIMARY KEY (`id`)
|
26
|
+
);
|
27
|
+
|
28
|
+
CREATE TABLE `adjectives` (
|
29
|
+
`id` int(11) NOT NULL,
|
30
|
+
`name` varchar(255),
|
31
|
+
PRIMARY KEY (`id`)
|
32
|
+
);
|
33
|
+
|
34
|
+
CREATE TABLE `adjectives_fun_users` (
|
35
|
+
`fun_user_id` int(11) NOT NULL,
|
36
|
+
`adjective_id` int(11) NOT NULL,
|
37
|
+
PRIMARY KEY (`fun_user_id`,`adjective_id`)
|
38
|
+
);
|
39
|
+
|
40
|
+
|
41
|
+
CREATE TABLE `group_tag` (
|
42
|
+
`id` int(11) NOT NULL,
|
43
|
+
`name` varchar(50) NOT NULL,
|
44
|
+
`group_id` int(11) NOT NULL,
|
45
|
+
`referenced_group_id` int(11) NULL,
|
46
|
+
PRIMARY KEY (`id`)
|
47
|
+
);
|
48
|
+
|
49
|
+
|
File without changes
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'abstract_unit'
|
2
|
+
require 'pp'
|
3
|
+
|
4
|
+
class InvisibleModelAccessTest < Test::Unit::TestCase
|
5
|
+
# fixtures :fun_users, :groups, :group_memberships, :group_tag
|
6
|
+
|
7
|
+
def setup
|
8
|
+
create_fixtures :fun_users, :groups, :group_memberships, :group_tag
|
9
|
+
@classes = [FunUser, Group, GroupMembership, GroupTag]
|
10
|
+
@group = Group.find(:first)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_attributes
|
14
|
+
assert_not_nil @group.name
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_find
|
18
|
+
@classes.each do |klass|
|
19
|
+
assert_not_nil obj = klass.find(1)
|
20
|
+
assert_equal klass, obj.class
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_sti
|
25
|
+
require 'fun_user_plus'
|
26
|
+
x = FunUserPlus.find(:all)
|
27
|
+
assert x.inject {|n,v| n &= v.class == FunUserPlus}, "Wrong object class in FunUserPlus.find(:all)"
|
28
|
+
plus = x.first
|
29
|
+
assert_not_nil plus
|
30
|
+
assert plus.is_a?(FunUser)
|
31
|
+
assert plus.class == FunUserPlus
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_new
|
35
|
+
assert group = Group.new(:name => 'New Group')
|
36
|
+
assert_equal Group, group.class
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_update
|
40
|
+
assert @group.update_attributes(:name => 'Group 1'), "Couldn't update:\n#{str=""; @group.errors.each_full { |msg| str += "#{msg}\n" }; str }"
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_delete
|
44
|
+
assert @group.destroy
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_validations
|
48
|
+
group = Group.new
|
49
|
+
group.description = "x"*100
|
50
|
+
group.some_int = 99.9
|
51
|
+
group.some_float = "bah"
|
52
|
+
# Active record seems to interpolate booleans anyway to either true, false or nil...
|
53
|
+
# group.some_bool = "xxx" => false (!)
|
54
|
+
|
55
|
+
assert !group.valid?, "Group should not be valid"
|
56
|
+
[:name, :description, :some_int, :some_float].each do |x|
|
57
|
+
assert_not_nil group.errors[x], "Failed on #{x}=[#{group.send(x)}], it should be invalid"
|
58
|
+
end
|
59
|
+
|
60
|
+
group = Group.new
|
61
|
+
group.name = "name"
|
62
|
+
group.description = "x"*49
|
63
|
+
group.some_int = 99
|
64
|
+
group.some_float = 99.9
|
65
|
+
group.some_bool = true
|
66
|
+
assert group.valid?, "Group should be valid"
|
67
|
+
|
68
|
+
group.name = @group.name
|
69
|
+
assert !group.valid?, "Groups should have unique names"
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/abstract_unit'
|
2
|
+
|
3
|
+
class InvisibleModelAssocTest < Test::Unit::TestCase
|
4
|
+
# fixtures :fun_users, :groups, :group_memberships, :group_tag, :adjectives, :adjectives_fun_users
|
5
|
+
|
6
|
+
def setup
|
7
|
+
create_fixtures :fun_users, :groups, :group_memberships, :group_tag, :adjectives, :adjectives_fun_users
|
8
|
+
@group = Group.find(1)
|
9
|
+
@group_tag = GroupTag.find(1)
|
10
|
+
@user = FunUser.find(1)
|
11
|
+
@membership = GroupMembership.find(1)
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_hatbm
|
15
|
+
assert_equal([Adjective.find(1)], @user.adjectives)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_fk
|
19
|
+
|
20
|
+
gt = GroupTag.find(1)
|
21
|
+
|
22
|
+
# Not using FKs
|
23
|
+
g = gt.group
|
24
|
+
assert g.class == Group
|
25
|
+
assert g.id == 1
|
26
|
+
|
27
|
+
# Using FKs
|
28
|
+
if g.connection.supports_fetch_foreign_keys?
|
29
|
+
g = gt.referenced_group
|
30
|
+
assert g.class == Group
|
31
|
+
assert g.id == 1
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_has_many
|
36
|
+
assert_equal [@membership], @group.group_memberships
|
37
|
+
assert_equal @group, @membership.group
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_has_one
|
41
|
+
if @group_tag.connection.supports_fetch_foreign_keys?
|
42
|
+
assert_equal @group, @group_tag.referenced_group
|
43
|
+
# assert_equal @group_tag, @group.group_tag_as_referenced_group
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_belongs_to
|
48
|
+
assert_equal @user, @membership.fun_user
|
49
|
+
assert_equal @group, @membership.group
|
50
|
+
manual_result = GroupTag.find(:all, :conditions => ['group_tag.group_id = ?', @group.id]) #.sort{|a,b| a.id <=> b.id}
|
51
|
+
auto_result = @group.group_tags #.sort{|a,b| a.id <=> b.id}
|
52
|
+
assert_equal manual_result, auto_result, "[#{manual_result.join(',')}] != [#{auto_result.join(',')}]"
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_indirect
|
57
|
+
assert_equal [@user], @group.fun_users
|
58
|
+
assert_equal [@group], @user.groups
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'abstract_unit'
|
2
|
+
|
3
|
+
class InvisibleModelClassesTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_available
|
10
|
+
assert_not_nil Group
|
11
|
+
assert_not_nil FunUser
|
12
|
+
assert_not_nil GroupMembership
|
13
|
+
assert_not_nil GroupTag, "Could not find GroupTag with singularized table name 'GroupTag'"
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_table_names
|
17
|
+
assert_equal 'groups', Group.table_name
|
18
|
+
assert_equal 'fun_users', FunUser.table_name
|
19
|
+
assert_equal 'group_memberships', GroupMembership.table_name
|
20
|
+
assert_equal 'group_tag', GroupTag.table_name
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'abstract_unit'
|
2
|
+
|
3
|
+
module MagicGroup
|
4
|
+
magic_module :table_name_prefix => 'group_'
|
5
|
+
end
|
6
|
+
|
7
|
+
class MagicModuleTest < Test::Unit::TestCase
|
8
|
+
|
9
|
+
def setup
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_table_prefix
|
14
|
+
assert_nothing_thrown { MagicGroup::Membership }
|
15
|
+
assert_equal('group_memberships', MagicGroup::Membership.table_name)
|
16
|
+
assert_nothing_thrown { MagicGroup::Tag }
|
17
|
+
assert_equal('group_tag', MagicGroup::Tag.table_name)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'abstract_unit'
|
2
|
+
require 'pp'
|
3
|
+
|
4
|
+
module TestBed
|
5
|
+
class Group < ActiveRecord::Base
|
6
|
+
generate_validations
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
class TestExistingModel < Test::Unit::TestCase
|
11
|
+
# fixtures :fun_users, :groups, :group_memberships, :group_tag
|
12
|
+
|
13
|
+
def setup
|
14
|
+
create_fixtures :fun_users, :groups, :group_memberships, :group_tag
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_valid
|
18
|
+
assert(!TestBed::Group.new.valid?)
|
19
|
+
end
|
20
|
+
end
|
data/test.db
ADDED
File without changes
|