acts_as_relatable 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -10,7 +10,7 @@ Gem installation :
10
10
 
11
11
  Or you can put it in your Gemfile :
12
12
 
13
- gem "acts_as_relatable", "~> 0.0.4"
13
+ gem "acts_as_relatable", "~> 0.0.5"
14
14
 
15
15
  and then run :
16
16
 
@@ -61,6 +61,9 @@ Followed by :
61
61
 
62
62
  @butter.relates_to!(@pancake, false)
63
63
 
64
+ # You can also create relationships with the ActsAsRelatable::Relationship class method
65
+
66
+ ActsAsRelatable::Relationship.make_between(@butter, @pancake) # Passing false as a third argument make it "one sided"
64
67
 
65
68
  === Fetching relationships
66
69
 
@@ -7,5 +7,18 @@ module ActsAsRelatable
7
7
  validates :relator_type, :presence => true
8
8
  validates :related_id, :presence => true
9
9
  validates :related_type, :presence => true
10
+ validate :self_relation
11
+
12
+ # This method relates two object together
13
+ def self.make_between(relator, related, bothsided=true)
14
+ relator.relates_to!(related, bothsided)
15
+ end
16
+
17
+ protected
18
+
19
+ # It's impossible to create a relation with self as related object.
20
+ def self_relation
21
+ errors.add(:base, "could not create a relation that links to the same element!") if related == relator
22
+ end
10
23
  end
11
24
  end
@@ -7,13 +7,21 @@ describe ActsAsRelatable::Relationship do
7
7
  it { should validate_presence_of :related_id }
8
8
  it { should validate_presence_of :related_type }
9
9
 
10
- context :associations do
11
- before {
12
- @product = Product.create(:name => 'product1')
13
- @shop = Shop.create(:name => 'shop1')
10
+ before {
11
+ @product = Product.create(:name => 'product1')
12
+ @shop = Shop.create(:name => 'shop1')
13
+ }
14
+
15
+ context :custom_validations do
16
+ it "doesn't relates when related is self" do
17
+ expect {
18
+ @shop.relates_to!(@shop)
19
+ }.to_not change(ActsAsRelatable::Relationship, :count)
20
+ end
21
+ end
14
22
 
15
- @product.relates_to! @shop
16
- }
23
+ context :associations do
24
+ before { @product.relates_to! @shop }
17
25
 
18
26
  context :relator do
19
27
  it "returns the object that made the relation" do
@@ -28,4 +36,20 @@ describe ActsAsRelatable::Relationship do
28
36
  end
29
37
  end
30
38
 
39
+
40
+ context :make_between do
41
+ context "relates two objects" do
42
+ it "both sided by default" do
43
+ expect {
44
+ ActsAsRelatable::Relationship.make_between(@product, @shop)
45
+ }.to change(ActsAsRelatable::Relationship, :count).by(2)
46
+ end
47
+
48
+ it "only one side" do
49
+ expect {
50
+ ActsAsRelatable::Relationship.make_between(@product, @shop, false)
51
+ }.to change(ActsAsRelatable::Relationship, :count).by(1)
52
+ end
53
+ end
54
+ end
31
55
  end
data/spec/spec_helper.rb CHANGED
@@ -32,6 +32,7 @@ if File.exists?(database_yml)
32
32
  ActiveRecord::Base.establish_connection(config)
33
33
  end
34
34
 
35
+ Dir.mkdir("./tmp") unless File.directory?("./tmp")
35
36
  ActiveRecord::Base.logger = Logger.new(File.join(File.dirname(__FILE__), "../tmp/debug.log"))
36
37
  ActiveRecord::Base.default_timezone = :utc
37
38
 
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: acts_as_relatable
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.4
5
+ version: 0.0.5
6
6
  platform: ruby
7
7
  authors:
8
8
  - "Fr\xC3\xA9d\xC3\xA9ric Malamitsas"
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-08-17 00:00:00 Z
13
+ date: 2011-08-19 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
@@ -100,7 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
100
100
  requirements: []
101
101
 
102
102
  rubyforge_project: acts_as_relatable
103
- rubygems_version: 1.8.7
103
+ rubygems_version: 1.8.8
104
104
  signing_key:
105
105
  specification_version: 3
106
106
  summary: Link AR objects easily with polymorphic associations