polymorphic_model 0.0.0 → 0.0.1
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/README.rdoc +1 -1
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/lib/polymorphic_model.rb +6 -6
- data/polymorphic_model.gemspec +9 -2
- data/spec/lib/database.rb +25 -0
- data/spec/lib/job_model.rb +2 -0
- data/spec/polymorphic_model_spec.rb +83 -0
- data/spec/spec.opts +1 -1
- data/spec/spec_helper.rb +2 -1
- metadata +15 -1
data/README.rdoc
CHANGED
data/Rakefile
CHANGED
@@ -11,6 +11,7 @@ begin
|
|
11
11
|
gem.homepage = "http://github.com/sevos/polymorphic_model"
|
12
12
|
gem.authors = ["Artur Roszczyk"]
|
13
13
|
gem.add_development_dependency "rspec", ">= 1.2.9"
|
14
|
+
gem.add_development_dependency "sqlite3-ruby", ">= 1.2.4"
|
14
15
|
|
15
16
|
gem.add_dependency "activerecord", ">= 2.3.4"
|
16
17
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.1
|
data/lib/polymorphic_model.rb
CHANGED
@@ -10,18 +10,18 @@ module PolymorphicModel
|
|
10
10
|
|
11
11
|
module ClassMethods
|
12
12
|
def define_type(t, options = {})
|
13
|
+
column = @_polymorphic_column
|
13
14
|
define_method :"#{t.to_s}?" do
|
14
|
-
|
15
|
+
send(column) == t.to_s
|
15
16
|
end
|
16
17
|
|
17
18
|
if options[:singleton] == true
|
18
|
-
validates_uniqueness_of
|
19
|
+
validates_uniqueness_of column, :if => :"#{t}?"
|
19
20
|
self.class.instance_eval do
|
20
|
-
|
21
21
|
define_method t do
|
22
|
-
existing = find(:first, :conditions => {
|
22
|
+
existing = find(:first, :conditions => {column => t.to_s})
|
23
23
|
if options[:autocreate]
|
24
|
-
existing || create!(
|
24
|
+
existing || create!(column => t.to_s)
|
25
25
|
else
|
26
26
|
existing
|
27
27
|
end
|
@@ -29,7 +29,7 @@ module PolymorphicModel
|
|
29
29
|
|
30
30
|
end
|
31
31
|
else
|
32
|
-
named_scope(t
|
32
|
+
named_scope(t, :conditions => { column => "#{t.to_s}" })
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
data/polymorphic_model.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{polymorphic_model}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Artur Roszczyk"]
|
@@ -27,6 +27,8 @@ Gem::Specification.new do |s|
|
|
27
27
|
"lib/polymorphic_model.rb",
|
28
28
|
"polymorphic_model.gemspec",
|
29
29
|
"rails/init.rb",
|
30
|
+
"spec/lib/database.rb",
|
31
|
+
"spec/lib/job_model.rb",
|
30
32
|
"spec/polymorphic_model_spec.rb",
|
31
33
|
"spec/spec.opts",
|
32
34
|
"spec/spec_helper.rb"
|
@@ -37,7 +39,9 @@ Gem::Specification.new do |s|
|
|
37
39
|
s.rubygems_version = %q{1.3.5}
|
38
40
|
s.summary = %q{Alternative for ActiveRecord's Single Table Inheritance}
|
39
41
|
s.test_files = [
|
40
|
-
"spec/
|
42
|
+
"spec/lib/database.rb",
|
43
|
+
"spec/lib/job_model.rb",
|
44
|
+
"spec/polymorphic_model_spec.rb",
|
41
45
|
"spec/spec_helper.rb"
|
42
46
|
]
|
43
47
|
|
@@ -47,13 +51,16 @@ Gem::Specification.new do |s|
|
|
47
51
|
|
48
52
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
49
53
|
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
54
|
+
s.add_development_dependency(%q<sqlite3-ruby>, [">= 1.2.4"])
|
50
55
|
s.add_runtime_dependency(%q<activerecord>, [">= 2.3.4"])
|
51
56
|
else
|
52
57
|
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
58
|
+
s.add_dependency(%q<sqlite3-ruby>, [">= 1.2.4"])
|
53
59
|
s.add_dependency(%q<activerecord>, [">= 2.3.4"])
|
54
60
|
end
|
55
61
|
else
|
56
62
|
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
63
|
+
s.add_dependency(%q<sqlite3-ruby>, [">= 1.2.4"])
|
57
64
|
s.add_dependency(%q<activerecord>, [">= 2.3.4"])
|
58
65
|
end
|
59
66
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'activerecord'
|
3
|
+
require 'logger'
|
4
|
+
|
5
|
+
DATABASE_CONFIG = {
|
6
|
+
:adapter => 'sqlite3',
|
7
|
+
:database => ':memory:'
|
8
|
+
}.freeze
|
9
|
+
def set_database
|
10
|
+
ActiveRecord::Base.establish_connection(DATABASE_CONFIG)
|
11
|
+
#ActiveRecord::Base.logger = Logger.new(STDERR)
|
12
|
+
|
13
|
+
ActiveRecord::Schema.define do
|
14
|
+
create_table :jobs do |t|
|
15
|
+
t.string :job_type
|
16
|
+
|
17
|
+
t.string :title
|
18
|
+
t.string :url
|
19
|
+
t.text :description
|
20
|
+
|
21
|
+
t.timestamps
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
require 'lib/job_model'
|
@@ -1,5 +1,88 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
require 'lib/job_model'
|
2
3
|
|
3
4
|
describe "PolymorphicModel" do
|
5
|
+
before(:all) do
|
6
|
+
Job.instance_eval do
|
7
|
+
polymorphic_model :with_type_column => :job_type
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should create define_type method" do
|
12
|
+
Job.methods.should include("define_type")
|
13
|
+
end
|
14
|
+
|
15
|
+
describe :define_type do
|
16
|
+
before do
|
17
|
+
Job.instance_eval do
|
18
|
+
define_type :some_type
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should create check methods" do
|
23
|
+
Job.instance_methods.should include("some_type?")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "When normal collection types are defined" do
|
29
|
+
before do
|
30
|
+
Job.instance_eval do
|
31
|
+
define_type :internal
|
32
|
+
define_type :external
|
33
|
+
end
|
34
|
+
2.times { @external = Job.create(:job_type => "external") }
|
35
|
+
3.times { @internal = Job.create(:job_type => "internal") }
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "check methods" do
|
39
|
+
it "should return true if object is in kind of method" do
|
40
|
+
@external.should be_external
|
41
|
+
@internal.should be_internal
|
42
|
+
@external.should_not be_internal
|
43
|
+
@internal.should_not be_external
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "named scopes" do
|
48
|
+
it "should return correct collections" do
|
49
|
+
Job.external.count.should == 2
|
50
|
+
Job.internal.count.should == 3
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
after do
|
55
|
+
Job.destroy_all
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe "When singleton type is defined" do
|
60
|
+
describe "with autocreate" do
|
61
|
+
before do
|
62
|
+
Job.instance_eval do
|
63
|
+
define_type :basic, :singleton => true, :autocreate => true
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe "when object doesn't exist yet" do
|
68
|
+
before do
|
69
|
+
Job.destroy_all
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should create object" do
|
73
|
+
Job.basic.should be_basic
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "when object exists" do
|
78
|
+
before do
|
79
|
+
Job.basic
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should not allow to create another instance of object" do
|
83
|
+
Job.new(:job_type => "basic").should_not be_valid
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
4
87
|
|
5
88
|
end
|
data/spec/spec.opts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
--color
|
1
|
+
--color
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: polymorphic_model
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Artur Roszczyk
|
@@ -22,6 +22,16 @@ dependencies:
|
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: 1.2.9
|
24
24
|
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: sqlite3-ruby
|
27
|
+
type: :development
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.2.4
|
34
|
+
version:
|
25
35
|
- !ruby/object:Gem::Dependency
|
26
36
|
name: activerecord
|
27
37
|
type: :runtime
|
@@ -52,6 +62,8 @@ files:
|
|
52
62
|
- lib/polymorphic_model.rb
|
53
63
|
- polymorphic_model.gemspec
|
54
64
|
- rails/init.rb
|
65
|
+
- spec/lib/database.rb
|
66
|
+
- spec/lib/job_model.rb
|
55
67
|
- spec/polymorphic_model_spec.rb
|
56
68
|
- spec/spec.opts
|
57
69
|
- spec/spec_helper.rb
|
@@ -84,5 +96,7 @@ signing_key:
|
|
84
96
|
specification_version: 3
|
85
97
|
summary: Alternative for ActiveRecord's Single Table Inheritance
|
86
98
|
test_files:
|
99
|
+
- spec/lib/database.rb
|
100
|
+
- spec/lib/job_model.rb
|
87
101
|
- spec/polymorphic_model_spec.rb
|
88
102
|
- spec/spec_helper.rb
|