friendly_id 3.0.6 → 3.1.0.pre

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.
@@ -1,9 +1,9 @@
1
1
  module FriendlyId
2
2
  module Version
3
3
  MAJOR = 3
4
- MINOR = 0
5
- TINY = 6
6
- BUILD = nil
4
+ MINOR = 1
5
+ TINY = 0
6
+ BUILD = "pre"
7
7
  STRING = [MAJOR, MINOR, TINY, BUILD].compact.join('.')
8
8
  end
9
9
  end
@@ -1,12 +1,15 @@
1
1
  require File.expand_path('../../test_helper', __FILE__)
2
-
3
2
  require "logger"
4
3
  require "active_record"
5
- require "active_support"
4
+ begin
5
+ require "active_support/log_subscriber"
6
+ rescue MissingSourceFile
7
+ end
6
8
 
7
- # ActiveRecord::Base.logger = Logger.new($stdout)
9
+ # If you want to see the ActiveRecord log, invoke the tests using `rake test LOG=true`
10
+ ActiveRecord::Base.logger = Logger.new($stdout) if ENV["LOG"]
8
11
 
9
- require File.expand_path("../../../lib/friendly_id/active_record", __FILE__)
12
+ require "friendly_id/active_record"
10
13
  require File.expand_path("../../../generators/friendly_id/templates/create_slugs", __FILE__)
11
14
  require File.expand_path("../support/models", __FILE__)
12
15
  require File.expand_path('../core', __FILE__)
@@ -58,6 +61,10 @@ class Person < ActiveRecord::Base
58
61
 
59
62
  end
60
63
 
64
+ # A model that doesn't use FriendlyId
65
+ class Unfriendly < ActiveRecord::Base
66
+ end
67
+
61
68
  # A slugged model that uses a scope
62
69
  class Resident < ActiveRecord::Base
63
70
  belongs_to :country
@@ -71,7 +78,7 @@ class Country < ActiveRecord::Base
71
78
  has_friendly_id :name, :use_slug => true
72
79
  end
73
80
 
74
- # A model that doesn"t use slugs
81
+ # A model that doesn't use slugs
75
82
  class User < ActiveRecord::Base
76
83
  has_friendly_id :name
77
84
  has_many :houses
@@ -92,7 +99,8 @@ end
92
99
  # A model that uses default slug settings and has a named scope
93
100
  class Post < ActiveRecord::Base
94
101
  has_friendly_id :name, :use_slug => true
95
- send FriendlyId::ActiveRecordAdapter::Compat.scope_method, :published, :conditions => { :published => true }
102
+ def self.named_scope(*args) scope(*args) end if FriendlyId.on_ar3?
103
+ named_scope :published, :conditions => { :published => true }
96
104
  end
97
105
 
98
106
  # Model that uses a custom table name
@@ -54,6 +54,16 @@ module FriendlyId
54
54
  assert_match(/2\z/, instance_2.send(cache_column))
55
55
  end
56
56
 
57
+ test "#friendly_id should check the cached value by default" do
58
+ instance.expects(:slug).never
59
+ instance.friendly_id
60
+ end
61
+
62
+ test "#friendly_id should skip the cache if invoked with true" do
63
+ instance.expects(:slug)
64
+ instance.friendly_id(true)
65
+ end
66
+
57
67
  end
58
68
  end
59
69
  end
@@ -30,6 +30,10 @@ module FriendlyId
30
30
  :save!
31
31
  end
32
32
 
33
+ def unfriendly_class
34
+ Unfriendly
35
+ end
36
+
33
37
  def validation_exceptions
34
38
  [ActiveRecord::RecordInvalid, FriendlyId::ReservedError, FriendlyId::BlankError]
35
39
  end
@@ -72,6 +76,12 @@ module FriendlyId
72
76
  assert_equal 2, klass.find([instance.friendly_id, second]).size
73
77
  end
74
78
 
79
+ test "should not raise error when finding with empty array" do
80
+ assert_nothing_raised do
81
+ klass.find []
82
+ end
83
+ end
84
+
75
85
  test "models should raise an error when not all records are found" do
