rdavila_friendly_id 2.2.6

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/test/sti_test.rb ADDED
@@ -0,0 +1,49 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class STIModelTest < Test::Unit::TestCase
4
+
5
+ context "A slugged model using single table inheritance" do
6
+
7
+ setup do
8
+ Novel.friendly_id_options = FriendlyId::DEFAULT_OPTIONS.merge(:method => :name, :use_slug => true)
9
+ @novel = Novel.new :name => "Test novel"
10
+ @novel.save!
11
+ end
12
+
13
+ teardown do
14
+ Novel.delete_all
15
+ Slug.delete_all
16
+ end
17
+
18
+ should "have a slug" do
19
+ assert_not_nil @novel.slug
20
+ end
21
+
22
+ context "found by its friendly id" do
23
+
24
+ setup do
25
+ @novel = Novel.find(@novel.friendly_id)
26
+ end
27
+
28
+ should "not indicate that it has a better id" do
29
+ assert !@novel.has_better_id?
30
+ end
31
+
32
+ end
33
+
34
+
35
+ context "found by its numeric id" do
36
+
37
+ setup do
38
+ @novel = Novel.find(@novel.id)
39
+ end
40
+
41
+ should "indicate that it has a better id" do
42
+ assert @novel.has_better_id?
43
+ end
44
+
45
+ end
46
+
47
+ end
48
+
49
+ end
@@ -0,0 +1,6 @@
1
+ adapter: postgresql
2
+ host: localhost
3
+ port: 5432
4
+ username: postgres
5
+ database: friendly_id_test
6
+ encoding: utf8
@@ -0,0 +1,2 @@
1
+ adapter: sqlite3
2
+ database: ":memory:"
@@ -0,0 +1,45 @@
1
+ class CreateSupportModels < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :books do |t|
4
+ t.string :name
5
+ t.string :type
6
+ end
7
+ create_table :cities do |t|
8
+ t.string :name
9
+ t.string :my_slug
10
+ t.integer :population
11
+ end
12
+ create_table :countries do |t|
13
+ t.string :name
14
+ end
15
+ create_table :districts do |t|
16
+ t.string :name
17
+ t.string :cached_slug
18
+ end
19
+ create_table :events do |t|
20
+ t.string :name
21
+ t.datetime :event_date
22
+ end
23
+ create_table :legacy_table do |t|
24
+ t.string :name
25
+ end
26
+ create_table :people do |t|
27
+ t.string :name
28
+ end
29
+ create_table :posts do |t|
30
+ t.string :name
31
+ t.boolean :published
32
+ end
33
+ create_table :residents do |t|
34
+ t.string :name
35
+ t.integer :country_id
36
+ end
37
+ create_table :users do |t|
38
+ t.string :name
39
+ end
40
+ end
41
+
42
+ def self.down
43
+ end
44
+ end
45
+
@@ -0,0 +1,105 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+ require "friendly_id/tasks"
3
+
4
+ class TasksTest < Test::Unit::TestCase
5
+
6
+ context "FriendlyId tasks" do
7
+
8
+ should "parse a top-level class name and return a class" do
9
+ assert_equal String, FriendlyId::Tasks.parse_class_name("String")
10
+ end
11
+
12
+ should "parse a namespaced class name and return a class" do
13
+ assert_equal Test::Unit, FriendlyId::Tasks.parse_class_name("Test::Unit")
14
+ end
15
+
16
+ end
17
+
18
+ context "The 'make slugs' task" do
19
+
20
+ setup do
21
+ City.create! :name => "Buenos Aires"
22
+ City.create! :name => "Rio de Janeiro"
23
+ City.create! :name => "Tokyo"
24
+ City.create! :name => "Nairobi"
25
+ Slug.delete_all
26
+ end
27
+
28
+ teardown do
29
+ City.delete_all
30
+ Slug.delete_all
31
+ end
32
+
33
+ should "make one slug per model" do
34
+ assert_equal 0, Slug.count
35
+ FriendlyId::Tasks.make_slugs("City")
36
+ assert_equal 4, Slug.count
37
+ end
38
+
39
+ end
40
+
41
+ context "The 'delete_slugs_for' task" do
42
+
43
+ setup do
44
+ @post = Post.create! :name => "Slugs Considered Harmful"
45
+ @city = City.create! :name => "Buenos Aires"
46
+ end
47
+
48
+ teardown do
49
+ Post.delete_all
50
+ City.delete_all
51
+ Slug.delete_all
52
+ end
53
+
54
+ should "Delete only slugs for the specified model" do
55
+ assert_equal 2, Slug.count
56
+ FriendlyId::Tasks.delete_slugs_for("City")
57
+ assert_equal 1, Slug.count
58
+ end
59
+
60
+ should "set the cached_slug column to NULL" do
61
+ District.create! :name => "Garment"
62
+ FriendlyId::Tasks.delete_slugs_for("District")
63
+ assert_nil District.first.cached_slug
64
+ end
65
+
66
+ end
67
+
68
+ context "The 'delete_old_slugs' task" do
69
+
70
+ setup do
71
+ @post = Post.create! :name => "Slugs Considered Harmful"
72
+ @city = City.create! :name => "Buenos Aires"
73
+ City.connection.execute "UPDATE slugs SET created_at = '%s' WHERE id = %d" % [
74
+ 45.days.ago.strftime("%Y-%m-%d"), @city.slug.id]
75
+ @city.name = "Ciudad de Buenos Aires"
76
+ @city.save!
77
+ end
78
+
79
+ teardown do
80
+ Post.delete_all
81
+ City.delete_all
82
+ Slug.delete_all
83
+ end
84
+
85
+ should "delete slugs older than 45 days by default" do
86
+ assert_equal 3, Slug.count
87
+ FriendlyId::Tasks.delete_old_slugs
88
+ assert_equal 2, Slug.count
89
+ end
90
+
91
+ should "respect the days argument" do
92
+ assert_equal 3, Slug.count
93
+ FriendlyId::Tasks.delete_old_slugs(100)
94
+ assert_equal 3, Slug.count
95
+ end
96
+
97
+ should "respect the class argument" do
98
+ assert_equal 3, Slug.count
99
+ FriendlyId::Tasks.delete_old_slugs(1, "Post")
100
+ assert_equal 3, Slug.count
101
+ end
102
+
103
+ end
104
+
105
+ end
@@ -0,0 +1,104 @@
1
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
2
+ $:.unshift(File.dirname(__FILE__))
3
+
4
+ $KCODE = 'UTF8' if RUBY_VERSION < '1.9'
5
+ $VERBOSE = false
6
+
7
+ require 'rubygems'
8
+ require 'test/unit'
9
+ require 'contest'
10
+ require 'mocha'
11
+
12
+ # You can use "rake test AR_VERSION=2.2.3" to test against 2.2.3 for example.
13
+ # The default is to use the latest installed ActiveRecord.
14
+ if ENV["AR_VERSION"]
15
+ gem 'activerecord', "#{ENV["AR_VERSION"]}"
16
+ gem 'activesupport', "#{ENV["AR_VERSION"]}"
17
+ end
18
+
19
+ require 'active_record'
20
+ require 'active_support'
21
+ require 'friendly_id'
22
+ require File.dirname(__FILE__) + '/../generators/friendly_id/templates/create_slugs'
23
+ require File.dirname(__FILE__) + '/support/models'
24
+
25
+ local_db_settings = File.dirname(__FILE__) + '/support/database.yml'
26
+ default_db_settings = File.dirname(__FILE__) + '/support/database.yml.sqlite3'
27
+ db_settings = File.exists?(local_db_settings) ? local_db_settings : default_db_settings
28
+ ActiveRecord::Base.establish_connection(YAML::load(File.open(db_settings)))
29
+
30
+ class ActiveRecord::Base
31
+ def log_protected_attribute_removal(*args) end
32
+ end
33
+
34
+ ActiveRecord::Base.connection.tables.each do |table|
35
+ ActiveRecord::Base.connection.drop_table(table)
36
+ end
37
+ ActiveRecord::Migration.verbose = false
38
+ CreateSlugs.up
39
+ CreateSupportModels.up
40
+
41
+ # A model that uses the automagically configured "cached_slug" column
42
+ class District < ActiveRecord::Base
43
+ has_friendly_id :name, :use_slug => true
44
+ end
45
+
46
+ # A model that specifies a custom cached slug column
47
+ class City < ActiveRecord::Base
48
+ attr_accessible :name
49
+ has_friendly_id :name, :use_slug => true, :cache_column => 'my_slug'
50
+ end
51
+
52
+ # A model with a custom slug text normalizer
53
+ class Person < ActiveRecord::Base
54
+ has_friendly_id :name, :use_slug => true do |text|
55
+ text.upcase
56
+ end
57
+ end
58
+
59
+ # A slugged model that uses a scope
60
+ class Resident < ActiveRecord::Base
61
+ belongs_to :country
62
+ has_friendly_id :name, :use_slug => true, :scope => :country
63
+ end
64
+
65
+ # A model used as a scope
66
+ class Country < ActiveRecord::Base
67
+ has_many :people
68
+ has_friendly_id :name, :use_slug => true
69
+ end
70
+
71
+ # A model that doesn't use slugs
72
+ class User < ActiveRecord::Base
73
+ has_friendly_id :name
74
+ end
75
+
76
+ # A model that uses default slug settings and has a named scope
77
+ class Post < ActiveRecord::Base
78
+ has_friendly_id :name, :use_slug => true
79
+ named_scope :published, :conditions => { :published => true }
80
+ end
81
+
82
+ # Model that uses a custom table name
83
+ class Place < ActiveRecord::Base
84
+ self.table_name = "legacy_table"
85
+ has_friendly_id :name, :use_slug => true
86
+ end
87
+
88
+ # A model that uses a datetime field for its friendly_id
89
+ class Event < ActiveRecord::Base
90
+ has_friendly_id :event_date, :use_slug => true
91
+ end
92
+
93
+ # A base model for single table inheritence
94
+ class Book < ActiveRecord::Base ; end
95
+
96
+ # A model that uses STI
97
+ class Novel < ::Book
98
+ has_friendly_id :name, :use_slug => true
99
+ end
100
+
101
+ # A model with no table
102
+ class Question < ActiveRecord::Base
103
+ has_friendly_id :name, :use_slug => true
104
+ end
metadata ADDED
@@ -0,0 +1,144 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rdavila_friendly_id
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.2.6
5
+ platform: ruby
6
+ authors:
7
+ - Norman Clarke
8
+ - Adrian Mugnolo
9
+ - Emilio Tagua
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+
14
+ date: 2010-01-20 00:00:00 -05:00
15
+ default_executable:
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: activerecord
19
+ type: :runtime
20
+ version_requirement:
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: 2.2.3
26
+ version:
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ type: :runtime
30
+ version_requirement:
31
+ version_requirements: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: 2.2.3
36
+ version:
37
+ - !ruby/object:Gem::Dependency
38
+ name: contest
39
+ type: :development
40
+ version_requirement:
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: "0"
46
+ version:
47
+ description: " FriendlyId is the \"Swiss Army bulldozer\" of slugging and permalink\n plugins for Ruby on Rails. It allows you to create pretty URL\xE2\x80\x99s\n and work with human-friendly strings as if they were numeric ids for\n ActiveRecord models.\n"
48
+ email:
49
+ - norman@njclarke.com
50
+ - adrian@mugnolo.com
51
+ - miloops@gmail.com
52
+ executables: []
53
+
54
+ extensions: []
55
+
56
+ extra_rdoc_files:
57
+ - README.rdoc
58
+ - History.txt
59
+ files:
60
+ - lib/friendly_id/version.rb
61
+ - lib/friendly_id/slug.rb
62
+ - lib/friendly_id/tasks.rb
63
+ - lib/friendly_id/non_sluggable_class_methods.rb
64
+ - lib/friendly_id/sluggable_class_methods.rb
65
+ - lib/friendly_id/non_sluggable_instance_methods.rb
66
+ - lib/friendly_id/sluggable_instance_methods.rb
67
+ - lib/friendly_id/helpers.rb
68
+ - lib/tasks/friendly_id.rb
69
+ - lib/friendly_id.rb
70
+ - lib/tasks/friendly_id.rake
71
+ - init.rb
72
+ - README.rdoc
73
+ - History.txt
74
+ - LICENSE
75
+ - Rakefile
76
+ - generators/friendly_id/templates/create_slugs.rb
77
+ - generators/friendly_id/friendly_id_generator.rb
78
+ - generators/friendly_id_20_upgrade/templates/upgrade_friendly_id_to_20.rb
79
+ - generators/friendly_id_20_upgrade/friendly_id_20_upgrade_generator.rb
80
+ - test/tasks_test.rb
81
+ - test/support/database.yml.postgres
82
+ - test/support/database.yml.sqlite3
83
+ - test/support/models.rb
84
+ - test/custom_slug_normalizer_test.rb
85
+ - test/slug_test.rb
86
+ - test/slugged_model_test.rb
87
+ - test/scoped_model_test.rb
88
+ - test/non_slugged_test.rb
89
+ - test/sti_test.rb
90
+ - test/test_helper.rb
91
+ - test/cached_slug_test.rb
92
+ - extras/README.txt
93
+ - extras/template-plugin.rb
94
+ - extras/template-gem.rb
95
+ has_rdoc: true
96
+ homepage: http://rdoc.info/projects/norman/friendly_id
97
+ licenses: []
98
+
99
+ post_install_message: |+
100
+
101
+ ***********************************************************
102
+
103
+ If you are upgrading friendly_id, please run
104
+
105
+ ./script/generate friendly_id --skip-migration
106
+
107
+ in your Rails application to ensure that you have the
108
+ latest friendly_id Rake tasks.
109
+
110
+ ***********************************************************
111
+
112
+ rdoc_options:
113
+ - --main
114
+ - README.rdoc
115
+ require_paths:
116
+ - lib
117
+ required_ruby_version: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: "0"
122
+ version:
123
+ required_rubygems_version: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: "0"
128
+ version:
129
+ requirements: []
130
+
131
+ rubyforge_project: friendly-id
132
+ rubygems_version: 1.3.5
133
+ signing_key:
134
+ specification_version: 3
135
+ summary: A comprehensive slugging and pretty-URL plugin for ActiveRecord.
136
+ test_files:
137
+ - test/tasks_test.rb
138
+ - test/custom_slug_normalizer_test.rb
139
+ - test/slug_test.rb
140
+ - test/slugged_model_test.rb
141
+ - test/scoped_model_test.rb
142
+ - test/non_slugged_test.rb
143
+ - test/sti_test.rb
144
+ - test/cached_slug_test.rb