winton-acts_as_relationable 1.0.3 → 1.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.
@@ -15,9 +15,14 @@ Features
15
15
  Install
16
16
  -------
17
17
 
18
+ gem install winton-acts_as_relationable
19
+
20
+ ### Add to `environment.rb`
21
+
22
+ config.gem 'winton-acts_as_relationable', :lib => 'acts_as_relationable', :source => 'http://gems.github.com'
23
+
18
24
  ### From your application directory
19
25
 
20
- gem install winton-acts_as_relationable
21
26
  script/generate acts_as_relationable
22
27
  rake db:migrate
23
28
 
@@ -28,4 +33,4 @@ Usage
28
33
  [Check out the wiki](http://github.com/winton/acts_as_relationable/wikis) for usage examples.
29
34
 
30
35
 
31
- ##### Copyright © 2008 [Winton Welsh](mail@wintoni.us)
36
+ ##### Copyright © 2008 [Winton Welsh](mailto:mail@wintoni.us)
data/init.rb CHANGED
@@ -1 +1,2 @@
1
- require 'acts_as_relationable'
1
+ require 'acts_as_relationable'
2
+ ActiveRecord::Base.send :include, AppTower::ActsAsRelationable
@@ -1,106 +1,105 @@
1
- require 'active_record'
1
+ module AppTower
2
+ module ActsAsRelationable
3
+
4
+ MODELS = Dir[RAILS_ROOT + "/app/models/*.rb"].collect { |f| File.basename f, '.rb' }
5
+
6
+ def self.included(base)
7
+ base.extend ActMethods
8
+ end
9
+
10
+ module ActMethods
11
+ def acts_as_relationable(*types)
12
+ if types.empty? # Relationship model
13
+ belongs_to :parent, :polymorphic => true
14
+ belongs_to :child, :polymorphic => true
2
15
 
3
- module ActsAsRelationable
4
- MODELS = Dir[RAILS_ROOT + "/app/models/*.rb"].collect { |f| File.basename f, '.rb' }
5
-
6
- def self.included(base)
7
- base.extend ClassMethods
8
- end
16
+ MODELS.each do |m|
17
+ belongs_to "parent_#{m}".intern, :foreign_key => 'parent_id', :class_name => m.camelize
18
+ belongs_to "child_#{m}".intern, :foreign_key => 'child_id', :class_name => m.camelize
19
+ end
20
+ else
21
+ options = types.extract_options!
22
+ sql = options[:conditions]
23
+ table = options[:table]
24
+ fields = options[:fields] || []
25
+ fields = [ fields ] unless fields.respond_to?(:flatten)
9
26
 
10
- module ClassMethods
11
- def acts_as_relationable(*types)
12
- if types.empty? # Relationship model
13
- belongs_to :parent, :polymorphic => true
14
- belongs_to :child, :polymorphic => true
15
-
16
- MODELS.each do |m|
17
- belongs_to "parent_#{m}".intern, :foreign_key => 'parent_id', :class_name => m.camelize
18
- belongs_to "child_#{m}".intern, :foreign_key => 'child_id', :class_name => m.camelize
19
- end
20
- else
21
- options = types.extract_options!
22
- sql = options[:conditions]
23
- table = options[:table]
24
- fields = options[:fields] || []
25
- fields = [ fields ] unless fields.respond_to?(:flatten)
26
-
27
- before_save :save_relationship_fields
27
+ has_many :parent_relationships, :class_name => 'Relationship', :as => :child
28
+ has_many :child_relationships, :class_name => 'Relationship', :as => :parent
29
+
30
+ types.each do |type|
31
+ type = type.to_s
32
+ table = table || type
33
+ select = "#{table}.*, relationships.id AS relationship_id#{fields.empty? ? '' : ', '}" + fields.collect { |f| "relationships.#{f}" }.join(', ')
28
34
 
29
- has_many :parent_relationships, :class_name => 'Relationship', :as => :child
30
- has_many :child_relationships, :class_name => 'Relationship', :as => :parent
31
-
32
- types.each do |type|
33
- type = type.to_s
34
- table = table || type
35
- select = "#{table}.*, relationships.id AS relationship_id#{fields.empty? ? '' : ', '}" + fields.collect { |f| "relationships.#{f}" }.join(', ')
36
-
37
- has_many 'parent_' + type,
38
- :select => select, :conditions => sql, :through => :parent_relationships,
39
- :source => :parent, :class_name => type.classify, :source_type => table.classify do
40
- fields.each do |field|
41
- define_method field.to_s.pluralize do |*args|
42
- value = args[0] || 1
43
- find :all, :conditions => [ "relationships.#{field} = ?", value ]
35
+ has_many 'parent_' + type,
36
+ :select => select, :conditions => sql, :through => :parent_relationships,
37
+ :source => :parent, :class_name => type.classify, :source_type => table.classify do
38
+ fields.each do |field|
39
+ define_method field.to_s.pluralize do |*args|
40
+ value = args[0] || 1
41
+ find :all, :conditions => [ "relationships.#{field} = ?", value ]
42
+ end
44
43
  end
45
44
  end
46
- end
47
-
48
- has_many 'child_' + type,
49
- :select => select, :conditions => sql, :through => :child_relationships,
50
- :source => :child, :class_name => type.classify, :source_type => table.classify do
51
- fields.each do |field|
52
- define_method field.to_s.pluralize do |*args|
53
- value = args[0] || 1
54
- find :all, :conditions => [ "relationships.#{field} = ?", value ]
45
+
46
+ has_many 'child_' + type,
47
+ :select => select, :conditions => sql, :through => :child_relationships,
48
+ :source => :child, :class_name => type.classify, :source_type => table.classify do
49
+ fields.each do |field|
50
+ define_method field.to_s.pluralize do |*args|
51
+ value = args[0] || 1
52
+ find :all, :conditions => [ "relationships.#{field} = ?", value ]
53
+ end
54
+ end
55
+ end
56
+
57
+ self.class_eval do
58
+ # Records reader
59
+ define_method type do |*args|
60
+ if (read_attribute(:type) || self.class.to_s) < (args.empty? ? type.classify : args[0].to_s)
61
+ eval "self.child_#{type}"
62
+ else
63
+ eval "self.parent_#{type}"
55
64
  end
56
65
  end
57
66
  end
58
-
59
- self.class_eval do
60
- define_method type do |*args|
61
- if (read_attribute(:type) || self.class.to_s) < (args.empty? ? type.classify : args[0].to_s)
62
- eval "self.child_#{type}"
63
- else
64
- eval "self.parent_#{type}"
67
+
68
+ fields.each do |field|
69
+ # Relationship field writer
70
+ self.class_eval do
71
+ define_method field.to_s + '=' do |value|
72
+ modified = read_attribute(:modified_relationship_fields) || []
73
+ modified << field
74
+ write_attribute :modified_relationship_fields, modified.uniq
75
+ write_attribute field, value
76
+ end
65
77
  end
66
78
  end
67
79
  end
68
- end
69
-
70
- fields.each do |field|
71
- self.class_eval do
72
- define_method field.to_s + '=' do |value|
73
- modified = read_attribute(:modified_relationship_fields) || []
74
- modified << field
75
- write_attribute :modified_relationship_fields, modified.uniq
76
- write_attribute field, value
77
- end
78
- define_method field.to_s do
79
- read_attribute(field) || nil
80
- end
80
+ unless included_modules.include? InstanceMethods
81
+ extend ClassMethods
82
+ include InstanceMethods
83
+ before_save :save_relationship_fields
81
84
  end
82
85
  end
83
86
  end
84
-
85
- include ActsAsRelationable::InstanceMethods
86
- extend ActsAsRelationable::SingletonMethods
87
87
  end
88
- end
89
-
90
- module SingletonMethods
91
- end
92
-
93
- module InstanceMethods
94
- def save_relationship_fields
95
- return unless read_attribute(:relationship_id) && read_attribute(:modified_relationship_fields)
96
- r = Relationship.find self.relationship_id
97
- read_attribute(:modified_relationship_fields).each do |field|
98
- r[field] = self[field]
88
+
89
+ module ClassMethods
90
+ end
91
+
92
+ module InstanceMethods
93
+ # Before save
94
+ def save_relationship_fields
95
+ return unless read_attribute(:relationship_id) && read_attribute(:modified_relationship_fields)
96
+ r = Relationship.find self.relationship_id
97
+ read_attribute(:modified_relationship_fields).each do |field|
98
+ r[field] = self[field]
99
+ end
100
+ r.save
101
+ write_attribute :modified_relationship_fields, nil
99
102
  end
100
- r.save
101
- write_attribute :modified_relationship_fields, nil
102
103
  end
103
104
  end
104
- end
105
-
106
- ActiveRecord::Base.send(:include, ActsAsRelationable)
105
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: winton-acts_as_relationable
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: "1.1"
5
5
  platform: ruby
6
6
  authors:
7
7
  - Winton Welsh
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-08-16 00:00:00 -07:00
12
+ date: 2008-11-26 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency