spree_favorite_products 2.0.3 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +8 -2
- data/app/assets/javascripts/admin/spree_favorite_products.js +0 -1
- data/app/assets/javascripts/store/spree_favorite_products.js +0 -1
- data/app/assets/stylesheets/admin/spree_favorite_products.css +0 -3
- data/app/assets/stylesheets/store/spree_favorite_products.css +1 -3
- data/app/controllers/spree/admin/favorite_products_controller.rb +1 -8
- data/app/models/spree/product_decorator.rb +2 -6
- data/app/models/spree/user_decorator.rb +1 -1
- data/app/views/spree/admin/favorite_products/index.html.erb +4 -4
- data/app/views/spree/favorite_products/destroy.js.erb +0 -3
- data/app/views/spree/favorite_products/index.html.erb +3 -3
- data/lib/generators/spree_favorite_products/install/install_generator.rb +4 -4
- data/spec/controllers/spree/admin/favorite_products_controller_spec.rb +7 -53
- data/spec/models/spree/product_decorator_spec.rb +14 -28
- data/spec/models/spree/user_decorator_spec.rb +1 -1
- data/spree_favorite_products.gemspec +2 -2
- metadata +7 -8
- data/app/overrides/add_favorite_products_to_products_tab.rb +0 -11
data/README.md
CHANGED
@@ -13,12 +13,18 @@ Installation
|
|
13
13
|
Add spree_favorite_products to your Gemfile:
|
14
14
|
|
15
15
|
```ruby
|
16
|
-
gem 'spree_favorite_products'
|
16
|
+
gem 'spree_favorite_products'
|
17
17
|
```
|
18
18
|
|
19
|
-
|
19
|
+
For older versions of spree.
|
20
20
|
|
21
21
|
```ruby
|
22
|
+
# Spree 2.1.x
|
23
|
+
gem 'spree_favorite_products', '2.0.1'
|
24
|
+
```
|
25
|
+
|
26
|
+
```ruby
|
27
|
+
# Spree 2.0.x
|
22
28
|
gem 'spree_favorite_products', '1.0.0'
|
23
29
|
```
|
24
30
|
|
@@ -1 +0,0 @@
|
|
1
|
-
//= require admin/spree_backend
|
@@ -1 +0,0 @@
|
|
1
|
-
//= require store/spree_frontend
|
@@ -3,20 +3,13 @@ module Spree
|
|
3
3
|
class FavoriteProductsController < Spree::Admin::BaseController
|
4
4
|
|
5
5
|
def index
|
6
|
-
@
|
7
|
-
@favorite_products = @search.result.order_by_favorite_users_count(sort_in_ascending_users_count?).page(params[:page])
|
6
|
+
@favorite_products = Spree::Product.favorite.page(params[:page])
|
8
7
|
end
|
9
8
|
|
10
9
|
def users
|
11
10
|
@product = Spree::Product.where(:id => params[:id]).first
|
12
11
|
@users = @product.favorite_users.page(params[:page])
|
13
12
|
end
|
14
|
-
|
15
|
-
|
16
|
-
private
|
17
|
-
def sort_in_ascending_users_count?
|
18
|
-
params[:q] && params[:q][:s] == 'favorite_users_count asc'
|
19
|
-
end
|
20
13
|
end
|
21
14
|
end
|
22
15
|
end
|
@@ -1,12 +1,8 @@
|
|
1
1
|
Spree::Product.class_eval do
|
2
|
-
has_many :favorites
|
2
|
+
has_many :favorites
|
3
3
|
has_many :favorite_users, :through => :favorites, :class_name => 'Spree::User', :source => 'user'
|
4
4
|
|
5
5
|
def self.favorite
|
6
|
-
joins(:favorites).
|
7
|
-
end
|
8
|
-
|
9
|
-
def self.order_by_favorite_users_count(asc=false)
|
10
|
-
order("count(spree_favorites.user_id) #{asc ? 'asc' : 'desc'}")
|
6
|
+
joins(:favorites).uniq
|
11
7
|
end
|
12
8
|
end
|
@@ -19,9 +19,9 @@
|
|
19
19
|
<thead>
|
20
20
|
<tr data-hook="admin_products_index_headers">
|
21
21
|
<th><%= Spree.t(:sku) %></th>
|
22
|
-
<th colspan="2"><%=
|
23
|
-
<th><%=
|
24
|
-
<th
|
22
|
+
<th colspan="2"><%= Spree.t(:name) %></th>
|
23
|
+
<th><%= Spree.t(:master_price) %></th>
|
24
|
+
<th>Favorite Users</th>
|
25
25
|
</tr>
|
26
26
|
</thead>
|
27
27
|
<tbody>
|
@@ -29,7 +29,7 @@
|
|
29
29
|
<tr <%= "style='color: red;'" if product.deleted? %> id="<%= spree_dom_id product %>" data-hook="admin_products_index_rows" class="<%= cycle('odd', 'even') %>">
|
30
30
|
<td class="align-center"><%= product.sku rescue '' %></td>
|
31
31
|
<td class="align-center"><%= mini_image(product) %></td>
|
32
|
-
<td><%=
|
32
|
+
<td><%= product.try(:name) %></td>
|
33
33
|
<td class="align-center"><%= product.display_price.to_html rescue '' %></td>
|
34
34
|
<td class='align-center'><%= link_to product.favorite_users.count, users_admin_favorite_product_path(:id => product.id) %></td>
|
35
35
|
</tr>
|
@@ -5,9 +5,6 @@
|
|
5
5
|
} else {
|
6
6
|
$("#favorite_product_<%= @favorite.product_id%>").remove();
|
7
7
|
alert("Successfully removed favorite product from your list");
|
8
|
-
if (!$('.favorite_product').length) {
|
9
|
-
window.location = '<%= favorite_products_path %>'
|
10
|
-
}
|
11
8
|
}
|
12
9
|
<% else %>
|
13
10
|
alert("Could not remove product form your list")
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<div data-hook="account_my_favorite_products" class="account-my-favorite-products commonform">
|
2
2
|
<h3><%= Spree.t(:my_favorite_products) %></h3>
|
3
3
|
<% if @favorite_products.present? %>
|
4
|
-
<table class="favorite-products order-summary"
|
4
|
+
<table class="favorite-products order-summary">
|
5
5
|
<thead>
|
6
6
|
<tr>
|
7
7
|
<th class="favorite-product-image"><%= Spree.t(:product_image) %></th>
|
@@ -11,10 +11,10 @@
|
|
11
11
|
</thead>
|
12
12
|
<tbody>
|
13
13
|
<% @favorite_products.each do |product| %>
|
14
|
-
<tr class="<%= cycle('even', 'odd') %>
|
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(:id => product.id), :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>
|
@@ -5,13 +5,13 @@ module SpreeFavoriteProducts
|
|
5
5
|
class_option :auto_run_migrations, :type => :boolean, :default => false
|
6
6
|
|
7
7
|
def add_javascripts
|
8
|
-
append_file '
|
9
|
-
append_file '
|
8
|
+
append_file 'vendor/assets/javascripts/spree/frontend/all.js', "\n//= require store/spree_favorite_products\n"
|
9
|
+
append_file 'vendor/assets/javascripts/spree/backend/all.js', "\n//= require admin/spree_favorite_products\n"
|
10
10
|
end
|
11
11
|
|
12
12
|
def add_stylesheets
|
13
|
-
inject_into_file '
|
14
|
-
inject_into_file '
|
13
|
+
inject_into_file 'vendor/assets/stylesheets/spree/frontend/all.css', " *= require store/spree_favorite_products\n", :before => /\*\//, :verbose => true
|
14
|
+
inject_into_file 'vendor/assets/stylesheets/spree/backend/all.css', " *= require admin/spree_favorite_products\n", :before => /\*\//, :verbose => true
|
15
15
|
end
|
16
16
|
|
17
17
|
def add_migrations
|
@@ -15,51 +15,22 @@ describe Spree::Admin::FavoriteProductsController do
|
|
15
15
|
roles.stub(:includes).with(:permissions).and_return(roles)
|
16
16
|
controller.stub(:authorize_admin).and_return(true)
|
17
17
|
controller.stub(:authorize!).and_return(true)
|
18
|
-
|
19
|
-
@favorite_products = double('favorite_products')
|
20
|
-
@favorite_products.stub(:order_by_favorite_users_count).and_return(@favorite_products)
|
21
|
-
@search = double('search', :result => @favorite_products)
|
22
|
-
@favorite_products.stub(:search).and_return(@search)
|
23
|
-
@favorite_products.stub(:page).and_return(@favorite_products)
|
24
|
-
Spree::Product.stub(:favorite).and_return(@favorite_products)
|
25
18
|
end
|
26
19
|
|
27
20
|
describe "GET index" do
|
28
21
|
def send_request
|
29
|
-
get :index, :page => 1 ,:use_route => 'spree'
|
30
|
-
end
|
31
|
-
|
32
|
-
it "returns favorite products" do
|
33
|
-
Spree::Product.should_receive(:favorite)
|
34
|
-
send_request
|
22
|
+
get :index, :page => 1 ,:use_route => 'spree'
|
35
23
|
end
|
36
24
|
|
37
|
-
|
38
|
-
@favorite_products
|
39
|
-
|
25
|
+
before(:each) do
|
26
|
+
@favorite_products = double('favorite_products')
|
27
|
+
@favorite_products.stub(:page).and_return(@favorite_products)
|
28
|
+
Spree::Product.stub(:favorite).and_return(@favorite_products)
|
40
29
|
end
|
41
30
|
|
42
|
-
it "
|
31
|
+
it "returns favorite products" do
|
32
|
+
Spree::Product.should_receive(:favorite)
|
43
33
|
send_request
|
44
|
-
assigns(:search).should eq(@search)
|
45
|
-
end
|
46
|
-
|
47
|
-
context 'when order favorite products by users count in asc order' do
|
48
|
-
def send_request
|
49
|
-
get :index, :page => 1 ,:use_route => 'spree', :q => { :s => 'favorite_users_count asc' }
|
50
|
-
end
|
51
|
-
|
52
|
-
it "orders favorite products by users count in asc order" do
|
53
|
-
@favorite_products.should_receive(:order_by_favorite_users_count).with(true)
|
54
|
-
send_request
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
context 'when order favorite products by users count in desc order' do
|
59
|
-
it "orders favorite products by users count in asc order" do
|
60
|
-
@favorite_products.should_receive(:order_by_favorite_users_count).with(false)
|
61
|
-
send_request
|
62
|
-
end
|
63
34
|
end
|
64
35
|
|
65
36
|
it "paginates favorite products" do
|
@@ -98,21 +69,4 @@ describe Spree::Admin::FavoriteProductsController do
|
|
98
69
|
send_request
|
99
70
|
end
|
100
71
|
end
|
101
|
-
|
102
|
-
describe "#sort_in_ascending_users_count?" do
|
103
|
-
|
104
|
-
context 'when favorite_user_count asc present in params[q][s]' do
|
105
|
-
it "is true" do
|
106
|
-
get :index, :page => 1 ,:use_route => 'spree', :q => { 's' => 'favorite_users_count asc' }
|
107
|
-
controller.send(:sort_in_ascending_users_count?).should be_true
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
context 'when favorite_user_count not present in params' do
|
112
|
-
it "is false" do
|
113
|
-
get :index, :page => 1 ,:use_route => 'spree', :q => { 's' => 'name asc' }
|
114
|
-
controller.send(:sort_in_ascending_users_count?).should be_false
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
72
|
end
|
@@ -1,39 +1,25 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Spree::Product do
|
4
|
-
|
5
|
-
shipping_category = Spree::ShippingCategory.create! :name => 'shipping_category'
|
6
|
-
@favorite_product1 = Spree::Product.create! :name => 'favorite_product1', :price => 100, :shipping_category_id => shipping_category.id
|
7
|
-
@favorite_product2 = Spree::Product.create! :name => 'favorite_product2', :price => 100, :shipping_category_id => shipping_category.id
|
8
|
-
@product1 = Spree::Product.create! :name => 'product1', :price => 100, :shipping_category_id => shipping_category.id
|
9
|
-
@product2 = Spree::Product.create! :name => 'product2', :price => 100, :shipping_category_id => shipping_category.id
|
10
|
-
@user1 = Spree::User.create! :email => 'user1@example.com', :password => 'example', :password_confirmation => "example"
|
11
|
-
@user2 = Spree::User.create! :email => 'user2@example.com', :password => "example", :password_confirmation => 'example'
|
12
|
-
@user1.favorites.create! :product_id => @favorite_product1.id
|
13
|
-
@user2.favorites.create! :product_id => @favorite_product1.id
|
14
|
-
@user2.favorites.create! :product_id => @favorite_product2.id
|
15
|
-
end
|
16
|
-
|
17
|
-
it { should have_many(:favorites).dependent(:destroy) }
|
4
|
+
it { should have_many(:favorites) }
|
18
5
|
it { should have_many(:favorite_users).through(:favorites).class_name('Spree::User') }
|
19
6
|
|
20
7
|
describe "Spree::Product.favorite" do
|
21
|
-
|
22
|
-
Spree::
|
8
|
+
before(:each) do
|
9
|
+
shipping_category = Spree::ShippingCategory.create! :name => 'shipping_category'
|
10
|
+
@favorite_product1 = Spree::Product.create! :name => 'favorite_product1', :price => 100, :shipping_category_id => shipping_category.id
|
11
|
+
@favorite_product2 = Spree::Product.create! :name => 'favorite_product2', :price => 100, :shipping_category_id => shipping_category.id
|
12
|
+
@product1 = Spree::Product.create! :name => 'product1', :price => 100, :shipping_category_id => shipping_category.id
|
13
|
+
@product2 = Spree::Product.create! :name => 'product2', :price => 100, :shipping_category_id => shipping_category.id
|
14
|
+
@user1 = Spree::User.create! :email => 'user1@example.com', :password => 'example', :password_confirmation => "example"
|
15
|
+
@user2 = Spree::User.create! :email => 'user2@example.com', :password => "example", :password_confirmation => 'example'
|
16
|
+
@user1.favorites.create! :product_id => @favorite_product1.id
|
17
|
+
@user2.favorites.create! :product_id => @favorite_product1.id
|
18
|
+
@user2.favorites.create! :product_id => @favorite_product2.id
|
23
19
|
end
|
24
|
-
end
|
25
20
|
|
26
|
-
|
27
|
-
|
28
|
-
it "returns products ordered by users_count in descending order" do
|
29
|
-
Spree::Product.favorite.order_by_favorite_users_count.should eq([@favorite_product1, @favorite_product2])
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
context 'when asc order passed' do
|
34
|
-
it "returns products ordered by users_count in ascending order" do
|
35
|
-
Spree::Product.favorite.order_by_favorite_users_count(true).should eq([@favorite_product2, @favorite_product1])
|
36
|
-
end
|
21
|
+
it "returns favorite products" do
|
22
|
+
Spree::Product.favorite.should =~ [@favorite_product1, @favorite_product2]
|
37
23
|
end
|
38
24
|
end
|
39
25
|
end
|
@@ -11,7 +11,7 @@ describe Spree::User do
|
|
11
11
|
favorite.save!
|
12
12
|
end
|
13
13
|
|
14
|
-
it { should have_many(:favorites)
|
14
|
+
it { should have_many(:favorites) }
|
15
15
|
it { should have_many(:favorite_products).through(:favorites).class_name('Spree::Product') }
|
16
16
|
|
17
17
|
describe "has_favorite_product?" do
|
@@ -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
|
5
|
+
s.version = '2.2.0'
|
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'
|
@@ -17,5 +17,5 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.require_path = 'lib'
|
18
18
|
s.requirements << 'none'
|
19
19
|
|
20
|
-
s.add_dependency 'spree_core', '~> 2.
|
20
|
+
s.add_dependency 'spree_core', '~> 2.2.0'
|
21
21
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spree_favorite_products
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 7
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 2
|
8
|
+
- 2
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 2.0.3
|
10
|
+
version: 2.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Mohit Bansal
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2014-
|
18
|
+
date: 2014-03-12 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: spree_core
|
@@ -25,12 +25,12 @@ dependencies:
|
|
25
25
|
requirements:
|
26
26
|
- - ~>
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
hash:
|
28
|
+
hash: 7
|
29
29
|
segments:
|
30
30
|
- 2
|
31
|
-
-
|
31
|
+
- 2
|
32
32
|
- 0
|
33
|
-
version: 2.
|
33
|
+
version: 2.2.0
|
34
34
|
type: :runtime
|
35
35
|
version_requirements: *id001
|
36
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"
|
@@ -63,7 +63,6 @@ files:
|
|
63
63
|
- app/overrides/.DS_Store
|
64
64
|
- app/overrides/add_favorite_products_per_page_configuration.rb
|
65
65
|
- app/overrides/add_favorite_products_tab.rb
|
66
|
-
- app/overrides/add_favorite_products_to_products_tab.rb
|
67
66
|
- app/overrides/add_link_to_mark_product_as_favorite.rb
|
68
67
|
- app/overrides/add_link_to_users_favorite_products.rb
|
69
68
|
- app/views/spree/.DS_Store
|
@@ -1,11 +0,0 @@
|
|
1
|
-
Deface::Override.new(
|
2
|
-
:virtual_path => 'spree/admin/shared/_tabs',
|
3
|
-
:name => 'select_products_tab',
|
4
|
-
:replace => "erb[silent]:contains('if can? :admin, Spree::Product')",
|
5
|
-
:closing_selector => "erb[silent]:contains('end')",
|
6
|
-
:text => %Q{
|
7
|
-
<% if can? :admin, Spree::Product %>
|
8
|
-
<%= tab :products, :option_types, :properties, :prototypes, :variants, :product_properties, :taxonomies, :favorite_products, :icon => 'icon-th-large' %>
|
9
|
-
<% end %>
|
10
|
-
}
|
11
|
-
)
|