76
86
  assert_raises(ActiveRecord::RecordNotFound) do
77
87
  klass.find([instance.friendly_id, 'bad-friendly-id'])
@@ -92,6 +102,11 @@ module FriendlyId
92
102
  end
93
103
  end
94
104
 
105
+ test "should not change failure behavior for models not using friendly_id" do
106
+ assert_raise ActiveRecord::RecordNotFound do
107
+ unfriendly_class.find(-1)
108
+ end
109
+ end
95
110
  end
96
111
  end
97
112
  end
@@ -13,7 +13,6 @@ module FriendlyId
13
13
  assert_nothing_raised do
14
14
  klass.find(instance.friendly_id, :include => :slug)
15
15
  end
16
-
17
16
  end
18
17
 
19
18
  def klass
@@ -87,6 +87,10 @@ class CreateSupportModels < ActiveRecord::Migration
87
87
  create_table :companies do |t|
88
88
  t.string :name
89
89
  end
90
+
91
+ create_table :unfriendlies do |t|
92
+ t.string :name
93
+ end
90
94
  end
91
95
 
92
96
  def self.down
@@ -1,5 +1,5 @@
1
+ require "friendly_id/active_record_adapter/tasks"
1
2
  require File.expand_path('../ar_test_helper', __FILE__)
2
- require File.expand_path('../../../lib/friendly_id/active_record_adapter/tasks', __FILE__)
3
3
 
4
4
  class TasksTest < Test::Unit::TestCase
5
5
 
@@ -1,55 +1,51 @@
1
1
  require File.expand_path('../test_helper', __FILE__)
2
2
 
3
3
  module FriendlyId
4
-
5
4
  module Test
6
-
7
5
  class FriendlyIdTest < ::Test::Unit::TestCase
8
-
9
6
  test "should parse a friendly_id name and sequence" do
10
- assert_equal ["test", "2"], "test--2".parse_friendly_id
7
+ assert_equal ["test", 2], "test--2".parse_friendly_id
11
8
  end
12
9
 
13
10
  test "should parse a friendly_id name and a double digit sequence" do
14
- assert_equal ["test", "12"], "test--12".parse_friendly_id
11
+ assert_equal ["test", 12], "test--12".parse_friendly_id
15
12
  end
16
13
 
17
14
  test "should parse with a default sequence of 1" do
18
- assert_equal ["test", "1"], "test".parse_friendly_id
15
+ assert_equal ["test", 1], "test".parse_friendly_id
19
16
  end
20
17
 
21
18
  test "should be parseable with a custom separator" do
22
- assert_equal ["test", "2"], "test:2".parse_friendly_id(":")
19
+ assert_equal ["test", 2], "test:2".parse_friendly_id(":")
23
20
  end
24
21
 
25
22
  test "should be parseable with a custom separator and a double digit sequence" do
26
- assert_equal ["test", "12"], "test:12".parse_friendly_id(":")
23
+ assert_equal ["test", 12], "test:12".parse_friendly_id(":")
27
24
  end
28
25
 
29
26
  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
27
+ assert_equal ["test--test", 2], "test--test--2".parse_friendly_id
31
28
  end
32
29
 
33
30
  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(":")
31
+ assert_equal ["test:test", 2], "test:test:2".parse_friendly_id(":")
35
32
  end
36
33
 
37
34
  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
35
+ assert_equal ["test--2--test", 1], "test--2--test".parse_friendly_id
39
36
  end
40
37
 
41
38
  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
39
+ assert_equal ["test--2--test", 2], "test--2--test--2".parse_friendly_id
43
40
  end
44
41
 
45
42
  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
43
+ assert_equal ["test--2--test", 12], "test--2--test--12".parse_friendly_id
47
44
  end
48
45
 
49
46
  test "should parse with a separator and no sequence" do
50
- assert_equal ["test", "1"], "test--".parse_friendly_id
47
+ assert_equal ["test", 1], "test--".parse_friendly_id
51
48
  end
52
-
53
49
  end
54
50
  end
55
- end
51
+ end
data/test/test_helper.rb CHANGED
@@ -1,16 +1,15 @@
1
+ $:.unshift File.expand_path("../lib", File.dirname(__FILE__))
2
+ $:.unshift File.expand_path(File.dirname(__FILE__))
3
+ $:.uniq!
4
+
1
5
  $KCODE = "UTF8" if RUBY_VERSION < "1.9"
2
6
  $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
7
+ require "rubygems"
8
+ require "bundler"
9
+ Bundler.setup
11
10
  require "test/unit"
12
11
  require "mocha"
13
12
  require "active_support"
14
13
  # require "ruby-debug"
15
- require File.expand_path("../../lib/friendly_id", __FILE__)
16
- require File.expand_path("../../lib/friendly_id/test", __FILE__)
14
+ require "friendly_id"
15
+ require "friendly_id/test"
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: friendly_id
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
4
+ prerelease: true
5
5
  segments:
6
6
  - 3
7
+ - 1
7
8
  - 0
8
- - 6
9
- version: 3.0.6
9
+ - pre
10
+ version: 3.1.0.pre
10
11
  platform: ruby
11
12
  authors:
12
13
  - Norman Clarke
@@ -16,7 +17,7 @@ autorequire:
16
17
  bindir: bin
17
18
  cert_chain: []
18
19
 
19
- date: 2010-06-11 00:00:00 -04:00
20
+ date: 2010-07-15 00:00:00 -03:00
20
21
  default_executable:
21
22
  dependencies:
22
23
  - !ruby/object:Gem::Dependency
@@ -29,12 +30,12 @@ dependencies:
29
30
  - !ruby/object:Gem::Version
30
31
  segments:
31
32
  - 2
32
- - 2
33
- version: "2.2"
33
+ - 3
34
+ version: "2.3"
34
35
  type: :runtime
35
36
  version_requirements: *id001
36
37
  - !ruby/object:Gem::Dependency
37
- name: activesupport
38
+ name: babosa
38
39
  prerelease: false
39
40
  requirement: &id002 !ruby/object:Gem::Requirement
40
41
  none: false
@@ -42,9 +43,10 @@ dependencies:
42
43
  - - ">="
43
44
  - !ruby/object:Gem::Version
44
45
  segments:
45
- - 2
46
- - 2
47
- version: "2.2"
46
+ - 0
47
+ - 1
48
+ - 0
49
+ version: 0.1.0
48
50
  type: :runtime
49
51
  version_requirements: *id002
50
52
  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"
@@ -62,12 +64,12 @@ files:
62
64
  - lib/friendly_id/active_record.rb
63
65
  - lib/friendly_id/active_record_adapter/configuration.rb
64
66
  - lib/friendly_id/active_record_adapter/finders.rb
67
+ - lib/friendly_id/active_record_adapter/relation.rb
65
68
  - lib/friendly_id/active_record_adapter/simple_model.rb
66
69
  - lib/friendly_id/active_record_adapter/slug.rb
67
70
  - lib/friendly_id/active_record_adapter/slugged_model.rb
68
71
  - lib/friendly_id/active_record_adapter/tasks.rb
69
72
  - lib/friendly_id/configuration.rb
70
- - lib/friendly_id/finders.rb
71
73
  - lib/friendly_id/railtie.rb
72
74
  - lib/friendly_id/sequel.rb
73
75
  - lib/friendly_id/slug_string.rb
@@ -107,7 +109,6 @@ files:
107
109
  - test/active_record_adapter/support/models.rb
108
110
  - test/active_record_adapter/tasks_test.rb
109
111
  - test/friendly_id_test.rb
110
- - test/slug_string_test.rb
111
112
  - test/test_helper.rb
112
113
  - extras/bench.rb
113
114
  - extras/extras.rb
@@ -135,11 +136,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
135
136
  required_rubygems_version: !ruby/object:Gem::Requirement
136
137
  none: false
137
138
  requirements:
