mongo_tagger 0.1.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.
@@ -0,0 +1,4 @@
1
+ .DS_Store
2
+ tmp
3
+ pkg
4
+ coverage
@@ -0,0 +1,11 @@
1
+ # MongoTagger
2
+
3
+ Tagging plugin for [MonogoMapper]("http://github.com/jnunemaker/mongomapper")
4
+
5
+ ## Install
6
+
7
+ sudo gem install mongo_tagger
8
+
9
+ ## Dependencies
10
+
11
+ * MongoMapper - 0.6.1
@@ -0,0 +1,52 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/testtask'
4
+ require 'rcov/rcovtask'
5
+
6
+ begin
7
+ require 'jeweler'
8
+ Jeweler::Tasks.new do |s|
9
+ s.name = "mongo_tagger"
10
+ s.summary = "MongoTagger, a tagging plugin for MongoMapper"
11
+ s.description = "MongoTagger, a tagging plugin for MongoMapper"
12
+ s.email = "adam@adamholt.co.uk"
13
+ s.homepage = "http://github.com/omgitsads/mongotagger"
14
+ s.authors = ["Adam Holt"]
15
+
16
+ s.add_dependency("mongo_mapper", "0.6.10")
17
+
18
+ s.add_development_dependency("shoulda","2.10.2")
19
+ end
20
+ Jeweler::RubyforgeTasks.new do |rubyforge|
21
+ rubyforge.doc_task = "yardoc"
22
+ end
23
+
24
+ rescue LoadError
25
+ puts "Jeweler not available. Install it with: gem install jeweler"
26
+ end
27
+
28
+ Rake::TestTask.new do |t|
29
+ t.libs << 'lib'
30
+ t.pattern = 'test/**/*_test.rb'
31
+ t.ruby_opts << '-rubygems'
32
+ t.verbose = true
33
+ end
34
+
35
+ begin
36
+ require 'yard'
37
+ YARD::Rake::YardocTask.new(:yardoc)
38
+ rescue LoadError
39
+ task :yardoc do
40
+ abort "YARD is not available. In order to run yard, you must: sudo gem install yard"
41
+ end
42
+ end
43
+
44
+
45
+ Rcov::RcovTask.new do |t|
46
+ t.libs << "test"
47
+ t.test_files = FileList['test/*_test.rb']
48
+ t.verbose = true
49
+ end
50
+
51
+
52
+ task :default => :rcov
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,36 @@
1
+ begin
2
+ require 'mongo_mapper'
3
+ rescue
4
+ puts "Could not road mongo_mapper"
5
+ exit
6
+ end
7
+
8
+ module MongoTagger
9
+ module ClassMethods
10
+ def find_tagged_with(list_of_tags)
11
+ list_of_tags = list_of_tags.split(",") if list_of_tags.is_a? String
12
+ list_of_tags.each {|t| t.strip!}
13
+ all :conditions => {"tags.name" => {"$in" => list_of_tags}}
14
+ end
15
+ end
16
+
17
+ module InstanceMethods
18
+ def tag_list=(list_of_tags="")
19
+ list_of_tags.split(",").each do |tag|
20
+ tags << Tag.new(:name => tag.strip)
21
+ end
22
+ end
23
+
24
+ def tag_list
25
+ tags.collect(&:name).join(", ")
26
+ end
27
+ end
28
+
29
+ def self.included(receiver)
30
+ receiver.extend ClassMethods
31
+ receiver.send :include, InstanceMethods
32
+ receiver.class_eval { many :tags, :as => :taggable }
33
+ end
34
+ end
35
+
36
+ require 'mongo_tagger/tag'
@@ -0,0 +1,9 @@
1
+ class Tag
2
+ include MongoMapper::EmbeddedDocument
3
+ belongs_to :taggable, :polymorphic => true
4
+
5
+ key :name, String, :required => true
6
+
7
+ key :taggable_id, Mongo::ObjectID
8
+ key :taggable_type, String
9
+ end
@@ -0,0 +1,55 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{mongotagger}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Adam Holt"]
12
+ s.date = %q{2010-01-17}
13
+ s.description = %q{Mongotagger, a tagging plugin for Mongomapper}
14
+ s.email = %q{adam@adamholt.co.uk}
15
+ s.extra_rdoc_files = [
16
+ "README.mdown"
17
+ ]
18
+ s.files = [
19
+ ".gitignore",
20
+ "README.mdown",
21
+ "Rakefile",
22
+ "VERSION",
23
+ "lib/mongo_tagger.rb",
24
+ "lib/mongo_tagger/tag.rb",
25
+ "mongotagger.gemspec",
26
+ "test/mongo_tagger_test.rb",
27
+ "test/test_helper.rb"
28
+ ]
29
+ s.homepage = %q{http://github.com/omgitsads/mongotagger}
30
+ s.rdoc_options = ["--charset=UTF-8"]
31
+ s.require_paths = ["lib"]
32
+ s.rubygems_version = %q{1.3.5}
33
+ s.summary = %q{Mongotagger, a tagging plugin for Mongomapper}
34
+ s.test_files = [
35
+ "test/mongo_tagger_test.rb",
36
+ "test/test_helper.rb"
37
+ ]
38
+
39
+ if s.respond_to? :specification_version then
40
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
41
+ s.specification_version = 3
42
+
43
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
44
+ s.add_runtime_dependency(%q<mongo_mapper>, ["= 0.6.10"])
45
+ s.add_development_dependency(%q<shoulda>, ["= 2.10.2"])
46
+ else
47
+ s.add_dependency(%q<mongo_mapper>, ["= 0.6.10"])
48
+ s.add_dependency(%q<shoulda>, ["= 2.10.2"])
49
+ end
50
+ else
51
+ s.add_dependency(%q<mongo_mapper>, ["= 0.6.10"])
52
+ s.add_dependency(%q<shoulda>, ["= 2.10.2"])
53
+ end
54
+ end
55
+
@@ -0,0 +1,118 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper.rb")
2
+
3
+ class MongoTaggerTest < Test::Unit::TestCase
4
+ context "creating tags" do
5
+ context "with the tag_list setter" do
6
+ setup do
7
+ @post = Post.create(:title => "Test Post")
8
+ @post.tag_list = "mongodb, is, awesome"
9
+ @post.save
10
+ end
11
+
12
+ %w(mongodb is awesome).each do |tag|
13
+ should "have '#{tag}' in the tag list" do
14
+ assert_equal true, @post.tag_list.include?(tag)
15
+ end
16
+ end
17
+
18
+ teardown do
19
+ @post.destroy
20
+ end
21
+ end
22
+
23
+ context "with the shovel setter" do
24
+ setup do
25
+ @post = Post.create(:title => "Test Post")
26
+ @post.tags << Tag.new(:name => "mongomapper")
27
+ @post.tags << Tag.new(:name => "mongodb")
28
+ @post.tags << Tag.new(:name => "jnunemaker")
29
+ @post.save
30
+ end
31
+
32
+ %w(mongomapper mongodb jnunemaker).each do |tag|
33
+ should "have '#{tag}' in the tag list" do
34
+ assert_equal true, @post.tag_list.include?(tag)
35
+ end
36
+ end
37
+
38
+ teardown do
39
+ @post.destroy
40
+ end
41
+ end
42
+ end
43
+
44
+ context "finding tags" do
45
+ setup do
46
+ @post = Post.create(:title => "Test Post #1")
47
+ @post.tags << Tag.new(:name => "mongomapper")
48
+ @post.save
49
+
50
+ @post_two = Post.create(:title => "Test Post #2")
51
+ @post_two.tags << Tag.new(:name => "mongodb")
52
+ @post_two.save
53
+ end
54
+
55
+ context "with a single tag" do
56
+ should "find the test post tagged with 'mongomapper'" do
57
+ @results = Post.find_tagged_with("mongomapper")
58
+ assert_equal 1, @results.size
59
+ assert_equal "Test Post #1", @results.first.title
60
+ end
61
+
62
+ should "find the test post tagged with 'mongodb'" do
63
+ @results = Post.find_tagged_with("mongodb")
64
+ assert_equal 1, @results.size
65
+ assert_equal "Test Post #2", @results.first.title
66
+ end
67
+ end
68
+
69
+ context "with a list of tags" do
70
+ should "find the test post tagged with mongodb or mongomapper" do
71
+ @results = Post.find_tagged_with("mongodb, mongomapper")
72
+ assert_equal 2, @results.size
73
+ assert_equal "Test Post #1", @results[0].title
74
+ assert_equal "Test Post #2", @results[1].title
75
+ end
76
+ end
77
+
78
+ context "with an array of tags" do
79
+ should "find the test post tagged mongodb or mongomapper" do
80
+ @results = Post.find_tagged_with(["mongodb","mongomapper"])
81
+ assert_equal 2, @results.size
82
+ assert_equal "Test Post #1", @results[0].title
83
+ assert_equal "Test Post #2", @results[1].title
84
+ end
85
+ end
86
+
87
+ teardown do
88
+ @post.destroy
89
+ @post_two.destroy
90
+ end
91
+ end
92
+
93
+ context "reading tags" do
94
+ setup do
95
+ @post = Post.create(:title => "Test Post")
96
+ @post.tags << Tag.new(:name => "ruby")
97
+ @post.tags << Tag.new(:name => "mongomapper")
98
+ @post.tags << Tag.new(:name => "mongodb")
99
+ @post.save
100
+ end
101
+
102
+ context "with the tag_list getter" do
103
+ %w(ruby mongomapper mongodb).each do |tag|
104
+ should "have '#{tag}' in the tag list" do
105
+ assert_equal true, @post.tag_list.include?(tag)
106
+ end
107
+ end
108
+
109
+ should "not have 'some tag' in the tag list" do
110
+ assert_equal false, @post.tag_list.include?("some tag")
111
+ end
112
+ end
113
+
114
+ teardown do
115
+ @post.destroy
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,16 @@
1
+ require 'shoulda'
2
+ require 'mongo_mapper'
3
+
4
+ test_dir = File.expand_path(File.dirname(__FILE__) + '/../tmp')
5
+ FileUtils.mkdir_p(test_dir) unless File.exist?(test_dir)
6
+
7
+ MongoMapper.connection = Mongo::Connection.new('127.0.0.1', 27017, { :logger => Logger.new(test_dir + '/test.log') })
8
+ MongoMapper.database = 'test'
9
+
10
+ require File.expand_path(File.dirname(__FILE__) + '/../lib/mongo_tagger')
11
+
12
+ class Post
13
+ include MongoMapper::Document
14
+ include MongoTagger
15
+ key :title, String, :required => true
16
+ end
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mongo_tagger
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Adam Holt
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2010-01-17 00:00:00 +00:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: mongo_mapper
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - "="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.6.10
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: shoulda
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "="
32
+ - !ruby/object:Gem::Version
33
+ version: 2.10.2
34
+ version:
35
+ description: MongoTagger, a tagging plugin for MongoMapper
36
+ email: adam@adamholt.co.uk
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files:
42
+ - README.mdown
43
+ files:
44
+ - .gitignore
45
+ - README.mdown
46
+ - Rakefile
47
+ - VERSION
48
+ - lib/mongo_tagger.rb
49
+ - lib/mongo_tagger/tag.rb
50
+ - mongotagger.gemspec
51
+ - test/mongo_tagger_test.rb
52
+ - test/test_helper.rb
53
+ has_rdoc: true
54
+ homepage: http://github.com/omgitsads/mongotagger
55
+ licenses: []
56
+
57
+ post_install_message:
58
+ rdoc_options:
59
+ - --charset=UTF-8
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: "0"
67
+ version:
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: "0"
73
+ version:
74
+ requirements: []
75
+
76
+ rubyforge_project:
77
+ rubygems_version: 1.3.5
78
+ signing_key:
79
+ specification_version: 3
80
+ summary: MongoTagger, a tagging plugin for MongoMapper
81
+ test_files:
82
+ - test/mongo_tagger_test.rb
83
+ - test/test_helper.rb