cmassimo-friendly_id 3.0.4.2
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 +277 -0
- data/Contributors.md +39 -0
- data/Guide.md +561 -0
- data/LICENSE +19 -0
- data/README.md +83 -0
- data/Rakefile +66 -0
- data/extras/README.txt +3 -0
- data/extras/bench.rb +36 -0
- data/extras/extras.rb +38 -0
- data/extras/prof.rb +14 -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 +73 -0
- data/lib/friendly_id/active_record.rb +52 -0
- data/lib/friendly_id/active_record_adapter/configuration.rb +67 -0
- data/lib/friendly_id/active_record_adapter/finders.rb +156 -0
- data/lib/friendly_id/active_record_adapter/simple_model.rb +123 -0
- data/lib/friendly_id/active_record_adapter/slug.rb +66 -0
- data/lib/friendly_id/active_record_adapter/slugged_model.rb +238 -0
- data/lib/friendly_id/active_record_adapter/tasks.rb +69 -0
- data/lib/friendly_id/configuration.rb +113 -0
- data/lib/friendly_id/finders.rb +109 -0
- data/lib/friendly_id/railtie.rb +20 -0
- data/lib/friendly_id/sequel.rb +5 -0
- data/lib/friendly_id/slug_string.rb +391 -0
- data/lib/friendly_id/slugged.rb +102 -0
- data/lib/friendly_id/status.rb +35 -0
- data/lib/friendly_id/test.rb +291 -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 +119 -0
- data/test/active_record_adapter/basic_slugged_model_test.rb +14 -0
- data/test/active_record_adapter/cached_slug_test.rb +61 -0
- data/test/active_record_adapter/core.rb +98 -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/scoped_model_test.rb +118 -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 +30 -0
- data/test/active_record_adapter/slugged_status_test.rb +25 -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 +87 -0
- data/test/active_record_adapter/tasks_test.rb +82 -0
- data/test/friendly_id_test.rb +55 -0
- data/test/slug_string_test.rb +88 -0
- data/test/test_helper.rb +15 -0
- metadata +168 -0
@@ -0,0 +1,30 @@
|
|
1
|
+
require File.expand_path("../ar_test_helper", __FILE__)
|
2
|
+
|
3
|
+
module FriendlyId
|
4
|
+
module Test
|
5
|
+
module ActiveRecordAdapter
|
6
|
+
module Slugged
|
7
|
+
|
8
|
+
test "should allow eager loading of slugs" do
|
9
|
+
assert_nothing_raised do
|
10
|
+
klass.find(instance.friendly_id, :include => :slugs)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def klass
|
15
|
+
Post
|
16
|
+
end
|
17
|
+
|
18
|
+
def other_class
|
19
|
+
District
|
20
|
+
end
|
21
|
+
|
22
|
+
def instance
|
23
|
+
@instance ||= klass.create! :name => "hello world"
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require File.expand_path("../ar_test_helper", __FILE__)
|
2
|
+
|
3
|
+
|
4
|
+
module FriendlyId
|
5
|
+
module Test
|
6
|
+
module ActiveRecordAdapter
|
7
|
+
|
8
|
+
class StatusTest < ::Test::Unit::TestCase
|
9
|
+
|
10
|
+
include FriendlyId::Test::Status
|
11
|
+
include FriendlyId::Test::SluggedStatus
|
12
|
+
|
13
|
+
def klass
|
14
|
+
Post
|
15
|
+
end
|
16
|
+
|
17
|
+
def instance
|
18
|
+
@instance ||= klass.create! :name => "hello world"
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require File.expand_path('../ar_test_helper', __FILE__)
|
2
|
+
|
3
|
+
module FriendlyId
|
4
|
+
module Test
|
5
|
+
module ActiveRecordAdapter
|
6
|
+
|
7
|
+
class StiTest < ::Test::Unit::TestCase
|
8
|
+
|
9
|
+
include FriendlyId::Test::Generic
|
10
|
+
include FriendlyId::Test::Slugged
|
11
|
+
include FriendlyId::Test::ActiveRecordAdapter::Slugged
|
12
|
+
include FriendlyId::Test::ActiveRecordAdapter::Core
|
13
|
+
|
14
|
+
def klass
|
15
|
+
Novel
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
class CreateSupportModels < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
|
4
|
+
create_table :authors do |t|
|
5
|
+
t.string :name
|
6
|
+
end
|
7
|
+
|
8
|
+
create_table :blocks do |t|
|
9
|
+
t.string :name
|
10
|
+
t.string :note
|
11
|
+
end
|
12
|
+
|
13
|
+
create_table :books do |t|
|
14
|
+
t.string :name
|
15
|
+
t.string :type
|
16
|
+
t.string :note
|
17
|
+
end
|
18
|
+
|
19
|
+
create_table :cities do |t|
|
20
|
+
t.string :name
|
21
|
+
t.string :my_slug
|
22
|
+
t.integer :population
|
23
|
+
end
|
24
|
+
add_index :cities, :my_slug, :unique => true
|
25
|
+
|
26
|
+
|
27
|
+
create_table :countries do |t|
|
28
|
+
t.string :name
|
29
|
+
end
|
30
|
+
|
31
|
+
create_table :districts do |t|
|
32
|
+
t.string :name
|
33
|
+
t.string :note
|
34
|
+
t.string :cached_slug
|
35
|
+
end
|
36
|
+
add_index :districts, :cached_slug, :unique => true
|
37
|
+
|
38
|
+
create_table :events do |t|
|
39
|
+
t.string :name
|
40
|
+
t.datetime :event_date
|
41
|
+
end
|
42
|
+
|
43
|
+
create_table :houses do |t|
|
44
|
+
t.string :name
|
45
|
+
t.integer :user_id
|
46
|
+
end
|
47
|
+
|
48
|
+
create_table :legacy_table do |t|
|
49
|
+
t.string :name
|
50
|
+
t.string :note
|
51
|
+
end
|
52
|
+
|
53
|
+
create_table :people do |t|
|
54
|
+
t.string :name
|
55
|
+
t.string :note
|
56
|
+
end
|
57
|
+
|
58
|
+
create_table :posts do |t|
|
59
|
+
t.string :name
|
60
|
+
t.boolean :published
|
61
|
+
t.string :note
|
62
|
+
end
|
63
|
+
|
64
|
+
create_table :residents do |t|
|
65
|
+
t.string :name
|
66
|
+
t.integer :country_id
|
67
|
+
end
|
68
|
+
|
69
|
+
create_table :users do |t|
|
70
|
+
t.string :name
|
71
|
+
end
|
72
|
+
add_index :users, :name, :unique => true
|
73
|
+
|
74
|
+
create_table :sites do |t|
|
75
|
+
t.string :name
|
76
|
+
t.integer :owner_id
|
77
|
+
t.string :owner_type
|
78
|
+
end
|
79
|
+
|
80
|
+
create_table :companies do |t|
|
81
|
+
t.string :name
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def self.down
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require File.expand_path('../ar_test_helper', __FILE__)
|
2
|
+
require File.expand_path('../../../lib/friendly_id/active_record_adapter/tasks', __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,55 @@
|
|
1
|
+
require File.expand_path('../test_helper', __FILE__)
|
2
|
+
|
3
|
+
module FriendlyId
|
4
|
+
|
5
|
+
module Test
|
6
|
+
|
7
|
+
class FriendlyIdTest < ::Test::Unit::TestCase
|
8
|
+
|
9
|
+
test "should parse a friendly_id name and sequence" do
|
10
|
+
assert_equal ["test", "2"], "test--2".parse_friendly_id
|
11
|
+
end
|
12
|
+
|
13
|
+
test "should parse a friendly_id name and a double digit sequence" do
|
14
|
+
assert_equal ["test", "12"], "test--12".parse_friendly_id
|
15
|
+
end
|
16
|
+
|
17
|
+
test "should parse with a default sequence of 1" do
|
18
|
+
assert_equal ["test", "1"], "test".parse_friendly_id
|
19
|
+
end
|
20
|
+
|
21
|
+
test "should be parseable with a custom separator" do
|
22
|
+
assert_equal ["test", "2"], "test:2".parse_friendly_id(":")
|
23
|
+
end
|
24
|
+
|
25
|
+
test "should be parseable with a custom separator and a double digit sequence" do
|
26
|
+
assert_equal ["test", "12"], "test:12".parse_friendly_id(":")
|
27
|
+
end
|
28
|
+
|
29
|
+
test "should parse when default sequence separator occurs in friendly_id name" do
|
30
|
+
assert_equal ["test--test", "2"], "test--test--2".parse_friendly_id
|
31
|
+
end
|
32
|
+
|
33
|
+
test "should parse when custom sequence separator occurs in friendly_id name" do
|
34
|
+
assert_equal ["test:test", "2"], "test:test:2".parse_friendly_id(":")
|
35
|
+
end
|
36
|
+
|
37
|
+
test "should parse when sequence separator and number occur in friendly_id name" do
|
38
|
+
assert_equal ["test--2--test", "1"], "test--2--test".parse_friendly_id
|
39
|
+
end
|
40
|
+
|
41
|
+
test "should parse when sequence separator, number and sequence occur in friendly_id name" do
|
42
|
+
assert_equal ["test--2--test", "2"], "test--2--test--2".parse_friendly_id
|
43
|
+
end
|
44
|
+
|
45
|
+
test "should parse when double digit sequence separator, number and sequence occur in friendly_id name" do
|
46
|
+
assert_equal ["test--2--test", "12"], "test--2--test--12".parse_friendly_id
|
47
|
+
end
|
48
|
+
|
49
|
+
test "should parse with a separator and no sequence" do
|
50
|
+
assert_equal ["test", "1"], "test--".parse_friendly_id
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require(File.dirname(__FILE__) + "/test_helper")
|
3
|
+
|
4
|
+
module FriendlyId
|
5
|
+
module Test
|
6
|
+
|
7
|
+
class SlugStringTest < ::Test::Unit::TestCase
|
8
|
+
|
9
|
+
test "should approximate ascii" do
|
10
|
+
# create string with range of Unicode"s western characters with
|
11
|
+
# diacritics, excluding the division and multiplication signs which for
|
12
|
+
# some reason or other are floating in the middle of all the letters.
|
13
|
+
s = SlugString.new((0xC0..0x17E).to_a.reject {|c| [0xD7, 0xF7].include? c}.pack("U*"))
|
14
|
+
output = s.approximate_ascii
|
15
|
+
assert(output.length > s.length)
|
16
|
+
assert_match output, /^[a-zA-Z']*$/
|
17
|
+
end
|
18
|
+
|
19
|
+
test "should strip non-word chars" do
|
20
|
+
s = SlugString.new "¡feliz año!"
|
21
|
+
assert_equal "feliz año", s.word_chars
|
22
|
+
end
|
23
|
+
|
24
|
+
test "should lowercase strings" do
|
25
|
+
assert_equal "feliz año", SlugString.new("FELIZ AÑO").downcase
|
26
|
+
end
|
27
|
+
|
28
|
+
test "should uppercase strings" do
|
29
|
+
assert_equal "FELIZ AÑO", SlugString.new("feliz año").upcase
|
30
|
+
end
|
31
|
+
|
32
|
+
test "should replace whitespace with dashes" do
|
33
|
+
assert_equal "a-b", SlugString.new("a b").clean.with_dashes
|
34
|
+
end
|
35
|
+
|
36
|
+
test "should replace multiple spaces with 1 dash" do
|
37
|
+
assert_equal "a-b", SlugString.new("a b").clean.with_dashes
|
38
|
+
end
|
39
|
+
|
40
|
+
test "should replace multiple dashes with 1 dash" do
|
41
|
+
assert_equal "male-female", SlugString.new("male - female").with_dashes
|
42
|
+
end
|
43
|
+
|
44
|
+
test "should strip trailing space" do
|
45
|
+
assert_equal "ab", SlugString.new("ab ").clean
|
46
|
+
end
|
47
|
+
|
48
|
+
test "should strip leading space" do
|
49
|
+
assert_equal "ab", SlugString.new(" ab").clean
|
50
|
+
end
|
51
|
+
|
52
|
+
test "should strip trailing slashes" do
|
53
|
+
assert_equal "ab", SlugString.new("ab-").clean
|
54
|
+
end
|
55
|
+
|
56
|
+
test "should strip leading slashes" do
|
57
|
+
assert_equal "ab", SlugString.new("-ab").clean
|
58
|
+
end
|
59
|
+
|
60
|
+
test "should not modify valid name strings" do
|
61
|
+
assert_equal "a-b-c-d", SlugString.new("a-b-c-d").clean
|
62
|
+
end
|
63
|
+
|
64
|
+
test "should do special approximations for German" do
|
65
|
+
assert_equal "Juergen", SlugString.new("Jürgen").approximate_ascii(:german)
|
66
|
+
end
|
67
|
+
|
68
|
+
test "should do special approximations for Spanish" do
|
69
|
+
assert_equal "anno", SlugString.new("año").approximate_ascii(:spanish)
|
70
|
+
end
|
71
|
+
|
72
|
+
test "should work with non roman chars" do
|
73
|
+
assert_equal "検-索", SlugString.new("検 索").with_dashes
|
74
|
+
end
|
75
|
+
|
76
|
+
test "should work with invalid UTF-8 strings" do
|
77
|
+
%w[approximate_ascii clean downcase word_chars normalize to_ascii upcase with_dashes].each do |method|
|
78
|
+
string = SlugString.new("\x93abc")
|
79
|
+
assert_nothing_raised do
|
80
|
+
method == "truncate" ? string.send(method, 32) : string.send(method)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
$KCODE = "UTF8" if RUBY_VERSION < "1.9"
|
2
|
+
$VERBOSE = false
|
3
|
+
begin
|
4
|
+
require File.expand_path('../../.bundle/environment', __FILE__)
|
5
|
+
rescue LoadError
|
6
|
+
# Fall back on doing an unlocked resolve at runtime.
|
7
|
+
require "rubygems"
|
8
|
+
require "bundler"
|
9
|
+
Bundler.setup
|
10
|
+
end
|
11
|
+
require "test/unit"
|
12
|
+
require "mocha"
|
13
|
+
require "active_support"
|
14
|
+
require File.expand_path("../../lib/friendly_id", __FILE__)
|
15
|
+
require File.expand_path("../../lib/friendly_id/test", __FILE__)
|
metadata
ADDED
@@ -0,0 +1,168 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cmassimo-friendly_id
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 107
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 3
|
8
|
+
- 0
|
9
|
+
- 4
|
10
|
+
- 2
|
11
|
+
version: 3.0.4.2
|
12
|
+
platform: ruby
|
13
|
+
authors:
|
14
|
+
- Norman Clarke
|
15
|
+
- Adrian Mugnolo
|
16
|
+
- Emilio Tagua
|
17
|
+
autorequire:
|
18
|
+
bindir: bin
|
19
|
+
cert_chain: []
|
20
|
+
|
21
|
+
date: 2010-06-14 00:00:00 +02:00
|
22
|
+
default_executable:
|
23
|
+
dependencies:
|
24
|
+
- !ruby/object:Gem::Dependency
|
25
|
+
name: activerecord
|
26
|
+
prerelease: false
|
27
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
hash: 7
|
33
|
+
segments:
|
34
|
+
- 2
|
35
|
+
- 2
|
36
|
+
version: "2.2"
|
37
|
+
type: :runtime
|
38
|
+
version_requirements: *id001
|
39
|
+
- !ruby/object:Gem::Dependency
|
40
|
+
name: activesupport
|
41
|
+
prerelease: false
|
42
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
hash: 7
|
48
|
+
segments:
|
49
|
+
- 2
|
50
|
+
- 2
|
51
|
+
version: "2.2"
|
52
|
+
type: :runtime
|
53
|
+
version_requirements: *id002
|
54
|
+
description: " FriendlyId is the \"Swiss Army bulldozer\" of slugging and permalink plugins\n for Ruby on Rails. It allows you to create pretty URL\xE2\x80\x99s and work with\n human-friendly strings as if they were numeric ids for ActiveRecord models.\n\
|
55
|
+
\t\t-- Forked by cmassimo see http://github.com/cmassimo/friendly_id for further details\n"
|
56
|
+
email:
|
57
|
+
- norman@njclarke.com
|
58
|
+
- adrian@mugnolo.com
|
59
|
+
- miloops@gmail.com
|
60
|
+
executables: []
|
61
|
+
|
62
|
+
extensions: []
|
63
|
+
|
64
|
+
extra_rdoc_files: []
|
65
|
+
|
66
|
+
files:
|
67
|
+
- lib/friendly_id/active_record.rb
|
68
|
+
- lib/friendly_id/active_record_adapter/configuration.rb
|
69
|
+
- lib/friendly_id/active_record_adapter/finders.rb
|
70
|
+
- lib/friendly_id/active_record_adapter/simple_model.rb
|
71
|
+
- lib/friendly_id/active_record_adapter/slug.rb
|
72
|
+
- lib/friendly_id/active_record_adapter/slugged_model.rb
|
73
|
+
- lib/friendly_id/active_record_adapter/tasks.rb
|
74
|
+
- lib/friendly_id/configuration.rb
|
75
|
+
- lib/friendly_id/finders.rb
|
76
|
+
- lib/friendly_id/railtie.rb
|
77
|
+
- lib/friendly_id/sequel.rb
|
78
|
+
- lib/friendly_id/slug_string.rb
|
79
|
+
- lib/friendly_id/slugged.rb
|
80
|
+
- lib/friendly_id/status.rb
|
81
|
+
- lib/friendly_id/test.rb
|
82
|
+
- lib/friendly_id/version.rb
|
83
|
+
- lib/friendly_id.rb
|
84
|
+
- lib/generators/friendly_id_generator.rb
|
85
|
+
- lib/tasks/friendly_id.rake
|
86
|
+
- Changelog.md
|
87
|
+
- Contributors.md
|
88
|
+
- Guide.md
|
89
|
+
- README.md
|
90
|
+
- LICENSE
|
91
|
+
- Rakefile
|
92
|
+
- rails/init.rb
|
93
|
+
- generators/friendly_id/friendly_id_generator.rb
|
94
|
+
- generators/friendly_id/templates/create_slugs.rb
|
95
|
+
- test/active_record_adapter/ar_test_helper.rb
|
96
|
+
- test/active_record_adapter/basic_slugged_model_test.rb
|
97
|
+
- test/active_record_adapter/cached_slug_test.rb
|
98
|
+
- test/active_record_adapter/core.rb
|
99
|
+
- test/active_record_adapter/custom_normalizer_test.rb
|
100
|
+
- test/active_record_adapter/custom_table_name_test.rb
|
101
|
+
- test/active_record_adapter/scoped_model_test.rb
|
102
|
+
- test/active_record_adapter/simple_test.rb
|
103
|
+
- test/active_record_adapter/slug_test.rb
|
104
|
+
- test/active_record_adapter/slugged.rb
|
105
|
+
- test/active_record_adapter/slugged_status_test.rb
|
106
|
+
- test/active_record_adapter/sti_test.rb
|
107
|
+
- test/active_record_adapter/support/database.jdbcsqlite3.yml
|
108
|
+
- test/active_record_adapter/support/database.mysql.yml
|
109
|
+
- test/active_record_adapter/support/database.postgres.yml
|
110
|
+
- test/active_record_adapter/support/database.sqlite3.yml
|
111
|
+
- test/active_record_adapter/support/models.rb
|
112
|
+
- test/active_record_adapter/tasks_test.rb
|
113
|
+
- test/friendly_id_test.rb
|
114
|
+
- test/slug_string_test.rb
|
115
|
+
- test/test_helper.rb
|
116
|
+
- extras/bench.rb
|
117
|
+
- extras/extras.rb
|
118
|
+
- extras/prof.rb
|
119
|
+
- extras/README.txt
|
120
|
+
- extras/template-gem.rb
|
121
|
+
- extras/template-plugin.rb
|
122
|
+
has_rdoc: true
|
123
|
+
homepage: http://norman.github.com/friendly_id
|
124
|
+
licenses: []
|
125
|
+
|
126
|
+
post_install_message:
|
127
|
+
rdoc_options: []
|
128
|
+
|
129
|
+
require_paths:
|
130
|
+
- lib
|
131
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
132
|
+
none: false
|
133
|
+
requirements:
|
134
|
+
- - ">="
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
hash: 3
|
137
|
+
segments:
|
138
|
+
- 0
|
139
|
+
version: "0"
|
140
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
141
|
+
none: false
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
hash: 3
|
146
|
+
segments:
|
147
|
+
- 0
|
148
|
+
version: "0"
|
149
|
+
requirements: []
|
150
|
+
|
151
|
+
rubyforge_project: cmassimo-friendly-id
|
152
|
+
rubygems_version: 1.3.7
|
153
|
+
signing_key:
|
154
|
+
specification_version: 3
|
155
|
+
summary: A comprehensive slugging and pretty-URL plugin.
|
156
|
+
test_files:
|
157
|
+
- test/active_record_adapter/basic_slugged_model_test.rb
|
158
|
+
- test/active_record_adapter/cached_slug_test.rb
|
159
|
+
- test/active_record_adapter/custom_normalizer_test.rb
|
160
|
+
- test/active_record_adapter/custom_table_name_test.rb
|
161
|
+
- test/active_record_adapter/scoped_model_test.rb
|
162
|
+
- test/active_record_adapter/simple_test.rb
|
163
|
+
- test/active_record_adapter/slug_test.rb
|
164
|
+
- test/active_record_adapter/slugged_status_test.rb
|
165
|
+
- test/active_record_adapter/sti_test.rb
|
166
|
+
- test/active_record_adapter/tasks_test.rb
|
167
|
+
- test/friendly_id_test.rb
|
168
|
+
- test/slug_string_test.rb
|