acts-as-taggable-on 1.0.13 → 2.0.0

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.
Files changed (40) hide show
  1. data/CHANGELOG +5 -2
  2. data/Gemfile +6 -0
  3. data/README.rdoc +61 -31
  4. data/Rakefile +46 -16
  5. data/VERSION +1 -1
  6. data/generators/acts_as_taggable_on_migration/acts_as_taggable_on_migration_generator.rb +7 -0
  7. data/generators/acts_as_taggable_on_migration/templates/migration.rb +29 -0
  8. data/lib/acts-as-taggable-on.rb +30 -7
  9. data/lib/acts_as_taggable_on/acts_as_taggable_on/cache.rb +53 -0
  10. data/lib/acts_as_taggable_on/acts_as_taggable_on/collection.rb +98 -0
  11. data/lib/acts_as_taggable_on/acts_as_taggable_on/core.rb +237 -0
  12. data/lib/acts_as_taggable_on/acts_as_taggable_on/ownership.rb +101 -0
  13. data/lib/acts_as_taggable_on/acts_as_taggable_on/related.rb +64 -0
  14. data/lib/acts_as_taggable_on/acts_as_taggable_on.rb +43 -373
  15. data/lib/acts_as_taggable_on/acts_as_tagger.rb +58 -43
  16. data/lib/acts_as_taggable_on/compatibility/Gemfile +6 -0
  17. data/lib/acts_as_taggable_on/compatibility/active_record_backports.rb +17 -0
  18. data/lib/acts_as_taggable_on/tag.rb +47 -8
  19. data/lib/acts_as_taggable_on/tag_list.rb +45 -45
  20. data/lib/acts_as_taggable_on/tagging.rb +17 -2
  21. data/lib/acts_as_taggable_on/tags_helper.rb +8 -2
  22. data/lib/generators/acts_as_taggable_on/migration/migration_generator.rb +31 -0
  23. data/lib/generators/acts_as_taggable_on/migration/templates/active_record/migration.rb +28 -0
  24. data/rails/init.rb +1 -7
  25. data/spec/acts_as_taggable_on/acts_as_taggable_on_spec.rb +98 -53
  26. data/spec/acts_as_taggable_on/acts_as_tagger_spec.rb +46 -4
  27. data/spec/acts_as_taggable_on/tag_list_spec.rb +18 -0
  28. data/spec/acts_as_taggable_on/tag_spec.rb +66 -13
  29. data/spec/acts_as_taggable_on/taggable_spec.rb +142 -70
  30. data/spec/acts_as_taggable_on/tagger_spec.rb +73 -5
  31. data/spec/acts_as_taggable_on/tagging_spec.rb +18 -3
  32. data/spec/acts_as_taggable_on/tags_helper_spec.rb +1 -3
  33. data/spec/bm.rb +52 -0
  34. data/spec/models.rb +30 -0
  35. data/spec/schema.rb +13 -2
  36. data/spec/spec.opts +1 -2
  37. data/spec/spec_helper.rb +39 -34
  38. metadata +28 -8
  39. data/lib/acts_as_taggable_on/group_helper.rb +0 -12
  40. data/spec/acts_as_taggable_on/group_helper_spec.rb +0 -18
