has_permalink 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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,5 @@
1
+ Usage:
2
+
3
+ script/generate has_permalink Class
4
+
5
+ This will create a migration that will add the proper columns to your class's table.
@@ -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
+