permalink_mongo_mapper 1.0.0
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 +7 -0
- data/lib/permalink_mongo_mapper.rb +82 -0
- metadata +44 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4be9d584c4b7af7863e258dd850db3bb385476a7
|
4
|
+
data.tar.gz: cc778855ad5e85822a21542f2231b7693ac15449
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9df3816f6d471b9efbd84cf407661dab6a3ae747d4b769802db809729cdd5d8c48b050ccd48362abb8497674645a9f7b85ac3fa631e8a1c87fa908214dfba248
|
7
|
+
data.tar.gz: 40612a52ed8e9b397c5cca54d053f30da60b3cde33df0a173568cf4fccdc2a9d21c57e17d86ed236f327b8b20dc5fe31c48ea5f1be9a2cfdfc3cbabcc76cb2aa
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
module Permalink
|
3
|
+
def self.included(model)
|
4
|
+
class << model
|
5
|
+
attr_accessor :source_key
|
6
|
+
end
|
7
|
+
|
8
|
+
model.class_eval do
|
9
|
+
model.extend( ClassMethods )
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
module ClassMethods
|
14
|
+
def has_permalink(source_key_param)
|
15
|
+
key :permalink, String
|
16
|
+
before_validation :create_permalink
|
17
|
+
send :include, InstanceMethods
|
18
|
+
|
19
|
+
self.source_key = source_key_param
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
module InstanceMethods
|
25
|
+
|
26
|
+
private
|
27
|
+
def create_permalink
|
28
|
+
self.permalink = String.new(read_attribute(self.class.source_key)) || ""
|
29
|
+
remove_special_chars
|
30
|
+
random_permalink if permalink.blank?
|
31
|
+
create_unique_permalink
|
32
|
+
end
|
33
|
+
|
34
|
+
def remove_special_chars
|
35
|
+
permalink.gsub!(/[áàảãạAÁÀẢÃẠ]/, 'a')
|
36
|
+
permalink.gsub!(/[ăắẵằẳặĂẮẰẲẴẶ]/, 'a')
|
37
|
+
permalink.gsub!(/[âấầẩẫậÂẤẦẨẪẬ]/, 'a')
|
38
|
+
permalink.gsub!(/[éèẽẻẹÉÈẺẼẸ]/, 'e')
|
39
|
+
permalink.gsub!(/[êếềểễệÊẾỀỂỄỆ]/, 'e')
|
40
|
+
permalink.gsub!(/[íìỉĩịIÍÌỈĨỊ]/, 'i')
|
41
|
+
permalink.gsub!(/[óòỏõọOÓÒỎÕỌ]/, 'o')
|
42
|
+
permalink.gsub!(/[ôốồổỗộÔỐỒỔỖỘ]/, 'o')
|
43
|
+
permalink.gsub!(/[ơớờởỡợƠỚỜỞỠỢ]/, 'o')
|
44
|
+
permalink.gsub!(/[úùủũụUÚÙỦŨỤ]/, 'u')
|
45
|
+
permalink.gsub!(/[ưứừửữựƯỨỪỬỮỰ]/, 'u')
|
46
|
+
permalink.gsub!(/[ỷỹýỳ]/, 'y')
|
47
|
+
permalink.gsub!(/[đĐ]/, 'd')
|
48
|
+
permalink.gsub!(/[àáâãäå]/i,'a')
|
49
|
+
permalink.gsub!(/[èéêë]/i,'e')
|
50
|
+
permalink.gsub!(/[íìîï]/i,'i')
|
51
|
+
permalink.gsub!(/[óòôöõ]/i,'o')
|
52
|
+
permalink.gsub!(/[úùûü]/i,'u')
|
53
|
+
permalink.gsub!(/æ/i,'ae')
|
54
|
+
permalink.gsub!(/ç/i, 'c')
|
55
|
+
permalink.gsub!(/ñ/i, 'n')
|
56
|
+
permalink.gsub!(/[^\x00-\x7F]+/, '') # Remove anything non-ASCII entirely (e.g. diacritics).
|
57
|
+
permalink.gsub!(/[^\w_ \-]+/i, '') # Remove unwanted chars.
|
58
|
+
permalink.gsub!(/[ \-]+/i, '-') # No more than one of the separator in a row.
|
59
|
+
permalink.gsub!(/^\-|\-$/i, '') # Remove leading/trailing separator.
|
60
|
+
permalink.downcase!
|
61
|
+
end
|
62
|
+
|
63
|
+
def create_unique_permalink
|
64
|
+
permalink_src = permalink
|
65
|
+
i = 1
|
66
|
+
while is_unique(permalink_src)==false do
|
67
|
+
permalink_src = permalink+i.to_s
|
68
|
+
i = i+1
|
69
|
+
end
|
70
|
+
self.permalink = permalink_src
|
71
|
+
end
|
72
|
+
|
73
|
+
def random_permalink
|
74
|
+
#self.permalink = Digest::SHA1.hexdigest("#{Time.now}")
|
75
|
+
self.permalink = Time.now.to_s
|
76
|
+
end
|
77
|
+
|
78
|
+
def is_unique(current_permalink)
|
79
|
+
self.class.find_by_permalink(current_permalink)==self || self.class.find_by_permalink(current_permalink)==nil
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
metadata
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: permalink_mongo_mapper
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- dragontly
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-09-12 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Make permalink use for mongo mapper
|
14
|
+
email: dragontly@gmail.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/permalink_mongo_mapper.rb
|
20
|
+
homepage: http://rubygems.org/gems/permalink_mongo_mapper
|
21
|
+
licenses:
|
22
|
+
- MIT
|
23
|
+
metadata: {}
|
24
|
+
post_install_message:
|
25
|
+
rdoc_options: []
|
26
|
+
require_paths:
|
27
|
+
- lib
|
28
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
34
|
+
requirements:
|
35
|
+
- - '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
requirements: []
|
39
|
+
rubyforge_project:
|
40
|
+
rubygems_version: 2.0.14
|
41
|
+
signing_key:
|
42
|
+
specification_version: 4
|
43
|
+
summary: Make permalink use for mongo mapper
|
44
|
+
test_files: []
|