sluggable_rubby 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d19703c3b651c4393d9d0992c0c56d75ffede1e50a50bd4bd9dd82439171cde3
4
- data.tar.gz: c6b900c04310d2122180fd6e45a42996f1299d056dd80ea070346379b4580d8d
3
+ metadata.gz: 557a6a4a9989461919e3b3faa0965cb8c2230c185bd6cf1d1fedd31e7a3b0329
4
+ data.tar.gz: 781db1051775f793f6cf6aa28b8278947e5842b3bc1c13ae4d4c43d2525ae366
5
5
  SHA512:
6
- metadata.gz: e2313dc0aded74be1ea8c093771e0f86b1e1bac58c79d361e8bd4787c05098a177a8d15d70547f684a3564cc8ea6af2ca18c63a7bf4c97156d2d144a96be26e4
7
- data.tar.gz: f3d19ebf0b9d46f9da21ae951474cb1ba993ad7f55a6e3cee151cfd91e81d64bc3f131245d4086c3d5431fae9e3d12a15bb37b2621d0aa32077d17132274bbb0
6
+ metadata.gz: 83c948014c9390b1528df874765b8bc62d719c10ac8366008594b2a8d3906bfc1ed199eae0833aef5736af9eef0c021298d1512e747f515b3b19f4a4dd549267
7
+ data.tar.gz: 48dea71b88aa81c173500246bf95bac74be4c5155781033c06f6914c4e36683d406b92ffe5e601a1a6bfaf84bddd46803208af37493ed592b1decd4e4e7116e7
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SluggableRubby
4
- VERSION = "0.1.2"
4
+ VERSION = "0.1.3"
5
5
  end
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  require_relative "sluggable_rubby/version"
4
2
 
5
3
  module SluggableRubby
@@ -9,37 +7,36 @@ module SluggableRubby
9
7
  end
10
8
 
11
9
  module ClassMethods
12
- def has_slug(attribute = :title)
13
- define_method(:generate_slug) do
14
- return unless respond_to?(attribute) && send(attribute).present?
15
-
16
- base_slug = send(attribute).parameterize
17
- self.slug = unique_slug(base_slug)
18
- end
19
-
10
+ def has_slug(*attributes, scope: nil)
20
11
  before_validation :generate_slug
21
- validates :slug, presence: true, uniqueness: true
12
+
13
+ validates :slug, presence: true, uniqueness: { scope: scope }
22
14
 
23
15
  define_singleton_method :find_by_slug do |slug|
24
16
  find_by(slug: slug)
25
17
  end
18
+
19
+ define_method(:generate_slug) do
20
+ return unless attributes.any? { |attr| !send(attr).nil? }
21
+
22
+ base_slug = attributes.map { |attr| send(attr).to_s.parameterize }.join('-').truncate(100, omission: '').downcase
23
+ self.slug = self.class.unique_slug(base_slug, scope, scope ? self.send(scope) : nil)
24
+ end
26
25
  end
27
- end
28
26
 
29
- private
27
+ def unique_slug(base_slug, scope, scope_value)
28
+ slug = base_slug
29
+ count = 1
30
30
 
31
- def unique_slug(base_slug)
32
- slug = base_slug
33
- count = 1
31
+ relation = scope ? self.where(scope => scope_value) : self
34
32
 
35
- while self.class.exists?(slug: slug)
36
- slug = "#{base_slug}-#{count}"
37
- count += 1
38
- end
33
+ while relation.exists?(slug: slug)
34
+ slug = "#{base_slug}-#{count}"
35
+ count += 1
36
+ end
39
37
 
40
- slug
38
+ slug
39
+ end
41
40
  end
42
41
  end
43
42
  end
44
-
45
- ActiveRecord::Base.include(SluggableRubby::ActiveRecord)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sluggable_rubby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Techvoot solutions
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-12-20 00:00:00.000000000 Z
11
+ date: 2024-01-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails