friendly_id 3.1.1.1 → 3.1.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 +9 -0
- data/Guide.md +3 -11
- data/README.md +9 -1
- data/Rakefile +1 -2
- data/lib/friendly_id/active_record_adapter/configuration.rb +5 -6
- data/lib/friendly_id/active_record_adapter/finders.rb +3 -4
- data/lib/friendly_id/active_record_adapter/relation.rb +1 -1
- data/lib/friendly_id/active_record_adapter/slugged_model.rb +1 -0
- data/lib/friendly_id/configuration.rb +20 -3
- data/lib/friendly_id/version.rb +2 -2
- data/test/active_record_adapter/core.rb +13 -0
- data/test/active_record_adapter/scoped_model_test.rb +10 -2
- data/test/active_record_adapter/slugged.rb +0 -1
- metadata +3 -4
data/Changelog.md
CHANGED
@@ -6,6 +6,15 @@ suggestions, ideas and improvements to FriendlyId.
|
|
6
6
|
* Table of Contents
|
7
7
|
{:toc}
|
8
8
|
|
9
|
+
## 3.1.2 (2010-08-11)
|
10
|
+
|
11
|
+
* Fixed records being returned read-only. (Thanks Luis Lavena)
|
12
|
+
* Don't assume relations are subclasses of ActiveRecord::Base. This fixes using
|
13
|
+
FriendlyId with [Static Model](http://github.com/quirkey/static_model). (Thanks
|
14
|
+
Luis Lavena)
|
15
|
+
* Avoid checking for dependent scopes when no models are using the scopes feature.
|
16
|
+
|
17
|
+
|
9
18
|
## 3.1.1 (2010-07-30)
|
10
19
|
|
11
20
|
* Fixed call to method on nil value for failing unfriendly finds (thanks [jlippiner](http://github.com/jlippiner))
|
data/Guide.md
CHANGED
@@ -159,8 +159,6 @@ accents and other diacritics:
|
|
159
159
|
|
160
160
|
There are special options for some languages:
|
161
161
|
|
162
|
-
### German Approximations
|
163
|
-
|
164
162
|
class Person < ActiveRecord::Base
|
165
163
|
has_friendly_id :name, :use_slug => true, :approximate_ascii => true,
|
166
164
|
:ascii_approximation_options => :german
|
@@ -169,15 +167,9 @@ There are special options for some languages:
|
|
169
167
|
@person.create :name => "Jürgen Müller"
|
170
168
|
@person.friendly_id # will be "juergen-mueller"
|
171
169
|
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
has_friendly_id :title, :use_slug => true, :approximate_ascii => true,
|
176
|
-
:ascii_approximation_options => :spanish
|
177
|
-
end
|
178
|
-
|
179
|
-
@post.create(:title => "¡Feliz año!")
|
180
|
-
@post.title # will be "feliz-anno"
|
170
|
+
FriendlyId supports whatever languages are supported by
|
171
|
+
[Babosa](https://github.com/norman/babosa); at the time of writing, this
|
172
|
+
includes German, Spanish and Serbian.
|
181
173
|
|
182
174
|
### Unicode Slugs
|
183
175
|
|
data/README.md
CHANGED
@@ -17,7 +17,7 @@ instead of:
|
|
17
17
|
FriendlyId offers many advanced features, including: slug history and
|
18
18
|
versioning, scoped slugs, reserved words, custom slug generators, and
|
19
19
|
excellent Unicode support. For complete information on using FriendlyId,
|
20
|
-
please see the
|
20
|
+
please see the [FriendlyId Guide](http://norman.github.com/friendly_id/file.Guide.html).
|
21
21
|
|
22
22
|
FriendlyId is compatible with Active Record 2.3.x and 3.0.
|
23
23
|
|
@@ -83,4 +83,12 @@ and add a test that reproduces the error you are experiencing.
|
|
83
83
|
|
84
84
|
FriendlyId was created by Norman Clarke, Adrian Mugnolo, and Emilio Tagua.
|
85
85
|
|
86
|
+
If you like FriendlyId, please recommend us on Working With Rails:
|
87
|
+
|
88
|
+
* [http://bit.ly/recommend-norman](http://bit.ly/recommend-norman)
|
89
|
+
* [http://bit.ly/recommend-emilio](http://bit.ly/recommend-emilio)
|
90
|
+
* [http://bit.ly/recommend-adrian](http://bit.ly/recommend-adrian)
|
91
|
+
|
92
|
+
Thanks!
|
93
|
+
|
86
94
|
Copyright (c) 2008-2010, released under the MIT license.
|
data/Rakefile
CHANGED
@@ -51,11 +51,10 @@ end
|
|
51
51
|
|
52
52
|
task :pushdocs do
|
53
53
|
branch = `git branch | grep "*"`.chomp.gsub("* ", "")
|
54
|
-
sh "git stash"
|
55
54
|
sh "git checkout gh-pages"
|
55
|
+
sh "rm -rf FriendlyId ActiveRecord css js *.html"
|
56
56
|
sh "cp -rp doc/* ."
|
57
57
|
sh 'git commit -a -m "Regenerated docs"'
|
58
58
|
sh "git push origin gh-pages"
|
59
59
|
sh "git checkout #{branch}"
|
60
|
-
sh "git stash apply"
|
61
60
|
end
|
@@ -34,7 +34,9 @@ module FriendlyId
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def child_scopes
|
37
|
-
@child_scopes ||= associated_friendly_classes.select
|
37
|
+
@child_scopes ||= associated_friendly_classes.select do |klass|
|
38
|
+
klass.friendly_id_config.scopes_over?(configured_class)
|
39
|
+
end
|
38
40
|
end
|
39
41
|
|
40
42
|
def custom_cache_column?
|
@@ -56,13 +58,10 @@ module FriendlyId
|
|
56
58
|
end
|
57
59
|
|
58
60
|
def associated_friendly_classes
|
59
|
-
configured_class.reflect_on_all_associations.select { |assoc|
|
60
|
-
assoc &&
|
61
|
-
!assoc.options[:polymorphic] &&
|
62
|
-
assoc.klass.uses_friendly_id?
|
61
|
+
configured_class.reflect_on_all_associations.compact.select { |assoc|
|
62
|
+
!assoc.options[:polymorphic] && assoc.klass.respond_to?(:friendly_id_config)
|
63
63
|
}.map(&:klass)
|
64
64
|
end
|
65
|
-
|
66
65
|
end
|
67
66
|
end
|
68
67
|
end
|
@@ -36,7 +36,7 @@ module FriendlyId
|
|
36
36
|
parse_ids!
|
37
37
|
scope = some_friendly_scope
|
38
38
|
if use_slugs? && @friendly_ids.present?
|
39
|
-
scope = scope.scoped(:
|
39
|
+
scope = scope.scoped(:include => :slugs)
|
40
40
|
if fc.scope?
|
41
41
|
scope = scope.scoped(:conditions => {:slugs => {:scope => scope_val}})
|
42
42
|
end
|
@@ -62,9 +62,8 @@ module FriendlyId
|
|
62
62
|
|
63
63
|
def find_one_using_slug
|
64
64
|
name, seq = id.to_s.parse_friendly_id
|
65
|
-
|
66
|
-
scope = scoped(:conditions => {slugs => {:
|
67
|
-
scope = scope.scoped(:conditions => {slugs => {:scope => scope_val}}) if fc.scope?
|
65
|
+
scope = scoped(:include => :slugs, :conditions => {:slugs => {:name => name, :sequence => seq}})
|
66
|
+
scope = scope.scoped(:conditions => {:slugs => {:scope => scope_val}}) if fc.scope?
|
68
67
|
@result = scope.first(options)
|
69
68
|
assign_status
|
70
69
|
end
|
@@ -84,6 +84,7 @@ module FriendlyId
|
|
84
84
|
# Update the slugs for any model that is using this model as its
|
85
85
|
# FriendlyId scope.
|
86
86
|
def update_dependent_scopes
|
87
|
+
return unless friendly_id_config.class.scopes_used?
|
87
88
|
if slugs(true).size > 1 && @new_friendly_id
|
88
89
|
friendly_id_config.child_scopes.each do |klass|
|
89
90
|
Slug.update_all "scope = '#{@new_friendly_id}'", ["sluggable_type = ? AND scope = ?",
|
@@ -39,8 +39,7 @@ module FriendlyId
|
|
39
39
|
# Strip diacritics from Western characters.
|
40
40
|
attr_accessor :approximate_ascii
|
41
41
|
|
42
|
-
# Locale-type options for ASCII approximations.
|
43
|
-
# +:german+ or +:spanish+.
|
42
|
+
# Locale-type options for ASCII approximations.
|
44
43
|
attr_accessor :ascii_approximation_options
|
45
44
|
|
46
45
|
# The class that's using the configuration.
|
@@ -65,7 +64,7 @@ module FriendlyId
|
|
65
64
|
attr_accessor :reserved_words
|
66
65
|
|
67
66
|
# The method or relation to use as the friendly_id's scope.
|
68
|
-
|
67
|
+
attr_reader :scope
|
69
68
|
|
70
69
|
# The string that separates slug names from slug sequences. Defaults to "--".
|
71
70
|
attr_accessor :sequence_separator
|
@@ -103,6 +102,24 @@ module FriendlyId
|
|
103
102
|
[method, reserved_message % word] if reserved? word
|
104
103
|
end
|
105
104
|
|
105
|
+
def scope=(scope)
|
106
|
+
self.class.scopes_used = true
|
107
|
+
@scope = scope
|
108
|
+
end
|
109
|
+
|
110
|
+
# This will be set if FriendlyId's scope feature is used in any model. It is here
|
111
|
+
# to provide a way to avoid invoking costly scope lookup methods when the scoped
|
112
|
+
# slug feature is not being used by any models.
|
113
|
+
def self.scopes_used=(val)
|
114
|
+
@scopes_used = !!val
|
115
|
+
end
|
116
|
+
|
117
|
+
# Are scoped slugs being used by any model?
|
118
|
+
# @see Configuration.scoped_used=
|
119
|
+
def self.scopes_used?
|
120
|
+
@scopes_used
|
121
|
+
end
|
122
|
+
|
106
123
|
%w[approximate_ascii scope strip_non_ascii use_slug].each do |method|
|
107
124
|
class_eval(<<-EOM)
|
108
125
|
def #{method}?
|
data/lib/friendly_id/version.rb
CHANGED
@@ -113,6 +113,19 @@ module FriendlyId
|
|
113
113
|
unfriendly_class.find(-1)
|
114
114
|
end
|
115
115
|
end
|
116
|
+
|
117
|
+
test "instances found by a single id should not be read-only" do
|
118
|
+
i = klass.find(instance.friendly_id)
|
119
|
+
assert !i.readonly?, "expected instance not to be readonly"
|
120
|
+
end
|
121
|
+
|
122
|
+
test "instances found by an array of ids should not be read-only" do
|
123
|
+
second = klass.create!(:name => "second_instance")
|
124
|
+
third = klass.create!(:name => "third_instance")
|
125
|
+
klass.find([instance.friendly_id, second.friendly_id]).each do |record|
|
126
|
+
assert !record.readonly?, "expected instance not to be readonly"
|
127
|
+
end
|
128
|
+
end
|
116
129
|
end
|
117
130
|
end
|
118
131
|
end
|
@@ -107,12 +107,20 @@ module FriendlyId
|
|
107
107
|
assert_match(/scope: badscope/, e.message)
|
108
108
|
end
|
109
109
|
end
|
110
|
-
|
110
|
+
|
111
111
|
test "should update the sluggable field when a polymorphic relationship exists" do
|
112
112
|
@site.update_attributes(:name => "Uptown Venue")
|
113
113
|
assert_equal "Uptown Venue", @site.name
|
114
114
|
end
|
115
115
|
|
116
|
+
test "should not assume that AR's reflect_on_all_associations with return AR classes" do
|
117
|
+
reflections = Resident.reflect_on_all_associations
|
118
|
+
reflections << Struct.new("Dummy", :options, :klass).new(:options => [], :klass => Struct)
|
119
|
+
Resident.expects(:reflect_on_all_associations).returns(reflections)
|
120
|
+
assert_nothing_raised do
|
121
|
+
Resident.friendly_id_config.send(:associated_friendly_classes)
|
122
|
+
end
|
123
|
+
end
|
116
124
|
end
|
117
125
|
end
|
118
|
-
end
|
126
|
+
end
|
metadata
CHANGED
@@ -5,9 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 3
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
|
10
|
-
version: 3.1.1.1
|
8
|
+
- 2
|
9
|
+
version: 3.1.2
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Norman Clarke
|
@@ -17,7 +16,7 @@ autorequire:
|
|
17
16
|
bindir: bin
|
18
17
|
cert_chain: []
|
19
18
|
|
20
|
-
date: 2010-
|
19
|
+
date: 2010-08-11 00:00:00 -03:00
|
21
20
|
default_executable:
|
22
21
|
dependencies:
|
23
22
|
- !ruby/object:Gem::Dependency
|