friendly_id 2.0.1 → 2.0.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.tar.gz.sig +0 -0
- data/History.txt +10 -0
- data/Manifest.txt +5 -18
- data/Rakefile +7 -10
- data/friendly_id.gemspec +17 -8
- data/lib/friendly_id.rb +29 -13
- data/lib/friendly_id/non_sluggable_class_methods.rb +4 -4
- data/lib/friendly_id/non_sluggable_instance_methods.rb +8 -0
- data/lib/friendly_id/slug.rb +14 -12
- data/lib/friendly_id/sluggable_class_methods.rb +13 -2
- data/lib/friendly_id/sluggable_instance_methods.rb +8 -5
- data/lib/friendly_id/version.rb +1 -1
- data/test/{fixtures → models}/country.rb +0 -0
- data/test/{fixtures → models}/person.rb +0 -0
- data/test/models/post.rb +3 -0
- data/test/{fixtures → models}/user.rb +0 -0
- data/test/non_slugged_test.rb +65 -60
- data/test/schema.rb +18 -18
- data/test/scoped_model_test.rb +43 -13
- data/test/slug_test.rb +93 -74
- data/test/slugged_model_test.rb +263 -0
- data/test/test_helper.rb +27 -29
- metadata +41 -24
- metadata.gz.sig +1 -2
- data/lib/friendly_id/shoulda_macros.rb +0 -36
- data/test/database.yml +0 -3
- data/test/fixtures/countries.yml +0 -4
- data/test/fixtures/people.yml +0 -7
- data/test/fixtures/post.rb +0 -3
- data/test/fixtures/posts.yml +0 -23
- data/test/fixtures/slugs.yml +0 -53
- data/test/fixtures/users.yml +0 -7
- data/test/rails/2.x/app/controllers/application.rb +0 -0
- data/test/rails/2.x/config/boot.rb +0 -109
- data/test/rails/2.x/config/database.yml +0 -3
- data/test/rails/2.x/config/environment.rb +0 -7
- data/test/rails/2.x/config/environments/test.rb +0 -6
- data/test/rails/2.x/config/routes.rb +0 -0
- data/test/sluggable_test.rb +0 -185
data/test/test_helper.rb
CHANGED
@@ -1,35 +1,33 @@
|
|
1
1
|
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
require File.dirname(__FILE__) + '/rails/2.x/config/environment.rb'
|
6
|
-
ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/debug.log")
|
7
|
-
|
2
|
+
$:.unshift(File.dirname(__FILE__))
|
3
|
+
$VERBOSE=false
|
4
|
+
require 'rubygems'
|
8
5
|
require 'test/unit'
|
9
|
-
require '
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
config = YAML::load(IO.read(File.dirname(__FILE__) + '/database.yml'))
|
15
|
-
ActiveRecord::Base.establish_connection
|
16
|
-
|
17
|
-
silence_stream(STDOUT) do
|
18
|
-
load(File.dirname(__FILE__) + "/schema.rb")
|
6
|
+
require 'shoulda'
|
7
|
+
# You can use "rake test AR_VERSION=2.0.5" to test against 2.0.5, for example.
|
8
|
+
# The default is to use the latest installed ActiveRecord.
|
9
|
+
if ENV["AR_VERSION"]
|
10
|
+
gem 'activerecord', "#{ENV["AR_VERSION"]}"
|
19
11
|
end
|
12
|
+
require 'active_record'
|
20
13
|
|
21
|
-
|
22
|
-
|
14
|
+
require 'friendly_id'
|
15
|
+
require 'models/post'
|
16
|
+
require 'models/person'
|
17
|
+
require 'models/user'
|
18
|
+
require 'models/country'
|
23
19
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
33
|
-
self.use_transactional_fixtures = true
|
34
|
-
self.use_instantiated_fixtures = false
|
20
|
+
# Borrowed from ActiveSupport
|
21
|
+
def silence_stream(stream)
|
22
|
+
old_stream = stream.dup
|
23
|
+
stream.reopen(RUBY_PLATFORM =~ /mswin/ ? 'NUL:' : '/dev/null')
|
24
|
+
stream.sync = true
|
25
|
+
yield
|
26
|
+
ensure
|
27
|
+
stream.reopen(old_stream)
|
35
28
|
end
|
29
|
+
|
30
|
+
ActiveRecord::Base.establish_connection :adapter => "sqlite3", :database => ":memory:"
|
31
|
+
silence_stream(STDOUT) do
|
32
|
+
load(File.dirname(__FILE__) + "/schema.rb")
|
33
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: friendly_id
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Norman Clarke
|
@@ -32,7 +32,7 @@ cert_chain:
|
|
32
32
|
h7fbBRfStxI=
|
33
33
|
-----END CERTIFICATE-----
|
34
34
|
|
35
|
-
date: 2009-
|
35
|
+
date: 2009-02-09 00:00:00 -02:00
|
36
36
|
default_executable:
|
37
37
|
dependencies:
|
38
38
|
- !ruby/object:Gem::Dependency
|
@@ -45,6 +45,16 @@ dependencies:
|
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: "0.1"
|
47
47
|
version:
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: activerecord
|
50
|
+
type: :runtime
|
51
|
+
version_requirement:
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: 2.0.0
|
57
|
+
version:
|
48
58
|
- !ruby/object:Gem::Dependency
|
49
59
|
name: newgem
|
50
60
|
type: :development
|
@@ -55,6 +65,26 @@ dependencies:
|
|
55
65
|
- !ruby/object:Gem::Version
|
56
66
|
version: 1.2.3
|
57
67
|
version:
|
68
|
+
- !ruby/object:Gem::Dependency
|
69
|
+
name: Shoulda
|
70
|
+
type: :development
|
71
|
+
version_requirement:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 1.2.0
|
77
|
+
version:
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: sqlite3-ruby
|
80
|
+
type: :development
|
81
|
+
version_requirement:
|
82
|
+
version_requirements: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: "0"
|
87
|
+
version:
|
58
88
|
- !ruby/object:Gem::Dependency
|
59
89
|
name: hoe
|
60
90
|
type: :development
|
@@ -65,7 +95,7 @@ dependencies:
|
|
65
95
|
- !ruby/object:Gem::Version
|
66
96
|
version: 1.8.0
|
67
97
|
version:
|
68
|
-
description: A comprehensive slugging and pretty-URL plugin for
|
98
|
+
description: A comprehensive slugging and pretty-URL plugin for ActiveRecord.
|
69
99
|
email:
|
70
100
|
- norman@randomba.org
|
71
101
|
- adrian@randomba.org
|
@@ -95,37 +125,24 @@ files:
|
|
95
125
|
- lib/friendly_id/helpers.rb
|
96
126
|
- lib/friendly_id/non_sluggable_class_methods.rb
|
97
127
|
- lib/friendly_id/non_sluggable_instance_methods.rb
|
98
|
-
- lib/friendly_id/shoulda_macros.rb
|
99
128
|
- lib/friendly_id/slug.rb
|
100
129
|
- lib/friendly_id/sluggable_class_methods.rb
|
101
130
|
- lib/friendly_id/sluggable_instance_methods.rb
|
102
131
|
- lib/friendly_id/version.rb
|
103
132
|
- lib/tasks/friendly_id.rake
|
104
133
|
- lib/tasks/friendly_id.rb
|
105
|
-
- test/
|
106
|
-
- test/
|
107
|
-
- test/
|
108
|
-
- test/
|
109
|
-
- test/fixtures/person.rb
|
110
|
-
- test/fixtures/post.rb
|
111
|
-
- test/fixtures/posts.yml
|
112
|
-
- test/fixtures/slugs.yml
|
113
|
-
- test/fixtures/user.rb
|
114
|
-
- test/fixtures/users.yml
|
134
|
+
- test/models/country.rb
|
135
|
+
- test/models/person.rb
|
136
|
+
- test/models/post.rb
|
137
|
+
- test/models/user.rb
|
115
138
|
- test/non_slugged_test.rb
|
116
|
-
- test/rails/2.x/app/controllers/application.rb
|
117
|
-
- test/rails/2.x/config/boot.rb
|
118
|
-
- test/rails/2.x/config/database.yml
|
119
|
-
- test/rails/2.x/config/environment.rb
|
120
|
-
- test/rails/2.x/config/environments/test.rb
|
121
|
-
- test/rails/2.x/config/routes.rb
|
122
139
|
- test/schema.rb
|
123
140
|
- test/scoped_model_test.rb
|
124
141
|
- test/slug_test.rb
|
125
|
-
- test/
|
142
|
+
- test/slugged_model_test.rb
|
126
143
|
- test/test_helper.rb
|
127
144
|
has_rdoc: true
|
128
|
-
homepage: http://
|
145
|
+
homepage: http://friendly-id.rubyforge.org/
|
129
146
|
post_install_message:
|
130
147
|
rdoc_options:
|
131
148
|
- --main
|
@@ -150,9 +167,9 @@ rubyforge_project: friendly-id
|
|
150
167
|
rubygems_version: 1.3.1
|
151
168
|
signing_key:
|
152
169
|
specification_version: 2
|
153
|
-
summary: A comprehensive slugging and pretty-URL plugin for
|
170
|
+
summary: A comprehensive slugging and pretty-URL plugin for ActiveRecord.
|
154
171
|
test_files:
|
155
172
|
- test/non_slugged_test.rb
|
156
173
|
- test/scoped_model_test.rb
|
157
174
|
- test/slug_test.rb
|
158
|
-
- test/
|
175
|
+
- test/slugged_model_test.rb
|
metadata.gz.sig
CHANGED
@@ -1,2 +1 @@
|
|
1
|
-
�
|
2
|
-
Wj�H��zq�ɸiP�>g������,A��t���z�7�v����SΆ\{�����S�Ɉ�_x�ﳷ��}*����v�0��]��)��?8��i��w�rJ!n- �_�$k6D���#������1d�����ʝ&��)�ۖ>ٱ���O#@\W��)��NAB�vWW�
|
1
|
+
q��d7��r�Hf�C��G�\Nw{v��-��.7�l�t���6�D�[�<4����]�kr��3-Kx�iY�'��V6�&��8��ɐn�x�(5��x��>_���.q9*&SjO����`=&�ibD�ϱ����1Ce"9���=��P!��"��LJ9Pa10��o�/��1w_�E�:^Dg(�����<&iM ve1���m�M""b%\��,���6���jI��U"y�j�F@3.�~D_�,
|
@@ -1,36 +0,0 @@
|
|
1
|
-
module FriendlyId
|
2
|
-
|
3
|
-
# A Shoulda[http://www.thoughtbot.com/projects/shoulda/] macros for testing
|
4
|
-
# models using FriendlyId.
|
5
|
-
module ShouldaMacros
|
6
|
-
|
7
|
-
# Ensure that a model is using FriendlyId.
|
8
|
-
def self.should_have_friendly_id(column, options = {})
|
9
|
-
|
10
|
-
options.assert_valid_keys(:use_slug)
|
11
|
-
klass = self.model_class
|
12
|
-
|
13
|
-
should "have friendly id for #{method}" do
|
14
|
-
assert_respond_to klass, :friendly_id_options,
|
15
|
-
"#{klass} does not respond to friendly_id_options"
|
16
|
-
assert_equal column, klass.friendly_id_options[:method]
|
17
|
-
end
|
18
|
-
|
19
|
-
if options[:use_slug]
|
20
|
-
should "include/extend friendly_id's sluggable modules" do
|
21
|
-
assert klass.extended_by.include?(FriendlyId::SluggableClassMethods),
|
22
|
-
"#{klass} does not extend FriendlyId::SluggableClassMethods"
|
23
|
-
assert klass.include?(FriendlyId::SluggableInstanceMethods),
|
24
|
-
"#{klass} not include FriendlyId::SluggableInstanceMethods"
|
25
|
-
end
|
26
|
-
else
|
27
|
-
should "include/extend friendly_id's non-sluggable modules" do
|
28
|
-
assert klass.extended_by.include?(FriendlyId::NonSluggableClassMethods),
|
29
|
-
"#{klass} does not extend FriendlyId::NonSluggableClassMethods"
|
30
|
-
assert klass.include?(FriendlyId::NonSluggableInstanceMethods),
|
31
|
-
"#{klass} not include FriendlyId::NonSluggableInstanceMethods"
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
data/test/database.yml
DELETED
data/test/fixtures/countries.yml
DELETED
data/test/fixtures/people.yml
DELETED
data/test/fixtures/post.rb
DELETED
data/test/fixtures/posts.yml
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
without_slug:
|
2
|
-
name: Without a slug
|
3
|
-
content: Content without a slug
|
4
|
-
|
5
|
-
with_one_slug:
|
6
|
-
name: With one slug
|
7
|
-
content: Content with one slug
|
8
|
-
|
9
|
-
with_two_slugs:
|
10
|
-
name: With two slugs
|
11
|
-
content: Content with two slugs
|
12
|
-
|
13
|
-
common_title:
|
14
|
-
name: Common Title
|
15
|
-
content: A post with a very common title
|
16
|
-
|
17
|
-
common_title2:
|
18
|
-
name: Common Title
|
19
|
-
content: A second post with a very common title
|
20
|
-
|
21
|
-
john_smith:
|
22
|
-
name: John Smith
|
23
|
-
content: Should allow for identical slug names between sluggable types
|
data/test/fixtures/slugs.yml
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
post_with_same_friendly_id_as_person:
|
2
|
-
name: john-smith
|
3
|
-
sluggable: john_smith (Post)
|
4
|
-
|
5
|
-
person_with_same_friendly_id_as_post:
|
6
|
-
name: john-smith
|
7
|
-
sluggable: john_smith (Person)
|
8
|
-
|
9
|
-
one:
|
10
|
-
name: with-one-slug
|
11
|
-
sluggable: with_one_slug
|
12
|
-
sluggable_type: Post
|
13
|
-
sequence: 1
|
14
|
-
|
15
|
-
two_old:
|
16
|
-
name: with-two-slugs
|
17
|
-
sluggable: with_two_slugs (Post)
|
18
|
-
sequence: 1
|
19
|
-
|
20
|
-
two_new:
|
21
|
-
name: with-two-slugs-new
|
22
|
-
sluggable: with_two_slugs (Post)
|
23
|
-
sequence: 1
|
24
|
-
|
25
|
-
common_title:
|
26
|
-
name: common-title
|
27
|
-
sluggable: common_title (Post)
|
28
|
-
sequence: 1
|
29
|
-
|
30
|
-
common_title2:
|
31
|
-
name: common-title
|
32
|
-
sluggable: common_title2 (Post)
|
33
|
-
sequence: 2
|
34
|
-
|
35
|
-
john_smith:
|
36
|
-
name: john-smith
|
37
|
-
sluggable: john_smith (Person)
|
38
|
-
sequence: 1
|
39
|
-
scope: argentina
|
40
|
-
|
41
|
-
john_smith2:
|
42
|
-
name: john-smith
|
43
|
-
sluggable: john_smith2 (Person)
|
44
|
-
sequence: 1
|
45
|
-
scope: usa
|
46
|
-
|
47
|
-
argentina:
|
48
|
-
name: argentina
|
49
|
-
sluggable: argentina (Country)
|
50
|
-
|
51
|
-
usa:
|
52
|
-
name: usa
|
53
|
-
sluggable: usa (Country)
|
data/test/fixtures/users.yml
DELETED
File without changes
|
@@ -1,109 +0,0 @@
|
|
1
|
-
# Don't change this file!
|
2
|
-
# Configure your app in config/environment.rb and config/environments/*.rb
|
3
|
-
|
4
|
-
RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)
|
5
|
-
|
6
|
-
module Rails
|
7
|
-
class << self
|
8
|
-
def boot!
|
9
|
-
unless booted?
|
10
|
-
preinitialize
|
11
|
-
pick_boot.run
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def booted?
|
16
|
-
defined? Rails::Initializer
|
17
|
-
end
|
18
|
-
|
19
|
-
def pick_boot
|
20
|
-
(vendor_rails? ? VendorBoot : GemBoot).new
|
21
|
-
end
|
22
|
-
|
23
|
-
def vendor_rails?
|
24
|
-
File.exist?("#{RAILS_ROOT}/vendor/rails")
|
25
|
-
end
|
26
|
-
|
27
|
-
def preinitialize
|
28
|
-
load(preinitializer_path) if File.exist?(preinitializer_path)
|
29
|
-
end
|
30
|
-
|
31
|
-
def preinitializer_path
|
32
|
-
"#{RAILS_ROOT}/config/preinitializer.rb"
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
class Boot
|
37
|
-
def run
|
38
|
-
load_initializer
|
39
|
-
Rails::Initializer.run(:set_load_path)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
class VendorBoot < Boot
|
44
|
-
def load_initializer
|
45
|
-
require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"
|
46
|
-
Rails::Initializer.run(:install_gem_spec_stubs)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
class GemBoot < Boot
|
51
|
-
def load_initializer
|
52
|
-
self.class.load_rubygems
|
53
|
-
load_rails_gem
|
54
|
-
require 'initializer'
|
55
|
-
end
|
56
|
-
|
57
|
-
def load_rails_gem
|
58
|
-
if version = self.class.gem_version
|
59
|
-
gem 'rails', version
|
60
|
-
else
|
61
|
-
gem 'rails'
|
62
|
-
end
|
63
|
-
rescue Gem::LoadError => load_error
|
64
|
-
$stderr.puts %(Missing the Rails #{version} gem. Please `gem install -v=#{version} rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.)
|
65
|
-
exit 1
|
66
|
-
end
|
67
|
-
|
68
|
-
class << self
|
69
|
-
def rubygems_version
|
70
|
-
Gem::RubyGemsVersion rescue nil
|
71
|
-
end
|
72
|
-
|
73
|
-
def gem_version
|
74
|
-
if defined? RAILS_GEM_VERSION
|
75
|
-
RAILS_GEM_VERSION
|
76
|
-
elsif ENV.include?('RAILS_GEM_VERSION')
|
77
|
-
ENV['RAILS_GEM_VERSION']
|
78
|
-
else
|
79
|
-
parse_gem_version(read_environment_rb)
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
def load_rubygems
|
84
|
-
require 'rubygems'
|
85
|
-
min_version = '1.3.1'
|
86
|
-
unless rubygems_version >= min_version
|
87
|
-
$stderr.puts %Q(Rails requires RubyGems >= #{min_version} (you have #{rubygems_version}). Please `gem update --system` and try again.)
|
88
|
-
exit 1
|
89
|
-
end
|
90
|
-
|
91
|
-
rescue LoadError
|
92
|
-
$stderr.puts %Q(Rails requires RubyGems >= #{min_version}. Please install RubyGems and try again: http://rubygems.rubyforge.org)
|
93
|
-
exit 1
|
94
|
-
end
|
95
|
-
|
96
|
-
def parse_gem_version(text)
|
97
|
-
$1 if text =~ /^[^#]*RAILS_GEM_VERSION\s*=\s*["']([!~<>=]*\s*[\d.]+)["']/
|
98
|
-
end
|
99
|
-
|
100
|
-
private
|
101
|
-
def read_environment_rb
|
102
|
-
File.read("#{RAILS_ROOT}/config/environment.rb")
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
# All that for this:
|
109
|
-
Rails.boot!
|