data/spec/bm.rb ADDED
@@ -0,0 +1,52 @@
1
+ require 'active_record'
2
+ require 'action_view'
3
+ require File.expand_path('../../lib/acts-as-taggable-on', __FILE__)
4
+
5
+ if defined?(ActiveRecord::Acts::TaggableOn)
6
+ ActiveRecord::Base.send :include, ActiveRecord::Acts::TaggableOn
7
+ ActiveRecord::Base.send :include, ActiveRecord::Acts::Tagger
8
+ ActionView::Base.send :include, TagsHelper if defined?(ActionView::Base)
9
+ end
10
+
11
+ TEST_DATABASE_FILE = File.join(File.dirname(__FILE__), '..', 'test.sqlite3')
12
+ File.unlink(TEST_DATABASE_FILE) if File.exist?(TEST_DATABASE_FILE)
13
+ ActiveRecord::Base.establish_connection :adapter => 'sqlite3', :database => TEST_DATABASE_FILE
14
+
15
+ ActiveRecord::Base.silence do
16
+ ActiveRecord::Migration.verbose = false
17
+ ActiveRecord::Schema.define :version => 0 do
18
+ create_table "taggings", :force => true do |t|
19
+ t.integer "tag_id", :limit => 11
20
+ t.integer "taggable_id", :limit => 11
21
+ t.string "taggable_type"
22
+ t.string "context"
23
+ t.datetime "created_at"
24
+ t.integer "tagger_id", :limit => 11
25
+ t.string "tagger_type"
26
+ end
27
+
28
+ add_index "taggings", ["tag_id"], :name => "index_taggings_on_tag_id"
29
+ add_index "taggings", ["taggable_id", "taggable_type", "context"], :name => "index_taggings_on_taggable_id_and_taggable_type_and_context"
30
+
31
+ create_table "tags", :force => true do |t|
32
+ t.string "name"
33
+ end
34
+
35
+ create_table :taggable_models, :force => true do |t|
36
+ t.column :name, :string
37
+ t.column :type, :string
38
+ t.column :cached_tag_list, :string
39
+ end
40
+ end
41
+
42
+ class TaggableModel < ActiveRecord::Base
43
+ acts_as_taggable
44
+ acts_as_taggable_on :languages
45
+ acts_as_taggable_on :skills
46
+ acts_as_taggable_on :needs, :offerings
47
+ end
48
+ end
49
+
50
+ puts Benchmark.measure {
51
+ 1000.times { TaggableModel.create :tag_list => "awesome, epic, neat" }
52
+ }
data/spec/models.rb ADDED
@@ -0,0 +1,30 @@
1
+ class TaggableModel < ActiveRecord::Base
2
+ acts_as_taggable
3
+ acts_as_taggable_on :languages
4
+ acts_as_taggable_on :skills
5
+ acts_as_taggable_on :needs, :offerings
6
+ has_many :untaggable_models
7
+ end
8
+
9
+ class CachedModel < ActiveRecord::Base
10
+ acts_as_taggable
11
+ end
12
+
13
+ class OtherTaggableModel < ActiveRecord::Base
14
+ acts_as_taggable_on :tags, :languages
15
+ acts_as_taggable_on :needs, :offerings
16
+ end
17
+
18
+ class InheritingTaggableModel < TaggableModel
19
+ end
20
+
21
+ class AlteredInheritingTaggableModel < TaggableModel
22
+ acts_as_taggable_on :parts
23
+ end
24
+
25
+ class TaggableUser < ActiveRecord::Base
26
+ acts_as_tagger
27
+ end
28
+
29
+ class UntaggableModel < ActiveRecord::Base
30
+ end
data/spec/schema.rb CHANGED
@@ -19,14 +19,25 @@ ActiveRecord::Schema.define :version => 0 do
19
19
  create_table :taggable_models, :force => true do |t|
20
20
  t.column :name, :string
21
21
  t.column :type, :string
22
- #t.column :cached_tag_list, :string
23
22
  end
23
+
24
+ create_table :untaggable_models, :force => true do |t|
25
+ t.column :taggable_model_id, :integer
26
+ t.column :name, :string
27
+ end
28
+
29
+ create_table :cached_models, :force => true do |t|
30
+ t.column :name, :string
31
+ t.column :type, :string
32
+ t.column :cached_tag_list, :string
33
+ end
34
+
24
35
  create_table :taggable_users, :force => true do |t|
25
36
  t.column :name, :string
26
37
  end
38
+
27
39
  create_table :other_taggable_models, :force => true do |t|
28
40
  t.column :name, :string
29
41
  t.column :type, :string
30
- #t.column :cached_tag_list, :string
31
42
  end
32
43
  end
data/spec/spec.opts CHANGED
@@ -1,3 +1,2 @@
1
1
  --colour
2
- --reverse
3
- --backtrace
2
+ --backtrace
data/spec/spec_helper.rb CHANGED
@@ -1,48 +1,53 @@
1
- # require File.dirname(__FILE__) + '/../../../../spec/spec_helper'
2
- require 'rubygems'
3
- require 'activerecord'
4
- require 'spec'
1
+ begin
2
+ # Try to require the preresolved locked set of gems.
3
+ require File.expand_path("../.bundle/environment", __FILE__)
4
+ rescue LoadError
5
+ # Fall back on doing an unlocked resolve at runtime.
6
+ require "rubygems" unless RUBY_VERSION >= "1.9"
7
+ require "bundler"
8
+ Bundler.setup
9
+ end
10
+
11
+ Bundler.require
12
+ require File.expand_path('../../lib/acts-as-taggable-on', __FILE__)
5
13
 
6
- module Spec::Example::ExampleGroupMethods
7
- alias :context :describe
14
+ if defined?(Rspec::Core::ExampleGroupSubject)
15
+ module Rspec::Core::ExampleGroupSubject
16
+ alias :context :describe
17
+ end
8
18
  end
