objectreload-permalinks 0.1.1 → 0.2.1
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/Rakefile +5 -1
- data/VERSION +1 -1
- data/init.rb +5 -2
- data/lib/permalinks.rb +40 -10
- data/lib/permalinks/configuration.rb +19 -0
- data/lib/permalinks/has_permalink.rb +7 -0
- data/objectreload-permalinks.gemspec +16 -8
- data/test/country_test.rb +66 -0
- data/test/post_test.rb +29 -0
- data/test/test_helper.rb +4 -27
- metadata +32 -10
- data/install.rb +0 -1
- data/test/permalinks_test.rb +0 -74
- data/uninstall.rb +0 -1
data/Rakefile
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
1
3
|
require 'rubygems'
|
2
4
|
require 'rake'
|
3
5
|
|
@@ -8,7 +10,9 @@ begin
|
|
8
10
|
gem.summary = "Simple way to create permalinks."
|
9
11
|
gem.email = "gems@objectreload.com"
|
10
12
|
gem.homepage = "http://github.com/objectreload/permalinks"
|
11
|
-
gem.authors = ["Mateusz
|
13
|
+
gem.authors = ["Mateusz Drożdżyński", "Ewa Limanówka", "Jakub Kuźma"]
|
14
|
+
gem.add_dependency "activesupport", ">=2.0"
|
15
|
+
gem.add_development_dependency "test-unit", ">=2.0"
|
12
16
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
13
17
|
end
|
14
18
|
Jeweler::GemcutterTasks.new
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.1
|
data/init.rb
CHANGED
data/lib/permalinks.rb
CHANGED
@@ -1,15 +1,45 @@
|
|
1
|
+
require "iconv"
|
2
|
+
require "singleton"
|
3
|
+
|
4
|
+
require "active_support/core_ext/object/misc"
|
5
|
+
|
6
|
+
require "permalinks/configuration"
|
7
|
+
require "permalinks/has_permalink"
|
8
|
+
|
1
9
|
module Permalinks
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
+
class << self
|
11
|
+
def to_param(*args)
|
12
|
+
returning(args * "-") do |result|
|
13
|
+
replace_using_table!(result, configuration.substitutions)
|
14
|
+
transliterate!(result, configuration.input_encoding)
|
15
|
+
result.downcase!
|
16
|
+
replace_non_alnum!(result)
|
17
|
+
remove_double_dashes!(result)
|
18
|
+
remove_trailing_dashes!(result)
|
10
19
|
end
|
11
20
|
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def replace_using_table!(str, table)
|
25
|
+
table.each { |from, to| str.gsub!(from, to) }
|
26
|
+
end
|
27
|
+
|
28
|
+
def transliterate!(str, encoding)
|
29
|
+
result = Iconv.iconv("ASCII//TRANSLIT", encoding.to_s, str).first
|
30
|
+
str.replace(result)
|
31
|
+
end
|
32
|
+
|
33
|
+
def replace_non_alnum!(str)
|
34
|
+
str.gsub!(/[^a-z0-9]/, "-")
|
35
|
+
end
|
36
|
+
|
37
|
+
def remove_double_dashes!(str)
|
38
|
+
str.gsub!(/-+/, "-")
|
39
|
+
end
|
40
|
+
|
41
|
+
def remove_trailing_dashes!(str)
|
42
|
+
str.gsub!(/-+\Z/, "")
|
43
|
+
end
|
12
44
|
end
|
13
45
|
end
|
14
|
-
|
15
|
-
ActiveRecord::Base.send(:include, Permalinks)
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Permalinks
|
2
|
+
class Configuration
|
3
|
+
include Singleton
|
4
|
+
|
5
|
+
attr_writer :substitutions, :input_encoding
|
6
|
+
|
7
|
+
def substitutions
|
8
|
+
@substitutions ||= {}
|
9
|
+
end
|
10
|
+
|
11
|
+
def input_encoding
|
12
|
+
@input_encoding ||= "UTF-8"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.configuration
|
17
|
+
returning(Configuration.instance) { |c| yield(c) if block_given? }
|
18
|
+
end
|
19
|
+
end
|
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{objectreload-permalinks}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Mateusz
|
12
|
-
s.date = %q{
|
11
|
+
s.authors = ["Mateusz Drożdżyński", "Ewa Limanówka", "Jakub Kuźma"]
|
12
|
+
s.date = %q{2010-02-15}
|
13
13
|
s.email = %q{gems@objectreload.com}
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"README"
|
@@ -20,12 +20,13 @@ Gem::Specification.new do |s|
|
|
20
20
|
"Rakefile",
|
21
21
|
"VERSION",
|
22
22
|
"init.rb",
|
23
|
-
"install.rb",
|
24
23
|
"lib/permalinks.rb",
|
24
|
+
"lib/permalinks/configuration.rb",
|
25
|
+
"lib/permalinks/has_permalink.rb",
|
25
26
|
"objectreload-permalinks.gemspec",
|
26
|
-
"test/
|
27
|
-
"test/
|
28
|
-
"
|
27
|
+
"test/country_test.rb",
|
28
|
+
"test/post_test.rb",
|
29
|
+
"test/test_helper.rb"
|
29
30
|
]
|
30
31
|
s.homepage = %q{http://github.com/objectreload/permalinks}
|
31
32
|
s.rdoc_options = ["--charset=UTF-8"]
|
@@ -33,7 +34,8 @@ Gem::Specification.new do |s|
|
|
33
34
|
s.rubygems_version = %q{1.3.5}
|
34
35
|
s.summary = %q{Simple way to create permalinks.}
|
35
36
|
s.test_files = [
|
36
|
-
"test/
|
37
|
+
"test/country_test.rb",
|
38
|
+
"test/post_test.rb",
|
37
39
|
"test/test_helper.rb"
|
38
40
|
]
|
39
41
|
|
@@ -42,9 +44,15 @@ Gem::Specification.new do |s|
|
|
42
44
|
s.specification_version = 3
|
43
45
|
|
44
46
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
47
|
+
s.add_runtime_dependency(%q<activesupport>, [">= 2.0"])
|
48
|
+
s.add_development_dependency(%q<test-unit>, [">= 2.0"])
|
45
49
|
else
|
50
|
+
s.add_dependency(%q<activesupport>, [">= 2.0"])
|
51
|
+
s.add_dependency(%q<test-unit>, [">= 2.0"])
|
46
52
|
end
|
47
53
|
else
|
54
|
+
s.add_dependency(%q<activesupport>, [">= 2.0"])
|
55
|
+
s.add_dependency(%q<test-unit>, [">= 2.0"])
|
48
56
|
end
|
49
57
|
end
|
50
58
|
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require "test_helper"
|
4
|
+
|
5
|
+
class Country
|
6
|
+
extend Permalinks::HasPermalink
|
7
|
+
attr_accessor :name, :id
|
8
|
+
has_permalink
|
9
|
+
end
|
10
|
+
|
11
|
+
class CountryTest < Test::Unit::TestCase
|
12
|
+
def setup
|
13
|
+
@country = Country.new
|
14
|
+
@country.name = "United Kingdom"
|
15
|
+
@country.id = 1
|
16
|
+
end
|
17
|
+
|
18
|
+
test "country with regular name" do
|
19
|
+
assert_equal "#{@country.id}-united-kingdom", @country.to_param
|
20
|
+
end
|
21
|
+
|
22
|
+
test "country name with a lot of white spaces" do
|
23
|
+
@country.name = "United Kingdom "
|
24
|
+
assert_equal "#{@country.id}-united-kingdom", @country.to_param
|
25
|
+
end
|
26
|
+
|
27
|
+
test "country with id equal nil" do
|
28
|
+
@country.name = "2-tratata"
|
29
|
+
@country.id = nil
|
30
|
+
assert_equal "#{@country.id}-2-tratata", @country.to_param
|
31
|
+
end
|
32
|
+
|
33
|
+
test "country name with capital letters" do
|
34
|
+
@country.name = " USA "
|
35
|
+
assert_equal "#{@country.id}-usa", @country.to_param
|
36
|
+
end
|
37
|
+
|
38
|
+
if RUBY_VERSION >= "1.9" # FIXME: iconv doesn't work properly on 1.8.x
|
39
|
+
test "country name in polish" do
|
40
|
+
@country.name = "Wybrzeże Kości Słoniowej"
|
41
|
+
assert_equal "#{@country.id}-wybrzeze-kosci-sloniowej", @country.to_param
|
42
|
+
end
|
43
|
+
|
44
|
+
test "country name in german without custom substitutions" do
|
45
|
+
Permalinks.configuration { |config| config.substitutions = {} }
|
46
|
+
@country.name = "Türkei"
|
47
|
+
assert_equal "#{@country.id}-turkei", @country.to_param
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
test "country name in german with custom substitutions" do
|
52
|
+
Permalinks.configuration do |config|
|
53
|
+
config.substitutions = {
|
54
|
+
"ä" => "ae",
|
55
|
+
"Ä" => "AE",
|
56
|
+
"ö" => "oe",
|
57
|
+
"Ö" => "OE",
|
58
|
+
"ü" => "ue",
|
59
|
+
"Ü" => "UE"
|
60
|
+
}
|
61
|
+
end
|
62
|
+
|
63
|
+
@country.name = "Türkei"
|
64
|
+
assert_equal "#{@country.id}-tuerkei", @country.to_param
|
65
|
+
end
|
66
|
+
end
|
data/test/post_test.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class Post
|
4
|
+
extend Permalinks::HasPermalink
|
5
|
+
attr_accessor :title, :id
|
6
|
+
has_permalink :title
|
7
|
+
end
|
8
|
+
|
9
|
+
class PostTest < Test::Unit::TestCase
|
10
|
+
def setup
|
11
|
+
@post = Post.new
|
12
|
+
@post.title = "Something cool"
|
13
|
+
@post.id = 1
|
14
|
+
end
|
15
|
+
|
16
|
+
test "regular post title" do
|
17
|
+
assert_equal "#{@post.id}-something-cool", @post.to_param
|
18
|
+
end
|
19
|
+
|
20
|
+
test "post title with a lot of white spaces" do
|
21
|
+
@post.title = " Snow is cold "
|
22
|
+
assert_equal "#{@post.id}-snow-is-cold", @post.to_param
|
23
|
+
end
|
24
|
+
|
25
|
+
test "post title with capital letters" do
|
26
|
+
@post.title = " SOMETHING i really like to DO is sleeping "
|
27
|
+
assert_equal "#{@post.id}-something-i-really-like-to-do-is-sleeping", @post.to_param
|
28
|
+
end
|
29
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -1,29 +1,6 @@
|
|
1
|
-
require
|
2
|
-
require 'activerecord'
|
3
|
-
require File.dirname(__FILE__)+'/../lib/permalinks'
|
4
|
-
require 'shoulda'
|
5
|
-
require 'logger'
|
1
|
+
require "rubygems"
|
6
2
|
|
7
|
-
|
8
|
-
|
3
|
+
gem "test-unit" # for 1.8 compatibility
|
4
|
+
require "test/unit"
|
9
5
|
|
10
|
-
|
11
|
-
ActiveRecord::Base.logger.level = Logger::WARN
|
12
|
-
|
13
|
-
ActiveRecord::Schema.define(:version => 0) do
|
14
|
-
create_table :countries do |t|
|
15
|
-
t.string :name, :default => ''
|
16
|
-
end
|
17
|
-
|
18
|
-
create_table :posts do |t|
|
19
|
-
t.string :title, :default => ''
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
class Country < ActiveRecord::Base
|
24
|
-
has_permalink
|
25
|
-
end
|
26
|
-
|
27
|
-
class Post < ActiveRecord::Base
|
28
|
-
has_permalink :title
|
29
|
-
end
|
6
|
+
require File.join(File.dirname(__FILE__), "..", "lib", "permalinks")
|
metadata
CHANGED
@@ -1,19 +1,39 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: objectreload-permalinks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- Mateusz
|
8
|
-
- Ewa
|
7
|
+
- "Mateusz Dro\xC5\xBCd\xC5\xBCy\xC5\x84ski"
|
8
|
+
- "Ewa Liman\xC3\xB3wka"
|
9
|
+
- "Jakub Ku\xC5\xBAma"
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
13
|
|
13
|
-
date:
|
14
|
+
date: 2010-02-15 00:00:00 +00:00
|
14
15
|
default_executable:
|
15
|
-
dependencies:
|
16
|
-
|
16
|
+
dependencies:
|
17
|
+
- !ruby/object:Gem::Dependency
|
18
|
+
name: activesupport
|
19
|
+
type: :runtime
|
20
|
+
version_requirement:
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
requirements:
|
23
|
+
- - ">="
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: "2.0"
|
26
|
+
version:
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: test-unit
|
29
|
+
type: :development
|
30
|
+
version_requirement:
|
31
|
+
version_requirements: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: "2.0"
|
36
|
+
version:
|
17
37
|
description:
|
18
38
|
email: gems@objectreload.com
|
19
39
|
executables: []
|
@@ -28,12 +48,13 @@ files:
|
|
28
48
|
- Rakefile
|
29
49
|
- VERSION
|
30
50
|
- init.rb
|
31
|
-
- install.rb
|
32
51
|
- lib/permalinks.rb
|
52
|
+
- lib/permalinks/configuration.rb
|
53
|
+
- lib/permalinks/has_permalink.rb
|
33
54
|
- objectreload-permalinks.gemspec
|
34
|
-
- test/
|
55
|
+
- test/country_test.rb
|
56
|
+
- test/post_test.rb
|
35
57
|
- test/test_helper.rb
|
36
|
-
- uninstall.rb
|
37
58
|
has_rdoc: true
|
38
59
|
homepage: http://github.com/objectreload/permalinks
|
39
60
|
licenses: []
|
@@ -63,5 +84,6 @@ signing_key:
|
|
63
84
|
specification_version: 3
|
64
85
|
summary: Simple way to create permalinks.
|
65
86
|
test_files:
|
66
|
-
- test/
|
87
|
+
- test/country_test.rb
|
88
|
+
- test/post_test.rb
|
67
89
|
- test/test_helper.rb
|
data/install.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
# Install hook code here
|
data/test/permalinks_test.rb
DELETED
@@ -1,74 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/test_helper'
|
2
|
-
|
3
|
-
class CountryTest < Test::Unit::TestCase
|
4
|
-
context "Country model" do
|
5
|
-
setup do
|
6
|
-
@country = Country.new :name => "United Kingdom"
|
7
|
-
@country.save!
|
8
|
-
end
|
9
|
-
subject { @country }
|
10
|
-
|
11
|
-
context "regular country name" do
|
12
|
-
should "return permalink" do
|
13
|
-
assert_equal "#{@country.id}-united-kingdom", @country.to_param
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
context "country name with a lot of white spaces" do
|
18
|
-
should "return permalink" do
|
19
|
-
@country.name = "United Kingdom "
|
20
|
-
@country.save!
|
21
|
-
assert_equal "#{@country.id}-united-kingdom", @country.to_param
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
context "country with id equal nil" do
|
26
|
-
should "return permalink" do
|
27
|
-
@country.name = "2-tratata"
|
28
|
-
@country.id = nil
|
29
|
-
@country.save!
|
30
|
-
assert_equal "#{@country.id}-2-tratata", @country.to_param
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
context "country name with capital letters" do
|
35
|
-
should "return permalink" do
|
36
|
-
@country.name = " USA "
|
37
|
-
@country.save!
|
38
|
-
assert_equal "#{@country.id}-usa", @country.to_param
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
class PostTest < Test::Unit::TestCase
|
45
|
-
context "Post model" do
|
46
|
-
setup do
|
47
|
-
@post = Post.new :title => "Something cool"
|
48
|
-
@post.save!
|
49
|
-
end
|
50
|
-
subject { @post }
|
51
|
-
|
52
|
-
context "regular post title" do
|
53
|
-
should "return permalink" do
|
54
|
-
assert_equal "#{@post.id}-something-cool", @post.to_param
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
context "post title with a lot of white spaces" do
|
59
|
-
should "return permalink" do
|
60
|
-
@post.title = " Snow is cold "
|
61
|
-
@post.save!
|
62
|
-
assert_equal "#{@post.id}-snow-is-cold", @post.to_param
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
context "post title with capital letters" do
|
67
|
-
should "return permalink" do
|
68
|
-
@post.title = " SOMETHING i really like to DO is sleeping "
|
69
|
-
@post.save!
|
70
|
-
assert_equal "#{@post.id}-something-i-really-like-to-do-is-sleeping", @post.to_param
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
data/uninstall.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
# Uninstall hook code here
|