mongoid-slug 6.0.0 → 6.0.1
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.
- checksums.yaml +4 -4
- data/LICENSE +20 -20
- data/README.md +361 -336
- data/lib/mongoid/slug.rb +328 -328
- data/lib/mongoid/slug/criteria.rb +107 -107
- data/lib/mongoid/slug/{index.rb → index_builder.rb} +67 -45
- data/lib/mongoid/slug/railtie.rb +9 -9
- data/lib/mongoid/slug/slug_id_strategy.rb +3 -3
- data/lib/mongoid/slug/unique_slug.rb +173 -173
- data/lib/mongoid/slug/version.rb +5 -5
- data/lib/mongoid_slug.rb +2 -2
- data/lib/tasks/mongoid_slug.rake +15 -19
- data/spec/models/alias.rb +6 -6
- data/spec/models/article.rb +9 -9
- data/spec/models/artist.rb +8 -8
- data/spec/models/artwork.rb +10 -10
- data/spec/models/author.rb +15 -15
- data/spec/models/author_polymorphic.rb +15 -15
- data/spec/models/book.rb +12 -12
- data/spec/models/book_polymorphic.rb +12 -12
- data/spec/models/caption.rb +17 -17
- data/spec/models/entity.rb +11 -11
- data/spec/models/friend.rb +7 -7
- data/spec/models/incorrect_slug_persistence.rb +9 -9
- data/spec/models/integer_id.rb +9 -9
- data/spec/models/magazine.rb +7 -7
- data/spec/models/page.rb +9 -9
- data/spec/models/page_localize.rb +9 -9
- data/spec/models/page_slug_localized.rb +9 -9
- data/spec/models/page_slug_localized_custom.rb +10 -10
- data/spec/models/page_slug_localized_history.rb +9 -9
- data/spec/models/partner.rb +7 -7
- data/spec/models/person.rb +12 -12
- data/spec/models/relationship.rb +8 -8
- data/spec/models/string_id.rb +9 -9
- data/spec/models/subject.rb +7 -7
- data/spec/models/without_slug.rb +5 -5
- data/spec/mongoid/criteria_spec.rb +207 -207
- data/spec/mongoid/index_builder_spec.rb +105 -0
- data/spec/mongoid/slug_spec.rb +1175 -1169
- data/spec/shared/indexes.rb +41 -41
- data/spec/spec_helper.rb +61 -61
- data/spec/tasks/mongoid_slug_rake_spec.rb +73 -73
- metadata +31 -32
- data/spec/mongoid/index_spec.rb +0 -33
data/spec/shared/indexes.rb
CHANGED
@@ -1,41 +1,41 @@
|
|
1
|
-
shared_context 'with an index' do |key|
|
2
|
-
if Mongoid::Compatibility::Version.mongoid3?
|
3
|
-
let(:index) { subject.index_options[key] }
|
4
|
-
let(:index_keys) { key }
|
5
|
-
let(:index_options) { index }
|
6
|
-
else
|
7
|
-
let(:index) { subject.index_specifications.detect { |spec| spec.key == key } }
|
8
|
-
let(:index_keys) { index.key }
|
9
|
-
let(:index_options) { index.options }
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
shared_examples 'has an index' do |key, options|
|
14
|
-
include_context 'with an index', key
|
15
|
-
|
16
|
-
it "has a #{[key, options].compact.join(', ')} index" do
|
17
|
-
expect(index).not_to be_nil
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'has the correct order of keys' do
|
21
|
-
expect(index_keys.keys).to eq key.keys
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'has the correct order of key values' do
|
25
|
-
expect(index_keys.values).to eq key.values
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'matches option values' do
|
29
|
-
options.each_pair do |name, value|
|
30
|
-
expect(index_options[name]).to eq(value)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
shared_examples 'does not have an index' do |key|
|
36
|
-
include_context 'with an index', key
|
37
|
-
|
38
|
-
it "does not have the #{key} index" do
|
39
|
-
expect(index).to be nil
|
40
|
-
end
|
41
|
-
end
|
1
|
+
shared_context 'with an index' do |key|
|
2
|
+
if Mongoid::Compatibility::Version.mongoid3?
|
3
|
+
let(:index) { subject.index_options[key] }
|
4
|
+
let(:index_keys) { key }
|
5
|
+
let(:index_options) { index }
|
6
|
+
else
|
7
|
+
let(:index) { subject.index_specifications.detect { |spec| spec.key == key } }
|
8
|
+
let(:index_keys) { index.key }
|
9
|
+
let(:index_options) { index.options }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
shared_examples 'has an index' do |key, options|
|
14
|
+
include_context 'with an index', key
|
15
|
+
|
16
|
+
it "has a #{[key, options].compact.join(', ')} index" do
|
17
|
+
expect(index).not_to be_nil
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'has the correct order of keys' do
|
21
|
+
expect(index_keys.keys).to eq key.keys
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'has the correct order of key values' do
|
25
|
+
expect(index_keys.values).to eq key.values
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'matches option values' do
|
29
|
+
options.each_pair do |name, value|
|
30
|
+
expect(index_options[name]).to eq(value)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
shared_examples 'does not have an index' do |key|
|
36
|
+
include_context 'with an index', key
|
37
|
+
|
38
|
+
it "does not have the #{key} index" do
|
39
|
+
expect(index).to be nil
|
40
|
+
end
|
41
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,61 +1,61 @@
|
|
1
|
-
require 'bundler/setup'
|
2
|
-
|
3
|
-
require 'rspec'
|
4
|
-
require 'uuid'
|
5
|
-
require 'awesome_print'
|
6
|
-
require 'active_support'
|
7
|
-
require 'active_support/deprecation'
|
8
|
-
require 'mongoid'
|
9
|
-
require 'rspec/its'
|
10
|
-
require 'mongoid/compatibility'
|
11
|
-
|
12
|
-
require File.expand_path '../lib/mongoid/slug', __dir__
|
13
|
-
|
14
|
-
module Mongoid
|
15
|
-
module Slug
|
16
|
-
module UuidIdStrategy
|
17
|
-
def self.call(id)
|
18
|
-
id =~ /\A([0-9a-fA-F]){8}-(([0-9a-fA-F]){4}-){3}([0-9a-fA-F]){12}\z/
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def database_id
|
25
|
-
ENV['CI'] ? "mongoid_slug_#{Process.pid}" : 'mongoid_slug_test'
|
26
|
-
end
|
27
|
-
|
28
|
-
Mongoid.configure do |config|
|
29
|
-
config.connect_to database_id
|
30
|
-
end
|
31
|
-
|
32
|
-
%w[models shared].each do |dir|
|
33
|
-
Dir["./spec/#{dir}/*.rb"].each { |f| require f }
|
34
|
-
end
|
35
|
-
|
36
|
-
I18n.available_locales = %i[en nl]
|
37
|
-
|
38
|
-
RSpec.configure do |c|
|
39
|
-
c.raise_errors_for_deprecations!
|
40
|
-
|
41
|
-
c.before :all do
|
42
|
-
Mongoid.logger.level = Logger::INFO
|
43
|
-
Mongo::Logger.logger.level = Logger::INFO if Mongoid::Compatibility::Version.mongoid5_or_newer?
|
44
|
-
end
|
45
|
-
|
46
|
-
c.before(:each) do
|
47
|
-
Author.create_indexes
|
48
|
-
Book.create_indexes
|
49
|
-
AuthorPolymorphic.create_indexes
|
50
|
-
BookPolymorphic.create_indexes
|
51
|
-
Mongoid::IdentityMap.clear if defined?(Mongoid::IdentityMap)
|
52
|
-
end
|
53
|
-
|
54
|
-
c.after(:each) do
|
55
|
-
if Mongoid::Compatibility::Version.mongoid3? || Mongoid::Compatibility::Version.mongoid4?
|
56
|
-
Mongoid.default_session.drop
|
57
|
-
else
|
58
|
-
Mongoid::Clients.default.database.drop
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
1
|
+
require 'bundler/setup'
|
2
|
+
|
3
|
+
require 'rspec'
|
4
|
+
require 'uuid'
|
5
|
+
require 'awesome_print'
|
6
|
+
require 'active_support'
|
7
|
+
require 'active_support/deprecation'
|
8
|
+
require 'mongoid'
|
9
|
+
require 'rspec/its'
|
10
|
+
require 'mongoid/compatibility'
|
11
|
+
|
12
|
+
require File.expand_path '../lib/mongoid/slug', __dir__
|
13
|
+
|
14
|
+
module Mongoid
|
15
|
+
module Slug
|
16
|
+
module UuidIdStrategy
|
17
|
+
def self.call(id)
|
18
|
+
id =~ /\A([0-9a-fA-F]){8}-(([0-9a-fA-F]){4}-){3}([0-9a-fA-F]){12}\z/
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def database_id
|
25
|
+
ENV['CI'] ? "mongoid_slug_#{Process.pid}" : 'mongoid_slug_test'
|
26
|
+
end
|
27
|
+
|
28
|
+
Mongoid.configure do |config|
|
29
|
+
config.connect_to database_id
|
30
|
+
end
|
31
|
+
|
32
|
+
%w[models shared].each do |dir|
|
33
|
+
Dir["./spec/#{dir}/*.rb"].each { |f| require f }
|
34
|
+
end
|
35
|
+
|
36
|
+
I18n.available_locales = %i[en nl]
|
37
|
+
|
38
|
+
RSpec.configure do |c|
|
39
|
+
c.raise_errors_for_deprecations!
|
40
|
+
|
41
|
+
c.before :all do
|
42
|
+
Mongoid.logger.level = Logger::INFO
|
43
|
+
Mongo::Logger.logger.level = Logger::INFO if Mongoid::Compatibility::Version.mongoid5_or_newer?
|
44
|
+
end
|
45
|
+
|
46
|
+
c.before(:each) do
|
47
|
+
Author.create_indexes
|
48
|
+
Book.create_indexes
|
49
|
+
AuthorPolymorphic.create_indexes
|
50
|
+
BookPolymorphic.create_indexes
|
51
|
+
Mongoid::IdentityMap.clear if defined?(Mongoid::IdentityMap)
|
52
|
+
end
|
53
|
+
|
54
|
+
c.after(:each) do
|
55
|
+
if Mongoid::Compatibility::Version.mongoid3? || Mongoid::Compatibility::Version.mongoid4?
|
56
|
+
Mongoid.default_session.drop
|
57
|
+
else
|
58
|
+
Mongoid::Clients.default.database.drop
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -1,73 +1,73 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'rake'
|
3
|
-
|
4
|
-
describe 'mongoid_slug:set' do
|
5
|
-
before :all do
|
6
|
-
load File.expand_path('../../lib/tasks/mongoid_slug.rake', __dir__)
|
7
|
-
Rake::Task.define_task(:environment)
|
8
|
-
end
|
9
|
-
|
10
|
-
context 'when models parameter is passed' do
|
11
|
-
before :all do
|
12
|
-
UninitalizedSlugFirst = Class.new do
|
13
|
-
include Mongoid::Document
|
14
|
-
field :name, type: String
|
15
|
-
store_in collection: 'uninitalized_slug_first'
|
16
|
-
end
|
17
|
-
UninitalizedSlugSecond = Class.new do
|
18
|
-
include Mongoid::Document
|
19
|
-
field :name, type: String
|
20
|
-
store_in collection: 'uninitalized_slug_second'
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'goes though all documents of passed models and sets slug if not already set' do
|
25
|
-
uninitalized_slug1 = UninitalizedSlugFirst.create(name: 'uninitalized-slug1')
|
26
|
-
uninitalized_slug2 = UninitalizedSlugSecond.create(name: 'uninitalized-slug2')
|
27
|
-
|
28
|
-
UninitalizedSlugFirst.class_eval do
|
29
|
-
include Mongoid::Slug
|
30
|
-
slug :name
|
31
|
-
end
|
32
|
-
UninitalizedSlugSecond.class_eval do
|
33
|
-
include Mongoid::Slug
|
34
|
-
slug :name
|
35
|
-
end
|
36
|
-
|
37
|
-
expect(uninitalized_slug1.slugs).to be_nil
|
38
|
-
expect(uninitalized_slug2.slugs).to be_nil
|
39
|
-
|
40
|
-
Rake::Task['mongoid_slug:set'].reenable
|
41
|
-
Rake::Task['mongoid_slug:set'].invoke('UninitalizedSlugFirst')
|
42
|
-
|
43
|
-
expect(uninitalized_slug1.reload.slugs).to eq(['uninitalized-slug1'])
|
44
|
-
expect(uninitalized_slug2.reload.slugs).to be nil
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
context 'when models parameter is not passed' do
|
49
|
-
before :all do
|
50
|
-
UninitalizedSlugThird = Class.new do
|
51
|
-
include Mongoid::Document
|
52
|
-
field :name, type: String
|
53
|
-
store_in collection: 'uninitalized_slug_third'
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
it 'goes though all documents and sets slug if not already set' do
|
58
|
-
uninitalized_slug3 = UninitalizedSlugThird.create(name: 'uninitalized-slug3')
|
59
|
-
|
60
|
-
UninitalizedSlugThird.class_eval do
|
61
|
-
include Mongoid::Slug
|
62
|
-
slug :name
|
63
|
-
end
|
64
|
-
|
65
|
-
expect(uninitalized_slug3.slugs).to be_nil
|
66
|
-
|
67
|
-
Rake::Task['mongoid_slug:set'].reenable
|
68
|
-
Rake::Task['mongoid_slug:set'].invoke
|
69
|
-
|
70
|
-
expect(uninitalized_slug3.reload.slugs).to eq(['uninitalized-slug3'])
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
describe 'mongoid_slug:set' do
|
5
|
+
before :all do
|
6
|
+
load File.expand_path('../../lib/tasks/mongoid_slug.rake', __dir__)
|
7
|
+
Rake::Task.define_task(:environment)
|
8
|
+
end
|
9
|
+
|
10
|
+
context 'when models parameter is passed' do
|
11
|
+
before :all do
|
12
|
+
UninitalizedSlugFirst = Class.new do
|
13
|
+
include Mongoid::Document
|
14
|
+
field :name, type: String
|
15
|
+
store_in collection: 'uninitalized_slug_first'
|
16
|
+
end
|
17
|
+
UninitalizedSlugSecond = Class.new do
|
18
|
+
include Mongoid::Document
|
19
|
+
field :name, type: String
|
20
|
+
store_in collection: 'uninitalized_slug_second'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'goes though all documents of passed models and sets slug if not already set' do
|
25
|
+
uninitalized_slug1 = UninitalizedSlugFirst.create(name: 'uninitalized-slug1')
|
26
|
+
uninitalized_slug2 = UninitalizedSlugSecond.create(name: 'uninitalized-slug2')
|
27
|
+
|
28
|
+
UninitalizedSlugFirst.class_eval do
|
29
|
+
include Mongoid::Slug
|
30
|
+
slug :name
|
31
|
+
end
|
32
|
+
UninitalizedSlugSecond.class_eval do
|
33
|
+
include Mongoid::Slug
|
34
|
+
slug :name
|
35
|
+
end
|
36
|
+
|
37
|
+
expect(uninitalized_slug1.slugs).to be_nil
|
38
|
+
expect(uninitalized_slug2.slugs).to be_nil
|
39
|
+
|
40
|
+
Rake::Task['mongoid_slug:set'].reenable
|
41
|
+
Rake::Task['mongoid_slug:set'].invoke('UninitalizedSlugFirst')
|
42
|
+
|
43
|
+
expect(uninitalized_slug1.reload.slugs).to eq(['uninitalized-slug1'])
|
44
|
+
expect(uninitalized_slug2.reload.slugs).to be nil
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'when models parameter is not passed' do
|
49
|
+
before :all do
|
50
|
+
UninitalizedSlugThird = Class.new do
|
51
|
+
include Mongoid::Document
|
52
|
+
field :name, type: String
|
53
|
+
store_in collection: 'uninitalized_slug_third'
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'goes though all documents and sets slug if not already set' do
|
58
|
+
uninitalized_slug3 = UninitalizedSlugThird.create(name: 'uninitalized-slug3')
|
59
|
+
|
60
|
+
UninitalizedSlugThird.class_eval do
|
61
|
+
include Mongoid::Slug
|
62
|
+
slug :name
|
63
|
+
end
|
64
|
+
|
65
|
+
expect(uninitalized_slug3.slugs).to be_nil
|
66
|
+
|
67
|
+
Rake::Task['mongoid_slug:set'].reenable
|
68
|
+
Rake::Task['mongoid_slug:set'].invoke
|
69
|
+
|
70
|
+
expect(uninitalized_slug3.reload.slugs).to eq(['uninitalized-slug3'])
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid-slug
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.0.
|
4
|
+
version: 6.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andreas Saebjoernsen
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mongoid
|
@@ -147,7 +147,7 @@ files:
|
|
147
147
|
- README.md
|
148
148
|
- lib/mongoid/slug.rb
|
149
149
|
- lib/mongoid/slug/criteria.rb
|
150
|
-
- lib/mongoid/slug/
|
150
|
+
- lib/mongoid/slug/index_builder.rb
|
151
151
|
- lib/mongoid/slug/railtie.rb
|
152
152
|
- lib/mongoid/slug/slug_id_strategy.rb
|
153
153
|
- lib/mongoid/slug/unique_slug.rb
|
@@ -180,7 +180,7 @@ files:
|
|
180
180
|
- spec/models/subject.rb
|
181
181
|
- spec/models/without_slug.rb
|
182
182
|
- spec/mongoid/criteria_spec.rb
|
183
|
-
- spec/mongoid/
|
183
|
+
- spec/mongoid/index_builder_spec.rb
|
184
184
|
- spec/mongoid/slug_spec.rb
|
185
185
|
- spec/shared/indexes.rb
|
186
186
|
- spec/spec_helper.rb
|
@@ -189,7 +189,7 @@ homepage: https://github.com/mongoid/mongoid-slug
|
|
189
189
|
licenses:
|
190
190
|
- MIT
|
191
191
|
metadata: {}
|
192
|
-
post_install_message:
|
192
|
+
post_install_message:
|
193
193
|
rdoc_options: []
|
194
194
|
require_paths:
|
195
195
|
- lib
|
@@ -204,40 +204,39 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
204
204
|
- !ruby/object:Gem::Version
|
205
205
|
version: '0'
|
206
206
|
requirements: []
|
207
|
-
|
208
|
-
|
209
|
-
signing_key:
|
207
|
+
rubygems_version: 3.2.3
|
208
|
+
signing_key:
|
210
209
|
specification_version: 4
|
211
210
|
summary: Mongoid URL slugs
|
212
211
|
test_files:
|
213
|
-
- spec/
|
214
|
-
- spec/mongoid/slug_spec.rb
|
215
|
-
- spec/mongoid/index_spec.rb
|
216
|
-
- spec/spec_helper.rb
|
217
|
-
- spec/tasks/mongoid_slug_rake_spec.rb
|
218
|
-
- spec/shared/indexes.rb
|
212
|
+
- spec/models/alias.rb
|
219
213
|
- spec/models/article.rb
|
220
|
-
- spec/models/integer_id.rb
|
221
|
-
- spec/models/book.rb
|
222
|
-
- spec/models/entity.rb
|
223
|
-
- spec/models/caption.rb
|
224
|
-
- spec/models/without_slug.rb
|
225
214
|
- spec/models/artist.rb
|
226
|
-
- spec/models/
|
227
|
-
- spec/models/page.rb
|
228
|
-
- spec/models/page_slug_localized.rb
|
215
|
+
- spec/models/artwork.rb
|
229
216
|
- spec/models/author.rb
|
217
|
+
- spec/models/author_polymorphic.rb
|
218
|
+
- spec/models/book.rb
|
219
|
+
- spec/models/book_polymorphic.rb
|
220
|
+
- spec/models/caption.rb
|
221
|
+
- spec/models/entity.rb
|
230
222
|
- spec/models/friend.rb
|
231
|
-
- spec/models/
|
223
|
+
- spec/models/incorrect_slug_persistence.rb
|
224
|
+
- spec/models/integer_id.rb
|
232
225
|
- spec/models/magazine.rb
|
226
|
+
- spec/models/page.rb
|
227
|
+
- spec/models/page_localize.rb
|
228
|
+
- spec/models/page_slug_localized.rb
|
229
|
+
- spec/models/page_slug_localized_custom.rb
|
230
|
+
- spec/models/page_slug_localized_history.rb
|
233
231
|
- spec/models/partner.rb
|
234
|
-
- spec/models/alias.rb
|
235
232
|
- spec/models/person.rb
|
236
|
-
- spec/models/page_slug_localized_custom.rb
|
237
233
|
- spec/models/relationship.rb
|
238
|
-
- spec/models/
|
239
|
-
- spec/models/
|
240
|
-
- spec/models/
|
241
|
-
- spec/
|
242
|
-
- spec/
|
243
|
-
- spec/
|
234
|
+
- spec/models/string_id.rb
|
235
|
+
- spec/models/subject.rb
|
236
|
+
- spec/models/without_slug.rb
|
237
|
+
- spec/mongoid/criteria_spec.rb
|
238
|
+
- spec/mongoid/index_builder_spec.rb
|
239
|
+
- spec/mongoid/slug_spec.rb
|
240
|
+
- spec/shared/indexes.rb
|
241
|
+
- spec/spec_helper.rb
|
242
|
+
- spec/tasks/mongoid_slug_rake_spec.rb
|