spree_favorite_products 2.0.0 → 2.0.1

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.
@@ -5,7 +5,7 @@ module Spree
5
5
  before_filter :find_favorite_product, :only => :destroy
6
6
 
7
7
  def index
8
- @favorite_products = spree_current_user.favorite_products
8
+ @favorite_products = spree_current_user.favorite_products.page(params[:page]).per(Spree::Config.favorite_products_per_page)
9
9
  end
10
10
 
11
11
  def create
@@ -28,7 +28,7 @@ module Spree
28
28
 
29
29
  private
30
30
  def find_favorite_product
31
- @favorite = spree_current_user.favorites.joins(:product).readonly(false).where(:spree_products => {:permalink => params[:id]}).first
31
+ @favorite = spree_current_user.favorites.joins(:product).readonly(false).where(:spree_products => {:id => params[:id]}).first
32
32
  end
33
33
  end
34
34
  end
@@ -0,0 +1,3 @@
1
+ Spree::AppConfiguration.class_eval do
2
+ preference :favorite_products_per_page, :integer, default: 10
3
+ end
@@ -1,4 +1,8 @@
1
1
  Spree::User.class_eval do
2
2
  has_many :favorites
3
3
  has_many :favorite_products, :through => :favorites, :class_name => 'Spree::Product', :source => 'product'
4
+
5
+ def has_favorite_product?(product_id)
6
+ favorites.exists? :product_id => product_id
7
+ end
4
8
  end
@@ -0,0 +1,16 @@
1
+ Deface::Override.new(
2
+ :virtual_path => 'spree/admin/general_settings/edit',
3
+ :name => 'add_favorite_products_per_page_configuration',
4
+ :insert_after => "#preferences .row",
5
+ :text => %Q{
6
+ <div class="row">
7
+ <fieldset class="no-border-bottom">
8
+ <legend align="center"><%= Spree.t(:favorite_products_settings) %></legend>
9
+ <div class="field">
10
+ <%= label_tag :favorite_products_per_page, Spree.t(:favorite_products_per_page) %><br>
11
+ <%= text_field_tag :favorite_products_per_page, Spree::Config[:favorite_products_per_page], :size => 3 %>
12
+ </div>
13
+ </fieldset>
14
+ </div>
15
+ }
16
+ )
@@ -2,5 +2,11 @@ Deface::Override.new(
2
2
  :virtual_path => 'spree/products/show',
3
3
  :name => 'add_link_to_mark_product_as_favorite',
4
4
  :insert_after => "div[itemprop='description']",
5
- :text => "<%= link_to 'Mark as favorite', favorite_products_path(:id => @product.id), :method => :post, :remote => spree_user_signed_in? %>"
5
+ :text => %Q{
6
+ <% if spree_user_signed_in? && spree_current_user.has_favorite_product?(@product.id) %>
7
+ <%= link_to Spree.t(:unmark_as_favorite), favorite_product_path(:id => @product.id), :method => :delete, :remote => true, :class => 'favorite_link' %>
8
+ <% else %>
9
+ <%= link_to Spree.t(:mark_as_favorite), favorite_products_path(:id => @product.id), :method => :post, :remote => spree_user_signed_in?, :class => 'favorite_link' %>
10
+ <% end %>
11
+ }
6
12
  )
@@ -1 +1,4 @@
1
+ <% if @success %>
2
+ $('.favorite_link').attr('href', '<%= favorite_product_path(:id => params[:id]) %>').data('method', 'delete').text('<%= Spree.t(:unmark_as_favorite) %>')
3
+ <% end %>
1
4
  alert("<%=j @message%>");
@@ -1,6 +1,11 @@
1
1
  <% if @success %>
2
- $("#favorite_product_<%= @favorite.product_id%>").remove();
3
- alert("Successfully removed favorite product from your list")
2
+ if($('.favorite_link').length) {
3
+ $('.favorite_link').attr('href', '<%= favorite_products_path(:id => @favorite.product_id) %>').data('method', 'post').text('<%= Spree.t(:mark_as_favorite) %>')
4
+ alert('Successfully unmarked as favorite');
5
+ } else {
6
+ $("#favorite_product_<%= @favorite.product_id%>").remove();
7
+ alert("Successfully removed favorite product from your list");
8
+ }
4
9
  <% else %>
5
10
  alert("Could not remove product form your list")
6
11
  <% end %>
@@ -14,7 +14,7 @@
14
14
  <tr class="<%= cycle('even', 'odd') %>" id="favorite_product_<%= product.id %>">
15
15
  <td class="favorite-product-image"><%= link_to small_image(product), product_path(product) %></td>
16
16
  <td class="favorite-product-name"><%= product.name %></td>
17
- <td class="favorite-product-remove"><%= link_to 'Remove', favorite_product_path(product), :method => :delete, :remote => true %>
17
+ <td class="favorite-product-remove"><%= link_to 'Remove', favorite_product_path(:id => product.id), :method => :delete, :remote => true %>
18
18
  </tr>
