mongoid-slug 6.0.1 → 7.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +34 -3
  3. data/lib/mongoid/slug/criteria.rb +10 -6
  4. data/lib/mongoid/slug/index_builder.rb +2 -0
  5. data/lib/mongoid/slug/railtie.rb +2 -0
  6. data/lib/mongoid/slug/slug_id_strategy.rb +2 -0
  7. data/lib/mongoid/slug/unique_slug.rb +8 -9
  8. data/lib/mongoid/slug/version.rb +4 -2
  9. data/lib/mongoid/slug.rb +15 -10
  10. data/lib/mongoid_slug.rb +2 -0
  11. data/lib/tasks/mongoid_slug.rake +3 -1
  12. metadata +9 -168
  13. data/spec/models/alias.rb +0 -6
  14. data/spec/models/article.rb +0 -9
  15. data/spec/models/artist.rb +0 -8
  16. data/spec/models/artwork.rb +0 -10
  17. data/spec/models/author.rb +0 -15
  18. data/spec/models/author_polymorphic.rb +0 -15
  19. data/spec/models/book.rb +0 -12
  20. data/spec/models/book_polymorphic.rb +0 -12
  21. data/spec/models/caption.rb +0 -17
  22. data/spec/models/entity.rb +0 -11
  23. data/spec/models/friend.rb +0 -7
  24. data/spec/models/incorrect_slug_persistence.rb +0 -9
  25. data/spec/models/integer_id.rb +0 -9
  26. data/spec/models/magazine.rb +0 -7
  27. data/spec/models/page.rb +0 -9
  28. data/spec/models/page_localize.rb +0 -9
  29. data/spec/models/page_slug_localized.rb +0 -9
  30. data/spec/models/page_slug_localized_custom.rb +0 -10
  31. data/spec/models/page_slug_localized_history.rb +0 -9
  32. data/spec/models/partner.rb +0 -7
  33. data/spec/models/person.rb +0 -12
  34. data/spec/models/relationship.rb +0 -8
  35. data/spec/models/string_id.rb +0 -9
  36. data/spec/models/subject.rb +0 -7
  37. data/spec/models/without_slug.rb +0 -5
  38. data/spec/mongoid/criteria_spec.rb +0 -207
  39. data/spec/mongoid/index_builder_spec.rb +0 -105
  40. data/spec/mongoid/slug_spec.rb +0 -1175
  41. data/spec/shared/indexes.rb +0 -41
  42. data/spec/spec_helper.rb +0 -61
  43. data/spec/tasks/mongoid_slug_rake_spec.rb +0 -73
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 54274387f9a202810aefa5b3b19c90990636d6076cbc6591cf46129986b4b5e4
4
- data.tar.gz: 557ba29c3dfaa615f7e926ba223bb3390e930a52ed559baf33b0517cf224aaa8
3
+ metadata.gz: 316ca3607617c4e0c9f74a98fcac1d1629e5d777b79d6b4dab5a3ed3d07b3989
4
+ data.tar.gz: c55bbfa991bdc760e461b8ab73de8deb972bcbf784bc2db37640a1d03a5e51aa
5
5
  SHA512:
