mongoid_taggable 0.1.7 → 1.0.0.pre

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MWYwYTJhMzFiNDQ3ZGQ2NTdhMWM5MWFhOTEwYzFhNzRmYjA4YmM2Yg==
5
+ data.tar.gz: !binary |-
6
+ NGU5MWM3MDAxZTA2NDE5OGUxNzcxZmUzMzA1ZTI3Y2FhOWViMWFhZg==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ ZmE4NTQyZGM3MGUwY2VkODhmMjg4N2NjYjFlYTdlOTlhNDI3MjZhY2ZhZGYy
10
+ M2NjYjQyY2EzMTU2MDc0ZjcyMjBlMGVjNzhlMmI2Yjk2N2YzNTVjMTdlZDFh
11
+ OTllYmQ3NjBiYmM3ZjQ5NTJiMTJmNmRjNTUzNTQ1N2M5M2Y1OGI=
12
+ data.tar.gz: !binary |-
13
+ M2NkOTU1NjE0ZjZhOTAxNWQ5ZjRiNjc3MzUxZjA0OTdiMWEyYWQ4NWYyOTFm
14
+ Mjk5MDE0NDVkMTE1YTNlNmViYzZiOGE2OTUzN2Y0ZjFiNzdkMDM4MjFjNmU0
15
+ Y2M3OWJkMzNhMDBlMDExMzMwMTcyMzQxNTQzOTFiZTc3ODMwNzY=
data/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ .redcar
2
+ pkg/
3
+ .rvmrc
4
+ .idea/
5
+ .rbenv-gemsets
6
+ .rbenv-version
7
+ Gemfile.lock
8
+ .DS_Store
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rake'
4
+ gem 'mongoid'
5
+
6
+ group :test do
7
+ gem 'rspec', '>= 2'
8
+ gem 'rdoc'
9
+ gem 'database_cleaner'
10
+ end
data/README.textile CHANGED
@@ -83,6 +83,7 @@ Post.tags_with_weight # will retrieve:
83
83
  # ['zip', 1]
84
84
  # ]
85
85
 
86
+ p. The tags index is unaffected by default_scopes. If enabled, all tags will be indexed regardless of other attribute values.
86
87
  p. If you don't want to use this feature, it is good to disable it to improve performance:
87
88
 
88
89
  bc.. class Post
data/Rakefile CHANGED
@@ -1,31 +1,22 @@
1
- require 'rake'
2
- require 'rake/rdoctask'
3
- require 'rspec'
4
- require 'rspec/core/rake_task'
5
-
1
+ require 'bundler'
2
+ require 'bundler/gem_tasks'
6
3
  begin
7
- require 'jeweler'
8
- Jeweler::Tasks.new do |gemspec|
9
- gemspec.name = "mongoid_taggable"
10
- gemspec.version = "0.1.7"
11
- gemspec.summary = "Mongoid taggable behaviour"
12
- gemspec.description = "Mongoid Taggable provides some helpers to create taggable documents."
13
- gemspec.email = "wilkerlucio@gmail.com"
14
- gemspec.homepage = "http://github.com/wilkerlucio/mongoid_taggable"
15
- gemspec.authors = ["Wilker Lucio", "Kris Kowalik"]
16
- end
17
- Jeweler::GemcutterTasks.new
18
- rescue LoadError
19
- puts "Jeweler not available. Install it with: gem install jeweler"
4
+ Bundler.setup(:default, :test)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
20
9
  end
21
10
 
11
+ require 'rake'
12
+ require 'rdoc/task'
13
+ require 'rspec'
14
+ require 'rspec/core/rake_task'
22
15
 
23
- desc 'Default: run unit tests.'
16
+ desc 'Run specs'
24
17
  task :default => :spec
25
18
 
26
- Rspec::Core::RakeTask.new(:spec) do |spec|
27
- spec.pattern = "spec/**/*_spec.rb"
28
- end
19
+ RSpec::Core::RakeTask.new :spec
29
20
 
30
21
  desc 'Generate documentation for the mongoid_taggable plugin.'
31
22
  Rake::RDocTask.new(:rdoc) do |rdoc|
@@ -16,7 +16,7 @@ module Mongoid::Taggable
16
16
  def self.included(base)
17
17
  # create fields for tags and index it
18
18
  base.field :tags_array, :type => Array, :default => []
19
- base.index [['tags_array', Mongo::ASCENDING]]
19
+ base.index tags_array: 1 #[['tags_array', Mongo::ASCENDING]]
20
20
 
21
21
  # add callback to save tags index
22
22
  base.after_save do |document|
@@ -51,13 +51,13 @@ module Mongoid::Taggable
51
51
  end
52
52
 
53
53
  def tags
54
- tags_index_collection.master.find.to_a.map{ |r| r["_id"] }
54
+ tags_index_collection.find.to_a.map{ |r| r["_id"] }
55
55
  end
56
56
 
57
57
  # retrieve the list of tags with weight (i.e. count), this is useful for
58
58
  # creating tag clouds
59
59
  def tags_with_weight
