ismasan-sluggable_finder 2.0.2 → 2.0.3

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 CHANGED
@@ -63,6 +63,18 @@ The idea is that you keep your controller actions clean and handle Not Found err
63
63
  end
64
64
  end
65
65
 
66
+ ### Merb and custom NotFound exception
67
+
68
+ In merb it would be nice to raise a NotFound exception instead of ActiveRecord's RecordNotFoundm so we don't need to clutter our controller with exception-handling code and we let the framework handle them.
69
+
70
+ SluggableFinder.not_found_exception = Merb::ControllerExceptions::NotFound
71
+
72
+ You can configure this to raise any exception you want.
73
+
74
+ class CustomException < StandardError; end
75
+
76
+ SluggableFinder.not_found_exception = CustomException
77
+
66
78
  ### Links
67
79
 
68
80
  Link generation remains the same, because the plugin overwrites your model's to_param method
@@ -7,7 +7,7 @@ module SluggableFinder
7
7
  if (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
- raise ActiveRecord::RecordNotFound.new("There is no #{sluggable_finder_options[:sluggable_type]} with #{sluggable_finder_options[:to]} '#{args.first}'")
10
+ raise SluggableFinder.not_found_exception.new("There is no #{sluggable_finder_options[:sluggable_type]} with #{sluggable_finder_options[:to]} '#{args.first}'")
11
11
  else
12
12
  find_without_slug(*args)
13
13
  end
@@ -2,7 +2,17 @@ $:.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.2'
5
+ VERSION = '2.0.3'
6
+
7
+ @@not_found_exception = nil
8
+
9
+ def self.not_found_exception=(ex)
10
+ @@not_found_exception = ex
11
+ end
12
+
13
+ def self.not_found_exception
14
+ @@not_found_exception || ActiveRecord::RecordNotFound
15
+ end
6
16
 
7
17
  class << self
8
18
 
@@ -98,6 +98,23 @@ describe SimpleItem, 'encoding permalinks' do
98
98
  end
99
99
  end
100
100
 
101
+ # Raising custom not found exceptions allows us to use this with merb's NotFound exception
102
+ # or any framework
103
+ describe "with custom exception" do
104
+ it "should raise custom exception if configured that way" do
105
+ class CustomException < StandardError;end
106
+
107
+ SluggableFinder.not_found_exception = CustomException
108
+ lambda {
109
+ SimpleItem.find 'non-existing-slug'
110
+ }.should raise_error(CustomException)
111
+ end
112
+
113
+ after(:all) do
114
+ SluggableFinder.not_found_exception = ActiveRecord::RecordNotFound
115
+ end
116
+ end
117
+
101
118
  describe SimpleItem, "with non-english characters" do
102
119
  before(:each) do
103
120
  @item = SimpleItem.create!(:title => "Un ñandú super ñoño I've seen")
data/tasks/db.rake CHANGED
@@ -1,10 +1,15 @@
1
- ActiveRecord::Base.establish_connection(
1
+ db = {
2
2
  :adapter=>'sqlite3',
3
3
  :dbfile=> File.join(File.dirname(__FILE__),'..','spec','db','test.db')
4
- )
4
+ }
5
+ ActiveRecord::Base.establish_connection( db )
5
6
  # define a migration
6
7
  class TestSchema < ActiveRecord::Migration
7
8
  def self.up
9
+ create_table :categories do |t|
10
+ t.string :name
11
+ t.timestamps
12
+ end
8
13
  create_table :items do |t|
9
14
  t.string :title
10
15
  t.string :slug
@@ -23,8 +28,10 @@ end
23
28
 
24
29
  namespace :db do
25
30
  desc "Create test schema"
26
- task :create => :destroy do
31
+ task :create do
27
32
  # run the migration
33
+ File.unlink(db[:dbfile]) if File.exists?(db[:dbfile])
34
+ ActiveRecord::Base.connection
28
35
  TestSchema.migrate(:up)
29
36
  end
30
37
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ismasan-sluggable_finder
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 2.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ismael Celis