friendly_id 3.1.5 → 3.1.6

Sign up to get free protection for your applications and to get access to all the features.
data/Changelog.md CHANGED
@@ -6,6 +6,17 @@ suggestions, ideas and improvements to FriendlyId.
6
6
  * Table of Contents
7
7
  {:toc}
8
8
 
9
+ ## 3.1.6 (2010-09-02)
10
+
11
+ * Fix missing sluggable type in AR3 slug query. This was a fairly major oversight, and if you
12
+ are using 3.1.4 or 3.1.5, you should update right away.
13
+ * Fix scoped queries when the model has a cached slug column. Bascially, the cached slug
14
+ is now completely ignored when a scope is configured.
15
+
16
+ ## 3.1.5 (2010-09-01)
17
+
18
+ * Fix invalid empty symbol with 1.8.x.
19
+
9
20
  ## 3.1.4 (2010-09-01)
10
21
 
11
22
  * Significantly improve performance of queries using slugs with no cache on AR3.
@@ -26,7 +26,7 @@ module FriendlyId
26
26
  end
27
27
 
28
28
  def find_one
29
- return find_one_with_cached_slug if cache_column?
29
+ return find_one_with_cached_slug if !fc.scope? && cache_column?
30
30
  return find_one_with_slug if use_slugs?
31
31
  @result = scoped(:conditions => ["#{table_name}.#{fc.column} = ?", id]).first(options)
32
32
  assign_status
@@ -20,7 +20,7 @@ module FriendlyId
20
20
  end
21
21
 
22
22
  def find_one
23
- if fc.cache_column?
23
+ if fc.cache_column? && !fc.scope?
24
24
  find_one_with_cached_slug
25
25
  elsif fc.use_slugs?
26
26
  find_one_with_slug
@@ -80,7 +80,7 @@ module FriendlyId
80
80
  end
81
81
 
82
82
  def friendly_records(friendly_ids, unfriendly_ids)
83
- use_slugs_table = fc.use_slugs? && (friendly_id_scope || !fc.cache_column?)
83
+ use_slugs_table = fc.use_slugs? && (fc.scope? || !fc.cache_column?)
84
84
  return find_some_using_slug(friendly_ids, unfriendly_ids) if use_slugs_table
85
85
  column = fc.cache_column || fc.column
86
86
  friendly = arel_table[column].in(friendly_ids)
@@ -99,18 +99,19 @@ module FriendlyId
99
99
 
100
100
  def sluggable_ids_for(ids)
101
101
  return [] if ids.empty?
102
- fragment = "(slugs.name = %s AND slugs.sequence = %d)"
102
+ fragment = "(slugs.sluggable_type = %s AND slugs.name = %s AND slugs.sequence = %d)"
103
103
  conditions = ids.inject(nil) do |clause, id|
104
104
  name, seq = id.parse_friendly_id
105
- string = fragment % [connection.quote(name), seq]
105
+ string = fragment % [connection.quote(klass.base_class), connection.quote(name), seq]
106
106
  clause ? clause + " OR #{string}" : string
107
107
  end
108
108
  if fc.scope?
109
109
  scope = connection.quote(friendly_id_scope)
110
110
  conditions = "slugs.scope = %s AND (%s)" % [scope, conditions]
111
111
  end
112
- connection.select_values "SELECT sluggable_id FROM slugs WHERE (%s)" % conditions
113
- end
112
+ sql = "SELECT sluggable_id FROM slugs WHERE (%s)" % conditions
113
+ connection.select_values sql
114
+ end
114
115
 
115
116
  def validate_expected_size!(ids, result)
116
117
  expected_size =
@@ -2,7 +2,7 @@ module FriendlyId
2
2
  module Version
3
3
  MAJOR = 3
4
4
  MINOR = 1
5
- TINY = 5
5
+ TINY = 6
6
6
  BUILD = nil
7
7
  STRING = [MAJOR, MINOR, TINY, BUILD].compact.join('.')
8
8
  end
@@ -76,6 +76,12 @@ class Resident < ActiveRecord::Base
76
76
  has_friendly_id :name, :use_slug => true, :scope => :country
77
77
  end
78
78
 
79
+ # Like resident, but has a cached slug
80
+ class Tourist < ActiveRecord::Base
81
+ belongs_to :country
82
+ has_friendly_id :name, :use_slug => true, :scope => :country
83
+ end
84
+
79
85
  # A slugged model used as a scope
80
86
  class Country < ActiveRecord::Base
81
87
  has_many :people
@@ -22,6 +22,13 @@ module FriendlyId
22
22
  User.delete_all
23
23
  House.delete_all
24
24
  Slug.delete_all
25
+ Tourist.delete_all
26
+ end
27
+
28
+ test "should not use cached slug column with scopes" do
29
+ @tourist = Tourist.create!(:name => "John Smith", :country => @usa)
30
+ @tourist2 = Tourist.create!(:name => "John Smith", :country => @canada)
31
+ assert_equal @canada, Tourist.find(@tourist2.friendly_id, :scope => @canada).country
25
32
  end
26
33
 
27
34
  test "a slugged model should auto-detect that it is being used as a parent scope" do
@@ -73,6 +73,12 @@ class CreateSupportModels < ActiveRecord::Migration
73
73
  t.integer :country_id
74
74
  end
75
75
 
76
+ create_table :tourists do |t|
77
+ t.string :name
78
+ t.integer :country_id
79
+ t.string :cached_slug
80
+ end
81
+
76
82
  create_table :users do |t|
77
83
  t.string :name
78
84
  end
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: friendly_id
3
3
  version: !ruby/object:Gem::Version
4
- hash: 9
5
4
  prerelease: false
6
5
  segments:
7
6
  - 3
8
7
  - 1
9
- - 5
10
- version: 3.1.5
8
+ - 6
9
+ version: 3.1.6
11
10
  platform: ruby
12
11
  authors:
13
12
  - Norman Clarke
@@ -17,25 +16,24 @@ autorequire:
17
16
  bindir: bin
18
17
  cert_chain: []
19
18
 
20
- date: 2010-09-01 00:00:00 -03:00
19
+ date: 2010-09-02 00:00:00 -03:00
21
20
  default_executable:
22
21
  dependencies:
23
22
  - !ruby/object:Gem::Dependency
24
- prerelease: false
25
- type: :runtime
26
23
  name: babosa
27
- version_requirements: &id001 !ruby/object:Gem::Requirement
24
+ requirement: &id001 !ruby/object:Gem::Requirement
28
25
  none: false
29
26
  requirements:
30
27
  - - ~>
31
28
  - !ruby/object:Gem::Version
32
- hash: 23
33
29
  segments:
34
30
  - 0
35
31
  - 2
36
32
  - 0
37
33
  version: 0.2.0
38
- requirement: *id001
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: *id001
39
37
  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"
40
38
  email:
41
39
  - norman@njclarke.com
@@ -118,7 +116,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
118
116
  requirements:
119
117
  - - ">="
120
118
  - !ruby/object:Gem::Version
121
- hash: 3
119
+ hash: -182801105258368267
122
120
  segments:
123
121
  - 0
124
122
  version: "0"
@@ -127,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
125
  requirements:
128
126
  - - ">="
129
127
  - !ruby/object:Gem::Version
130
- hash: 3
128
+ hash: -182801105258368267
131
129
  segments:
132
130
  - 0
133
131
  version: "0"