Commit 888cde93

mo khan <mo@mokhan.ca>
2014-10-19 03:54:30
allow for querying artists.
1 parent 38163cc
Changed files (2)
app
models
spec
app/models/user/repository.rb
@@ -1,6 +1,7 @@
 class User
+  include Queryable
   scope :artists, ->{ where('creations_count > 0').order(creations_count: :desc) }
-  scope :search_by, ->(query) { query.blank? ? self.all : where('name like :query or email like :query', query: "#{query}%") }
+  scope :search_by, ->(query) { query.blank? ? self.all : where('users.name like :query or users.email like :query', query: "#{query}%") }
 
   class Repository < SimpleDelegator
     def initialize(connection = User)
@@ -17,11 +18,18 @@ class User
     end
 
     def search_with(params)
-      artists
+      all_matching(search_filters_for(params))
     end
 
     private
 
     attr_reader :connection
+
+    def search_filters_for(params)
+      [
+        ->(users){ users.artists },
+        ->(users){ params[:q].blank? ? users.all : users.search_by(params[:q]) },
+      ]
+    end
   end
 end
spec/models/user/repository_spec.rb
@@ -42,4 +42,15 @@ describe User::Repository do
       expect(results).to_not include(mo)
     end
   end
+
+  describe "#search_with" do
+    let!(:mo) { create(:user, creations_count: 1) }
+    let!(:bob) { create(:user, creations_count: 1) }
+
+    it 'returns all artists with the matching name' do
+      results = subject.search_with(q: bob.name)
+      expect(results).to include(bob)
+      expect(results).to_not include(mo)
+    end
+  end
 end