mongoid-simple-tags 0.0.6 → 0.0.7

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 CHANGED
@@ -1,48 +1,5 @@
1
- # rcov generated
2
- coverage
3
-
4
- # rdoc generated
5
- rdoc
6
-
7
- # yard generated
8
- doc
9
- .yardoc
10
-
11
- # bundler
1
+ *.gem
12
2
  .bundle
13
-
14
- # jeweler generated
15
- pkg
16
-
17
- # Have editor/IDE/OS specific files you need to ignore? Consider using a global gitignore:
18
- #
19
- # * Create a file at ~/.gitignore
20
- # * Include files you want ignored
21
- # * Run: git config --global core.excludesfile ~/.gitignore
22
- #
23
- # After doing this, these files will be ignored in all your git projects,
24
- # saving you from having to 'pollute' every project you touch with them
25
- #
26
- # Not sure what to needs to be ignored for particular editors/OSes? Here's some ideas to get you started. (Remember, remove the leading # of the line)
27
- #
28
- # For MacOS:
29
- #
30
- #.DS_Store
31
-
32
- # For TextMate
33
- #*.tmproj
34
- #tmtags
35
-
36
- # For emacs:
37
- #*~
38
- #\#*
39
- #.\#*
40
-
41
- # For vim:
42
- *.swp
43
-
44
- # For redcar:
45
- #.redcar
46
-
47
- # For rubinius:
48
- #*.rbc
3
+ .rvmrc
4
+ Gemfile.lock
5
+ pkg/*
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ rvm:
2
+ - 1.9.3
3
+
4
+ script: rake spec
data/Gemfile.lock CHANGED
@@ -3,15 +3,15 @@ PATH
3
3
  specs:
4
4
  mongoid-simple-tags (0.0.6)
5
5
  bson_ext (~> 1.6)
6
- mongoid (~> 2.4)
6
+ mongoid (~> 3.0.3)
7
7
 
8
8
  GEM
9
9
  remote: http://rubygems.org/
10
10
  specs:
11
- activemodel (3.2.6)
12
- activesupport (= 3.2.6)
11
+ activemodel (3.2.7)
12
+ activesupport (= 3.2.7)
13
13
  builder (~> 3.0.0)
14
- activesupport (3.2.6)
14
+ activesupport (3.2.7)
15
15
  i18n (~> 0.6)
16
16
  multi_json (~> 1.0)
17
17
  bson (1.6.4)
@@ -20,13 +20,14 @@ GEM
20
20
  builder (3.0.0)
21
21
  diff-lcs (1.1.3)
22
22
  i18n (0.6.0)
23
- mongo (1.6.2)
24
- bson (~> 1.6.2)
25
- mongoid (2.4.11)
23
+ mongoid (3.0.3)
26
24
  activemodel (~> 3.1)
27
- mongo (<= 1.6.2)
25
+ moped (~> 1.1)
26
+ origin (~> 1.0)
28
27
  tzinfo (~> 0.3.22)
28
+ moped (1.2.0)
29
29
  multi_json (1.3.6)
30
+ origin (1.0.4)
30
31
  rspec (2.10.0)
31
32
  rspec-core (~> 2.10.0)
32
33
  rspec-expectations (~> 2.10.0)
data/README.rdoc CHANGED
@@ -1,11 +1,13 @@
1
- = mongoid-simple-tags
1
+ = mongoid-simple-tags {<img src="https://secure.travis-ci.org/chebyte/mongoid-simple-tags.png"/>}[http://travis-ci.org/chebyte/mongoid-simple-tags]
2
2
 
3
3
  mongoid-simple-tags is a basic and simple tagging system for mongoid using map-reduce function
4
+ (no backwards compatibility with mongoid v2!)
4
5
 
5
6
  == Install
7
+
6
8
  Add the following to Gemfile:
7
9
 
8
- gem "mongoid-simple-tags", "0.0.6"
10
+ gem "mongoid-simple-tags", "0.0.7"
9
11
 
10
12
  == Usage
11
13
 
@@ -18,10 +20,9 @@ mongoid-simple-tags is a basic and simple tagging system for mongoid using map-r
18
20
 
19
21
  === Console
20
22
 
21
- u = User.new(:name => "Tuquito")
22
- u.tag_list = "linux, tucuman, free software"
23
+ u = User.create(:name => "Tuquito", tag_list: "linux, tucuman, free software")
24
+
23
25
  u.tags # => ["linux","tucuman","free software"]
24
- u.save
25
26
 
26
27
  User.tagged_with("linux") # => u
27
28
  User.tagged_with(["tucuman", "free software"]) # => u
@@ -32,7 +33,7 @@ mongoid-simple-tags is a basic and simple tagging system for mongoid using map-r
32
33
 
33
34
  User.tagged_with("linux") # => [u, u2]
34
35
 
35
- #using map-reduce function
36
+ # using map-reduce function
36
37
 
37
38
  User.all_tags #=>[{:name=>"free software", :count=>1}, {:name=>"linux", :count=>2}, {:name=>"tucuman", :count=>1}]
38
39
 
@@ -41,4 +42,3 @@ mongoid-simple-tags is a basic and simple tagging system for mongoid using map-r
41
42
 
42
43
  Copyright (c) 2011 chebyte(mauro torres). See LICENSE.txt for
43
44
  further details.
44
-
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.6
1
+ 0.0.7
@@ -4,9 +4,7 @@ module Mongoid
4
4
  def self.included(base)
5
5
  base.class_eval do |klass|
6
6
  klass.field :tags, :type => Array
7
- klass.index :tags
8
-
9
- klass.send :after_save, :rebuild_tags
7
+ klass.index({ tags: 1 }, { background: true })
10
8
 
11
9
  include InstanceMethods
12
10
  extend ClassMethods
@@ -22,59 +20,42 @@ module Mongoid
22
20
  def tag_list
23
21
  self.tags.join(", ") if tags
24
22
  end
25
-
26
- protected
27
- def rebuild_tags
28
- self.collection.map_reduce(
29
- "function() { if(this.tags) this.tags.forEach(function(t){ emit(t, 1); }); }",
30
- "function(key,values) { var count = 0; values.forEach(function(v){ count += v; }); return count; }",
31
- { :out => 'tags' }
32
- )
33
- end
34
23
  end
35
24
 
36
25
 
37
26
  module ClassMethods
38
-
39
- def all_tags(opts={})
40
- tags = Mongoid.master.collection('tags')
41
- opts.merge(:sort => ["_id", :desc]) unless opts[:sort]
42
- tags.find({}, opts).to_a.map!{|item| { :name => item['_id'], :count => item['value'].to_i } }
43
- end
44
27
 
45
- def scoped_tags(options={})
46
- map = <<-MAP
47
- function() {
48
- if(this.tags) {
49
- this.tags.forEach( function(t) {
50
- emit(t, 1)
51
- })
52
- }
28
+ def all_tags(scope = {})
29
+ map = %Q{
30
+ function() {
31
+ if(this.tags){
32
+ this.tags.forEach(function(tag){
33
+ emit(tag, 1)
34
+ });
35
+ }
53
36
  }
54
- MAP
37
+ }
55
38
 
56
- reduce = <<-REDUCE
57
- function(key,values) {
58
- var count = 0
59
- values.forEach(function(v){
60
- count += v
61
- })
62
- return count
39
+ reduce = %Q{
40
+ function(key, values) {
41
+ var tag_count = 0 ;
42
+ values.forEach(function(value) {
43
+ tag_count += value;
44
+ });
45
+ return tag_count;
63
46
  }
64
- REDUCE
47
+ }
65
48
 
66
- scope = {}
67
- options.each do |key, value|
68
- scope[key] = {'$in' => [value]}
69
- end
70
-
71
- results = self.collection.map_reduce(
72
- map,
73
- reduce,
74
- :out => "scoped_tags",
75
- :query => scope
76
- )
77
- results.find().to_a.map{ |item| { :name => item['_id'], :count => item['value'].to_i } }
49
+ tags = self
50
+ tags = tags.where(scope) if scope.present?
51
+
52
+ results = tags.map_reduce(map, reduce).out(inline: true)
53
+ results.to_a.map!{ |item| { :name => item['_id'], :count => item['value'].to_i } }
54
+ end
55
+
56
+ def scoped_tags(scope = {})
57
+ warn "[DEPRECATION] `scoped_tags` is deprecated. Please use `all_tags` instead."
58
+ all_tags(scope)
78
59
  end
79
60
 
80
61
  def tagged_with(tags)
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "mongoid-simple-tags"
5
- s.version = "0.0.6"
5
+ s.version = "0.0.7"
6
6
  s.platform = Gem::Platform::RUBY
7
7
  s.authors = ["chebyte"]
8
8
  s.email = ["maurotorres@gmail.com"]
@@ -17,6 +17,6 @@ Gem::Specification.new do |s|
17
17
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
18
  s.require_paths = ["lib"]
19
19
  s.add_development_dependency "rspec", "~> 2.10.0"
20
- s.add_dependency "mongoid", "~> 2.4"
21
- s.add_dependency "bson_ext", "~> 1.6"
20
+ s.add_dependency "mongoid", "~> 3.0.3"
21
+ s.add_dependency "bson_ext", "~> 1.6"
22
22
  end
data/mongoid.yml ADDED
@@ -0,0 +1,6 @@
1
+ test:
2
+ sessions:
3
+ default:
4
+ database: mongoid-simple-tags
5
+ hosts:
6
+ - localhost:27017
@@ -1,114 +1,113 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  class User
4
- include Mongoid::Document
5
- include Mongoid::Document::Taggable
6
- field :name
7
- belongs_to :organization
4
+ include Mongoid::Document
5
+ include Mongoid::Document::Taggable
6
+ field :name
7
+ belongs_to :organization
8
8
  end
9
9
 
10
10
  class Organization
11
- include Mongoid::Document
12
- field :name
13
- has_many :users
11
+ include Mongoid::Document
12
+ field :name
13
+ has_many :users
14
14
  end
15
15
 
16
+
16
17
  describe "A Taggable model" do
17
- before do
18
- @user = User.new(name: 'Tuquito')
19
- end
20
-
21
- it "should have a tag_list method" do
22
- @user.respond_to?(:tag_list)
23
- end
24
-
25
- it "should be able to update a tag list" do
26
- tag_list = "linux, tucuman, free software"
27
- tags = tag_list.split(',').map{ |tag| tag.strip}.flatten
28
- @user.tag_list = tag_list
29
- tags.should == @user.tags
30
- end
18
+
19
+ let(:user) { User.new(name: 'Tuquito') }
20
+
21
+ it "should have a tag_list method" do
22
+ user.respond_to?(:tag_list)
23
+ end
24
+
25
+ it "should be able to update a tag list" do
26
+ tag_list = "linux, tucuman, free software"
27
+ tags = tag_list.split(',').map{ |tag| tag.strip}.flatten
28
+
29
+ user.tag_list = tag_list
30
+ user.tags.should == tags
31
+ end
31
32
  end
32
33
 
34
+
33
35
  describe "A Taggable model with tags assigned" do
34
- before do
35
- @tag_list = "linux, tucuman, free software"
36
- @user = User.new(name: 'Tuquito')
37
- @user.tag_list = @tag_list
38
- @user.save
39
- end
40
-
41
- it "should be able to find tagged_with objects" do
42
- @user.should == User.tagged_with('linux').first
43
- @user.should == User.tagged_with(['tucuman', 'free software']).first
44
- end
45
-
46
- it "should be able to find tagged_with objects if more than one object is present" do
47
- user2 = User.new(name: 'ubuntu')
48
- user2.tag_list = "linux"
49
- user2.save
50
- tagged_with_list = User.tagged_with('linux')
51
- tagged_with_list.include?(@user).should be_true
52
- tagged_with_list.include?(user2).should be_true
53
- end
54
-
55
- it "should return all_tags per Model class" do
56
- user2 = User.create(name: 'ubuntu', tag_list: 'linux')
57
- all_tags_for_users = User.all_tags
58
- expected_tag_list = [ {:name=>"free software", :count=>1},
59
- {:name=>"linux", :count=>2},
60
- {:name=>"tucuman", :count=>1}
61
- ]
62
- expected_tag_list.should == all_tags_for_users
63
- end
64
-
65
- after do
66
- cleanup_database
67
- end
36
+
37
+ before(:each) do
38
+ @user = User.create!(name: 'Tuquito', tag_list: "linux, tucuman, free software")
39
+ end
40
+
41
+ it "should be able to find tagged_with objects" do
42
+ User.tagged_with('linux').first.should == @user
43
+ User.tagged_with(['tucuman', 'free software']).first.should == @user
44
+ end
45
+
46
+ it "should be able to find tagged_with objects if more than one object is present" do
47
+ user_2 = User.create!(name: 'ubuntu', tag_list: 'linux')
48
+
49
+ tagged_with_list = User.tagged_with('linux')
50
+ tagged_with_list.include?(@user).should be_true
51
+ tagged_with_list.include?(user_2).should be_true
52
+ end
53
+
54
+ it "should return all_tags per Model class" do
55
+ User.create(name: 'ubuntu', tag_list: 'linux')
56
+
57
+ expected_tag_list = [
58
+ {:name => "free software", :count => 1},
59
+ {:name => "linux", :count => 2},
60
+ {:name => "tucuman", :count => 1}
61
+ ]
62
+ User.all_tags.should == expected_tag_list
63
+ end
64
+
68
65
  end
69
66
 
70
67
  describe "A Taggable model with scope" do
71
- before do
72
- @organization_1 = Organization.create(name: 'Qualica')
73
- @user_1 = @organization_1.users.create(name: 'User1', tag_list: "ubuntu, linux, tucuman")
74
- @user_2 = @organization_1.users.create(name: 'User2', tag_list: "ubuntu, linux, tucuman")
75
- @organization_2 = Organization.create(name: 'Microsoft')
76
- @user_3 = @organization_2.users.create(name: 'User3', tag_list: 'microsoft, windows, tucuman')
77
- @user_4 = @organization_2.users.create(name: 'User4', tag_list: 'ubuntu, linux, tucuman')
78
- end
79
-
80
- it "should return scoped tags when passing one option" do
81
- results = User.scoped_tags(organization_id: @organization_1.id)
82
- results.empty?.should be_false
83
-
84
- results.include?( {:name => "linux", :count => 2 } ).should be_true
85
- results.include?( {:name => "ubuntu", :count => 2 } ).should be_true
86
- results.include?( {:name => "tucuman", :count => 2 } ).should be_true
87
-
88
- results = User.scoped_tags(organization_id: @organization_2.id)
89
- results.empty?.should be_false
90
- results.include?( {:name =>"linux", :count => 1 } ).should be_true
91
- results.include?( {:name => "microsoft", :count => 1 } ).should be_true
92
- results.include?( {:name => "windows", :count => 1 } ).should be_true
93
- results.include?( {:name => "tucuman", :count => 2 } ).should be_true
94
- end
95
-
96
- it "should return scoped tags when passing more than one option" do
97
- results = User.scoped_tags(organization_id: @organization_1.id, name: @user_1.name)
98
- results.empty?.should be_false
99
- results.include?( {:name => "linux", :count => 1 } ).should be_true
100
- results.include?( {:name => "ubuntu", :count => 1 } ).should be_true
101
- results.include?( {:name => "tucuman", :count => 1 } ).should be_true
102
- end
103
-
104
- after do
105
- cleanup_database
106
- end
107
68
 
108
- end
69
+ before(:each) do
70
+ @organization_1 = Organization.create(name: 'Qualica')
71
+ @user_1 = @organization_1.users.create(name: 'User1', tag_list: "ubuntu, linux, tucuman")
72
+ @user_2 = @organization_1.users.create(name: 'User2', tag_list: "ubuntu, linux, tucuman")
73
+
74
+ @organization_2 = Organization.create(name: 'Microsoft')
75
+ @user_3 = @organization_2.users.create(name: 'User3', tag_list: 'microsoft, windows, tucuman')
76
+ @user_4 = @organization_2.users.create(name: 'User4', tag_list: 'ubuntu, linux, tucuman')
77
+ end
78
+
79
+ it "should return scoped tags when passing one option" do
80
+ results = User.all_tags(organization_id: @organization_1.id)
81
+ results.empty?.should be_false
82
+
83
+ results.include?( {:name => "linux", :count => 2 } ).should be_true
84
+ results.include?( {:name => "ubuntu", :count => 2 } ).should be_true
85
+ results.include?( {:name => "tucuman", :count => 2 } ).should be_true
86
+
87
+ results = User.all_tags(organization_id: @organization_2.id)
88
+ results.empty?.should be_false
89
+ results.include?( {:name =>"linux", :count => 1 } ).should be_true
90
+ results.include?( {:name => "microsoft", :count => 1 } ).should be_true
91
+ results.include?( {:name => "windows", :count => 1 } ).should be_true
92
+ results.include?( {:name => "tucuman", :count => 2 } ).should be_true
93
+ end
94
+
95
+ it "should return scoped tags when passing more than one option" do
96
+ results = User.all_tags(organization_id: @organization_1.id, name: @user_1.name)
97
+
98
+ results.empty?.should be_false
99
+ results.include?( {:name => "linux", :count => 1 } ).should be_true
100
+ results.include?( {:name => "ubuntu", :count => 1 } ).should be_true
101
+ results.include?( {:name => "tucuman", :count => 1 } ).should be_true
102
+ end
103
+
104
+ it "should return scoped tags when calling deprecated scoped_tags method" do
105
+ results = User.all_tags(organization_id: @organization_1.id)
106
+
107
+ results.empty?.should be_false
108
+ results.include?( {:name => "linux", :count => 2 } ).should be_true
109
+ results.include?( {:name => "ubuntu", :count => 2 } ).should be_true
110
+ results.include?( {:name => "tucuman", :count => 2 } ).should be_true
111
+ end
109
112
 
110
- def cleanup_database
111
- Mongoid.database.collections.each do |collection|
112
- collection.remove if collection.name !=~ /^system\./
113
- end
114
- end
113
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,8 +1,10 @@
1
1
  require 'mongoid'
2
2
  require 'mongoid-simple-tags'
3
3
 
4
- Mongoid.configure do |config|
5
- config.master = Mongo::Connection.new.db("mongoid_simple_tags_test")
6
- end
7
-
4
+ Mongoid.load!("mongoid.yml", :test)
8
5
 
6
+ RSpec.configure do |config|
7
+ config.after(:each) do
8
+ Mongoid::Config.purge!
9
+ end
10
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid-simple-tags
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-02 00:00:00.000000000 Z
12
+ date: 2012-07-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -34,7 +34,7 @@ dependencies:
34
34
  requirements:
35
35
  - - ~>
36
36
  - !ruby/object:Gem::Version
37
- version: '2.4'
37
+ version: 3.0.3
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,7 +42,7 @@ dependencies:
42
42
  requirements:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
- version: '2.4'
45
+ version: 3.0.3
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: bson_ext
48
48
  requirement: !ruby/object:Gem::Requirement
@@ -68,6 +68,7 @@ extra_rdoc_files: []
68
68
  files:
69
69
  - .gitignore
70
70
  - .rspec
71
+ - .travis.yml
71
72
  - Gemfile
72
73
  - Gemfile.lock
73
74
  - LICENSE.txt
@@ -76,6 +77,7 @@ files:
76
77
  - VERSION
77
78
  - lib/mongoid-simple-tags.rb
78
79
  - mongoid-simple-tags.gemspec
80
+ - mongoid.yml
79
81
  - spec/mongoid-simple-tags_spec.rb
80
82
  - spec/spec_helper.rb
81
83
  homepage: https://github.com/chebyte/mongoid-simple-tags