60
- tags_index_collection.master.find.to_a.map{ |r| [r["_id"], r["value"]] }
60
+ tags_index_collection.find.to_a.map{ |r| [r["_id"], r["value"]] }
61
61
  end
62
62
 
63
63
  def disable_tags_index!
@@ -78,7 +78,7 @@ module Mongoid::Taggable
78
78
  end
79
79
 
80
80
  def tags_index_collection
81
- @@tags_index_collection ||= Mongoid::Collection.new(self, tags_index_collection_name)
81
+ @tags_index_collection ||= Moped::Collection.new(self.collection.database, tags_index_collection_name)
82
82
  end
83
83
 
84
84
  def save_tags_index!
@@ -104,7 +104,10 @@ module Mongoid::Taggable
104
104
  return count;
105
105
  }"
106
106
 
107
- self.collection.master.map_reduce(map, reduce, :out => tags_index_collection_name)
107
+ # Since map_reduce is normally lazy-executed, call 'raw'
108
+ # Should not be influenced by scoping. Let consumers worry about
109
+ # removing tags they wish not to appear in index.
110
+ self.unscoped.map_reduce(map, reduce).out(replace: tags_index_collection_name).raw
108
111
  end
109
112
  end
110
113
 
@@ -114,8 +117,16 @@ module Mongoid::Taggable
114
117
  end
115
118
 
116
119
  def tags=(tags)
117
- self.tags_array = tags.split(self.class.tags_separator).map(&:strip).reject(&:blank?)
120
+ if tags.present?
121
+ self.tags_array = tags.split(self.class.tags_separator).map(&:strip).reject(&:blank?)
122
+ else
123
+ self.tags_array = []
124
+ end
118
125
  @tags_array_changed = true
119
126
  end
127
+
128
+ def save_tags_index!
129
+ self.class.save_tags_index!
130
+ end
120
131
  end
121
- end
132
+ end
@@ -1,45 +1,23 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
1
  # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
4
 
