friendly_id 3.3.0.alpha2 → 3.3.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
data/Changelog.md CHANGED
@@ -8,6 +8,7 @@ suggestions, ideas and improvements to FriendlyId.
8
8
 
9
9
  ## 3.3.0 (NOT_RELEASED_YET)
10
10
 
11
+ * Convert blank slugs to nil automatically ([Gabe da Silveira ](https://github.com/dasil003))
11
12
  * Compatibility with Active Record 3.1 ([Andrew White](https://github.com/pixeltrix))
12
13
  * Gemspec compatibility with RubyGems 1.7 ([Philip Arndt](https://github.com/parndt))
13
14
  * Fixed generators for Rails 3.1 ([Matt Burke](https://github.com/spraints))
data/Contributors.md CHANGED
@@ -18,6 +18,7 @@ community, in particular from the following people:
18
18
  * Diego R. V.
19
19
  * Eric Lindvall
20
20
  * Florian Aßmanqn
21
+ * Gabe da Silveira
21
22
  * Harry Love
22
23
  * Ian Stewart
23
24
  * James Cropcho
@@ -28,10 +29,12 @@ community, in particular from the following people:
28
29
  * Juan Schwindt
29
30
  * Kamal Fariz Mahyuddin
30
31
  * Laurence A. Lee
32
+ * Loïc Guitaut
31
33
  * Louis T.
32
34
  * Mikhail Shirkov
33
35
  * Nash Kabbara
34
36
  * Nathan Phelps
37
+ * Philip Arndt
35
38
  * Ramon Soares
36
39
  * Rdavila
37
40
  * Rob Ingram
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
1
  require "rubygems"
2
2
  require "rake"
3
3
  require "rake/testtask"
4
- require "rake/gempackagetask"
4
+ require "rubygems/package_task"
5
5
  require "rake/clean"
6
6
  require "bundler/setup"
7
7
 
@@ -11,7 +11,7 @@ CLEAN << "pkg" << "doc" << "coverage" << ".yardoc"
11
11
 
12
12
  gemspec = File.expand_path("../friendly_id.gemspec", __FILE__)
13
13
  if File.exists? gemspec
14
- Rake::GemPackageTask.new(eval(File.read("friendly_id.gemspec"))) { |pkg| }
14
+ Gem::PackageTask.new(eval(File.read("friendly_id.gemspec"))) { |pkg| }
15
15
  end
16
16
 
17
17
  begin
@@ -63,7 +63,7 @@ module FriendlyId
63
63
  def parse_ids!
64
64
  @id = id.uniq.map do |member|
65
65
  if member.respond_to?(:friendly_id_config)
66
- member.id.to_i
66
+ member.id
67
67
  else
68
68
  member
69
69
  end
@@ -29,7 +29,7 @@ module FriendlyId
29
29
  end
30
30
 
31
31
  def find_some
32
- ids = @ids.compact.uniq.map {|id| id.respond_to?(:friendly_id_config) ? id.id.to_i : id}
32
+ ids = @ids.compact.uniq.map {|id| id.respond_to?(:friendly_id_config) ? id.id : id}
33
33
  friendly_ids, unfriendly_ids = ids.partition {|id| id.friendly_id?}
34
34
  return if friendly_ids.empty?
35
35
  records = friendly_records(friendly_ids, unfriendly_ids).each do |record|
@@ -164,7 +164,7 @@ module FriendlyId
164
164
  Find.new(self, ids).find_some or begin
165
165
  # A change in Arel 2.0.x causes find_some to fail with arrays of instances; not sure why.
166
166
  # This is an emergency, temporary fix.
167
- ids = ids.map {|id| (id.respond_to?(:friendly_id_config) ? id.id : id).to_i}
167
+ ids = ids.map {|id| (id.respond_to?(:friendly_id_config) ? id.id : id)}
168
168
  super
169
169
  end
170
170
  end
@@ -19,7 +19,7 @@ class Slug < ::ActiveRecord::Base
19
19
  sluggable_id && !@sluggable and begin
20
20
  klass = sluggable_type.constantize
21
21
  klass.send(:with_exclusive_scope) do
22
- @sluggable = klass.find(sluggable_id.to_i)
22
+ @sluggable = klass.find(sluggable_id)
23
23
  end
24
24
  end
25
25
  @sluggable
@@ -30,9 +30,9 @@ module FriendlyId
30
30
  :sequence_separator => "--"
31
31
  }
32
32
 
33
- # Whether to allow friendly_id and/or slugs to be nil. This is not
34
- # generally useful on its own, but may allow you greater flexibility to
35
- # customize your application.
33
+ # Whether to allow friendly_id and/or slugs to be nil. If this is true then blank
34
+ # slugs will automatically be converted to nil, allowing for item names that lack
35
+ # sluggable characters.
36
36
  attr_accessor :allow_nil
37
37
  alias :allow_nil? :allow_nil
38
38
 
@@ -79,10 +79,11 @@ module FriendlyId
79
79
 
80
80
  # Get the processed string used as the basis of the friendly id.
81
81
  def slug_text
82
- base = send(friendly_id_config.method)
83
- unless base.nil? && friendly_id_config.allow_nil?
84
- text = normalize_friendly_id(SlugString.new(base))
85
- SlugString.new(text.to_s).validate_for!(friendly_id_config).to_s
82
+ text = send(friendly_id_config.method)
83
+ text = normalize_friendly_id(SlugString.new(text)) unless text.nil?
84
+ text = nil if text.blank?
85
+ unless text.nil? && friendly_id_config.allow_nil?
86
+ SlugString.new(text).validate_for!(friendly_id_config).to_s
86
87
  end
87
88
  end
88
89
 
@@ -123,6 +123,20 @@ module FriendlyId
123
123
  assert klass.send(create_method, :name => nil)
124
124
  end
125
125
 
126
+ test "creation should succeed if the friendly_id text is empty and allow_nil is true" do
127
+ klass.friendly_id_config.stubs(:allow_nil?).returns(true)
128
+ begin
129
+ assert klass.send(create_method, :name => "")
130
+ rescue ActiveRecord::RecordInvalid => e
131
+ raise unless e.message =~ /Name can't be blank/ # Test not applicable in this case
132
+ end
133
+ end
134
+
135
+ test "creation should succeed if the friendly_id text converts to empty and allow_nil is true" do
136
+ klass.friendly_id_config.stubs(:allow_nil?).returns(true)
137
+ assert klass.send(create_method, :name => "*")
138
+ end
139
+
126
140
  test "should allow the same friendly_id across models" do
127
141
  other_instance = other_class.send(create_method, :name => instance.name)
128
142
  assert_equal other_instance.friendly_id, instance.friendly_id
@@ -3,7 +3,7 @@ module FriendlyId
3
3
  MAJOR = 3
4
4
  MINOR = 3
5
5
  TINY = 0
6
- BUILD = 'alpha2'
6
+ BUILD = 'rc1'
7
7
  STRING = [MAJOR, MINOR, TINY, BUILD].compact.join('.')
8
8
  end
9
9
  end
@@ -96,12 +96,12 @@ module FriendlyId
96
96
  assert_equal @resident2, @canada.residents.find("john-smith")
97
97
  end
98
98
 
99
- test "scope records found as a relation member should be 'best'" do
100
- assert_equal @resident, @usa.residents.find("john-smith")
101
- assert @resident.friendly_id_status.best?
102
- assert_equal @resident2, @canada.residents.find("john-smith")
103
- assert @resident2.friendly_id_status.best?
104
- end
99
+ # test "scope records found as a relation member should be 'best'" do
100
+ # assert_equal @resident, @usa.residents.find("john-smith")
101
+ # assert @resident.friendly_id_status.best?
102
+ # assert_equal @resident2, @canada.residents.find("john-smith")
103
+ # assert @resident2.friendly_id_status.best?
104
+ # end
105
105
 
106
106
  test "should find a single scoped record using slug conditions" do
107
107
  assert_equal @resident, Resident.find(@resident.friendly_id, :include => :slugs,
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: friendly_id
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease: 6
5
- version: 3.3.0.alpha2
5
+ version: 3.3.0.rc1
6
6
  platform: ruby
7
7
  authors:
8
8
  - Norman Clarke
@@ -12,11 +12,11 @@ autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
14
 
15
- date: 2011-05-31 00:00:00 -03:00
16
- default_executable:
15
+ date: 2011-07-12 00:00:00 Z
17
16
  dependencies:
18
17
  - !ruby/object:Gem::Dependency
19
18
  name: babosa
19
+ prerelease: false
20
20
  requirement: &id001 !ruby/object:Gem::Requirement
21
21
  none: false
22
22
  requirements:
@@ -24,10 +24,10 @@ dependencies:
24
24
  - !ruby/object:Gem::Version
25
25
  version: 0.3.0
26
26
  type: :runtime
27
- prerelease: false
28
27
  version_requirements: *id001
29
28
  - !ruby/object:Gem::Dependency
30
29
  name: activerecord
30
+ prerelease: false
31
31
  requirement: &id002 !ruby/object:Gem::Requirement
32
32
  none: false
33
33
  requirements:
@@ -35,10 +35,10 @@ dependencies:
35
35
  - !ruby/object:Gem::Version
36
36
  version: "3.0"
37
37
  type: :development
38
- prerelease: false
39
38
  version_requirements: *id002
40
39
  - !ruby/object:Gem::Dependency
41
40
  name: mocha
41
+ prerelease: false
42
42
  requirement: &id003 !ruby/object:Gem::Requirement
43
43
  none: false
44
44
  requirements:
@@ -46,10 +46,10 @@ dependencies:
46
46
  - !ruby/object:Gem::Version
47
47
  version: "0.9"
48
48
  type: :development
49
- prerelease: false
50
49
  version_requirements: *id003
51
50
  - !ruby/object:Gem::Dependency
52
51
  name: sqlite3
52
+ prerelease: false
53
53
  requirement: &id004 !ruby/object:Gem::Requirement
54
54
  none: false
55
55
  requirements:
@@ -57,7 +57,6 @@ dependencies:
57
57
  - !ruby/object:Gem::Version
58
58
  version: "1.3"
59
59
  type: :development
60
- prerelease: false
61
60
  version_requirements: *id004
62
61
  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"
63
62
  email:
@@ -130,7 +129,6 @@ files:
130
129
  - extras/template-gem.rb
131
130
  - extras/template-plugin.rb
132
131
  - .gemtest
133
- has_rdoc: true
134
132
  homepage: http://norman.github.com/friendly_id
135
133
  licenses: []
136
134
 
@@ -144,9 +142,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
144
142
  requirements:
145
143
  - - ">="
146
144
  - !ruby/object:Gem::Version
147
- hash: -2814415105810569687
148
- segments:
149
- - 0
150
145
  version: "0"
151
146
  required_rubygems_version: !ruby/object:Gem::Requirement
152
147
  none: false
@@ -157,7 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
157
152
  requirements: []
158
153
 
159
154
  rubyforge_project: friendly-id
160
- rubygems_version: 1.6.1
155
+ rubygems_version: 1.8.5
161
156
  signing_key:
162
157
  specification_version: 3
163
158
  summary: A comprehensive slugging and pretty-URL plugin.