6
- metadata.gz: 11a15aec160529e61f5e6fe9636d9fded847d12ec08fe50e6c67997aca86fed844f42264962c65999e862b7a73ba3d41c337c7fae492e8c91999efbd889ea502
7
- data.tar.gz: ff604c15c46fa831bb648906b802cc8e93d13363207fc3a121b7b1c3e4ef3ccb46305f630507ded0e24ad07d70069e4e70ae3185d022267e5ba4c42b53381b44
6
+ metadata.gz: f4cbe88440e9ef769c7fb91f1a2fed9e294b2cb213e0779425314b4bfc20307d0003688f3ee7ce00bc2c34560f99fda420b038179b5f919a22ddfcd3559ebab5
7
+ data.tar.gz: d89e83169fe6e282a664b0ffa2db13d7235e413d39a25948142c85aa21ef830c298663d77364b3590c48e4b6a736e1b3b279681030a6de9c920ede6f8411aadb
data/README.md CHANGED
@@ -8,6 +8,12 @@ It sits idly on top of [stringex](https://github.com/rsl/stringex), supporting n
8
8
  [![Gem Version](https://badge.fury.io/rb/mongoid-slug.svg)](http://badge.fury.io/rb/mongoid-slug)
9
9
  [![Code Climate](https://codeclimate.com/github/mongoid/mongoid-slug.svg)](https://codeclimate.com/github/mongoid/mongoid-slug)
10
10
 
11
+ ### Version Support
12
+
13
+ Mongoid Slug 7.x requires at least Mongoid 7.0.0 and Ruby 2.7.0. For earlier Mongoid and Ruby version support, please use an earlier version of Mongoid Slug.
14
+
15
+ Mongoid Slug is compatible with all MongoDB versions which Mongoid supports, however, please see "Slug Max Length" section below for MongoDB 4.0 and earlier.
16
+
11
17
  ### Installation
12
18
 
13
19
  Add to your Gemfile:
@@ -70,6 +76,7 @@ post = Post.find 'a-thousand-plateaus' # Finds by slugs
70
76
  post = Post.find '50b1386a0482939864000001' # Finds by bson ids
71
77
  => ...
72
78
  ```
79
+
73
80
  [Examine slug.rb](lib/mongoid/slug.rb) for all available options.
74
81
 
75
82
  ### Updating Existing Records
@@ -127,6 +134,23 @@ The `to_url` method comes from [stringex](https://github.com/rsl/stringex).
127
134
 
128
135
  You can define a slug builder globally and/or override it per model.
129
136
 
137
+ ### Indexing
138
+
139
+ By default, Mongoid Slug will automatically generate an index for the slug, which will be created when you run `rake db:create_indexes`. This index will take into account scoping and other options described below.
140
+
141
+ To skip this index generation, you may set `index: false` as follows:
142
+
143
+ ```ruby
144
+ class Employee
145
+ include Mongoid::Document
146
+ include Mongoid::Slug
147
+
148
+ field :name
149
+
150
+ slug :name, index: :false
151
+ end
152
+ ```
153
+
130
154
  ### Scoping
131
155
 
132
156
  To scope a slug by a reference association, pass `:scope`:
@@ -169,9 +193,16 @@ class Employee
169
193
  end
170
194
  ```
171
195
 
172
- ### Limit Slug Length
196
+ ### Slug Max Length
173
197
 
174
- MongoDB has a default limit around 1KB to the size of the index keys and will raise error 17280, `key too large to index` when trying to create a record that causes an index key to exceed that limit. By default slugs are of the form `text[-number]` and the text portion is limited in size to `Mongoid::Slug::MONGO_INDEX_KEY_LIMIT_BYTES - 32` bytes. You can change this limit with `max_length` or set it to `nil` if you're running MongoDB with [failIndexKeyTooLong](https://docs.mongodb.org/manual/reference/parameters/#param.failIndexKeyTooLong) set to `false`.
198
+ MongoDB [featureCompatibilityVersion](https://docs.mongodb.com/manual/reference/command/setFeatureCompatibilityVersion/#std-label-view-fcv)
199
+ "4.0" and earlier applies an [Index Key Limit](https://docs.mongodb.com/manual/reference/limits/#mongodb-limit-Index-Key-Limit)
200
+ which limits the total size of an index entry to around 1KB and will raise error,
201
+ `17280 - key too large to index` when trying to create a record that causes an index key to exceed that limit.
202
+ By default slugs are of the form `text[-number]` and the text portion is limited in size
203
+ to `Mongoid::Slug::MONGO_INDEX_KEY_LIMIT_BYTES - 32` bytes.
204
+ You can change this limit with `max_length` or set it to `nil` if you're running MongoDB
205
+ with [failIndexKeyTooLong](https://docs.mongodb.org/manual/reference/parameters/#param.failIndexKeyTooLong) set to `false`.
175
206
 
176
207
  ```ruby
177
208
  class Company
@@ -295,7 +326,7 @@ For example, if `I18n.default_locale` is `:en`, the index will be generated as f
295
326
  ```ruby
296
327
  slug :title, localize: true
297
328
 
298
- # The following indexes is auto-generated:
329
+ # The following index is auto-generated:
299
330
  index({ '_slugs.en' => 1 }, { unique: true, sparse: true })
300
331
  ```
301
332
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mongoid
2
4
  module Slug
3
5
  class Criteria < Mongoid::Criteria
@@ -50,6 +52,7 @@ module Mongoid
50
52
 
51
53
  def look_like_slugs?(args)
52
54
  return false unless args.all? { |id| id.is_a?(String) }
55
+
53
56
  id_field = @klass.fields['_id']
54
57
  @slug_strategy ||= id_field.options[:slug_id_strategy] || build_slug_strategy(id_field.type)
55
58
  args.none? { |id| @slug_strategy.call(id) }
@@ -61,13 +64,13 @@ module Mongoid
61
64
  # use object_id or string strategy depending on the id_type
62
65
  # otherwise default for all other id_types
63
66
  def build_slug_strategy(id_type)
64
- type_method = id_type.to_s.downcase.split('::').last + '_slug_strategy'
67
+ type_method = "#{id_type.to_s.downcase.split('::').last}_slug_strategy"
65
68
  respond_to?(type_method, true) ? method(type_method) : ->(_id) { false }
66
69
  end
67
70
 
68
71
  # a string will not look like a slug if it looks like a legal BSON::ObjectId
69
72
  def objectid_slug_strategy(id)
70
- Mongoid::Compatibility::ObjectId.legal?(id)
73
+ BSON::ObjectId.legal?(id)
71
74
  end
72
75
 
73
76
  # a string will always look like a slug
@@ -78,10 +81,10 @@ module Mongoid
78
81
  def for_slugs(slugs)
79
82
  # _translations
80
83
  localized = (begin
81
- @klass.fields['_slugs'].options[:localize]
82
- rescue StandardError
83
- false
84
- end)
84
+ @klass.fields['_slugs'].options[:localize]
85
+ rescue StandardError
86
+ false
87
+ end)
85
88
  if localized
86
89
  def_loc = I18n.default_locale
87
90
  query = { '$in' => slugs }
@@ -100,6 +103,7 @@ module Mongoid
100
103
  def check_for_missing_documents_for_slugs!(result, slugs)
101
104
  missing_slugs = slugs - result.map(&:slugs).flatten
102
105
  return unless !missing_slugs.blank? && Mongoid.raise_not_found_error
106
+
103
107
  raise Errors::DocumentNotFound.new(klass, slugs, missing_slugs)
104
108
  end
105
109
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mongoid
2
4
  module Slug
3
5
  module IndexBuilder
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mongoid
2
4
  module Slug
3
5
  class Railtie < Rails::Railtie
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Mongoid::Fields.option(:slug_id_strategy) do |_model, field, value|
2
4
  field.options[:slug_id_strategy] = value
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'forwardable'
2
4
 
3
5
  # Can use e.g. Mongoid::Slug::UniqueSlug.new(ModelClass.new).find_unique "slug-1" for auto-suggest ui
@@ -20,9 +22,10 @@ module Mongoid
20
22
  @documents.each do |doc|
21
23
  history_slugs = doc._slugs
22
24
  next if history_slugs.nil?
23
- existing_slugs.push(*history_slugs.find_all { |cur_slug| cur_slug =~ regexp_pattern })
25
+
26
+ existing_slugs.push(*history_slugs.grep(regexp_pattern))
24
27
  last_entered_slug.push(*history_slugs.last) if history_slugs.last =~ regexp_pattern
25
- existing_history_slugs.push(*history_slugs.first(history_slugs.length - 1).find_all { |cur_slug| cur_slug =~ regexp_pattern })
28
+ existing_history_slugs.push(*history_slugs.first(history_slugs.length - 1).grep(regexp_pattern))
26
29
  end
27
30
  end
28
31
 
@@ -111,7 +114,7 @@ module Mongoid
111
114
  @state.include_slug unless model.class.look_like_slugs?([@_slug])
112
115
 
113
116
  # make sure that the slug is not equal to a reserved word
114
- @state.include_slug if slug_reserved_words.any? { |word| word === @_slug }
117
+ @state.include_slug if slug_reserved_words.any? { |word| word === @_slug } # rubocop:disable Style/CaseEquality
115
118
 
116
119
  # only look for a new unique slug if the existing slugs contains the current slug
117
120
  # - e.g if the slug 'foo-2' is taken, but 'foo' is available, the user can use 'foo'.
@@ -132,7 +135,7 @@ module Mongoid
132
135
  # index to match /^.../ pattern.
133
136
  # Use Regexp::Raw to avoid the multiline option when querying the server.
134
137
  def regex_for_slug
135
- if embedded? || Mongoid::Compatibility::Version.mongoid3? || Mongoid::Compatibility::Version.mongoid4?
138
+ if embedded?
136
139
  Regexp.new(escaped_pattern)
137
140
  else
138
141
  BSON::Regexp::Raw.new(escaped_pattern)
@@ -155,11 +158,7 @@ module Mongoid
155
158
  end
156
159
 
157
160
  if embedded?
158
- parent_metadata = if Mongoid::Compatibility::Version.mongoid7_or_newer?
159
- reflect_on_all_association(:embedded_in)[0]
160
- else
161
- reflect_on_all_associations(:embedded_in)[0]
162
- end
161
+ parent_metadata = reflect_on_all_association(:embedded_in)[0]
163
162
  return model._parent.send(parent_metadata.inverse_of || self.metadata.name)
164
163
  end
165
164
 
@@ -1,5 +1,7 @@
1
- module Mongoid #:nodoc:
1
+ # frozen_string_literal: true
2
+
3
+ module Mongoid # :nodoc:
2
4
  module Slug
3
- VERSION = '6.0.1'.freeze
5
+ VERSION = '7.0.0'
4
6
  end
5
7
  end
data/lib/mongoid/slug.rb CHANGED
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'mongoid'
2
4
  require 'stringex'
3
5
  require 'mongoid/slug/criteria'
4
6
  require 'mongoid/slug/index_builder'
5
7
  require 'mongoid/slug/unique_slug'
6
8
  require 'mongoid/slug/slug_id_strategy'
7
- require 'mongoid-compatibility'
8
9
  require 'mongoid/slug/railtie' if defined?(Rails)
9
10
 
10
11
  module Mongoid
@@ -17,6 +18,7 @@ module Mongoid
17
18
  included do
18
19
  cattr_accessor :slug_reserved_words,
19
20
  :slug_scope,
21
+ :slug_index,
20
22
  :slugged_attributes,
21
23
  :slug_url_builder,
22
24
  :slug_history,
@@ -29,6 +31,7 @@ module Mongoid
29
31
 
30
32
  class << self
31
33
  attr_accessor :default_slug
34
+
32
35
  def configure(&block)
33
36
  instance_eval(&block)
34
37
  end
@@ -75,6 +78,7 @@ module Mongoid
75
78
  options = fields.extract_options!
76
79
 
77
80
  self.slug_scope = options[:scope]
81
+ self.slug_index = options[:index].nil? ? true : options[:index]
78
82
  self.slug_reserved_words = options[:reserve] || Set.new(%w[new edit])
79
83
  self.slugged_attributes = fields.map(&:to_s)
80
84
  self.slug_history = options[:history]
@@ -85,7 +89,10 @@ module Mongoid
85
89
  alias_attribute :slugs, :_slugs
86
90
 
87
91
  # Set indexes
88
- Mongoid::Slug::IndexBuilder.build_indexes(self, slug_scope_key, slug_by_model_type, options[:localize]) unless embedded?
92
+ if slug_index && !embedded?
93
+ Mongoid::Slug::IndexBuilder.build_indexes(self, slug_scope_key, slug_by_model_type,
94
+ options[:localize])
95
+ end
89
96
 
90
97
  self.slug_url_builder = block_given? ? block : default_slug_url_builder
91
98
 
@@ -111,6 +118,7 @@ module Mongoid
111
118
  # @return [ Array<Document>, Document ]
112
119
  def slug_scope_key
113
120
  return nil unless slug_scope
121
+
114
122
  reflect_on_association(slug_scope).try(:key) || slug_scope
115
123
  end
116
124
 
@@ -141,17 +149,13 @@ module Mongoid
141
149
 
142
150
  private
143
151
 
144
- if Mongoid::Compatibility::Version.mongoid5_or_newer? && Threaded.method(:current_scope).arity == -1
152
+ if Threaded.method(:current_scope).arity == -1
145
153
  def current_scope
146
154
  Threaded.current_scope(self)
147
155
  end
148
- elsif Mongoid::Compatibility::Version.mongoid5_or_newer?
149
- def current_scope
150
- Threaded.current_scope
151
- end
152
156
  else
153
157
  def current_scope
154
- scope_stack.last
158
+ Threaded.current_scope
155
159
  end
156
160
  end
157
161
  end
@@ -181,10 +185,10 @@ module Mongoid
181
185
 
182
186
  # skip slug generation and use Mongoid id
183
187
  # to find document instead
184
- return true if new_slug.size.zero?
188
+ return true if new_slug.empty?
185
189
 
186
190
  # avoid duplicate slugs
187
- _slugs.delete(new_slug) if _slugs
191
+ _slugs&.delete(new_slug)
188
192
 
189
193
  if !!slug_history && _slugs.is_a?(Array)
190
194
  append_slug(new_slug)
@@ -249,6 +253,7 @@ module Mongoid
249
253
  # @return [String] the slug, or nil if the document does not have a slug.
250
254
  def slug
251
255
  return _slugs.last if _slugs
256
+
252
257
  _id.to_s
253
258
  end
254
259
 
data/lib/mongoid_slug.rb CHANGED
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # To be removed
2
4
  require 'mongoid/slug'
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  namespace :mongoid_slug do
2
4
  desc 'Goes though all documents and sets slug if not already set'
3
5
  task set: :environment do |_, args|
4
- ::Rails.application.eager_load! if defined?(Rails)
6
+ Rails.application.eager_load! if defined?(Rails)
5
7
  klasses = Mongoid::Config.models.find_all { |c| c.ancestors.include?(Mongoid::Slug) }
6
8
  unless klasses.blank?
7
9
  models = args.extras
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.1
4
+ version: 7.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Saebjoernsen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-11 00:00:00.000000000 Z
11
+ date: 2023-09-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mongoid
@@ -16,28 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '3.0'
19
+ version: '7.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '3.0'
27
- - !ruby/object:Gem::Dependency
28
- name: mongoid-compatibility
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
26
+ version: '7.0'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: stringex
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -52,90 +38,6 @@ dependencies:
52
38
  - - "~>"
53
39
  - !ruby/object:Gem::Version
54
40
  version: '2.0'
55
- - !ruby/object:Gem::Dependency
56
- name: awesome_print
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: guard-rspec
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: rake
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: rspec
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: rspec-its
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0'
125
- - !ruby/object:Gem::Dependency
126
- name: uuid
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: '0'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
41
  description: Mongoid URL slug or permalink generator
140
42
  email:
141
43
  - andy@cosemble.com
@@ -154,41 +56,11 @@ files:
154
56
  - lib/mongoid/slug/version.rb
155
57
  - lib/mongoid_slug.rb
156
58
  - lib/tasks/mongoid_slug.rake
157
- - spec/models/alias.rb
158
- - spec/models/article.rb
159
- - spec/models/artist.rb
160
- - spec/models/artwork.rb
161
- - spec/models/author.rb
162
- - spec/models/author_polymorphic.rb
163
- - spec/models/book.rb
164
- - spec/models/book_polymorphic.rb
165
- - spec/models/caption.rb
166
- - spec/models/entity.rb
167
- - spec/models/friend.rb
168
- - spec/models/incorrect_slug_persistence.rb
169
- - spec/models/integer_id.rb
170
- - spec/models/magazine.rb
171
- - spec/models/page.rb
172
- - spec/models/page_localize.rb
173
- - spec/models/page_slug_localized.rb
174
- - spec/models/page_slug_localized_custom.rb
175
- - spec/models/page_slug_localized_history.rb
176
- - spec/models/partner.rb
177
- - spec/models/person.rb
178
- - spec/models/relationship.rb
179
- - spec/models/string_id.rb
180
- - spec/models/subject.rb
181
- - spec/models/without_slug.rb
182
- - spec/mongoid/criteria_spec.rb
183
- - spec/mongoid/index_builder_spec.rb
184
- - spec/mongoid/slug_spec.rb
185
- - spec/shared/indexes.rb
186
- - spec/spec_helper.rb
187
- - spec/tasks/mongoid_slug_rake_spec.rb
188
59
  homepage: https://github.com/mongoid/mongoid-slug
189
60
  licenses:
190
61
  - MIT
191
- metadata: {}
62
+ metadata:
63
+ rubygems_mfa_required: 'true'
192
64
  post_install_message:
193
65
  rdoc_options: []
194
66
  require_paths:
@@ -197,46 +69,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
197
69
  requirements:
198
70
  - - ">="
199
71
  - !ruby/object:Gem::Version
200
- version: '0'
72
+ version: '2.7'
201
73
  required_rubygems_version: !ruby/object:Gem::Requirement
202
74
  requirements:
203
75
  - - ">="
204
76
  - !ruby/object:Gem::Version
205
77
  version: '0'
206
78
  requirements: []
207
- rubygems_version: 3.2.3
79
+ rubygems_version: 3.4.4
208
80
  signing_key:
209
81
  specification_version: 4
210
82
  summary: Mongoid URL slugs
211
- test_files:
212
- - spec/models/alias.rb
213
- - spec/models/article.rb
214
- - spec/models/artist.rb
215
- - spec/models/artwork.rb
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
222
- - spec/models/friend.rb
223
- - spec/models/incorrect_slug_persistence.rb
224
- - spec/models/integer_id.rb
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
231
- - spec/models/partner.rb
232
- - spec/models/person.rb
233
- - spec/models/relationship.rb
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
83
+ test_files: []
data/spec/models/alias.rb DELETED
@@ -1,6 +0,0 @@
1
- class Alias
2
- include Mongoid::Document
3
- include Mongoid::Slug
4
- field :name, as: :author_name
5
- slug :author_name
6
- end
@@ -1,9 +0,0 @@
1
- class Article
2
- include Mongoid::Document
3
- include Mongoid::Slug
4
- field :brief
5
- field :title
6
- slug :title, :brief do |doc|
7
- [doc.title, doc.brief].reject(&:blank?).first
8
- end
9
- end
@@ -1,8 +0,0 @@
1
- class Artist
2
- include Mongoid::Document
3
- include Mongoid::Slug
4
-
5
- slug :name
6
- field :name
7
- has_and_belongs_to_many :artworks
8
- end
@@ -1,10 +0,0 @@
1
- class Artwork
2
- include Mongoid::Document
3
- include Mongoid::Slug
4
-
5
- slug :title
6
- field :title
7
- field :published, type: Boolean, default: true
8
- scope :published, -> { where(published: true) }
9
- has_and_belongs_to_many :artists
10
- end
@@ -1,15 +0,0 @@
1
- class Author
2
- include Mongoid::Document
3
- include Mongoid::Slug
4
- field :first_name
5
- field :last_name
6
- if Mongoid::Compatibility::Version.mongoid6_or_newer?
7
- belongs_to :book, required: false
8
- else
9
- belongs_to :book
10
- end
11
- has_many :characters,
12
- class_name: 'Person',
13
- foreign_key: :author_id
14
- slug :first_name, :last_name, scope: :book, history: false, max_length: 256
15
- end
@@ -1,15 +0,0 @@
1
- class AuthorPolymorphic
2
- include Mongoid::Document
3
- include Mongoid::Slug
4
- field :first_name
5
- field :last_name
6
- slug :first_name, :last_name, scope: :book_polymorphic
7
- if Mongoid::Compatibility::Version.mongoid6_or_newer?
8
- belongs_to :book_polymorphic, required: false
9
- else
10
- belongs_to :book_polymorphic
11
- end
12
- has_many :characters,
13
- class_name: 'Person',
14
- foreign_key: :author_id
15
- end
data/spec/models/book.rb DELETED
@@ -1,12 +0,0 @@
1
- class Book
2
- include Mongoid::Document
3
- include Mongoid::Slug
4
- field :title
5
-
6
- slug :title, history: true, max_length: nil
7
- embeds_many :subjects
8
- has_many :authors
9
- end
10
-
11
- class ComicBook < Book
12
- end
@@ -1,12 +0,0 @@
1
- class BookPolymorphic
2
- include Mongoid::Document
3
- include Mongoid::Slug
4
- field :title
5
-
6
- slug :title, history: true, by_model_type: true
7
- embeds_many :subjects
8
- has_many :author_polymorphics
9
- end
10
-
11
- class ComicBookPolymorphic < BookPolymorphic
12
- end
@@ -1,17 +0,0 @@
1
- class Caption
2
- include Mongoid::Document
3
- include Mongoid::Slug
4
- field :my_identity, type: String
5
- field :title
6
- field :medium
7
-
8
- # A fairly complex scenario, where we want to create a slug out of an
9
- # my_identity field, which comprises name of artist and some more bibliographic
10
- # info in parantheses, and the title of the work.
11
- #
12
- # We are only interested in the name of the artist so we remove the
13
- # paranthesized details.
14
- slug :my_identity, :title do |cur_object|
15
- cur_object.slug_builder.gsub(/\s*\([^)]+\)/, '').to_url
16
- end
17
- end