6
- Gem::Specification.new do |s|
7
- s.name = %q{mongoid_taggable}
8
- s.version = "0.1.7"
5
+ Gem::Specification.new do |g|
6
+ g.name = 'mongoid_taggable'
7
+ g.version = '1.0.0.pre'
8
+ g.date = '2013-03-22'
9
+ g.description = %q{Mongoid Taggable provides some helpers to create taggable documents.}
10
+ g.summary = %q{Mongoid taggable behaviour}
11
+ g.authors = ['Caleb Clark', 'Adam St. John', 'Wilker Lucio', 'Kris Kowalik']
12
+ g.email = ['cclark@mobilizationlabs.com']
13
+ g.homepage = 'http://github.com/wilkerlucio/mongoid_taggable'
9
14
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Wilker Lucio", "Kris Kowalik"]
12
- s.date = %q{2011-07-01}
13
- s.description = %q{Mongoid Taggable provides some helpers to create taggable documents.}
14
- s.email = %q{wilkerlucio@gmail.com}
15
- s.extra_rdoc_files = [
16
- "LICENSE",
17
- "README.textile"
18
- ]
19
- s.files = [
20
- "LICENSE",
21
- "README.textile",
22
- "Rakefile",
23
- "init.rb",
24
- "lib/mongoid/taggable.rb",
25
- "lib/mongoid_taggable.rb",
26
- "mongoid_taggable.gemspec",
27
- "rails/init.rb",
28
- "spec/mongoid/taggable_spec.rb",
29
- "spec/spec_helper.rb"
30
- ]
31
- s.homepage = %q{http://github.com/wilkerlucio/mongoid_taggable}
32
- s.require_paths = ["lib"]
33
- s.rubygems_version = %q{1.7.2}
34
- s.summary = %q{Mongoid taggable behaviour}
15
+ g.extra_rdoc_files = %w(LICENSE README.textile)
35
16
 
36
- if s.respond_to? :specification_version then
37
- s.specification_version = 3
17
+ g.files = `git ls-files`.split($/)
18
+ g.test_files = g.files.grep(%r{^(test|spec|features)/})
19
+ g.require_paths = ['lib']
38
20
 
39
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
40
- else
41
- end
42
- else
43
- end
21
+ g.add_runtime_dependency 'rake', '>= 0'
22
+ g.add_runtime_dependency 'mongoid', '>= 3'
44
23
  end
45
-
data/spec/mongoid.yml ADDED
@@ -0,0 +1,6 @@
1
+ test:
2
+ sessions:
3
+ default:
4
+ database: mongoid_taggable_test
5
+ hosts:
6
+ - localhost:27017
@@ -98,6 +98,18 @@ describe Mongoid::Taggable do
98
98
  @m.tags = "repetitive,, commas, shouldn't cause,,, empty tags"
99
99
  @m.tags_array.should == ["repetitive", "commas", "shouldn't cause", "empty tags"]
100
100
  end
101
+
102
+ it "should clear out tags when set to nil" do
103
+ m = MyModel.create!(tags: "hey,there")
104
+ m.tags = nil
105
+ m.tags_array.should == []
106
+ end
107
+
108
+ it "should clear out tags when set to empty string" do
109
+ m = MyModel.create!(tags: "hey,there")
110
+ m.tags = ""
111
+ m.tags_array.should == []
112
+ end
101
113
  end
102
114
 
103
115
  context "changing separator" do
@@ -130,11 +142,7 @@ describe Mongoid::Taggable do
130
142
  end
131
143
 
132
144
  it "should generate the index collection model based on model" do
133
- MyModel.tags_index_collection.should be_a Mongoid::Collection
134
- end
135
-
136
- it "should generate the index collection model based on model with the collection name" do
137
- MyModel.tags_index_collection.name.should == "my_models_tags_index"
145
+ MyModel.tags_index_collection.should be_a Moped::Collection
138
146
  end
139
147
 
140
148
  context "retrieving index" do
@@ -177,15 +185,15 @@ describe Mongoid::Taggable do
177
185
  end
178
186
 
179
187
  it 'should launch the map/reduce if index activate and tag_arrays change' do
180
- m = MyModel.create!(:tags => "food,ant,bee")
188
+ m = MyModel.create!(:tags_array => "food,ant,bee")
181
189
  m.tags = 'juice,food'
182
- MyModel.collection.master.should_receive(:map_reduce)
190
+ MyModel.should_receive(:save_tags_index!) {double("scope").as_null_object}
183
191
  m.save
184
192
  end
185
193
 
186
194
  it 'should not launch the map/reduce if index activate and tag_arrays not change' do
187
195
  m = MyModel.create!(:tags => "food,ant,bee")
188
- MyModel.collection.master.should_not_receive(:map_reduce)
196
+ MyModel.should_not_receive(:save_tags_index!)
189
197
  m.save
190
198
  m.name = 'hello'
191
199
  m.save
data/spec/spec_helper.rb CHANGED
@@ -15,6 +15,5 @@ end
15
15
  require 'mongoid'
16
16
  require 'mongoid_taggable'
17
17
 
18
- Mongoid.configure do |config|
19
- config.master = Mongo::Connection.new.db("mongoid_taggable_test")
20
- end
18
+ Mongoid.load!("spec/mongoid.yml", :test)
19
+
metadata CHANGED
@@ -1,29 +1,57 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: mongoid_taggable
3
- version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.1.7
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0.pre
6
5
  platform: ruby
7
- authors:
6
+ authors:
7
+ - Caleb Clark
8
+ - Adam St. John
8
9
  - Wilker Lucio
9
10
  - Kris Kowalik
10
11
  autorequire:
11
12
  bindir: bin
12
13
  cert_chain: []
13
-
14
- date: 2011-07-01 00:00:00 Z
15
- dependencies: []
16
-
14
+ date: 2013-03-22 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: rake
18
+ requirement: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: mongoid
32
+ requirement: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ! '>='
35
+ - !ruby/object:Gem::Version
36
+ version: '3'
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '3'
17
44
  description: Mongoid Taggable provides some helpers to create taggable documents.
18
- email: wilkerlucio@gmail.com
45
+ email:
46
+ - cclark@mobilizationlabs.com
19
47
  executables: []
20
-
21
48
  extensions: []
22
-
23
- extra_rdoc_files:
49
+ extra_rdoc_files:
24
50
  - LICENSE
25
51
  - README.textile
26
- files:
52
+ files:
53
+ - .gitignore
54
+ - Gemfile
27
55
  - LICENSE
28
56
  - README.textile
29
57
  - Rakefile
@@ -32,34 +60,33 @@ files:
32
60
  - lib/mongoid_taggable.rb
33
61
  - mongoid_taggable.gemspec
34
62
  - rails/init.rb
63
+ - spec/mongoid.yml
35
64
  - spec/mongoid/taggable_spec.rb
36
65
  - spec/spec_helper.rb
37
66
  homepage: http://github.com/wilkerlucio/mongoid_taggable
38
67
  licenses: []
39
-
68
+ metadata: {}
40
69
  post_install_message:
41
70
  rdoc_options: []
42
-
43
- require_paths:
71
+ require_paths:
44
72
  - lib
45
- required_ruby_version: !ruby/object:Gem::Requirement
46
- none: false
47
- requirements:
48
- - - ">="
49
- - !ruby/object:Gem::Version
50
- version: "0"
51
- required_rubygems_version: !ruby/object:Gem::Requirement
52
- none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- version: "0"
73
+ required_ruby_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ! '>'
81
+ - !ruby/object:Gem::Version
82
+ version: 1.3.1
57
83
  requirements: []
58
-
59
84
  rubyforge_project:
60
- rubygems_version: 1.7.2
85
+ rubygems_version: 2.0.3
61
86
  signing_key:
62
- specification_version: 3
87
+ specification_version: 4
63
88
  summary: Mongoid taggable behaviour
64
- test_files: []
65
-
89
+ test_files:
90
+ - spec/mongoid.yml
91
+ - spec/mongoid/taggable_spec.rb
92
+ - spec/spec_helper.rb