9
19
 
10
- TEST_DATABASE_FILE = File.join(File.dirname(__FILE__), '..', 'test.sqlite3')
20
+ class Array
21
+ def freq
22
+ k=Hash.new(0)
23
+ each {|e| k[e]+=1}
24
+ k
25
+ end
26
+ end
11
27
 
28
+ # Setup a database
29
+ TEST_DATABASE_FILE = File.join(File.dirname(__FILE__), '..', 'test.sqlite3')
12
30
  File.unlink(TEST_DATABASE_FILE) if File.exist?(TEST_DATABASE_FILE)
31
+
13
32
  ActiveRecord::Base.establish_connection(
14
33
  "adapter" => "sqlite3", "database" => TEST_DATABASE_FILE
15
34
  )
16
35
 
17
- RAILS_DEFAULT_LOGGER = Logger.new(File.join(File.dirname(__FILE__), "debug.log"))
18
-
19
- load(File.dirname(__FILE__) + '/schema.rb')
20
-
21
- $: << File.join(File.dirname(__FILE__), '..', 'lib')
22
- require File.join(File.dirname(__FILE__), '..', 'init')
23
-
24
- class TaggableModel < ActiveRecord::Base
25
- acts_as_taggable
26
- acts_as_taggable_on :languages
27
- acts_as_taggable_on :skills
28
- acts_as_taggable_on :needs, :offerings
29
- end
30
-
31
- class OtherTaggableModel < ActiveRecord::Base
32
- acts_as_taggable_on :tags, :languages
33
- acts_as_taggable_on :needs, :offerings
34
- end
35
-
36
- class InheritingTaggableModel < TaggableModel
37
- end
36
+ ActiveRecord::Base.logger = Logger.new(File.join(File.dirname(__FILE__), "debug.log"))
37
+ ActiveRecord::Base.establish_connection :adapter => 'sqlite3', :database => TEST_DATABASE_FILE
38
38
 
39
- class AlteredInheritingTaggableModel < TaggableModel
40
- acts_as_taggable_on :parts
39
+ ActiveRecord::Base.silence do
40
+ ActiveRecord::Migration.verbose = false
41
+ load(File.dirname(__FILE__) + '/schema.rb')
42
+ load(File.dirname(__FILE__) + '/models.rb')
41
43
  end
42
44
 
43
- class TaggableUser < ActiveRecord::Base
44
- acts_as_tagger
45
+ def clean_database!
46
+ models = [Tag, Tagging, TaggableModel, OtherTaggableModel, InheritingTaggableModel,
47
+ AlteredInheritingTaggableModel, TaggableUser, UntaggableModel]
48
+ models.each do |model|
49
+ model.destroy_all
50
+ end
45
51
  end
46
52
 
47
- class UntaggableModel < ActiveRecord::Base
48
- end
53
+ clean_database!
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts-as-taggable-on
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.13
4
+ prerelease: false
5
+ segments:
6
+ - 2
7
+ - 0
8
+ - 0
9
+ version: 2.0.0
5
10
  platform: ruby
6
11
  authors:
7
12
  - Michael Bleigh
@@ -9,7 +14,7 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2009-12-11 00:00:00 +01:00
17
+ date: 2010-03-28 00:00:00 +01:00
13
18
  default_executable:
14
19
  dependencies: []
15
20
 
@@ -23,28 +28,40 @@ extra_rdoc_files:
23
28
  - README.rdoc
24
29
  files:
25
30
  - CHANGELOG
31
+ - Gemfile
26
32
  - MIT-LICENSE
27
33
  - README.rdoc
28
34
  - Rakefile
29
35
  - VERSION
36
+ - generators/acts_as_taggable_on_migration/acts_as_taggable_on_migration_generator.rb
37
+ - generators/acts_as_taggable_on_migration/templates/migration.rb
30
38
  - lib/acts-as-taggable-on.rb
31
39
  - lib/acts_as_taggable_on/acts_as_taggable_on.rb
40
+ - lib/acts_as_taggable_on/acts_as_taggable_on/cache.rb
41
+ - lib/acts_as_taggable_on/acts_as_taggable_on/collection.rb
42
+ - lib/acts_as_taggable_on/acts_as_taggable_on/core.rb
43
+ - lib/acts_as_taggable_on/acts_as_taggable_on/ownership.rb
44
+ - lib/acts_as_taggable_on/acts_as_taggable_on/related.rb
32
45
  - lib/acts_as_taggable_on/acts_as_tagger.rb
