acts-as-joinable 0.1.0 → 0.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.
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.0"
8
+ s.version = "0.1.1"
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"
@@ -40,11 +40,11 @@ module ActsAsJoinable
40
40
  # acts_as_joinable_on :tenants, :as => :parent
41
41
  # User
42
42
  def initialize_acts_as_joinable_on_core
43
- joins = acts_as_joinable_config.dup
44
- block = joins.pop
45
- options = joins.extract_options!
43
+ joins = acts_as_joinable_config.dup
44
+ block = joins.pop
45
+ options = joins.extract_options!
46
46
  if joins.empty?
47
- joins = ActsAsJoinable.models
47
+ joins = ActsAsJoinable.models
48
48
  relationships = [:child]
49
49
  else
50
50
  relationships = [options[:as] || :parent].flatten.map(&:to_sym)
@@ -54,7 +54,7 @@ module ActsAsJoinable
54
54
 
55
55
  association_type = options[:limit] == 1 ? :has_one : :has_many
56
56
 
57
- scope_name = options[:named_scope]
57
+ scope_name = options[:named_scope]
58
58
 
59
59
  joins.map!(&:to_sym)
60
60
 
@@ -125,16 +125,11 @@ module ActsAsJoinable
125
125
 
126
126
  join_value = value
127
127
  if join_context
128
- unless join_context == class_name.underscore
129
- condition_string = "(#{ActsAsJoinable::Relationship.table_name.to_s}.context IN (?))"
130
- unless join_value
131
- # join_value = singular_type.to_s
132
- end
133
- condition_string << " AND (#{ActsAsJoinable::Relationship.table_name.to_s}.value = ?)" if join_value
134
- join_contexts = [join_context, class_name.underscore]
135
- conditions = [condition_string, join_contexts]
136
- conditions << join_value.to_s if join_value
137
- end
128
+ condition_string = "(#{ActsAsJoinable::Relationship.table_name.to_s}.context IN (?))"
129
+ condition_string << " AND (#{ActsAsJoinable::Relationship.table_name.to_s}.value = ?)" if join_value
130
+ join_contexts = [join_context, class_name.underscore]
131
+ conditions = [condition_string, join_contexts]
132
+ conditions << join_value.to_s if join_value
138
133
 
139
134
  through_options = {
140
135
  :class_name => "ActsAsJoinable::Relationship",
@@ -162,22 +157,7 @@ module ActsAsJoinable
162
157
  #send(method_scope)
163
158
  # has_many :child_users, :through => :child_relationships
164
159
  add_association(relationship.to_s, plural_type, options, join_context, join_value, nestable, &block)
165
-
166
- if association_type == :has_one
167
- define_method singular_type do
168
- send(plural_type).first
169
- end
170
- define_method "#{singular_type}=" do |value|
171
- send(relationship_with_context).destroy_all
172
- send(plural_type) << value
173
- end
174
- define_method "#{singular_type}_id" do
175
- send(singular_type).id rescue nil
176
- end
177
- define_method "#{singular_type}_id=" do |id|
178
- send("#{singular_type}=", class_name.constantize.find(id))
179
- end
180
- end
160
+ add_has_one(singular_type, plural_type, relationship_with_context, class_name) if association_type == :has_one
181
161
  end
182
162
  end
183
163
  end
@@ -192,16 +172,25 @@ module ActsAsJoinable
192
172
  role.to_s == "parent" ? "child" : "parent"
193
173
  end
194
174
 
175
+ def add_has_one(singular_type, plural_type, relationship_with_context, class_name)
176
+ define_method singular_type do
177
+ send(plural_type).last
178
+ end
179
+ define_method "#{singular_type}=" do |value|
180
+ # send(relationship_with_context).delete_all
181
+ send(plural_type) << value
182
+ end
183
+ define_method "#{singular_type}_id" do
184
+ send(singular_type).id rescue nil
185
+ end
186
+ define_method "#{singular_type}_id=" do |id|
187
+ send("#{singular_type}=", class_name.constantize.find(id))
188
+ end
189
+ end
190
+
195
191
  def add_association(relationship, plural_type, options, join_context, join_value, nestable, &block)
196
192
  eval_options = {:context => join_context}
197
193
  eval_options[:value] = join_value unless join_value.blank?
198
- send(:has_many, "#{relationship}_#{plural_type}".to_sym, options) do
199
- class_eval <<-EOF
200
- def construct_join_attributes(associate)
201
- super.merge(#{eval_options.inspect})
202
- end
203
- EOF
204
- end
205
194
  # has_many :users, :through => :child_relationships
206
195
 
207
196
  unless self.reflect_on_all_associations.map(&:name).include?(plural_type.to_sym)
@@ -211,8 +200,8 @@ module ActsAsJoinable
211
200
  super.merge(#{eval_options.inspect})
212
201
  end
213
202
  EOF
203
+
214
204
  end
215
-
216
205
  accepts_nested_attributes_for plural_type.to_sym if nestable
217
206
  end
218
207
  end
@@ -13,6 +13,7 @@ require 'logger'
13
13
  this = File.expand_path(File.dirname(__FILE__))
14
14
 
15
15
  #ActiveRecord::Base.logger = Logger.new(STDOUT)
16
+ # b.class.reflect_on_all_associations.detect {|i| i.name == :child_location_relationship}
16
17
 
17
18
  require File.expand_path(File.join(this, '/../lib/acts-as-joinable'))
18
19
  require File.join(this, "database")
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts-as-joinable
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 0
10
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Lance Pollard
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-09-20 00:00:00 -05:00
18
+ date: 2010-09-21 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies: []
21
21