has_permalink 0.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.
data/lib/friendly_url.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module FriendlyUrl
|
4
|
+
def normalize(str)
|
5
|
+
unless str.blank?
|
6
|
+
n = str.mb_chars.downcase.strip.to_s
|
7
|
+
n.gsub!(/[àáâãäåāă]/, 'a')
|
8
|
+
n.gsub!(/æ/, 'ae')
|
9
|
+
n.gsub!(/[ďđ]/, 'd')
|
10
|
+
n.gsub!(/[çćčĉċ]/, 'c')
|
11
|
+
n.gsub!(/[èéêëēęěĕė]/, 'e')
|
12
|
+
n.gsub!(/ƒ/, 'f')
|
13
|
+
n.gsub!(/[ĝğġģ]/, 'g')
|
14
|
+
n.gsub!(/[ĥħ]/, 'h')
|
15
|
+
n.gsub!(/[ììíîïīĩĭ]/, 'i')
|
16
|
+
n.gsub!(/[įıijĵ]/, 'j')
|
17
|
+
n.gsub!(/[ķĸ]/, 'k')
|
18
|
+
n.gsub!(/[łľĺļŀ]/, 'l')
|
19
|
+
n.gsub!(/[ñńňņʼnŋ]/, 'n')
|
20
|
+
n.gsub!(/[òóôõöøōőŏŏ]/, 'o')
|
21
|
+
n.gsub!(/œ/, 'oe')
|
22
|
+
n.gsub!(/ą/, 'q')
|
23
|
+
n.gsub!(/[ŕřŗ]/, 'r')
|
24
|
+
n.gsub!(/[śšşŝș]/, 's')
|
25
|
+
n.gsub!(/[ťţŧț]/, 't')
|
26
|
+
n.gsub!(/[ùúûüūůűŭũų]/, 'u')
|
27
|
+
n.gsub!(/ŵ/, 'w')
|
28
|
+
n.gsub!(/[ýÿŷ]/, 'y')
|
29
|
+
n.gsub!(/[žżź]/, 'z')
|
30
|
+
n.gsub!(/\s+/, '-')
|
31
|
+
n.gsub!(/[^\sa-z0-9_-]/, '')
|
32
|
+
n.gsub!(/-{2,}/, '-')
|
33
|
+
n
|
34
|
+
else
|
35
|
+
""
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'rails/generators/active_record'
|
2
|
+
|
3
|
+
class HasPermalinkGenerator < ActiveRecord::Generators::Base
|
4
|
+
desc "Create a migration to add a permalink field to your model."
|
5
|
+
|
6
|
+
def self.source_root
|
7
|
+
@source_root ||= File.expand_path('../templates', __FILE__)
|
8
|
+
end
|
9
|
+
|
10
|
+
def generate_migration
|
11
|
+
migration_template "has_permalink_migration.rb.erb", "db/migrate/#{migration_file_name}"
|
12
|
+
end
|
13
|
+
|
14
|
+
protected
|
15
|
+
|
16
|
+
def migration_name
|
17
|
+
"add_permalink_to_#{name.underscore}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def migration_file_name
|
21
|
+
"#{migration_name}.rb"
|
22
|
+
end
|
23
|
+
|
24
|
+
def migration_class_name
|
25
|
+
migration_name.camelize
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
class <%= migration_class_name %> < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
add_column :<%= name.underscore.camelize.tableize %>, :permalink, :string
|
4
|
+
add_index :<%= name.underscore.camelize.tableize %>, :permalink
|
5
|
+
end
|
6
|
+
def self.down
|
7
|
+
remove_column :<%= name.underscore.camelize.tableize %>, :permalink
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'friendly_url'
|
2
|
+
|
3
|
+
module HasPermalink
|
4
|
+
def has_permalink(options = {})
|
5
|
+
options[:field_to_generate] ||= "permalink"
|
6
|
+
options[:field_to_generate_from] ||= "title"
|
7
|
+
|
8
|
+
unless included_modules.include? Behavior
|
9
|
+
class_inheritable_accessor :options
|
10
|
+
include Behavior
|
11
|
+
end
|
12
|
+
|
13
|
+
self.options = options
|
14
|
+
before_validation :generate_permalink
|
15
|
+
end
|
16
|
+
|
17
|
+
module Behavior
|
18
|
+
include FriendlyUrl
|
19
|
+
def generate_permalink
|
20
|
+
if permalink.blank?
|
21
|
+
self.permalink = normalize(eval("self.#{options[:field_to_generate_from]}"))
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_param
|
26
|
+
permalink
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
ActiveRecord::Base.send :extend, HasPermalink
|
metadata
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: has_permalink
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
version: 0.0.0
|
10
|
+
platform: ruby
|
11
|
+
authors: []
|
12
|
+
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-07-18 00:00:00 +02:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: rails
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - "="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 3
|
30
|
+
- 0
|
31
|
+
- pre
|
32
|
+
version: 3.0.pre
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
description:
|
36
|
+
email:
|
37
|
+
executables: []
|
38
|
+
|
39
|
+
extensions: []
|
40
|
+
|
41
|
+
extra_rdoc_files: []
|
42
|
+
|
43
|
+
files:
|
44
|
+
- lib/friendly_url.rb
|
45
|
+
- lib/generators/has_permalink_generator.rb
|
46
|
+
- lib/generators/templates/has_permalink_migration.rb.erb
|
47
|
+
- lib/generators/USAGE
|
48
|
+
- lib/has_permalink.rb
|
49
|
+
has_rdoc: true
|
50
|
+
homepage:
|
51
|
+
licenses: []
|
52
|
+
|
53
|
+
post_install_message:
|
54
|
+
rdoc_options: []
|
55
|
+
|
56
|
+
require_paths:
|
57
|
+
- lib
|
58
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
segments:
|
64
|
+
- 0
|
65
|
+
version: "0"
|
66
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
segments:
|
72
|
+
- 0
|
73
|
+
version: "0"
|
74
|
+
requirements: []
|
75
|
+
|
76
|
+
rubyforge_project:
|
77
|
+
rubygems_version: 1.3.7
|
78
|
+
signing_key:
|
79
|
+
specification_version: 3
|
80
|
+
summary: Generating url-safe permalink from any other attribute in the same ActiveRecord model.
|
81
|
+
test_files: []
|
82
|
+
|