polymorphic_model 0.0.2 → 0.0.3
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/VERSION +1 -1
- data/lib/polymorphic_model.rb +16 -0
- data/polymorphic_model.gemspec +2 -2
- data/spec/polymorphic_model_spec.rb +8 -0
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.3
|
data/lib/polymorphic_model.rb
CHANGED
@@ -3,18 +3,34 @@ module PolymorphicModel
|
|
3
3
|
def polymorphic_model(options = {})
|
4
4
|
if options[:with_type_column]
|
5
5
|
@_polymorphic_column = options[:with_type_column]
|
6
|
+
@_model_types = []
|
6
7
|
extend PolymorphicModel::ClassMethods
|
7
8
|
end
|
8
9
|
end
|
9
10
|
end
|
10
11
|
|
11
12
|
module ClassMethods
|
13
|
+
def types
|
14
|
+
@_model_types.clone.freeze
|
15
|
+
end
|
16
|
+
|
17
|
+
def validates_type
|
18
|
+
validates_each @_polymorphic_column, {:on => :save} do |record, attr_name, value|
|
19
|
+
unless self.types.include?(value.to_sym)
|
20
|
+
record.errors.add_to_base("is undefined type (#{value.to_s}), correct types are: [#{self.types.map(&:to_s).join(', ')}]")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
12
25
|
def define_type(t, options = {})
|
13
26
|
column = @_polymorphic_column
|
27
|
+
@_model_types << t.to_sym
|
14
28
|
define_method :"#{t.to_s}?" do
|
15
29
|
send(column) == t.to_s
|
16
30
|
end
|
17
31
|
|
32
|
+
validates_type
|
33
|
+
|
18
34
|
condition_hash = {column => t.to_s}
|
19
35
|
if options[:singleton] == true
|
20
36
|
validates_uniqueness_of column, :if => :"#{t}?"
|
data/polymorphic_model.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
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.3"
|
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"]
|
12
|
-
s.date = %q{2009-11-
|
12
|
+
s.date = %q{2009-11-23}
|
13
13
|
s.description = %q{Alternative for ActiveRecord's Single Table Inheritance}
|
14
14
|
s.email = %q{artur.roszczyk@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -54,6 +54,14 @@ describe "When normal collection types are defined" do
|
|
54
54
|
Job.internal.count.should == 3
|
55
55
|
end
|
56
56
|
end
|
57
|
+
|
58
|
+
it "should allow only defined types" do
|
59
|
+
Job.new(:job_type => "other").should_not be_valid
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should provide list of defined types" do
|
63
|
+
Job.types.should include(:internal, :external)
|
64
|
+
end
|
57
65
|
end
|
58
66
|
|
59
67
|
describe "When singleton type is defined" do
|
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.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Artur Roszczyk
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-11-
|
12
|
+
date: 2009-11-23 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|