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.
Files changed (57) hide show
  1. data/CHANGELOG +9 -0
  2. data/History.txt +33 -0
  3. data/Manifest.txt +56 -0
  4. data/README +0 -0
  5. data/Rakefile +149 -0
  6. data/install.rb +30 -0
  7. data/lib/base.rb +12 -0
  8. data/lib/connection_adapters/abstract/schema_statements.rb +0 -0
  9. data/lib/connection_adapters/abstract_adapter.rb +32 -0
  10. data/lib/connection_adapters/mysql_adapter.rb +42 -0
  11. data/lib/connection_adapters/postgresql_adapter.rb +45 -0
  12. data/lib/dr_nic_magic_models/inflector.rb +14 -0
  13. data/lib/dr_nic_magic_models/magic_model.rb +135 -0
  14. data/lib/dr_nic_magic_models/schema.rb +270 -0
  15. data/lib/dr_nic_magic_models/validations.rb +46 -0
  16. data/lib/dr_nic_magic_models/version.rb +9 -0
  17. data/lib/dr_nic_magic_models.rb +34 -0
  18. data/lib/module.rb +33 -0
  19. data/lib/rails.rb +19 -0
  20. data/scripts/txt2html +66 -0
  21. data/scripts/txt2js +58 -0
  22. data/test/abstract_unit.rb +70 -0
  23. data/test/connections/native_mysql/connection.rb +14 -0
  24. data/test/connections/native_postgresql/connection.rb +12 -0
  25. data/test/connections/native_sqlite/connection.rb +10 -0
  26. data/test/dummy_test.rb +13 -0
  27. data/test/env_test.rb +10 -0
  28. data/test/fixtures/.DS_Store +0 -0
  29. data/test/fixtures/adjectives.yml +3 -0
  30. data/test/fixtures/adjectives_fun_users.yml +3 -0
  31. data/test/fixtures/db_definitions/mysql.drop.sql +4 -0
  32. data/test/fixtures/db_definitions/mysql.sql +58 -0
  33. data/test/fixtures/db_definitions/postgresql.sql +56 -0
  34. data/test/fixtures/db_definitions/sqlite.sql +49 -0
  35. data/test/fixtures/fun_users.yml +14 -0
  36. data/test/fixtures/group_memberships.yml +4 -0
  37. data/test/fixtures/group_tag.yml +11 -0
  38. data/test/fixtures/groups.yml +12 -0
  39. data/test/foreign_keys_test.rb +0 -0
  40. data/test/fun_user_plus.rb +2 -0
  41. data/test/invisible_model_access_test.rb +71 -0
  42. data/test/invisible_model_assoc_test.rb +61 -0
  43. data/test/invisible_model_classes_test.rb +23 -0
  44. data/test/magic_module_test.rb +20 -0
  45. data/test/test_existing_model.rb +20 -0
  46. data/test.db +0 -0
  47. data/website/index.html +409 -0
  48. data/website/index.txt +291 -0
  49. data/website/javascripts/rounded_corners_lite.inc.js +285 -0
  50. data/website/stylesheets/screen.css +106 -0
  51. data/website/template.js +3 -0
  52. data/website/template.rhtml +55 -0
  53. data/website/version-raw.js +3 -0
  54. data/website/version-raw.txt +2 -0
  55. data/website/version.js +4 -0
  56. data/website/version.txt +3 -0
  57. metadata +123 -0
@@ -0,0 +1,3 @@
1
+ first:
2
+ fun_user_id: 1
3
+ adjective_id: 1
@@ -0,0 +1,4 @@
1
+ DROP TABLE fun_users;
2
+ DROP TABLE groups;
3
+ DROP TABLE group_memberships;
4
+ DROP TABLE group_tag;
@@ -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
+
@@ -0,0 +1,14 @@
1
+ first:
2
+ id: 1
3
+ firstname: First
4
+ lastname: Person
5
+ login: first
6
+ email: first@person.com
7
+ type: FunUser
8
+ second:
9
+ id: 2
10
+ firstname: Second
11
+ lastname: Person
12
+ login: sec
13
+ email: sec@person.com
14
+ type: FunUserPlus
@@ -0,0 +1,4 @@
1
+ first_first:
2
+ id: 1
3
+ group_id: 1
4
+ fun_user_id: 1
@@ -0,0 +1,11 @@
1
+ first:
2
+ id: 1
3
+ name: Test
4
+ group_id: 1
5
+ referenced_group_id: 1
6
+ second:
7
+ id: 2
8
+ name: Also Test
9
+ group_id: 1
10
+ referenced_group_id: NULL
11
+
@@ -0,0 +1,12 @@
1
+ first:
2
+ id: 1
3
+ name: Group One
4
+ description: First group
5
+ other:
6
+ id: 2
7
+ name: Group Plus
8
+ description: Extended Group
9
+ other:
10
+ id: 2
11
+ name: Group Plus
12
+ description: Extended Group
File without changes
@@ -0,0 +1,2 @@
1
+ class FunUserPlus < FunUser
2
+ end
@@ -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