33
- - lib/acts_as_taggable_on/group_helper.rb
46
+ - lib/acts_as_taggable_on/compatibility/Gemfile
47
+ - lib/acts_as_taggable_on/compatibility/active_record_backports.rb
34
48
  - lib/acts_as_taggable_on/tag.rb
35
49
  - lib/acts_as_taggable_on/tag_list.rb
36
50
  - lib/acts_as_taggable_on/tagging.rb
37
51
  - lib/acts_as_taggable_on/tags_helper.rb
52
+ - lib/generators/acts_as_taggable_on/migration/migration_generator.rb
53
+ - lib/generators/acts_as_taggable_on/migration/templates/active_record/migration.rb
38
54
  - rails/init.rb
39
55
  - spec/acts_as_taggable_on/acts_as_taggable_on_spec.rb
40
56
  - spec/acts_as_taggable_on/acts_as_tagger_spec.rb
41
- - spec/acts_as_taggable_on/group_helper_spec.rb
42
57
  - spec/acts_as_taggable_on/tag_list_spec.rb
43
58
  - spec/acts_as_taggable_on/tag_spec.rb
44
59
  - spec/acts_as_taggable_on/taggable_spec.rb
45
60
  - spec/acts_as_taggable_on/tagger_spec.rb
46
61
  - spec/acts_as_taggable_on/tagging_spec.rb
47
62
  - spec/acts_as_taggable_on/tags_helper_spec.rb
63
+ - spec/bm.rb
64
+ - spec/models.rb
48
65
  - spec/schema.rb
49
66
  - spec/spec.opts
50
67
  - spec/spec_helper.rb
@@ -61,30 +78,33 @@ required_ruby_version: !ruby/object:Gem::Requirement
61
78
  requirements:
62
79
  - - ">="
63
80
  - !ruby/object:Gem::Version
81
+ segments:
82
+ - 0
64
83
  version: "0"
65
- version:
66
84
  required_rubygems_version: !ruby/object:Gem::Requirement
67
85
  requirements:
68
86
  - - ">="
69
87
  - !ruby/object:Gem::Version
88
+ segments:
89
+ - 0
70
90
  version: "0"
71
- version:
72
91
  requirements: []
73
92
 
74
93
  rubyforge_project:
75
- rubygems_version: 1.3.5
94
+ rubygems_version: 1.3.6
76
95
  signing_key:
77
96
  specification_version: 3
78
97
  summary: ActsAsTaggableOn is a tagging plugin for Rails that provides multiple tagging contexts on a single model.
79
98
  test_files:
80
99
  - spec/acts_as_taggable_on/acts_as_taggable_on_spec.rb
81
100
  - spec/acts_as_taggable_on/acts_as_tagger_spec.rb
82
- - spec/acts_as_taggable_on/group_helper_spec.rb
83
101
  - spec/acts_as_taggable_on/tag_list_spec.rb
84
102
  - spec/acts_as_taggable_on/tag_spec.rb
85
103
  - spec/acts_as_taggable_on/taggable_spec.rb
86
104
  - spec/acts_as_taggable_on/tagger_spec.rb
87
105
  - spec/acts_as_taggable_on/tagging_spec.rb
88
106
  - spec/acts_as_taggable_on/tags_helper_spec.rb
107
+ - spec/bm.rb
108
+ - spec/models.rb
89
109
  - spec/schema.rb
90
110
  - spec/spec_helper.rb
@@ -1,12 +0,0 @@
1
- module ActiveRecord
2
- module Acts
3
- module TaggableOn
4
- module GroupHelper
5
- # all column names are necessary for PostgreSQL group clause
6
- def grouped_column_names_for(object)
7
- object.column_names.map { |column| "#{object.table_name}.#{column}" }.join(", ")
8
- end
9
- end
10
- end
11
- end
12
- end
@@ -1,18 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
2
-
3
- describe "Group Helper" do
4
-
5
- describe "grouped_column_names_for method" do
6
- before(:each) do
7
- @taggable = TaggableModel.new(:name => "Bob Jones")
8
- end
9
-
10
- it "should return all column names joined for Tag GROUP clause" do
11
- @taggable.grouped_column_names_for(Tag).should == "tags.id, tags.name"
12
- end
13
-
14
- it "should return all column names joined for TaggableModel GROUP clause" do
15
- @taggable.grouped_column_names_for(TaggableModel).should == "taggable_models.id, taggable_models.name, taggable_models.type"
16
- end
17
- end
18
- end