mirror of
https://github.com/TracksApp/tracks.git
synced 2025-12-23 02:30:12 +01:00
upgrade has_many_polymorphs
This commit is contained in:
parent
2d11109b8b
commit
f97ca2f6af
178 changed files with 132 additions and 108 deletions
|
|
@ -1,14 +1,13 @@
|
|||
|
||||
Has_many_polymorphs
|
||||
|
||||
An ActiveRecord plugin for self-referential and double-sided polymorphic associations.
|
||||
|
||||
== License
|
||||
|
||||
Copyright 2006-2008 Cloudburst, LLC. Licensed under the AFL 3. See the included LICENSE file.
|
||||
Copyright 2007 Cloudburst, LLC. Licensed under the AFL 3. See the included LICENSE file.
|
||||
|
||||
The public certificate for the gem is here[http://rubyforge.org/frs/download.php/25331/evan_weaver-original-public_cert.pem].
|
||||
|
||||
If you use this software, please {make a donation}[http://blog.evanweaver.com/donate/], or {recommend Evan}[http://www.workingwithrails.com/person/7739-evan-weaver] at Working with Rails.
|
||||
The public certificate for this gem is at http://rubyforge.org/frs/download.php/25331/evan_weaver-original-public_cert.pem.
|
||||
|
||||
== Description
|
||||
|
||||
|
|
@ -36,7 +35,7 @@ The plugin also includes a generator for a tagging system, a common use case (se
|
|||
== Installation
|
||||
|
||||
To install the Rails plugin, run:
|
||||
script/plugin install git://github.com/fauna/has_many_polymorphs.git
|
||||
script/plugin install svn://rubyforge.org/var/svn/fauna/has_many_polymorphs/trunk
|
||||
|
||||
There's also a gem version. To install it instead, run:
|
||||
sudo gem install has_many_polymorphs
|
||||
|
|
@ -188,7 +187,7 @@ Note that because of the way Rails reloads model classes, the plugin can sometim
|
|||
|
||||
== Reporting problems
|
||||
|
||||
The support forum is here[http://rubyforge.org/forum/forum.php?forum_id=16450].
|
||||
* http://rubyforge.org/forum/forum.php?forum_id=16450
|
||||
|
||||
Patches and contributions are very welcome. Please note that contributors are required to assign copyright for their additions to Cloudburst, LLC.
|
||||
|
||||
|
|
@ -101,14 +101,13 @@ class ActiveRecord::Base #:nodoc:
|
|||
end
|
||||
|
||||
module TaggingFinders
|
||||
#
|
||||
# Find all the objects tagged with the supplied list of tags
|
||||
#
|
||||
# Usage : Model.tagged_with("ruby")
|
||||
# Model.tagged_with("hello", "world")
|
||||
# Model.tagged_with("hello", "world", :limit => 10)
|
||||
#
|
||||
# XXX This query strategy is not performant, and needs to be rewritten as an inverted join or a series of unions
|
||||
#
|
||||
def tagged_with(*tag_list)
|
||||
options = tag_list.last.is_a?(Hash) ? tag_list.pop : {}
|
||||
tag_list = parse_tags(tag_list)
|
||||
|
|
@ -126,16 +125,11 @@ class ActiveRecord::Base #:nodoc:
|
|||
sql << "AND taggings.taggable_type = '#{ActiveRecord::Base.send(:class_name_of_active_record_descendant, self).to_s}' "
|
||||
sql << "AND taggings.tag_id = tags.id "
|
||||
|
||||
tag_list_condition = tag_list.map {|name| "'#{name}'"}.join(", ")
|
||||
tag_list_condition = tag_list.map {|t| "'#{t}'"}.join(", ")
|
||||
|
||||
sql << "AND (tags.name IN (#{sanitize_sql(tag_list_condition)})) "
|
||||
sql << "AND #{sanitize_sql(options[:conditions])} " if options[:conditions]
|
||||
|
||||
columns = column_names.map do |column|
|
||||
"#{table_name}.#{column}"
|
||||
end.join(", ")
|
||||
|
||||
sql << "GROUP BY #{columns} "
|
||||
sql << "GROUP BY #{table_name}.id "
|
||||
sql << "HAVING COUNT(taggings.tag_id) = #{tag_list.size}"
|
||||
|
||||
add_order!(sql, options[:order], scope)
|
||||
58
vendor/gems/has_many_polymorphs-2.12/has_many_polymorphs.gemspec
vendored
Normal file
58
vendor/gems/has_many_polymorphs-2.12/has_many_polymorphs.gemspec
vendored
Normal file
File diff suppressed because one or more lines are too long
17
vendor/gems/has_many_polymorphs-2.12/lib/has_many_polymorphs/configuration.rb
vendored
Normal file
17
vendor/gems/has_many_polymorphs-2.12/lib/has_many_polymorphs/configuration.rb
vendored
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
|
||||
=begin rdoc
|
||||
Access the <tt>has_many_polymorphs_options</tt> hash in your Rails::Initializer.run#after_initialize block if you need to modify the behavior of Rails::Initializer::HasManyPolymorphsAutoload.
|
||||
=end
|
||||
|
||||
class Rails::Configuration
|
||||
|
||||
def has_many_polymorphs_options
|
||||
::HasManyPolymorphs.options
|
||||
end
|
||||
|
||||
def has_many_polymorphs_options=(hash)
|
||||
::HasManyPolymorphs.options = HashWithIndifferentAccess.new(hash)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
|
@ -3,18 +3,17 @@ module ActiveRecord #:nodoc:
|
|||
|
||||
module ClassMethods #:nodoc:
|
||||
|
||||
# Update the default reflection switch so that <tt>:has_many_polymorphs</tt> types get instantiated.
|
||||
# It's not a composed method so we have to override the whole thing.
|
||||
# Update the default reflection switch so that <tt>:has_many_polymorphs</tt> types get instantiated. It's not a composed method so we have to override the whole thing.
|
||||
def create_reflection(macro, name, options, active_record)
|
||||
case macro
|
||||
when :has_many, :belongs_to, :has_one, :has_and_belongs_to_many
|
||||
klass = options[:through] ? ThroughReflection : AssociationReflection
|
||||
reflection = klass.new(macro, name, options, active_record)
|
||||
reflection = AssociationReflection.new(macro, name, options, active_record)
|
||||
when :composed_of
|
||||
reflection = AggregateReflection.new(macro, name, options, active_record)
|
||||
# added by has_many_polymorphs #
|
||||
# added by has_many_polymorphs #
|
||||
when :has_many_polymorphs
|
||||
reflection = PolymorphicReflection.new(macro, name, options, active_record)
|
||||
# end added #
|
||||
end
|
||||
write_inheritable_hash :reflections, name => reflection
|
||||
reflection
|
||||
44
vendor/gems/has_many_polymorphs-2.12/test/integration/app/db/schema.rb
vendored
Normal file
44
vendor/gems/has_many_polymorphs-2.12/test/integration/app/db/schema.rb
vendored
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
# This file is autogenerated. Instead of editing this file, please use the
|
||||
# migrations feature of ActiveRecord to incrementally modify your database, and
|
||||
# then regenerate this schema definition.
|
||||
|
||||
ActiveRecord::Schema.define(:version => 9) do
|
||||
|
||||
create_table "double_sti_parent_relationships", :force => true do |t|
|
||||
t.column "the_bone_type", :string, :default => "", :null => false
|
||||
t.column "the_bone_id", :integer, :null => false
|
||||
t.column "parent_type", :string, :default => "", :null => false
|
||||
t.column "parent_id", :integer, :null => false
|
||||
end
|
||||
|
||||
create_table "double_sti_parents", :force => true do |t|
|
||||
t.column "name", :string
|
||||
end
|
||||
|
||||
create_table "library_models", :force => true do |t|
|
||||
t.column "name", :string
|
||||
end
|
||||
|
||||
create_table "organic_substances", :force => true do |t|
|
||||
t.column "type", :string
|
||||
end
|
||||
|
||||
create_table "single_sti_parent_relationships", :force => true do |t|
|
||||
t.column "the_bone_type", :string, :default => "", :null => false
|
||||
t.column "the_bone_id", :integer, :null => false
|
||||
t.column "single_sti_parent_id", :integer, :null => false
|
||||
end
|
||||
|
||||
create_table "single_sti_parents", :force => true do |t|
|
||||
t.column "name", :string
|
||||
end
|
||||
|
||||
create_table "sticks", :force => true do |t|
|
||||
t.column "name", :string
|
||||
end
|
||||
|
||||
create_table "stones", :force => true do |t|
|
||||
t.column "name", :string
|
||||
end
|
||||
|
||||
end
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue