polymorphic_identity 0.0.3 → 0.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.
- data/CHANGELOG +4 -0
- data/MIT-LICENSE +2 -2
- data/README +7 -11
- data/Rakefile +5 -5
- data/lib/polymorphic_identity.rb +10 -10
- data/test/app_root/app/models/article.rb +4 -3
- data/test/app_root/app/models/author.rb +3 -1
- data/test/app_root/app/models/page.rb +4 -3
- data/test/app_root/db/migrate/001_create_authors.rb +2 -2
- data/test/app_root/db/migrate/002_create_articles.rb +3 -3
- data/test/app_root/db/migrate/003_create_pages.rb +3 -3
- data/test/app_root/db/migrate/004_create_users.rb +2 -2
- data/test/app_root/db/migrate/005_create_comments.rb +5 -5
- data/test/factory.rb +56 -0
- data/test/test_helper.rb +9 -2
- data/test/unit/polymorphic_identity_test.rb +41 -40
- metadata +54 -52
- data/test/fixtures/articles.yml +0 -9
- data/test/fixtures/authors.yml +0 -7
- data/test/fixtures/comments.yml +0 -25
- data/test/fixtures/pages.yml +0 -9
- data/test/fixtures/users.yml +0 -7
data/CHANGELOG
CHANGED
data/MIT-LICENSE
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright (c) 2006-
|
1
|
+
Copyright (c) 2006-2008 Aaron Pfeifer
|
2
2
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining
|
4
4
|
a copy of this software and associated documentation files (the
|
@@ -17,4 +17,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
17
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
18
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
19
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README
CHANGED
@@ -5,25 +5,21 @@ based on the class names of those associations.
|
|
5
5
|
|
6
6
|
== Resources
|
7
7
|
|
8
|
-
API
|
9
|
-
|
10
|
-
* http://api.pluginaweek.org/polymorphic_identity
|
11
|
-
|
12
8
|
Wiki
|
13
9
|
|
14
10
|
* http://wiki.pluginaweek.org/Polymorphic_Identity
|
15
11
|
|
16
|
-
|
12
|
+
API
|
17
13
|
|
18
|
-
* http://
|
14
|
+
* http://api.pluginaweek.org/polymorphic_identity
|
19
15
|
|
20
|
-
|
16
|
+
Development
|
21
17
|
|
22
|
-
* http://
|
18
|
+
* http://dev.pluginaweek.org/browser/trunk/polymorphic_identity
|
23
19
|
|
24
|
-
|
20
|
+
Source
|
25
21
|
|
26
|
-
* http://
|
22
|
+
* http://svn.pluginaweek.org/trunk/polymorphic_identity
|
27
23
|
|
28
24
|
== Description
|
29
25
|
|
@@ -82,4 +78,4 @@ Before you can run any tests, the following gem must be installed:
|
|
82
78
|
|
83
79
|
== Dependencies
|
84
80
|
|
85
|
-
|
81
|
+
None.
|
data/Rakefile
CHANGED
@@ -4,7 +4,7 @@ require 'rake/gempackagetask'
|
|
4
4
|
require 'rake/contrib/sshpublisher'
|
5
5
|
|
6
6
|
PKG_NAME = 'polymorphic_identity'
|
7
|
-
PKG_VERSION = '0.0.
|
7
|
+
PKG_VERSION = '0.0.4'
|
8
8
|
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
9
9
|
RUBY_FORGE_PROJECT = 'pluginaweek'
|
10
10
|
|
@@ -39,8 +39,8 @@ spec = Gem::Specification.new do |s|
|
|
39
39
|
s.has_rdoc = true
|
40
40
|
s.test_files = Dir['test/**/*_test.rb']
|
41
41
|
|
42
|
-
s.author = 'Aaron Pfeifer
|
43
|
-
s.email = '
|
42
|
+
s.author = 'Aaron Pfeifer'
|
43
|
+
s.email = 'aaron@pluginaweek.org'
|
44
44
|
s.homepage = 'http://www.pluginaweek.org'
|
45
45
|
end
|
46
46
|
|
@@ -52,12 +52,12 @@ end
|
|
52
52
|
|
53
53
|
desc 'Publish the beta gem'
|
54
54
|
task :pgem => [:package] do
|
55
|
-
Rake::SshFilePublisher.new('
|
55
|
+
Rake::SshFilePublisher.new('aaron@pluginaweek.org', '/home/aaron/gems.pluginaweek.org/public/gems', 'pkg', "#{PKG_FILE_NAME}.gem").upload
|
56
56
|
end
|
57
57
|
|
58
58
|
desc 'Publish the API documentation'
|
59
59
|
task :pdoc => [:rdoc] do
|
60
|
-
Rake::SshDirPublisher.new('
|
60
|
+
Rake::SshDirPublisher.new('aaron@pluginaweek.org', "/home/aaron/api.pluginaweek.org/public/#{PKG_NAME}", 'rdoc').upload
|
61
61
|
end
|
62
62
|
|
63
63
|
desc 'Publish the API docs and gem'
|
data/lib/polymorphic_identity.rb
CHANGED
@@ -39,19 +39,19 @@ module PluginAWeek
|
|
39
39
|
end
|
40
40
|
|
41
41
|
private
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
42
|
+
# Finds the name of the polymorphic association whose foreign type is set to
|
43
|
+
# the value specified.
|
44
|
+
def find_polymorphic_association_name(foreign_type_value)
|
45
|
+
foreign_type_value = foreign_type_value.to_s.camelize
|
46
|
+
reflection = self.class.reflections.values.find do |reflection|
|
47
|
+
reflection.options[:polymorphic] && self[reflection.options[:foreign_type]] == foreign_type_value
|
48
|
+
end
|
49
|
+
|
50
|
+
reflection ? reflection.name : nil
|
48
51
|
end
|
49
|
-
|
50
|
-
reflection ? reflection.name : nil
|
51
|
-
end
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
55
|
ActiveRecord::Base.class_eval do
|
56
56
|
include PluginAWeek::PolymorphicIdentity
|
57
|
-
end
|
57
|
+
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
class CreateArticles < ActiveRecord::Migration
|
2
2
|
def self.up
|
3
3
|
create_table :articles do |t|
|
4
|
-
t.
|
5
|
-
t.
|
4
|
+
t.integer :author_id
|
5
|
+
t.text :content
|
6
6
|
end
|
7
7
|
end
|
8
8
|
|
9
9
|
def self.down
|
10
10
|
drop_table :articles
|
11
11
|
end
|
12
|
-
end
|
12
|
+
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
class CreatePages < ActiveRecord::Migration
|
2
2
|
def self.up
|
3
3
|
create_table :pages do |t|
|
4
|
-
t.
|
5
|
-
t.
|
4
|
+
t.integer :author_id
|
5
|
+
t.text :content
|
6
6
|
end
|
7
7
|
end
|
8
8
|
|
9
9
|
def self.down
|
10
10
|
drop_table :pages
|
11
11
|
end
|
12
|
-
end
|
12
|
+
end
|
@@ -1,14 +1,14 @@
|
|
1
1
|
class CreateComments < ActiveRecord::Migration
|
2
2
|
def self.up
|
3
3
|
create_table :comments do |t|
|
4
|
-
t.
|
5
|
-
t.
|
6
|
-
t.
|
7
|
-
t.
|
4
|
+
t.integer :commentable_id
|
5
|
+
t.string :commentable_type
|
6
|
+
t.string :commenter_id
|
7
|
+
t.string :commenter_type
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
11
|
def self.down
|
12
12
|
drop_table :comments
|
13
13
|
end
|
14
|
-
end
|
14
|
+
end
|
data/test/factory.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
module Factory
|
2
|
+
# Build actions for the class
|
3
|
+
def self.build(klass, &block)
|
4
|
+
name = klass.to_s.underscore
|
5
|
+
define_method("#{name}_attributes", block)
|
6
|
+
|
7
|
+
module_eval <<-end_eval
|
8
|
+
def valid_#{name}_attributes(attributes = {})
|
9
|
+
#{name}_attributes(attributes)
|
10
|
+
attributes
|
11
|
+
end
|
12
|
+
|
13
|
+
def new_#{name}(attributes = {})
|
14
|
+
#{klass}.new(valid_#{name}_attributes(attributes))
|
15
|
+
end
|
16
|
+
|
17
|
+
def create_#{name}(*args)
|
18
|
+
record = new_#{name}(*args)
|
19
|
+
record.save!
|
20
|
+
record.reload
|
21
|
+
record
|
22
|
+
end
|
23
|
+
end_eval
|
24
|
+
end
|
25
|
+
|
26
|
+
build Article do |attributes|
|
27
|
+
attributes[:author] = create_author unless attributes.include?(:author)
|
28
|
+
attributes.reverse_merge!(
|
29
|
+
:content => 'Thanks for visiting my blog!'
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
build Author do |attributes|
|
34
|
+
attributes.reverse_merge!(
|
35
|
+
:name => 'John Smith'
|
36
|
+
)
|
37
|
+
end
|
38
|
+
|
39
|
+
build Comment do |attributes|
|
40
|
+
attributes[:commentable] = create_article unless attributes.include?(:commentable)
|
41
|
+
attributes[:commenter] = create_user unless attributes.include?(:commenter)
|
42
|
+
end
|
43
|
+
|
44
|
+
build Page do |attributes|
|
45
|
+
attributes[:author] = create_author unless attributes.include?(:author)
|
46
|
+
attributes.reverse_merge!(
|
47
|
+
:content => 'Some information about me...'
|
48
|
+
)
|
49
|
+
end
|
50
|
+
|
51
|
+
build User do |attributes|
|
52
|
+
attributes.reverse_merge!(
|
53
|
+
:name => 'Mr. Bean'
|
54
|
+
)
|
55
|
+
end
|
56
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
# Load the plugin testing framework
|
2
|
-
$:.unshift("#{File.dirname(__FILE__)}
|
2
|
+
$:.unshift("#{File.dirname(__FILE__)}/../../plugin_test_helper/lib")
|
3
3
|
require 'rubygems'
|
4
4
|
require 'plugin_test_helper'
|
5
5
|
|
6
|
-
|
6
|
+
# Run the migrations
|
7
|
+
ActiveRecord::Migrator.migrate("#{RAILS_ROOT}/db/migrate")
|
8
|
+
|
9
|
+
# Mixin the factory helper
|
10
|
+
require File.expand_path("#{File.dirname(__FILE__)}/factory")
|
11
|
+
class Test::Unit::TestCase #:nodoc:
|
12
|
+
include Factory
|
13
|
+
end
|
@@ -1,62 +1,63 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/../test_helper'
|
2
2
|
|
3
3
|
class PolymorphicIdentityTest < Test::Unit::TestCase
|
4
|
-
|
4
|
+
def setup
|
5
|
+
@comment = Comment.new
|
6
|
+
@comment.commenter_type = 'Article'
|
7
|
+
end
|
5
8
|
|
6
9
|
def test_should_find_polymorphic_association_name_for_valid_symbolized_association
|
7
|
-
|
8
|
-
c.commenter_type = 'Article'
|
9
|
-
assert_equal :commenter, c.send(:find_polymorphic_association_name, :article)
|
10
|
+
assert_equal :commenter, @comment.send(:find_polymorphic_association_name, :article)
|
10
11
|
end
|
11
12
|
|
12
13
|
def test_should_find_polymorphic_association_name_for_valid_stringified_association
|
13
|
-
|
14
|
-
c.commenter_type = 'Article'
|
15
|
-
assert_equal :commenter, c.send(:find_polymorphic_association_name, 'article')
|
14
|
+
assert_equal :commenter, @comment.send(:find_polymorphic_association_name, 'article')
|
16
15
|
end
|
17
16
|
|
18
17
|
def test_should_not_find_polymorphic_association_name_for_invalid_association
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
assert_equal nil, @comment.send(:find_polymorphic_association_name, 'page')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class PolymorphicAssociationWithNoValueTest < Test::Unit::TestCase
|
23
|
+
def setup
|
24
|
+
@comment = create_comment(:commentable => nil, :commenter => nil)
|
22
25
|
end
|
23
26
|
|
24
|
-
def
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
27
|
+
def test_should_not_respond_to_polymorphic_association_name
|
28
|
+
assert !@comment.respond_to?(:article)
|
29
|
+
assert !@comment.respond_to?(:page)
|
30
|
+
assert !@comment.respond_to?(:author)
|
31
|
+
assert !@comment.respond_to?(:user)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class PolymorphicAssociationsWithValueTest < Test::Unit::TestCase
|
36
|
+
def setup
|
37
|
+
@author = create_author
|
38
|
+
@article = create_article(:author => @author)
|
39
|
+
@comment = create_comment(:commentable => @article, :commenter => @author)
|
34
40
|
end
|
35
41
|
|
36
42
|
def test_should_respond_to_polymorphic_association_name_if_association_exists
|
37
|
-
|
38
|
-
assert
|
39
|
-
|
40
|
-
assert_equal
|
41
|
-
assert_equal authors(:john_doe), c.author
|
42
|
-
|
43
|
-
c = comments(:page_about_user_anonymous)
|
44
|
-
assert c.respond_to?(:page)
|
45
|
-
assert c.respond_to?(:user)
|
46
|
-
assert_equal pages(:about), c.page
|
47
|
-
assert_equal users(:anonymous), c.user
|
43
|
+
assert @comment.respond_to?(:article)
|
44
|
+
assert @comment.respond_to?(:author)
|
45
|
+
assert_equal @article, @comment.article
|
46
|
+
assert_equal @author, @comment.author
|
48
47
|
end
|
49
48
|
|
50
49
|
def test_should_update_response_when_changing_polymorphic_association
|
51
|
-
|
52
|
-
|
53
|
-
|
50
|
+
page = create_page
|
51
|
+
user = create_user
|
52
|
+
|
53
|
+
@comment.commentable = page
|
54
|
+
@comment.commenter = user
|
54
55
|
|
55
|
-
assert
|
56
|
-
assert
|
57
|
-
assert
|
58
|
-
assert
|
59
|
-
assert_equal
|
60
|
-
assert_equal
|
56
|
+
assert !@comment.respond_to?(:article)
|
57
|
+
assert !@comment.respond_to?(:author)
|
58
|
+
assert @comment.respond_to?(:page)
|
59
|
+
assert @comment.respond_to?(:user)
|
60
|
+
assert_equal page, @comment.page
|
61
|
+
assert_equal user, @comment.user
|
61
62
|
end
|
62
63
|
end
|
metadata
CHANGED
@@ -1,75 +1,77 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.4
|
3
|
-
specification_version: 1
|
4
2
|
name: polymorphic_identity
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0.
|
7
|
-
date: 2007-09-26 00:00:00 -04:00
|
8
|
-
summary: Dynamically generates aliases for polymorphic associations based on their class names
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: info@pluginaweek.org
|
12
|
-
homepage: http://www.pluginaweek.org
|
13
|
-
rubyforge_project:
|
14
|
-
description:
|
15
|
-
autorequire: polymorphic_identity
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
version: 0.0.4
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
|
-
- Aaron Pfeifer
|
7
|
+
- Aaron Pfeifer
|
8
|
+
autorequire: polymorphic_identity
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-05-05 00:00:00 -04:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description:
|
17
|
+
email: aaron@pluginaweek.org
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
31
24
|
files:
|
32
25
|
- lib/polymorphic_identity.rb
|
33
|
-
- test/
|
34
|
-
- test/fixtures
|
26
|
+
- test/factory.rb
|
35
27
|
- test/app_root
|
36
|
-
- test/unit
|
37
|
-
- test/fixtures/users.yml
|
38
|
-
- test/fixtures/authors.yml
|
39
|
-
- test/fixtures/articles.yml
|
40
|
-
- test/fixtures/comments.yml
|
41
|
-
- test/fixtures/pages.yml
|
42
|
-
- test/app_root/app
|
43
28
|
- test/app_root/db
|
44
|
-
- test/app_root/app/models
|
45
|
-
- test/app_root/app/models/author.rb
|
46
|
-
- test/app_root/app/models/article.rb
|
47
|
-
- test/app_root/app/models/user.rb
|
48
|
-
- test/app_root/app/models/page.rb
|
49
|
-
- test/app_root/app/models/comment.rb
|
50
29
|
- test/app_root/db/migrate
|
51
|
-
- test/app_root/db/migrate/004_create_users.rb
|
52
|
-
- test/app_root/db/migrate/005_create_comments.rb
|
53
30
|
- test/app_root/db/migrate/002_create_articles.rb
|
54
31
|
- test/app_root/db/migrate/003_create_pages.rb
|
32
|
+
- test/app_root/db/migrate/004_create_users.rb
|
55
33
|
- test/app_root/db/migrate/001_create_authors.rb
|
34
|
+
- test/app_root/db/migrate/005_create_comments.rb
|
35
|
+
- test/app_root/app
|
36
|
+
- test/app_root/app/models
|
37
|
+
- test/app_root/app/models/user.rb
|
38
|
+
- test/app_root/app/models/page.rb
|
39
|
+
- test/app_root/app/models/article.rb
|
40
|
+
- test/app_root/app/models/author.rb
|
41
|
+
- test/app_root/app/models/comment.rb
|
42
|
+
- test/test_helper.rb
|
43
|
+
- test/unit
|
56
44
|
- test/unit/polymorphic_identity_test.rb
|
57
45
|
- CHANGELOG
|
58
46
|
- init.rb
|
59
47
|
- MIT-LICENSE
|
60
48
|
- Rakefile
|
61
49
|
- README
|
62
|
-
|
63
|
-
|
50
|
+
has_rdoc: true
|
51
|
+
homepage: http://www.pluginaweek.org
|
52
|
+
post_install_message:
|
64
53
|
rdoc_options: []
|
65
54
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
55
|
+
require_paths:
|
56
|
+
- lib
|
57
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: "0"
|
62
|
+
version:
|
63
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: "0"
|
68
|
+
version:
|
72
69
|
requirements: []
|
73
70
|
|
74
|
-
|
75
|
-
|
71
|
+
rubyforge_project:
|
72
|
+
rubygems_version: 1.1.0
|
73
|
+
signing_key:
|
74
|
+
specification_version: 2
|
75
|
+
summary: Dynamically generates aliases for polymorphic associations based on their class names
|
76
|
+
test_files:
|
77
|
+
- test/unit/polymorphic_identity_test.rb
|
data/test/fixtures/articles.yml
DELETED
data/test/fixtures/authors.yml
DELETED
data/test/fixtures/comments.yml
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
<%
|
2
|
-
id = 0
|
3
|
-
[
|
4
|
-
[:article, :test, 1],
|
5
|
-
[:article, :welcome, 2],
|
6
|
-
[:page, :about, 1],
|
7
|
-
[:page, :projects, 2]
|
8
|
-
].each do |commentable_type, commentable_name, commentable_id|
|
9
|
-
[
|
10
|
-
[:author, :john_doe, 1],
|
11
|
-
[:author, :jane_doe, 2],
|
12
|
-
[:user, :anonymous, 1],
|
13
|
-
[:user, :registered, 2]
|
14
|
-
].each do |commenter_type, commenter_name, commenter_id|
|
15
|
-
%>
|
16
|
-
<%= commentable_type %>_<%= commentable_name %>_<%= commenter_type %>_<%= commenter_name %>:
|
17
|
-
id: <%= id += 1 %>
|
18
|
-
commentable_id: <%= commentable_id %>
|
19
|
-
commentable_type: <%= commentable_type.to_s.camelize %>
|
20
|
-
commenter_id: <%= commenter_id %>
|
21
|
-
commenter_type: <%= commenter_type.to_s.camelize %>
|
22
|
-
<%
|
23
|
-
end
|
24
|
-
end
|
25
|
-
%>
|
data/test/fixtures/pages.yml
DELETED