19
19
  <% end %>
20
20
  </tbody>
@@ -22,4 +22,6 @@
22
22
  <% else %>
23
23
  <p><%= Spree.t(:you_have_no_favorite_products_yet) %></p>
24
24
  <% end %>
25
+
26
+ <%= paginate @favorite_products %>
25
27
  </div>
@@ -3,3 +3,8 @@
3
3
 
4
4
  en:
5
5
  hello: "Hello world"
6
+ spree:
7
+ favorite_products_settings: "Favorite Products Settings"
8
+ favorite_products_per_page: "Per Page"
9
+ mark_as_favorite: "Mark as favorite"
10
+ unmark_as_favorite: "Unmark as favorite"
@@ -11,7 +11,7 @@ describe Spree::FavoriteProductsController do
11
11
 
12
12
  shared_examples_for "request which finds favorite product" do
13
13
  it "finds favorite product" do
14
- @current_user_favorites.should_receive(:where).with(:spree_products => {:permalink => 'permalink'})
14
+ @current_user_favorites.should_receive(:where).with(:spree_products => {:id => 'id'})
15
15
  send_request
16
16
  end
17
17
 
@@ -84,12 +84,15 @@ describe Spree::FavoriteProductsController do
84
84
 
85
85
  describe 'GET index' do
86
86
  def send_request
87
- get :index, :use_route => 'spree'
87
+ get :index, :page => 'current_page', :use_route => 'spree'
88
88
  end
89
89
 
90
90
  before(:each) do
91
- @favorite_product = mock_model(Spree::Product)
92
- @user = mock_model(Spree::User, :favorite_products => [@favorite_product], :generate_spree_api_key! => false, :last_incomplete_spree_order => nil)
91
+ @favorite_products = double('favorite_products')
92
+ @favorite_products.stub(:page).and_return(@favorite_products)
93
+ @favorite_products.stub(:per).and_return(@favorite_products)
94
+ Spree::Config.stub(:favorite_products_per_page).and_return('favorite_products_per_page')
95
+ @user = mock_model(Spree::User, :favorite_products => @favorite_products, :generate_spree_api_key! => false, :last_incomplete_spree_order => nil)
93
96
  controller.stub(:authenticate_spree_user!).and_return(true)
94
97
  controller.stub(:spree_current_user).and_return(@user)
95
98
  end
@@ -104,15 +107,25 @@ describe Spree::FavoriteProductsController do
104
107
  send_request
105
108
  end
106
109
 
110
+ it "paginates favorite products" do
111
+ @favorite_products.should_receive(:page).with('current_page')
112
+ send_request
113
+ end
114
+
115
+ it "shows Spree::Config.favorite_products_per_page" do
116
+ @favorite_products.should_receive(:per).with('favorite_products_per_page')
117
+ send_request
118
+ end
119
+
107
120
  it "assigns @favorite_products" do
108
121
  send_request
109
- assigns(:favorite_products).should eq([@favorite_product])
122
+ assigns(:favorite_products).should eq(@favorite_products)
110
123
  end
111
124
  end
112
125
 
113
126
  describe 'destroy' do
114
127
  def send_request(params = {})
115
- post :destroy, params.merge({:use_route => 'spree', :method => :delete, :format => :js, :id => 'permalink'})
128
+ post :destroy, params.merge({:use_route => 'spree', :method => :delete, :format => :js, :id => 'id'})
116
129
  end
117
130
 
118
131
  before do
@@ -0,0 +1,3 @@
1
+ describe Spree::AppConfiguration do
2
+ it { Spree::Config.favorite_products_per_page.should eq 10 }
3
+ end
@@ -1,6 +1,26 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Spree::User do
4
+ before(:each) do
5
+ @user = Spree::User.create! :email => 'test@example.com', :password => 'spree123'
6
+ @product1 = Spree::Product.create! :name => 'product1', :price => 100, :shipping_category_id => 1
7
+ @product2 = Spree::Product.create! :name => 'product2', :price => 100, :shipping_category_id => 1
8
+ favorite = Spree::Favorite.new
9
+ favorite.product_id = @product1.id
10
+ favorite.user_id = @user.id
11
+ favorite.save!
12
+ end
13
+
4
14
  it { should have_many(:favorites) }
5
15
  it { should have_many(:favorite_products).through(:favorites).class_name('Spree::Product') }
16
+
17
+ describe "has_favorite_product?" do
18
+ context "when product in user's favorite products" do
19
+ it { @user.has_favorite_product?(@product1.id).should be_true }
20
+ end
21
+
22
+ context 'when product is not in users favorite products' do
23
+ it { @user.has_favorite_product?(@product2.id).should be_false }
24
+ end
25
+ end
6
26
  end
@@ -2,7 +2,7 @@
2
2
  Gem::Specification.new do |s|
