polymorpheus 3.0.0 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -1
- data/lib/polymorpheus/interface/belongs_to_polymorphic.rb +4 -3
- data/lib/polymorpheus/interface_builder.rb +2 -2
- data/lib/polymorpheus/interface_builder/association.rb +4 -3
- data/lib/polymorpheus/version.rb +1 -1
- data/spec/interface_spec.rb +15 -0
- data/spec/support/class_defs.rb +20 -0
- data/spec/support/db_setup.rb +6 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b35be425d188561def6ede1eef462b1d3dee4835
|
4
|
+
data.tar.gz: 5f509e7b56f2966e2062b75640ac73d56a9e32c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a70e7b2ef8f96e16b57e295d1285743053bb1719f82d68983fb9a12ac69e3003c26f1c2aeb4cfb806893dceac1e548e86f5e1a740ba630d474788888d01dd0ce
|
7
|
+
data.tar.gz: d542e42e2cac59818dd0f3469032b95234e875667825d9e9b4557cd48f6becbab45c43ebf344b6d76d5d6611ef454d57d121ffbc2faa92937ef35bb9efea251c
|
data/README.md
CHANGED
@@ -80,12 +80,14 @@ end
|
|
80
80
|
|
81
81
|
```ruby
|
82
82
|
class Picture < ActiveRecord::Base
|
83
|
+
# takes same additional options as belongs_to
|
83
84
|
belongs_to_polymorphic :employee, :product, :as => :imageable
|
84
85
|
validates_polymorph :imageable
|
85
86
|
end
|
86
87
|
|
87
88
|
class Employee < ActiveRecord::Base
|
88
|
-
|
89
|
+
# takes same additional options as has_many
|
90
|
+
has_many_as_polymorph :pictures, inverse_of: employee
|
89
91
|
end
|
90
92
|
|
91
93
|
class Product < ActiveRecord::Base
|
@@ -2,9 +2,10 @@ module Polymorpheus
|
|
2
2
|
module Interface
|
3
3
|
module BelongsToPolymorphic
|
4
4
|
def belongs_to_polymorphic(*association_names, options)
|
5
|
-
polymorphic_api = options
|
5
|
+
polymorphic_api = options.delete(:as)
|
6
6
|
builder = Polymorpheus::InterfaceBuilder.new(polymorphic_api,
|
7
|
-
association_names
|
7
|
+
association_names,
|
8
|
+
options)
|
8
9
|
|
9
10
|
# The POLYMORPHEUS_ASSOCIATIONS constant is useful for two reasons:
|
10
11
|
#
|
@@ -20,7 +21,7 @@ module Polymorpheus
|
|
20
21
|
|
21
22
|
# Set belongs_to associations
|
22
23
|
builder.associations.each do |association|
|
23
|
-
belongs_to association.name.to_sym
|
24
|
+
belongs_to association.name.to_sym, association.options
|
24
25
|
end
|
25
26
|
|
26
27
|
# Exposed interface for introspection
|
@@ -6,10 +6,10 @@ module Polymorpheus
|
|
6
6
|
attr_reader :interface_name,
|
7
7
|
:associations
|
8
8
|
|
9
|
-
def initialize(interface_name, association_names)
|
9
|
+
def initialize(interface_name, association_names, options)
|
10
10
|
@interface_name = interface_name
|
11
11
|
@associations = association_names.map do |association_name|
|
12
|
-
Polymorpheus::InterfaceBuilder::Association.new(association_name)
|
12
|
+
Polymorpheus::InterfaceBuilder::Association.new(association_name, options)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
@@ -5,10 +5,11 @@ module Polymorpheus
|
|
5
5
|
include ActiveSupport::Inflector
|
6
6
|
|
7
7
|
attr_reader :name,
|
8
|
-
:key
|
8
|
+
:key,
|
9
|
+
:options
|
9
10
|
|
10
|
-
def initialize(name)
|
11
|
-
@name = name.to_s.downcase
|
11
|
+
def initialize(name, options)
|
12
|
+
@name, @options = name.to_s.downcase, options
|
12
13
|
@key = "#{@name}_id"
|
13
14
|
end
|
14
15
|
|
data/lib/polymorpheus/version.rb
CHANGED
data/spec/interface_spec.rb
CHANGED
@@ -198,3 +198,18 @@ describe '.validates_polymorph' do
|
|
198
198
|
["You must specify exactly one of the following: {hero, villain}"]
|
199
199
|
end
|
200
200
|
end
|
201
|
+
|
202
|
+
describe 'association options' do
|
203
|
+
it 'without options' do
|
204
|
+
Drawing.new.association(:book).reflection.inverse_of.should == nil
|
205
|
+
Drawing.new.association(:binder).reflection.inverse_of.should == nil
|
206
|
+
Book.new.association(:drawings).reflection.inverse_of.should == nil
|
207
|
+
Binder.new.association(:drawings).reflection.inverse_of.should == nil
|
208
|
+
end
|
209
|
+
it 'with options' do
|
210
|
+
Picture.new.association(:web_page).reflection.inverse_of.name.should == :pictures
|
211
|
+
Picture.new.association(:printed_work).reflection.inverse_of.name.should == :pictures
|
212
|
+
WebPage.new.association(:pictures).reflection.inverse_of.name.should == :web_page
|
213
|
+
PrintedWork.new.association(:pictures).reflection.inverse_of.name.should == :printed_work
|
214
|
+
end
|
215
|
+
end
|
data/spec/support/class_defs.rb
CHANGED
@@ -51,3 +51,23 @@ end
|
|
51
51
|
# (Unless this is LOTR, but let's ignore that for now.)
|
52
52
|
class Tree < ActiveRecord::Base
|
53
53
|
end
|
54
|
+
|
55
|
+
class Drawing < ActiveRecord::Base
|
56
|
+
belongs_to_polymorphic :book, :binder, as: :one_way_rel
|
57
|
+
end
|
58
|
+
class Book < ActiveRecord::Base
|
59
|
+
has_many_as_polymorph :drawings
|
60
|
+
end
|
61
|
+
class Binder < ActiveRecord::Base
|
62
|
+
has_many_as_polymorph :drawings
|
63
|
+
end
|
64
|
+
|
65
|
+
class Picture < ActiveRecord::Base
|
66
|
+
belongs_to_polymorphic :web_page, :printed_work, as: :inverted_rel, inverse_of: :pictures
|
67
|
+
end
|
68
|
+
class WebPage < ActiveRecord::Base
|
69
|
+
has_many_as_polymorph :pictures, inverse_of: :web_page
|
70
|
+
end
|
71
|
+
class PrintedWork < ActiveRecord::Base
|
72
|
+
has_many_as_polymorph :pictures, inverse_of: :printed_work
|
73
|
+
end
|
data/spec/support/db_setup.rb
CHANGED
@@ -15,6 +15,12 @@ ActiveRecord::Schema.define do
|
|
15
15
|
create_table :alien_demigods
|
16
16
|
create_table :supervillains
|
17
17
|
create_table :trees
|
18
|
+
create_table :drawings
|
19
|
+
create_table :books
|
20
|
+
create_table :binders
|
21
|
+
create_table :pictures
|
22
|
+
create_table :web_pages
|
23
|
+
create_table :printed_works
|
18
24
|
|
19
25
|
create_table :story_arcs do |t|
|
20
26
|
t.integer :hero_id
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: polymorpheus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Barun Singh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-11-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|