friendly_id_globalize3 3.2.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/Changelog.md +354 -0
- data/Contributors.md +43 -0
- data/Guide.md +686 -0
- data/MIT-LICENSE +19 -0
- data/README.md +99 -0
- data/Rakefile +75 -0
- data/extras/README.txt +3 -0
- data/extras/bench.rb +40 -0
- data/extras/extras.rb +38 -0
- data/extras/prof.rb +19 -0
- data/extras/template-gem.rb +26 -0
- data/extras/template-plugin.rb +28 -0
- data/generators/friendly_id/friendly_id_generator.rb +30 -0
- data/generators/friendly_id/templates/create_slugs.rb +18 -0
- data/lib/friendly_id.rb +93 -0
- data/lib/friendly_id/active_record.rb +74 -0
- data/lib/friendly_id/active_record_adapter/configuration.rb +68 -0
- data/lib/friendly_id/active_record_adapter/finders.rb +148 -0
- data/lib/friendly_id/active_record_adapter/relation.rb +165 -0
- data/lib/friendly_id/active_record_adapter/simple_model.rb +63 -0
- data/lib/friendly_id/active_record_adapter/slug.rb +77 -0
- data/lib/friendly_id/active_record_adapter/slugged_model.rb +122 -0
- data/lib/friendly_id/active_record_adapter/tasks.rb +72 -0
- data/lib/friendly_id/configuration.rb +178 -0
- data/lib/friendly_id/datamapper.rb +5 -0
- data/lib/friendly_id/railtie.rb +22 -0
- data/lib/friendly_id/sequel.rb +5 -0
- data/lib/friendly_id/slug_string.rb +25 -0
- data/lib/friendly_id/slugged.rb +105 -0
- data/lib/friendly_id/status.rb +35 -0
- data/lib/friendly_id/test.rb +350 -0
- data/lib/friendly_id/version.rb +9 -0
- data/lib/generators/friendly_id_generator.rb +25 -0
- data/lib/tasks/friendly_id.rake +19 -0
- data/rails/init.rb +2 -0
- data/test/active_record_adapter/ar_test_helper.rb +150 -0
- data/test/active_record_adapter/basic_slugged_model_test.rb +14 -0
- data/test/active_record_adapter/cached_slug_test.rb +76 -0
- data/test/active_record_adapter/core.rb +138 -0
- data/test/active_record_adapter/custom_normalizer_test.rb +20 -0
- data/test/active_record_adapter/custom_table_name_test.rb +22 -0
- data/test/active_record_adapter/default_scope_test.rb +30 -0
- data/test/active_record_adapter/optimistic_locking_test.rb +18 -0
- data/test/active_record_adapter/scoped_model_test.rb +119 -0
- data/test/active_record_adapter/simple_test.rb +76 -0
- data/test/active_record_adapter/slug_test.rb +34 -0
- data/test/active_record_adapter/slugged.rb +33 -0
- data/test/active_record_adapter/slugged_status_test.rb +28 -0
- data/test/active_record_adapter/sti_test.rb +22 -0
- data/test/active_record_adapter/support/database.jdbcsqlite3.yml +2 -0
- data/test/active_record_adapter/support/database.mysql.yml +4 -0
- data/test/active_record_adapter/support/database.postgres.yml +6 -0
- data/test/active_record_adapter/support/database.sqlite3.yml +2 -0
- data/test/active_record_adapter/support/models.rb +104 -0
- data/test/active_record_adapter/tasks_test.rb +82 -0
- data/test/friendly_id_test.rb +96 -0
- data/test/test_helper.rb +13 -0
- metadata +193 -0
@@ -0,0 +1,82 @@
|
|
1
|
+
require "friendly_id/active_record_adapter/tasks"
|
2
|
+
require File.expand_path('../ar_test_helper', __FILE__)
|
3
|
+
|
4
|
+
class TasksTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def teardown
|
7
|
+
ENV["MODEL"] = nil
|
8
|
+
[City, District, Post, Slug].map(&:delete_all)
|
9
|
+
end
|
10
|
+
|
11
|
+
test "should make slugs" do
|
12
|
+
City.create! :name => "Nairobi"
|
13
|
+
City.create! :name => "Buenos Aires"
|
14
|
+
Slug.delete_all
|
15
|
+
ENV["MODEL"] = "City"
|
16
|
+
FriendlyId::TaskRunner.new.make_slugs
|
17
|
+
assert_equal 2, Slug.count
|
18
|
+
end
|
19
|
+
|
20
|
+
test "should admit lower case, plural model names" do
|
21
|
+
ENV["MODEL"] = "cities"
|
22
|
+
assert_equal City, FriendlyId::TaskRunner.new.klass
|
23
|
+
end
|
24
|
+
|
25
|
+
test "make_slugs should raise error if no model given" do
|
26
|
+
assert_raise(RuntimeError) { FriendlyId::TaskRunner.new.make_slugs }
|
27
|
+
end
|
28
|
+
|
29
|
+
test "make_slugs should raise error if class doesn't use FriendlyId" do
|
30
|
+
ENV["MODEL"] = "String"
|
31
|
+
assert_raise(RuntimeError) { FriendlyId::TaskRunner.new.make_slugs }
|
32
|
+
end
|
33
|
+
|
34
|
+
test"delete_slugs delete only slugs for the specified model" do
|
35
|
+
Post.create! :name => "Slugs Considered Harmful"
|
36
|
+
City.create! :name => "Buenos Aires"
|
37
|
+
ENV["MODEL"] = "city"
|
38
|
+
FriendlyId::TaskRunner.new.delete_slugs
|
39
|
+
assert_equal 1, Slug.count
|
40
|
+
end
|
41
|
+
|
42
|
+
test "delete_slugs should set the cached_slug column to NULL" do
|
43
|
+
ENV["MODEL"] = "district"
|
44
|
+
District.create! :name => "Garment"
|
45
|
+
FriendlyId::TaskRunner.new.delete_slugs
|
46
|
+
assert_nil District.first.cached_slug
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
test "delete_old_slugs should delete slugs older than 45 days by default" do
|
51
|
+
set_up_old_slugs
|
52
|
+
FriendlyId::TaskRunner.new.delete_old_slugs
|
53
|
+
assert_equal 2, Slug.count
|
54
|
+
end
|
55
|
+
|
56
|
+
test "delete_old_slugs should respect the days argument" do
|
57
|
+
set_up_old_slugs
|
58
|
+
ENV["DAYS"] = "100"
|
59
|
+
FriendlyId::TaskRunner.new.delete_old_slugs
|
60
|
+
assert_equal 3, Slug.count
|
61
|
+
end
|
62
|
+
|
63
|
+
test "delete_old_slugs should respect the class argument" do
|
64
|
+
set_up_old_slugs
|
65
|
+
ENV["MODEL"] = "post"
|
66
|
+
FriendlyId::TaskRunner.new.delete_old_slugs
|
67
|
+
assert_equal 3, Slug.count
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
def set_up_old_slugs
|
73
|
+
Post.create! :name => "Slugs Considered Harmful"
|
74
|
+
city = City.create! :name => "Buenos Aires"
|
75
|
+
City.connection.execute "UPDATE slugs SET created_at = '%s' WHERE id = %d" % [
|
76
|
+
45.days.ago.strftime("%Y-%m-%d"), city.slug.id
|
77
|
+
]
|
78
|
+
city.update_attributes :name => "Ciudad de Buenos Aires"
|
79
|
+
assert_equal 3, Slug.count
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require File.expand_path('../test_helper', __FILE__)
|
3
|
+
|
4
|
+
module FriendlyId
|
5
|
+
module Test
|
6
|
+
|
7
|
+
class ConfigurationTest < ::Test::Unit::TestCase
|
8
|
+
test "should validate sequence separator name" do
|
9
|
+
["-", " ", "\n", "\t"].each do |string|
|
10
|
+
assert_raise ArgumentError do
|
11
|
+
Configuration.new(NilClass, :hello, :sequence_separator => string)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
test "should validate cached slug name" do
|
17
|
+
["slug", "slugs", " "].each do |string|
|
18
|
+
assert_raise ArgumentError do
|
19
|
+
Configuration.new(NilClass, :hello, :cache_column => string)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class SlugStringTest < ::Test::Unit::TestCase
|
26
|
+
test "should not transliterate by default" do
|
27
|
+
s = SlugString.new("über")
|
28
|
+
assert_equal "über", s.normalize_for!(Configuration.new(nil, :name))
|
29
|
+
end
|
30
|
+
|
31
|
+
test "should transliterate if specified" do
|
32
|
+
s = SlugString.new("über")
|
33
|
+
options = {:approximate_ascii => true}
|
34
|
+
assert_equal "uber", s.normalize_for!(Configuration.new(nil, :name, options))
|
35
|
+
end
|
36
|
+
|
37
|
+
test "should strip non-ascii if specified" do
|
38
|
+
s = SlugString.new("über")
|
39
|
+
options = {:strip_non_ascii => true}
|
40
|
+
assert_equal "ber", s.normalize_for!(Configuration.new(nil, :name, options))
|
41
|
+
end
|
42
|
+
|
43
|
+
test "should use transliterations if given" do
|
44
|
+
s = SlugString.new("über")
|
45
|
+
options = {:approximate_ascii => true, :ascii_approximation_options => :german}
|
46
|
+
assert_equal "ueber", s.normalize_for!(Configuration.new(nil, :name, options))
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
class FriendlyIdTest < ::Test::Unit::TestCase
|
51
|
+
test "should parse a friendly_id name and sequence" do
|
52
|
+
assert_equal ["test", 2], "test--2".parse_friendly_id
|
53
|
+
end
|
54
|
+
|
55
|
+
test "should parse a friendly_id name and a double digit sequence" do
|
56
|
+
assert_equal ["test", 12], "test--12".parse_friendly_id
|
57
|
+
end
|
58
|
+
|
59
|
+
test "should parse with a default sequence of 1" do
|
60
|
+
assert_equal ["test", 1], "test".parse_friendly_id
|
61
|
+
end
|
62
|
+
|
63
|
+
test "should be parseable with a custom separator" do
|
64
|
+
assert_equal ["test", 2], "test:2".parse_friendly_id(":")
|
65
|
+
end
|
66
|
+
|
67
|
+
test "should be parseable with a custom separator and a double digit sequence" do
|
68
|
+
assert_equal ["test", 12], "test:12".parse_friendly_id(":")
|
69
|
+
end
|
70
|
+
|
71
|
+
test "should parse when default sequence separator occurs in friendly_id name" do
|
72
|
+
assert_equal ["test--test", 2], "test--test--2".parse_friendly_id
|
73
|
+
end
|
74
|
+
|
75
|
+
test "should parse when custom sequence separator occurs in friendly_id name" do
|
76
|
+
assert_equal ["test:test", 2], "test:test:2".parse_friendly_id(":")
|
77
|
+
end
|
78
|
+
|
79
|
+
test "should parse when sequence separator and number occur in friendly_id name" do
|
80
|
+
assert_equal ["test--2--test", 1], "test--2--test".parse_friendly_id
|
81
|
+
end
|
82
|
+
|
83
|
+
test "should parse when sequence separator, number and sequence occur in friendly_id name" do
|
84
|
+
assert_equal ["test--2--test", 2], "test--2--test--2".parse_friendly_id
|
85
|
+
end
|
86
|
+
|
87
|
+
test "should parse when double digit sequence separator, number and sequence occur in friendly_id name" do
|
88
|
+
assert_equal ["test--2--test", 12], "test--2--test--12".parse_friendly_id
|
89
|
+
end
|
90
|
+
|
91
|
+
test "should parse with a separator and no sequence" do
|
92
|
+
assert_equal ["test", 1], "test--".parse_friendly_id
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
$:.unshift File.expand_path("../lib", File.dirname(__FILE__))
|
2
|
+
$:.unshift File.expand_path(File.dirname(__FILE__))
|
3
|
+
$:.uniq!
|
4
|
+
|
5
|
+
$KCODE = "UTF8" if RUBY_VERSION < "1.9"
|
6
|
+
$VERBOSE = false
|
7
|
+
require "rubygems"
|
8
|
+
require "bundler/setup"
|
9
|
+
require "test/unit"
|
10
|
+
require "mocha"
|
11
|
+
require "active_support"
|
12
|
+
require "friendly_id"
|
13
|
+
require "friendly_id/test"
|
metadata
ADDED
@@ -0,0 +1,193 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: friendly_id_globalize3
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 3
|
7
|
+
- 2
|
8
|
+
- 0
|
9
|
+
version: 3.2.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Norman Clarke
|
13
|
+
- Adrian Mugnolo
|
14
|
+
- Emilio Tagua
|
15
|
+
autorequire:
|
16
|
+
bindir: bin
|
17
|
+
cert_chain: []
|
18
|
+
|
19
|
+
date: 2011-01-26 00:00:00 +13:00
|
20
|
+
default_executable:
|
21
|
+
dependencies:
|
22
|
+
- !ruby/object:Gem::Dependency
|
23
|
+
name: babosa
|
24
|
+
prerelease: false
|
25
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ~>
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
- 2
|
33
|
+
- 1
|
34
|
+
version: 0.2.1
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: activerecord
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
segments:
|
46
|
+
- 3
|
47
|
+
- 0
|
48
|
+
- 0
|
49
|
+
version: 3.0.0
|
50
|
+
type: :development
|
51
|
+
version_requirements: *id002
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
name: mocha
|
54
|
+
prerelease: false
|
55
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ~>
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
segments:
|
61
|
+
- 0
|
62
|
+
- 9
|
63
|
+
version: "0.9"
|
64
|
+
type: :development
|
65
|
+
version_requirements: *id003
|
66
|
+
- !ruby/object:Gem::Dependency
|
67
|
+
name: sqlite3-ruby
|
68
|
+
prerelease: false
|
69
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
71
|
+
requirements:
|
72
|
+
- - ~>
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
segments:
|
75
|
+
- 1
|
76
|
+
version: "1"
|
77
|
+
type: :development
|
78
|
+
version_requirements: *id004
|
79
|
+
description: " FriendlyId is the \"Swiss Army bulldozer\" of slugging and permalink plugins\n for Ruby on Rails. It allows you to create pretty URL's and work with\n human-friendly strings as if they were numeric ids for ActiveRecord models.\n"
|
80
|
+
email:
|
81
|
+
- norman@njclarke.com
|
82
|
+
- adrian@mugnolo.com
|
83
|
+
- miloops@gmail.com
|
84
|
+
executables: []
|
85
|
+
|
86
|
+
extensions: []
|
87
|
+
|
88
|
+
extra_rdoc_files: []
|
89
|
+
|
90
|
+
files:
|
91
|
+
- lib/friendly_id/active_record.rb
|
92
|
+
- lib/friendly_id/active_record_adapter/configuration.rb
|
93
|
+
- lib/friendly_id/active_record_adapter/finders.rb
|
94
|
+
- lib/friendly_id/active_record_adapter/relation.rb
|
95
|
+
- lib/friendly_id/active_record_adapter/simple_model.rb
|
96
|
+
- lib/friendly_id/active_record_adapter/slug.rb
|
97
|
+
- lib/friendly_id/active_record_adapter/slugged_model.rb
|
98
|
+
- lib/friendly_id/active_record_adapter/tasks.rb
|
99
|
+
- lib/friendly_id/configuration.rb
|
100
|
+
- lib/friendly_id/datamapper.rb
|
101
|
+
- lib/friendly_id/railtie.rb
|
102
|
+
- lib/friendly_id/sequel.rb
|
103
|
+
- lib/friendly_id/slug_string.rb
|
104
|
+
- lib/friendly_id/slugged.rb
|
105
|
+
- lib/friendly_id/status.rb
|
106
|
+
- lib/friendly_id/test.rb
|
107
|
+
- lib/friendly_id/version.rb
|
108
|
+
- lib/friendly_id.rb
|
109
|
+
- lib/generators/friendly_id_generator.rb
|
110
|
+
- lib/tasks/friendly_id.rake
|
111
|
+
- Changelog.md
|
112
|
+
- Contributors.md
|
113
|
+
- Guide.md
|
114
|
+
- README.md
|
115
|
+
- MIT-LICENSE
|
116
|
+
- Rakefile
|
117
|
+
- rails/init.rb
|
118
|
+
- generators/friendly_id/friendly_id_generator.rb
|
119
|
+
- generators/friendly_id/templates/create_slugs.rb
|
120
|
+
- test/active_record_adapter/ar_test_helper.rb
|
121
|
+
- test/active_record_adapter/basic_slugged_model_test.rb
|
122
|
+
- test/active_record_adapter/cached_slug_test.rb
|
123
|
+
- test/active_record_adapter/core.rb
|
124
|
+
- test/active_record_adapter/custom_normalizer_test.rb
|
125
|
+
- test/active_record_adapter/custom_table_name_test.rb
|
126
|
+
- test/active_record_adapter/default_scope_test.rb
|
127
|
+
- test/active_record_adapter/optimistic_locking_test.rb
|
128
|
+
- test/active_record_adapter/scoped_model_test.rb
|
129
|
+
- test/active_record_adapter/simple_test.rb
|
130
|
+
- test/active_record_adapter/slug_test.rb
|
131
|
+
- test/active_record_adapter/slugged.rb
|
132
|
+
- test/active_record_adapter/slugged_status_test.rb
|
133
|
+
- test/active_record_adapter/sti_test.rb
|
134
|
+
- test/active_record_adapter/support/database.jdbcsqlite3.yml
|
135
|
+
- test/active_record_adapter/support/database.mysql.yml
|
136
|
+
- test/active_record_adapter/support/database.postgres.yml
|
137
|
+
- test/active_record_adapter/support/database.sqlite3.yml
|
138
|
+
- test/active_record_adapter/support/models.rb
|
139
|
+
- test/active_record_adapter/tasks_test.rb
|
140
|
+
- test/friendly_id_test.rb
|
141
|
+
- test/test_helper.rb
|
142
|
+
- extras/bench.rb
|
143
|
+
- extras/extras.rb
|
144
|
+
- extras/prof.rb
|
145
|
+
- extras/README.txt
|
146
|
+
- extras/template-gem.rb
|
147
|
+
- extras/template-plugin.rb
|
148
|
+
has_rdoc: true
|
149
|
+
homepage: http://norman.github.com/friendly_id
|
150
|
+
licenses: []
|
151
|
+
|
152
|
+
post_install_message:
|
153
|
+
rdoc_options: []
|
154
|
+
|
155
|
+
require_paths:
|
156
|
+
- lib
|
157
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
158
|
+
none: false
|
159
|
+
requirements:
|
160
|
+
- - ">="
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
segments:
|
163
|
+
- 0
|
164
|
+
version: "0"
|
165
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
166
|
+
none: false
|
167
|
+
requirements:
|
168
|
+
- - ">="
|
169
|
+
- !ruby/object:Gem::Version
|
170
|
+
segments:
|
171
|
+
- 0
|
172
|
+
version: "0"
|
173
|
+
requirements: []
|
174
|
+
|
175
|
+
rubyforge_project: friendly-id
|
176
|
+
rubygems_version: 1.3.7
|
177
|
+
signing_key:
|
178
|
+
specification_version: 3
|
179
|
+
summary: A comprehensive slugging and pretty-URL plugin. Fork for globalize3 support.
|
180
|
+
test_files:
|
181
|
+
- test/active_record_adapter/basic_slugged_model_test.rb
|
182
|
+
- test/active_record_adapter/cached_slug_test.rb
|
183
|
+
- test/active_record_adapter/custom_normalizer_test.rb
|
184
|
+
- test/active_record_adapter/custom_table_name_test.rb
|
185
|
+
- test/active_record_adapter/default_scope_test.rb
|
186
|
+
- test/active_record_adapter/optimistic_locking_test.rb
|
187
|
+
- test/active_record_adapter/scoped_model_test.rb
|
188
|
+
- test/active_record_adapter/simple_test.rb
|
189
|
+
- test/active_record_adapter/slug_test.rb
|
190
|
+
- test/active_record_adapter/slugged_status_test.rb
|
191
|
+
- test/active_record_adapter/sti_test.rb
|
192
|
+
- test/active_record_adapter/tasks_test.rb
|
193
|
+
- test/friendly_id_test.rb
|