acts_as_permalink 0.5.0 → 0.6.0

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
  SHA1:
3
- metadata.gz: 209c71d964e2e6ed7b91f5c76b5a2fbebe6eaba8
4
- data.tar.gz: a95cc44e91a7845302db14f9d1fc5af160c9eb60
3
+ metadata.gz: 4633aa91665c5b810b32f1c2e748674d74c5d66c
4
+ data.tar.gz: e06d13bcdb3f1a032b71ff1659b391eb5dedb945
5
5
  SHA512:
6
- metadata.gz: 01a035c4489b03e36a9191dc369908ce5c2fc8b100fd3a7d511d6c447abfbfd7a844efbbe0d29680d577ed4d4814af295af082900bf04ff49bff89ab41dc19f8
7
- data.tar.gz: a8ad3501d84e3262737e657050e73d2255e207e0c08a5af36ca1513c1fe99c4247b582d28c74c3b294f84950610b4bcf934e945c0a436d78ffe7fd53a41908d0
6
+ metadata.gz: 663b5f0f6df7dd2527a32b17f090118a0213c8c280db92bc5abfd5c2cce23b06bd1fe73fdf49c830135775117369509cf727710cfea9e09b39cb2f793921f0e7
7
+ data.tar.gz: 20c6178a41efd0379dff74a4f3151f7116e06593cb9ada693253ef0c91b4a0589431cc4d5ed4f7ee37b8ea3d9c05b6422df553e3fb7c627187672ce1227165c2
data/README.markdown CHANGED
@@ -44,6 +44,7 @@ The `title` and `permalink` fields can be overridden with the following options:
44
44
  from: :title # Name of the active record column or function used to generate the permalink
45
45
  to: :permalink # Name of the column where the permalink will be stored
46
46
  max_length: 60 # Maximum number of characters the permalink will be
47
+ underscore: false # Prefer using the `_` character as a replacement over the default `-`
47
48
 
48
49
  So, for example you have want to store your permalink in a column called `path_name` and you want to generate your permalink using first and last name, and you want to restrict it to 40 characters, your model would look like:
49
50
 
@@ -67,6 +68,8 @@ $ bundle exec rspec
67
68
 
68
69
  ## Changelog
69
70
 
71
+ * 0.6.0 -- Switch default replacement character to a dash, but allow the `underscore: true` property to go back to the old format
72
+
70
73
  * 0.5.0 -- Fix bugs in `max_length` property which would sometimes allow the permalink to be longer than the value
71
74
  Use `where().first` over `send("find_by_#{ column }")`
72
75
 
@@ -14,6 +14,9 @@ module Acts #:nodoc:
14
14
  # Read and scrub the option for the column or function which will generate the permalink
15
15
  self.base_class.instance_variable_set('@permalink_source', (options[:from].try(:to_sym) || :title))
16
16
 
17
+ # Set the underscore character
18
+ self.base_class.instance_variable_set('@permalink_underscore', options[:underscore])
19
+
17
20
  # Read and validate the maximum length of the permalink
18
21
  max_length = options[:max_length].to_i rescue 0
19
22
  max_length = 60 unless max_length && max_length > 0
@@ -37,6 +40,7 @@ module Acts #:nodoc:
37
40
  column_name = obj.class.base_class.instance_variable_get('@permalink_column_name')
38
41
  text = obj.send(obj.class.base_class.instance_variable_get('@permalink_source'))
39
42
  max_length = obj.class.base_class.instance_variable_get('@permalink_length')
43
+ separator = obj.class.base_class.instance_variable_get('@permalink_underscore') ? "_" : "-"
40
44
 
41
45
  # If it is blank then generate a random link
42
46
  if text.blank?
@@ -45,9 +49,11 @@ module Acts #:nodoc:
45
49
  # If it is not blank, scrub
46
50
  else
47
51
  text = text.downcase.strip # make the string lowercase and scrub white space on either side
48
- text = text.gsub(/[^a-z0-9\w]/, "_") # make any character that is not nupermic or alphabetic into an underscore
49
- text = text.sub(/_+$/, "").sub(/^_+/, "") # remove underscores on either end, caused by non-simplified characters
52
+ text = text.gsub(/[^a-z0-9\w]/, separator) # make any character that is not nupermic or alphabetic into a special character
53
+ text = text.squeeze(separator) # removes any consecutive duplicates of the special character
50
54
  text = text[0...max_length] # trim to length
55
+ text = text.sub(Regexp.new("^#{ separator }+"), "") # remove leading special characters
56
+ text = text.sub(Regexp.new("#{ separator }+$"), "") # remove trailing special characters
51
57
  end
52
58
 
53
59
  # Attempt to find the object by the permalink, and if so there is a collision and we need to de-collision it
@@ -55,7 +61,7 @@ module Acts #:nodoc:
55
61
  candidate_text = nil
56
62
 
57
63
  (1..999999).each do |num|
58
- suffix = "-#{ num }"
64
+ suffix = "#{ separator }#{ num }"
59
65
  candidate_text = [text[0...(max_length - suffix.length)], suffix].join("")
60
66
  break unless obj.class.base_class.where(column_name => candidate_text).first
61
67
  end
@@ -1,5 +1,5 @@
1
1
  module Acts
2
2
  module Permalink
3
- VERSION = "0.5.0"
3
+ VERSION = "0.6.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_permalink
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin McPhillips
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-25 00:00:00.000000000 Z
11
+ date: 2015-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails