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.
- data/.gitignore +4 -0
- data/README.mdown +11 -0
- data/Rakefile +52 -0
- data/VERSION +1 -0
- data/lib/mongo_tagger.rb +36 -0
- data/lib/mongo_tagger/tag.rb +9 -0
- data/mongotagger.gemspec +55 -0
- data/test/mongo_tagger_test.rb +118 -0
- data/test/test_helper.rb +16 -0
- metadata +83 -0
data/.gitignore
ADDED
data/README.mdown
ADDED
data/Rakefile
ADDED
@@ -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
|
data/lib/mongo_tagger.rb
ADDED
@@ -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'
|
data/mongotagger.gemspec
ADDED
@@ -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
|
data/test/test_helper.rb
ADDED
@@ -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
|