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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/permalink_mongo_mapper.rb +82 -0
  3. metadata +44 -0
@@ -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: []