acts-as-joinable 0.1.6.8 → 0.1.7

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.
@@ -98,4 +98,6 @@ You can always add columns to the relationship table, but the foundation is set.
98
98
 
99
99
  <cite>copyright @viatropos 2010</cite>
100
100
 
101
- http://rors.org/2008/10/26/dont-escape-in-strings
101
+ http://rors.org/2008/10/26/dont-escape-in-strings
102
+
103
+ - Handle case where one side has_one and the other has_many
data/Rakefile CHANGED
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'
5
5
  spec = Gem::Specification.new do |s|
6
6
  s.name = "acts-as-joinable"
7
7
  s.authors = ["Lance Pollard"]
8
- s.version = "0.1.6.8"
8
+ s.version = "0.1.7"
9
9
  s.summary = "ActsAsJoinable: DRYing up Many-to-Many Relationships in ActiveRecord"
10
10
  s.homepage = "http://github.com/viatropos/acts-as-joinable"
11
11
  s.email = "lancejpollard@gmail.com"
@@ -61,6 +61,7 @@ module ActsAsJoinable
61
61
  # class name of the model we're joining to self
62
62
  # otherwise it's retrieved from joins.each...
63
63
  class_name = opts[:class_name] || nil
64
+ sti = (opts[:subclasses] || []).map { |i| i.to_s.camelize.constantize }
64
65
  # contexts defining the relationship between self and target
65
66
  contexts = [opts[:context] || []].flatten
66
67
  context = contexts.first
@@ -79,7 +80,7 @@ module ActsAsJoinable
79
80
 
80
81
  after_destroy :destroy_relationships unless after_destroy.map(&:method).include?(:destroy_relationships)
81
82
 
82
- related_classes = (ancestors.reverse - included_modules + send(:subclasses)).uniq
83
+ related_classes = (ancestors.reverse - included_modules + send(:subclasses) + sti).uniq
83
84
  wanted_classes = []
84
85
  while wanted_classes.push(related_classes.pop)
85
86
  break if wanted_classes.last == base_class.superclass
@@ -265,7 +266,7 @@ module ActsAsJoinable
265
266
  send(plural_type) << value
266
267
  end
267
268
  send(plural_type).each do |object|
268
- send(plural_type).delete(object) unless object.id == value.id
269
+ send(plural_type).delete(object) unless (value && object.id == value.id)
269
270
  end
270
271
  end
271
272
  define_method "#{singular_type}_id" do
@@ -319,17 +320,17 @@ module ActsAsJoinable
319
320
  return false if conditions[:context] && !Array(conditions[:context]).include?(relationship.context)
320
321
  true
321
322
  end
322
-
323
+
323
324
  def parent_relationships_for(conditions = {})
324
325
  parent_relationships.select do |relationship|
325
326
  relationship_matches?(relationship, conditions)
326
- end
327
+ end.uniq_by(&:parent_id)
327
328
  end
328
329
 
329
330
  def child_relationships_for(conditions = {})
330
331
  child_relationships.select do |relationship|
331
332
  relationship_matches?(relationship, conditions)
332
- end
333
+ end.uniq_by(&:child_id)
333
334
  end
334
335
  end
335
336
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts-as-joinable
3
3
  version: !ruby/object:Gem::Version
4
- hash: 79
4
+ hash: 21
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 6
10
- - 8
11
- version: 0.1.6.8
9
+ - 7
10
+ version: 0.1.7
12
11
  platform: ruby
13
12
  authors:
14
13
  - Lance Pollard
@@ -16,7 +15,7 @@ autorequire:
16
15
  bindir: bin
17
16
  cert_chain: []
18
17
 
19
- date: 2010-10-05 00:00:00 -05:00
18
+ date: 2010-10-06 00:00:00 -05:00
20
19
  default_executable:
21
20
  dependencies: []
22
21