wolf_core 1.0.66 → 1.0.67

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ebc787c1df3765c741ea7eadaae3f24acaae3318a982266c1d421c8147ff6e92
4
- data.tar.gz: 1b521b606a8ef09504d4444c6b3c6ae65f9504177a55c99a2b9945f3965838f5
3
+ metadata.gz: 99535923be72a8bcbb80245eaa43c9b15633b274b82bf01f5e1363174656f83a
4
+ data.tar.gz: 7d3aa39f2ffd464a5aa0dedf9396fff2bf6af1ca72c39efc2dedf5d092e18110
5
5
  SHA512:
6
- metadata.gz: 5ad0b112786b8f29b5b2eb3798f9128a573594f684393b915804767be41dd75b008f57cc688f3a254f129e29864dc2bde41b823c9c02f86f80b2d0f6df47c19c
7
- data.tar.gz: 8506ca870e4fee626223ad32222c3fa4874496f7291ed4d2675b654d51d50f427db371593d7fe616e31b849a7bf3394b3791c288c7cc6ebc9b773803e3cb56ad
6
+ metadata.gz: 3489825ef30779df10ce818c9f44cb044b236362025b10fe5088a3e7fd9a0e496cae3deae9052d1f07323c609a801c287c0b311cf27a4dfadd7024df45ccd153
7
+ data.tar.gz: f2cef0c7a7d517777f469c344f535b256cfe40283c1685936fb1503b870e1319f250ae1cce52b82e0e4fcdcfa8e1a737b81f5e665e764fb956ce02bfb717f2b5
@@ -0,0 +1,44 @@
1
+ module WolfCore
2
+ module FriendlyModelId
3
+ extend ActiveSupport::Concern
4
+ include WolfCore::StringUtils
5
+
6
+ included do
7
+ unless column_names.include?('friendly_id')
8
+ raise "Model #{self.name} does not have a friendly_id column"
9
+ end
10
+
11
+ scope :by_friendly_id, ->(friendly_id) { where(friendly_id: friendly_id) }
12
+
13
+ before_save :set_friendly_id
14
+ end
15
+
16
+ def set_friendly_id
17
+ return if self.friendly_id.present?
18
+
19
+ friendly_id_id_candidates.each do |candidate|
20
+ candidate = Array(candidate)
21
+
22
+ friendly_id = candidate.map do |field|
23
+ field_value = send(field)
24
+ parse_field_value(field_value)
25
+ end.join('-')
26
+ next if friendly_id.blank?
27
+
28
+ friendly_id_used = self.class.where.not(id: self.id).find_by(friendly_id: friendly_id).present?
29
+ next if field_value_used
30
+
31
+ self.friendly_id = friendly_id
32
+ end
33
+ end
34
+
35
+ def parse_field_value(field_value)
36
+ field_value = to_kebab_case(field_value)
37
+ remove_non_alphanumeric_chars(field_value, exceptions: '-')
38
+ end
39
+
40
+ def friendly_id_candidates
41
+ raise NotImplementedError
42
+ end
43
+ end
44
+ end
@@ -5,6 +5,22 @@ module WolfCore
5
5
  str.gsub(/([A-Z])/, ' \1').strip.downcase.capitalize
6
6
  end
7
7
 
8
+ def to_snake_case(str)
9
+ str.gsub(/\s+/, '_').downcase
10
+ end
11
+
12
+ def to_kebab_case(str)
13
+ str.gsub(/\s+/, '-').downcase
14
+ end
15
+
16
+ def remove_non_alphanumeric_chars(str, exceptions: nil)
17
+ exceptions ||= []
18
+ exceptions = Array(exceptions)
19
+ escaped_exceptions = exceptions.map { |char| Regexp.escape(char) }.join
20
+ regex = /[^a-zA-Z0-9#{escaped_exceptions}]/
21
+ str.gsub(regex, '')
22
+ end
23
+
8
24
  def clean_phone_number(phone)
9
25
  return if phone.nil?
10
26
  cleaned_phone = phone.to_s.gsub(/\D/, '')
@@ -46,11 +62,5 @@ module WolfCore
46
62
  base64_regex = /^[A-Za-z0-9+\/]+={0,2}$/
47
63
  str.match?(base64_regex)
48
64
  end
49
-
50
- def to_snake_case(str)
51
- str.gsub(/[^a-zA-Z0-9\s_]/, '')
52
- .gsub(/\s+/, '_')
53
- .downcase
54
- end
55
65
  end
56
66
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module WolfCore
4
- VERSION = "1.0.66"
4
+ VERSION = "1.0.67"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wolf_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.66
4
+ version: 1.0.67
5
5
  platform: ruby
6
6
  authors:
7
7
  - Javier Roncallo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-01-24 00:00:00.000000000 Z
11
+ date: 2025-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -130,6 +130,7 @@ files:
130
130
  - lib/wolf_core/utils/array_utils.rb
131
131
  - lib/wolf_core/utils/async_utils.rb
132
132
  - lib/wolf_core/utils/file_utils.rb
133
+ - lib/wolf_core/utils/friendly_model_id.rb
133
134
  - lib/wolf_core/utils/logging_utils.rb
134
135
  - lib/wolf_core/utils/result.rb
135
136
  - lib/wolf_core/utils/string_utils.rb