3
3
  s.platform = Gem::Platform::RUBY
4
4
  s.name = 'spree_favorite_products'
5
- s.version = '2.0.0'
5
+ s.version = '2.0.1'
6
6
  s.summary = 'users can mark product as favorite'
7
7
  s.description = 'This extension adds the following features: 1. Adds a link Mark as favorite on product detail page. 2. Favorite Products tab on header 3. Favorite Products tab in admin section'
8
8
  s.required_ruby_version = '>= 1.9.3'
metadata CHANGED
@@ -1,40 +1,47 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: spree_favorite_products
3
- version: !ruby/object:Gem::Version
4
- version: 2.0.0
3
+ version: !ruby/object:Gem::Version
4
+ hash: 13
5
5
  prerelease:
6
+ segments:
7
+ - 2
8
+ - 0
9
+ - 1
10
+ version: 2.0.1
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Mohit Bansal
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2014-02-24 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
17
+
18
+ date: 2014-03-07 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
15
21
  name: spree_core
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ~>
20
- - !ruby/object:Gem::Version
21
- version: 2.1.0
22
- type: :runtime
23
22
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
23
+ requirement: &id001 !ruby/object:Gem::Requirement
25
24
  none: false
26
- requirements:
25
+ requirements:
27
26
  - - ~>
28
- - !ruby/object:Gem::Version
27
+ - !ruby/object:Gem::Version
28
+ hash: 11
29
+ segments:
30
+ - 2
31
+ - 1
32
+ - 0
29
33
  version: 2.1.0
30
- description: ! 'This extension adds the following features: 1. Adds a link Mark as
31
- favorite on product detail page. 2. Favorite Products tab on header 3. Favorite
32
- Products tab in admin section'
34
+ type: :runtime
35
+ version_requirements: *id001
36
+ description: "This extension adds the following features: 1. Adds a link Mark as favorite on product detail page. 2. Favorite Products tab on header 3. Favorite Products tab in admin section"
33
37
  email: info@vinsol.com
34
38
  executables: []
39
+
35
40
  extensions: []
41
+
36
42
  extra_rdoc_files: []
37
- files:
43
+
44
+ files:
38
45
  - .rspec
39
46
  - .travis.yml
40
47
  - Gemfile
@@ -49,10 +56,12 @@ files:
49
56
  - app/assets/stylesheets/store/spree_favorite_products.css
50
57
  - app/controllers/spree/admin/favorite_products_controller.rb
51
58
  - app/controllers/spree/favorite_products_controller.rb
59
+ - app/models/spree/app_configuration_decorator.rb
52
60
  - app/models/spree/favorite.rb
53
61
  - app/models/spree/product_decorator.rb
54
62
  - app/models/spree/user_decorator.rb
55
63
  - app/overrides/.DS_Store
64
+ - app/overrides/add_favorite_products_per_page_configuration.rb
56
65
  - app/overrides/add_favorite_products_tab.rb
57
66
  - app/overrides/add_link_to_mark_product_as_favorite.rb
58
67
  - app/overrides/add_link_to_users_favorite_products.rb
@@ -73,35 +82,46 @@ files:
73
82
  - script/rails
74
83
  - spec/controllers/spree/admin/favorite_products_controller_spec.rb
75
84
  - spec/controllers/spree/favorite_products_controller_spec.rb
85
+ - spec/models/spree/app_configuration_decorator_spec.rb
76
86
  - spec/models/spree/favorite_spec.rb
77
87
  - spec/models/spree/product_decorator_spec.rb
78
88
  - spec/models/spree/user_decorator_spec.rb
79
89
  - spec/spec_helper.rb
80
90
  - spree_favorite_products.gemspec
81
91
  homepage: http://vinsol.com
82
- licenses:
92
+ licenses:
83
93
  - MIT
84
94
  post_install_message:
85
95
  rdoc_options: []
86
- require_paths:
96
+
97
+ require_paths:
87
98
  - lib
88
- required_ruby_version: !ruby/object:Gem::Requirement
99
+ required_ruby_version: !ruby/object:Gem::Requirement
89
100
  none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ hash: 53
105
+ segments:
106
+ - 1
107
+ - 9
108
+ - 3
93
109
  version: 1.9.3
94
- required_rubygems_version: !ruby/object:Gem::Requirement
110
+ required_rubygems_version: !ruby/object:Gem::Requirement
95
111
  none: false
96
- requirements:
97
- - - ! '>='
98
- - !ruby/object:Gem::Version
99
- version: '0'
100
- requirements:
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ hash: 3
116
+ segments:
117
+ - 0
118
+ version: "0"
119
+ requirements:
101
120
  - none
102
121
  rubyforge_project:
103
- rubygems_version: 1.8.25
122
+ rubygems_version: 1.8.24
104
123
  signing_key:
105
124
  specification_version: 3
106
125
  summary: users can mark product as favorite
107
126
  test_files: []
127
+