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.
@@ -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
+