has_many_by_status 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/README ADDED
@@ -0,0 +1,3 @@
1
+ README
2
+ ========================================================================
3
+ has_many_by_status
@@ -0,0 +1,89 @@
1
+ module ActiveRecord #:nodoc:
2
+ module Has #:nodoc:
3
+
4
+ module ManyByStatus
5
+ def self.included(base) # :nodoc:
6
+ base.extend ClassMethods
7
+ end
8
+
9
+ module ClassMethods
10
+
11
+ STATUS_EXCLUDES = %w{deleted captcha pilot unregistered password}
12
+
13
+ def has_many_by_status(association_id, options = {}, &extension)
14
+ begin
15
+ # don't allow multiple calls
16
+ #return if self.included_modules.include?(ActiveRecord::Has::ManyByStatus::ActMethods)
17
+
18
+ self_class_name = self.to_s.downcase
19
+
20
+ send :include, ActiveRecord::Has::ManyByStatus::ActMethods
21
+
22
+ # check to make sure if the user has overridden the class_name field in the model.
23
+ # if they haven't then get it from the association_id.
24
+ unless options.has_key? :class_name
25
+ class_name = association_id.to_s.camelize
26
+ class_name = class_name.singularize
27
+ h_options = options.merge({:class_name => class_name})
28
+ else # use the overridden class_name
29
+ class_name = options[:class_name]
30
+ h_options = options # looks dumb, but isn't.
31
+ end
32
+ status_class_name = h_options[:status_class_name] || "Status"
33
+ h_options.delete(:status_class_name)
34
+ #puts "!!!!!!!status_class_name = #{status_class_name}"
35
+
36
+ class_eval do
37
+ #puts "eval(\"#{status_class_name}.active.id\") = #{eval("#{status_class_name}.active.id")}"
38
+ # build default has_many as active
39
+ #puts "association_id = #{association_id}"
40
+ #puts "h_options = #{h_options.inspect}"
41
+ has_many "#{association_id}".to_sym, h_options.merge({:conditions => ["status_id = ?", eval("#{status_class_name}.active.id")]})
42
+ # build default has_many ALL
43
+ has_many "all_#{association_id}".to_sym, h_options
44
+
45
+ # build has_many for each status
46
+ #puts "let's get the status' from the db..."
47
+ rows = eval("#{status_class_name}.find(:all)")
48
+ #puts "rows.size = #{rows.size}"
49
+ rows.each do |status| #get all the statuses in the db.
50
+ unless STATUS_EXCLUDES.include?(status.name) # don't build a deleted method
51
+ has_many "#{status.name}_#{association_id}".to_sym, h_options.merge({:conditions => ["status_id = ?", status.id]})
52
+ end
53
+ end
54
+ end
55
+
56
+ # let's build deleted accessors if the object is paranoid
57
+ if self.respond_to? :paranoid?
58
+ class_eval do
59
+ x_options = options
60
+ x_options.delete(:dependent)
61
+ define_method("deleted_#{association_id}") do
62
+ eval("#{class_name}.find_with_deleted(:all, x_options.merge({:conditions => [\"#{self_class_name}_id = ? and status_id = ?\", self.id, Status.deleted.id]}))")
63
+ end
64
+
65
+ define_method("all_#{association_id}_with_deleted") do
66
+ eval("#{class_name}.find_with_deleted(:all, x_options.merge({:conditions => [\"#{self_class_name}_id = ?\", self.id]}))")
67
+ end
68
+ end
69
+ end
70
+ rescue => ex
71
+ puts "Error in has_many_by_status: #{ex.message}"
72
+ puts ex.backtrace
73
+ end
74
+ end
75
+ end
76
+
77
+ module ActMethods
78
+ def self.included(base) # :nodoc:
79
+ base.extend ClassMethods
80
+ end
81
+
82
+ module ClassMethods
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
88
+
89
+ ActiveRecord::Base.send :include, ActiveRecord::Has::ManyByStatus
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class HasManyByStatuTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def test_truth
9
+ assert false
10
+ end
11
+ end
@@ -0,0 +1 @@
1
+ require "test/unit"
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.2
3
+ specification_version: 1
4
+ name: has_many_by_status
5
+ version: !ruby/object:Gem::Version
6
+ version: 1.0.0
7
+ date: 2007-03-01 00:00:00 -05:00
8
+ summary: has_many_by_status
9
+ require_paths:
10
+ - lib
11
+ - lib
12
+ email:
13
+ homepage:
14
+ rubyforge_project:
15
+ description: "has_many_by_status was developed by: markbates"
16
+ autorequire:
17
+ - has_many_by_status
18
+ - acts_as_constant
19
+ default_executable:
20
+ bindir: bin
21
+ has_rdoc: false
22
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
23
+ requirements:
24
+ - - ">"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.0.0
27
+ version:
28
+ platform: ruby
29
+ signing_key:
30
+ cert_chain:
31
+ post_install_message:
32
+ authors:
33
+ - markbates
34
+ files:
35
+ - lib/has_many_by_status.rb
36
+ - README
37
+ test_files:
38
+ - test/has_many_by_status_test.rb
39
+ - test/test_helper.rb
40
+ rdoc_options: []
41
+
42
+ extra_rdoc_files: []
43
+
44
+ executables: []
45
+
46
+ extensions: []
47
+
48
+ requirements: []
49
+
50
+ dependencies:
51
+ - !ruby/object:Gem::Dependency
52
+ name: rails
53
+ version_requirement:
54
+ version_requirements: !ruby/object:Gem::Version::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: 1.2.1
59
+ version:
60
+ - !ruby/object:Gem::Dependency
61
+ name: acts_as_constant
62
+ version_requirement:
63
+ version_requirements: !ruby/object:Gem::Version::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: 1.0.2
68
+ version: