Commit 850ea762

mo khan <mo@mokhan.ca>
2014-10-17 01:50:19
move user repository to user/repository and add scopes to User model.
1 parent f074930
Changed files (6)
app/controllers/profiles_controller.rb
@@ -1,6 +1,4 @@
 class ProfilesController < ApplicationController
-  before_action :authenticate!, :except => [:index, :show]
-
   def initialize(repository = Spank::IOC.resolve(:users))
     @repository = repository
     super()
app/models/user/repository.rb
@@ -0,0 +1,24 @@
+class User
+  scope :artists, ->{ where('creations_count > 0').order(creations_count: :desc) }
+  scope :search_by, ->(query) { query.blank? ? self.scoped : where('name like :query or email like :query', query: "#{query}%") }
+
+  class Repository
+    def initialize(connection = User)
+      @connection = connection
+    end
+
+    delegate :all, :includes, :find, :search_by, to: :connection
+
+    def ordered
+      connection.order(creations_count: :desc)
+    end
+
+    def artists
+      connection.includes(:avatar).artists
+    end
+
+    private
+
+    attr_reader :connection
+  end
+end
app/models/user_repository.rb
@@ -1,24 +0,0 @@
-class UserRepository
-  def initialize(connection = User)
-    @connection = connection
-  end
-
-  delegate :all, :includes, :find, to: :connection
-
-  def ordered
-    connection.order(creations_count: :desc)
-  end
-
-  def artists
-    connection.includes(:avatar).where('creations_count > 0').order(creations_count: :desc)
-  end
-
-  def search_by(query)
-    return connection.all if query.blank?
-    connection.where('name like :query or email like :query', query: "#{query}%")
-  end
-
-  private
-
-  attr_reader :connection
-end
config/initializers/container.rb
@@ -18,7 +18,7 @@ class ConfigureContainerCommand
     # repositories
     container.register(:cakes) { |builder| Creation }
     container.register(:photos) { |builder| Photo }
-    container.register(:users) { |builder| UserRepository.new }.as_singleton
+    container.register(:users) { |builder| User::Repository.new }.as_singleton
   end
 end
 
spec/controllers/profiles_controller_spec.rb
@@ -1,33 +1,34 @@
 require 'rails_helper'
 
 describe ProfilesController do
-  let(:user) { create(:user) }
-  let!(:creation) { create(:creation, user: user) }
+  describe "#index" do
+    let!(:user) { create(:user, creations_count: 1) }
 
-  before { http_login(user) }
-
-  describe "GET 'index'" do
-    before :each do
-      get 'index'
+    it "includes each user" do
+      get :index
+      expect(assigns(:profiles)).to match_array(user)
+      expect(response).to be_success
     end
+  end
+
+  describe "#show" do
+    let(:user) { create(:user) }
+    let(:creation) { create(:creation, user: user) }
 
-    it "should be successful" do
-      response.should be_success
+    before :each do
+      get :show, id: user.id
     end
 
-    it "should include each user" do
-      assigns(:profiles).should include(user)
+    it "returns a successful response" do
+      expect(response).to be_success
     end
-  end
 
-  describe "GET 'show'" do
-    before :each do
-      User.stub(:find).with(user.id.to_s){ user }
-      get :show, :id => user.id
+    it 'returns the user' do
+      expect(assigns(:user)).to eql(user)
     end
 
-    it "should be successful" do
-      response.should be_success
+    it 'returns the users cakes' do
+      expect(assigns(:creations)).to match_array(user.creations)
     end
   end
 end
spec/models/user_repository_spec.rb → spec/models/user/repository_spec.rb
@@ -1,7 +1,7 @@
 require 'rails_helper'
 
-describe UserRepository do
-  subject { UserRepository.new }
+describe User::Repository do
+  subject { User::Repository.new }
 
   describe "#all" do
     let!(:user) { create(:user) }