mongo_tagger 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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