sluggable_finder 2.2.0 → 2.2.1
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/README.markdown +10 -5
- data/VERSION.yml +1 -1
- data/lib/sluggable_finder/finder.rb +1 -1
- data/sluggable_finder.gemspec +2 -2
- data/spec/sluggable_finder_spec.rb +51 -2
- data/spec/spec_helper.rb +1 -1
- data/tasks/db.rake +8 -3
- metadata +2 -2
data/README.markdown
CHANGED
@@ -26,6 +26,9 @@ Then run the following to load the test schema:
|
|
26
26
|
|
27
27
|
rake db:create
|
28
28
|
|
29
|
+
Note: I'm using mysql for now due to an apparent bug in ActiveRecord's sqlite3 adapter.
|
30
|
+
Look for configuration in spec/sluggable_finder_spec.rb
|
31
|
+
|
29
32
|
## SYNOPSIS:
|
30
33
|
|
31
34
|
### Models
|
@@ -102,17 +105,19 @@ ActiveRecord, ActiveSupport
|
|
102
105
|
|
103
106
|
## INSTALL:
|
104
107
|
|
105
|
-
|
108
|
+
You can install or clone the repo from Github, but the recommended way for normal usage is to install the latest stable version from Gemcutter.org:
|
109
|
+
|
110
|
+
If you haven't yet, add gemcutter.org to your gem sources (you only need to do that once):
|
106
111
|
|
107
|
-
gem sources -a http://
|
112
|
+
gem sources -a http://gemcutter.org
|
108
113
|
|
109
114
|
Now you can install the normal way:
|
110
115
|
|
111
|
-
sudo gem install
|
116
|
+
sudo gem install sluggable_finder
|
112
117
|
|
113
118
|
Then, in your Rails app's environment:
|
114
119
|
|
115
|
-
config.gem "
|
120
|
+
config.gem "sluggable_finder"
|
116
121
|
|
117
122
|
If you wan to unpack the gem to you app's "vendor" directory:
|
118
123
|
|
@@ -120,7 +125,7 @@ If you wan to unpack the gem to you app's "vendor" directory:
|
|
120
125
|
|
121
126
|
## TODO:
|
122
127
|
|
123
|
-
*Refactor. It works but I hate the code.
|
128
|
+
*Refactor. It works but I hate the code. Find a way to override ActiveRecord.find more cleanly. Maybe Rails 3?
|
124
129
|
|
125
130
|
## LICENSE:
|
126
131
|
|
data/VERSION.yml
CHANGED
@@ -4,7 +4,7 @@ module SluggableFinder
|
|
4
4
|
module Finder
|
5
5
|
def find_sluggable(opts,*args)
|
6
6
|
key = args.first
|
7
|
-
if key.is_a?(Symbol) || (key.to_s =~ /\A\d+\Z/ && opts[:allow_integer_ids]) # normal INT find
|
7
|
+
if key.is_a?(Symbol) || key.kind_of?(Array) || (key.to_s =~ /\A\d+\Z/ && opts[:allow_integer_ids]) # normal INT find
|
8
8
|
find_without_slug(*args)
|
9
9
|
else # sluggable find
|
10
10
|
options = {:conditions => ["#{ opts[:to]} = ?", key]}
|
data/sluggable_finder.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{sluggable_finder}
|
8
|
-
s.version = "2.2.
|
8
|
+
s.version = "2.2.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Ismael Celis"]
|
12
|
-
s.date = %q{2009-
|
12
|
+
s.date = %q{2009-12-09}
|
13
13
|
s.description = %q{This plugin allows models to generate a unique "slug" (url-enabled name) from any regular attribute. Add friendly URLs to your models with one line.}
|
14
14
|
s.email = %q{ismaelct@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -1,8 +1,13 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/spec_helper'
|
2
2
|
|
3
3
|
ActiveRecord::Base.establish_connection(
|
4
|
-
:adapter=>'sqlite3',
|
5
|
-
:
|
4
|
+
# :adapter =>'sqlite3',
|
5
|
+
# :database => File.join(File.dirname(__FILE__),'db','test.db')
|
6
|
+
:adapter => 'mysql',
|
7
|
+
:host => 'localhost',
|
8
|
+
:database => 'sluggable_finder_test',
|
9
|
+
:user => 'root',
|
10
|
+
:password => ''
|
6
11
|
)
|
7
12
|
|
8
13
|
LOGGER = Logger.new(STDOUT)
|
@@ -51,6 +56,7 @@ end
|
|
51
56
|
class Category < ActiveRecord::Base
|
52
57
|
has_many :scoped_items
|
53
58
|
has_many :simple_items
|
59
|
+
has_many :string_only_items
|
54
60
|
end
|
55
61
|
|
56
62
|
class ScopedItem < Item
|
@@ -144,6 +150,30 @@ describe "SluggableFinder" do
|
|
144
150
|
StringOnlyItem.find('1234567890').should == @item2
|
145
151
|
StringOnlyItem.find(1234567890).should == @item2
|
146
152
|
end
|
153
|
+
|
154
|
+
describe 'with nested models' do
|
155
|
+
|
156
|
+
before do
|
157
|
+
@category = Category.create(:name => 'foo')
|
158
|
+
@item1 = @category.string_only_items.create(:title => 'scoped string only')
|
159
|
+
@item2 = @category.string_only_items.create(:title => '987654321')
|
160
|
+
end
|
161
|
+
|
162
|
+
it 'should work by string permalink' do
|
163
|
+
@category.string_only_items.find('scoped-string-only').should == @item1
|
164
|
+
end
|
165
|
+
|
166
|
+
it 'should NOT allow integer ID' do
|
167
|
+
lambda {
|
168
|
+
@category.string_only_items.find(@item1.id)
|
169
|
+
}.should raise_error(ActiveRecord::RecordNotFound)
|
170
|
+
end
|
171
|
+
|
172
|
+
it 'should find by integer-like slugs' do
|
173
|
+
@category.string_only_items.find('987654321').should == @item2
|
174
|
+
@category.string_only_items.find(987654321).should == @item2
|
175
|
+
end
|
176
|
+
end
|
147
177
|
end
|
148
178
|
|
149
179
|
# Raising custom not found exceptions allows us to use this with merb's NotFound exception
|
@@ -287,4 +317,23 @@ describe "SluggableFinder" do
|
|
287
317
|
NoFinder.find(@string_id).should == @item
|
288
318
|
end
|
289
319
|
end
|
320
|
+
|
321
|
+
describe 'collection setters' do
|
322
|
+
before do
|
323
|
+
@item1 = SimpleItem.create(:title => 'item1')
|
324
|
+
@item2 = SimpleItem.create(:title => 'item12')
|
325
|
+
@category = Category.create(:name => 'Cat1')
|
326
|
+
end
|
327
|
+
|
328
|
+
it 'should assign children ids' do
|
329
|
+
@category.simple_item_ids = [@item1.id, @item2.id]
|
330
|
+
@category.simple_items.should == [@item1, @item2]
|
331
|
+
end
|
332
|
+
|
333
|
+
it 'should not break when assigning empty array' do
|
334
|
+
lambda {
|
335
|
+
@category.simple_item_ids = []
|
336
|
+
}.should_not raise_error
|
337
|
+
end
|
338
|
+
end
|
290
339
|
end
|
data/spec/spec_helper.rb
CHANGED
data/tasks/db.rake
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
require 'active_record'
|
2
2
|
db = {
|
3
|
-
:adapter=>'sqlite3',
|
4
|
-
:dbfile=> File.join(File.dirname(__FILE__),'..','spec','db','test.db')
|
3
|
+
# :adapter=>'sqlite3',
|
4
|
+
# :dbfile=> File.join(File.dirname(__FILE__),'..','spec','db','test.db')
|
5
|
+
:adapter => 'mysql',
|
6
|
+
:host => 'localhost',
|
7
|
+
:database => 'sluggable_finder_test',
|
8
|
+
:user => 'root',
|
9
|
+
:password => ''
|
5
10
|
}
|
6
11
|
ActiveRecord::Base.establish_connection( db )
|
7
12
|
# define a migration
|
@@ -31,7 +36,7 @@ namespace :db do
|
|
31
36
|
desc "Create test schema"
|
32
37
|
task :create do
|
33
38
|
# run the migration
|
34
|
-
File.unlink(db[:dbfile]) if File.exists?(db[:dbfile])
|
39
|
+
File.unlink(db[:dbfile]) if db[:adapter] == 'sqlite3' && File.exists?(db[:dbfile])
|
35
40
|
ActiveRecord::Base.connection
|
36
41
|
TestSchema.migrate(:up)
|
37
42
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sluggable_finder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ismael Celis
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-12-09 00:00:00 +00:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|