diff --git a/.gitignore b/.gitignore index 965c20d..3846ad1 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ *.rbc .bundle .config +.idea .yardoc Gemfile.lock InstalledFiles diff --git a/.ruby-version b/.ruby-version index cd57a8b..59aa62c 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.1.5 +2.4.5 diff --git a/lib/louisville/extensions/finder.rb b/lib/louisville/extensions/finder.rb index 18c8a6b..9b43fac 100644 --- a/lib/louisville/extensions/finder.rb +++ b/lib/louisville/extensions/finder.rb @@ -31,20 +31,23 @@ class << self module ClassMethods def find_with_louisville_finder(*args) - return find_without_lousville_finder(*args) if args.length != 1 + return find_without_louisville_finder(*args) if args.length != 1 id = args[0] id = id.id if ActiveRecord::Base === id - return find_without_louisville_finder(*args) if Louisville::Util.numeric?(id) - relation_with_louisville_finder.find_one(id) + if id.is_a?(String) && !Louisville::Util.numeric?(id) + relation_with_louisville_finder.find_one(id) + else + find_without_louisville_finder(*args) + end end private def relation_with_louisville_finder rel = relation_without_louisville_finder - rel.extend RelationMethods unless rel.respond_to?(:find_one_with_louisville) + rel.extend RelationMethods rel end end diff --git a/spec/finder_spec.rb b/spec/finder_spec.rb index b81abb5..ac75e29 100644 --- a/spec/finder_spec.rb +++ b/spec/finder_spec.rb @@ -66,5 +66,30 @@ class FinderHistoryUser < ActiveRecord::Base }.to raise_error(ActiveRecord::RecordNotFound) end + context "pass-through" do + let(:user1) { FinderUser.create! name: "Marco" } + let(:user2) { FinderUser.create! name: "Polo" } + + after { FinderUser.delete_all } + + it "uses the original Rails logic for numerical ids" do + expect(FinderUser.find(user1.id)).to eq user1 + end + + it "uses the original Rails logic for multiple ids" do + expect(FinderUser.find(user1.id, user2.id)).to match_array [user1, user2] + + expect { FinderUser.find(user1.id, FinderUser.maximum(:id) + 1) } + .to raise_error(ActiveRecord::RecordNotFound) + end + + it "uses the original Rails logic for an array of ids" do + expect(FinderUser.find([user1.id, user2.id])).to match_array [user1, user2] + + expect { FinderUser.find([user1.id, FinderUser.maximum(:id) + 1]) } + .to raise_error(ActiveRecord::RecordNotFound) + + end + end end diff --git a/spec/support/database.yml b/spec/support/database.yml index f2ef86e..e462aef 100644 --- a/spec/support/database.yml +++ b/spec/support/database.yml @@ -1,5 +1,5 @@ adapter: 'mysql2' -host: localhost +host: 127.0.0.1 database: louisville_test encoding: utf8 username: root