ismasan-sluggable_finder 2.0.3 → 2.0.4
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 +8 -0
- data/lib/sluggable_finder/finder.rb +1 -1
- data/lib/sluggable_finder.rb +1 -2
- data/spec/sluggable_finder_spec.rb +19 -0
- metadata +1 -1
data/README.markdown
CHANGED
@@ -103,6 +103,14 @@ If you wan to unpack the gem to you app's "vendor" directory:
|
|
103
103
|
|
104
104
|
rake gems:unpack
|
105
105
|
|
106
|
+
## TODO:
|
107
|
+
|
108
|
+
*Refactor. It works but I hate the code.
|
109
|
+
|
110
|
+
*Avoid including in ALL models. At the moment we need to extend associations for all models. Not sure how to only extend associations for models that use the plugin.
|
111
|
+
|
112
|
+
*Better testing for scoped collections. @user.posts.find 'blah' should only look in posts for @user without needing to add :scope
|
113
|
+
|
106
114
|
## LICENSE:
|
107
115
|
|
108
116
|
(The MIT License)
|
@@ -4,7 +4,7 @@ module SluggableFinder
|
|
4
4
|
module Finder
|
5
5
|
|
6
6
|
def find_with_slug(*args)
|
7
|
-
if (args.first.is_a?(String) and !(args.first =~ /\A\d+\Z/))#only contain digits
|
7
|
+
if (respond_to?(:sluggable_finder_options) && args.first.is_a?(String) and !(args.first =~ /\A\d+\Z/))#only contain digits
|
8
8
|
options = {:conditions => ["#{ sluggable_finder_options[:to]} = ?", args.first]}
|
9
9
|
first(options) or
|
10
10
|
raise SluggableFinder.not_found_exception.new("There is no #{sluggable_finder_options[:sluggable_type]} with #{sluggable_finder_options[:to]} '#{args.first}'")
|
data/lib/sluggable_finder.rb
CHANGED
@@ -2,7 +2,7 @@ $:.unshift(File.dirname(__FILE__)) unless
|
|
2
2
|
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
3
3
|
|
4
4
|
module SluggableFinder
|
5
|
-
VERSION = '2.0.
|
5
|
+
VERSION = '2.0.4'
|
6
6
|
|
7
7
|
@@not_found_exception = nil
|
8
8
|
|
@@ -28,7 +28,6 @@ module SluggableFinder
|
|
28
28
|
end
|
29
29
|
}.each do |klass|
|
30
30
|
klass.send :include, SluggableFinder::Finder
|
31
|
-
klass.class_eval { alias_method_chain :find, :slug }
|
32
31
|
end
|
33
32
|
|
34
33
|
end
|
@@ -14,6 +14,11 @@ class Item < ActiveRecord::Base
|
|
14
14
|
named_scope :published, :conditions => {:published => true}
|
15
15
|
end
|
16
16
|
|
17
|
+
# No sluggable finder, should be unnaffected
|
18
|
+
#
|
19
|
+
class NoFinder < Item
|
20
|
+
|
21
|
+
end
|
17
22
|
# Simple slug
|
18
23
|
#
|
19
24
|
class SimpleItem < Item
|
@@ -208,4 +213,18 @@ describe SimpleItem, 'with AR named scopes' do
|
|
208
213
|
SimpleItem.published.find('not-published')
|
209
214
|
}.should raise_error(ActiveRecord::RecordNotFound)
|
210
215
|
end
|
216
|
+
end
|
217
|
+
|
218
|
+
describe NoFinder, "with no finder" do
|
219
|
+
before(:each) do
|
220
|
+
NoFinder.delete_all
|
221
|
+
@item = NoFinder.create(:title => 'no finder here')
|
222
|
+
@string_id = "#{@item.id}-some-string"
|
223
|
+
end
|
224
|
+
|
225
|
+
it "should use find normally" do
|
226
|
+
NoFinder.find(:first).should == @item
|
227
|
+
NoFinder.find(@item.id).should == @item
|
228
|
+
NoFinder.find(@string_id).should == @item
|
229
|
+
end
|
211
230
|
end
|