138
- - - ">="
139
+ - - ">"
139
140
  - !ruby/object:Gem::Version
140
141
  segments:
141
- - 0
142
- version: "0"
142
+ - 1
143
+ - 3
144
+ - 1
145
+ version: 1.3.1
143
146
  requirements: []
144
147
 
145
148
  rubyforge_project: friendly-id
@@ -160,4 +163,3 @@ test_files:
160
163
  - test/active_record_adapter/sti_test.rb
161
164
  - test/active_record_adapter/tasks_test.rb
162
165
  - test/friendly_id_test.rb
163
- - test/slug_string_test.rb
@@ -1,109 +0,0 @@
1
- module FriendlyId
2
-
3
- module Finders
4
-
5
- module Base
6
-
7
- extend Forwardable
8
-
9
- def_delegators :model_class, :base_class, :friendly_id_config,
10
- :primary_key, :quoted_table_name, :sanitize_sql, :table_name
11
-
12
- # Is the id friendly or numeric? Not that the return value here is
13
- # +false+ if the +id+ is definitely not friendly, and +nil+ if it can
14
- # not be determined.
15
- # The return value will be:
16
- # * +true+ - if the id is definitely friendly (i.e., any string with non-numeric characters)
17
- # * +false+ - if the id is definitely unfriendly (i.e., an Integer, a model instance, etc.)
18
- # * +nil+ - if it can not be determined (i.e., a numeric string like "206".)
19
- # @return [true, false, nil]
20
- # @see #unfriendly?
21
- def self.friendly?(id)
22
- if id.is_a?(Integer) or id.is_a?(Symbol) or id.class.respond_to? :friendly_id_config
23
- return false
24
- elsif id.to_i.to_s != id.to_s
25
- return true
26
- else
27
- return nil
28
- end
29
- end
30
-
31
- # Is the id numeric?
32
- # @return [true, false, nil] +true+ if definitely unfriendly, +false+ if
33
- # definitely friendly, else +nil+.
34
- # @see #friendly?
35
- def self.unfriendly?(id)
36
- !friendly?(id) unless friendly?(id) == nil
37
- end
38
-
39
- def initialize(ids, model_class, options={})
40
- self.ids = ids
41
- self.options = options
42
- self.model_class = model_class
43
- self.scope = options.delete :scope
44
- end
45
-
46
- # An array of ids; can be both friendly and unfriendly.
47
- attr_accessor :ids
48
-
49
- # The ActiveRecord query options
50
- attr_accessor :options
51
-
52
- # The FriendlyId scope
53
- attr_accessor :scope
54
-
55
- # The model class being used to perform the query.
56
- attr_accessor :model_class
57
-
58
- # Perform the find.
59
- def find
60
- raise NotImplementedError
61
- end
62
-
63
- private
64
-
65
- def ids=(ids)
66
- @ids = [ids].flatten
67
- end
68
- alias :id= :ids=
69
-
70
- def scope=(scope)
71
- unless scope.nil?
72
- @scope = scope.respond_to?(:to_param) ? scope.to_param : scope.to_s
73
- end
74
- end
75
- end
76
-
77
- module Single
78
- # Is the id definitely friendly?
79
- # @see Finder::friendly?
80
- def friendly?
81
- Base.friendly?(id)
82
- end
83
-
84
- # Is the id definitely unfriendly?
85
- # @see Finder::unfriendly?
86
- def unfriendly?
87
- Base.unfriendly?(id)
88
- end
89
-
90
- private
91
-
92
- # The id (numeric or friendly).
93
- def id
94
- ids[0]
95
- end
96
-
97
- # The slug name; i.e. if "my-title--2", then "my-title".
98
- def name
99
- id.to_s.parse_friendly_id(friendly_id_config.sequence_separator)[0]
100
- end
101
-
102
- # The slug sequence; i.e. if "my-title--2", then "2".
103
- def sequence
104
- id.to_s.parse_friendly_id(friendly_id_config.sequence_separator)[1]
105
- end
106
- end
107
-
108
- end
109
- end