spree_sort_products 1.3.2
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +26 -0
- data/README.md +59 -0
- data/app/assets/javascripts/admin/sort_products.js.coffee.erb +12 -0
- data/app/assets/javascripts/admin/spree_sort_products.js +2 -0
- data/app/assets/javascripts/admin/taxonomy_overrides.js +137 -0
- data/app/assets/stylesheets/admin/spree_sort_products.css +3 -0
- data/app/controllers/spree/admin/taxons_controller_decorator.rb +26 -0
- data/app/models/spree/product_decorator.rb +6 -0
- data/app/models/spree/products_taxon.rb +8 -0
- data/app/models/spree/taxon_decorator.rb +6 -0
- data/app/spree.rb +5 -0
- data/app/views/spree/admin/shared/_taxonomy_translations.html.erb +8 -0
- data/app/views/spree/admin/taxonomies/edit.erb +65 -0
- data/app/views/spree/admin/taxons/sort_products.html.erb +37 -0
- data/config/locales/en.yml +9 -0
- data/config/routes.rb +7 -0
- data/db/migrate/20130417071146_create_products_taxons.rb +6 -0
- data/lib/generators/spree_sort_products/install/install_generator.rb +27 -0
- data/lib/spree_sort_products/engine.rb +26 -0
- data/lib/spree_sort_products.rb +2 -0
- metadata +214 -0
data/LICENSE
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
Copyright (c) 2013 Surya Tripathi
|
2
|
+
All rights reserved.
|
3
|
+
|
4
|
+
Redistribution and use in source and binary forms, with or without modification,
|
5
|
+
are permitted provided that the following conditions are met:
|
6
|
+
|
7
|
+
* Redistributions of source code must retain the above copyright notice,
|
8
|
+
this list of conditions and the following disclaimer.
|
9
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
10
|
+
this list of conditions and the following disclaimer in the documentation
|
11
|
+
and/or other materials provided with the distribution.
|
12
|
+
* Neither the name Spree nor the names of its contributors may be used to
|
13
|
+
endorse or promote products derived from this software without specific
|
14
|
+
prior written permission.
|
15
|
+
|
16
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
17
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
18
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
19
|
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
20
|
+
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
21
|
+
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
22
|
+
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
23
|
+
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
24
|
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
25
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
26
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/README.md
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
# Welcome to Spree Sort Products
|
2
|
+
|
3
|
+
Spree Sort Products extends the ability of a taxon on its products to be sorted from the web interface using the drag and drop behavior.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
### Inside your rails application with Spree installed include the following line in your Gemfile:
|
8
|
+
* Get the latest greatest from github:
|
9
|
+
|
10
|
+
```ruby
|
11
|
+
gem 'spree_sort_products' , :git => 'git://github.com/suryart/spree_sort_products.git'
|
12
|
+
```
|
13
|
+
|
14
|
+
* Get the 1-3-stable branch for Spree 1.3.x from github:
|
15
|
+
|
16
|
+
```ruby
|
17
|
+
gem 'spree_sort_products' , :git => 'git://github.com/suryart/spree_sort_products.git', :branch => '1-3-stable'
|
18
|
+
```
|
19
|
+
|
20
|
+
* Or get it from rubygems.org by mentioning the following line in your Gemfile:
|
21
|
+
|
22
|
+
```ruby
|
23
|
+
gem 'spree_sort_products', '1.3.2'
|
24
|
+
```
|
25
|
+
|
26
|
+
## Caution
|
27
|
+
|
28
|
+
Just make sure that you have **admin/taxonomy_overrides** and **admin/sort_products** files precompiled. If it's not happening by default then please add/edit this in your **config/environments/production.rb** file:
|
29
|
+
|
30
|
+
Rails.application.config.assets.precompile += %w(admin/taxonomy_overrides admin/sort_products)
|
31
|
+
|
32
|
+
### Then run the following commands:
|
33
|
+
|
34
|
+
$ bundle install
|
35
|
+
$ rails g spree_sort_products:install
|
36
|
+
$ rake db:migrate
|
37
|
+
$ rails s
|
38
|
+
|
39
|
+
## Testing
|
40
|
+
|
41
|
+
Be sure to bundle your dependencies and then create a dummy test app for the specs to run against.
|
42
|
+
|
43
|
+
$ bundle
|
44
|
+
$ bundle exec rake test_app
|
45
|
+
$ bundle exec rspec spec
|
46
|
+
|
47
|
+
## Contributing
|
48
|
+
|
49
|
+
1. [Fork](https://help.github.com/articles/fork-a-repo) the project
|
50
|
+
2. Make one or more well commented and clean commits to the repository. You can make a new branch here if you are modifying more than one part or feature.
|
51
|
+
3. Add tests for it. This is important so I don’t break it in a future version unintentionally.
|
52
|
+
4. Perform a [pull request](https://help.github.com/articles/using-pull-requests) in github's web interface.
|
53
|
+
|
54
|
+
## NOTE
|
55
|
+
|
56
|
+
The current version supports Spree 1.3.0 or above. Older versions of Spree are unlikely to work, so attempt at your own risk. Just send pull requests of patches for different versions, I will be happy to release your patch.
|
57
|
+
|
58
|
+
## License
|
59
|
+
Copyright (c) 2013 Surya Tripathi, released under the New BSD License
|
@@ -0,0 +1,12 @@
|
|
1
|
+
saveOrder = ->
|
2
|
+
data = $("#products li").map ->
|
3
|
+
$(this).children().attr("value")
|
4
|
+
.get()
|
5
|
+
$("input[name=product_positions]").val data.join(",")
|
6
|
+
$("#save_order").html '<button class="button btn-primary"><i class="icon-ok icon-white"></i> <%= I18n.t(:save_sorted_order) %></button>'
|
7
|
+
|
8
|
+
$("#products, #list2").dragsort
|
9
|
+
dragSelector: "div"
|
10
|
+
dragBetween: true
|
11
|
+
dragEnd: saveOrder
|
12
|
+
placeHolderTemplate: "<li class='placeHolder'><div></div></li>"
|
@@ -0,0 +1,137 @@
|
|
1
|
+
var taxonomy_id;
|
2
|
+
|
3
|
+
$(document).ready(function(){
|
4
|
+
if(taxonomy_id!=undefined){
|
5
|
+
|
6
|
+
base_url = $("#taxonomy_tree").data("url").split("?")[0] + "/" ;
|
7
|
+
child_url = base_url.replace("/taxons", "/get_children.json");
|
8
|
+
|
9
|
+
is_cut = false;
|
10
|
+
last_rollback = null;
|
11
|
+
|
12
|
+
var conf = {
|
13
|
+
json_data : {
|
14
|
+
"data" : initial,
|
15
|
+
"ajax" : {
|
16
|
+
"url" : child_url,
|
17
|
+
"data" : function (n) {
|
18
|
+
return { parent_id : n.attr ? n.attr("id") : 0 };
|
19
|
+
}
|
20
|
+
}
|
21
|
+
},
|
22
|
+
"themes" : {
|
23
|
+
"theme" : "apple",
|
24
|
+
"url" : "/assets/jquery.jstree/themes/apple/style.css"
|
25
|
+
},
|
26
|
+
"strings" : {
|
27
|
+
"new_node" : new_taxon,
|
28
|
+
"loading" : Spree.translations.loading + "..."
|
29
|
+
},
|
30
|
+
"crrm" : {
|
31
|
+
"move" : {
|
32
|
+
"check_move" : function (m) {
|
33
|
+
var position = m.cp;
|
34
|
+
var node = m.o;
|
35
|
+
var new_parent = m.np;
|
36
|
+
|
37
|
+
if(!new_parent) return false; //no parent
|
38
|
+
|
39
|
+
if(node.attr("rel")=="root") return false; //can't drag root
|
40
|
+
|
41
|
+
if(new_parent.attr("id")=="taxonomy_tree" && position==0) return false; // can't drop before root
|
42
|
+
|
43
|
+
return true;
|
44
|
+
|
45
|
+
}
|
46
|
+
}
|
47
|
+
},
|
48
|
+
"contextmenu" : {
|
49
|
+
"items" : function(obj) {
|
50
|
+
var id_of_node = obj.attr("id");
|
51
|
+
var type_of_node = obj.attr("rel");
|
52
|
+
var menu = {};
|
53
|
+
if(type_of_node == "root") {
|
54
|
+
menu = {
|
55
|
+
"create" : {
|
56
|
+
"label" : "<i class='icon-plus'></i> " + Spree.translations.add,
|
57
|
+
"action" : function (obj) { this.create(obj); }
|
58
|
+
},
|
59
|
+
"paste" : {
|
60
|
+
"separator_before" : true,
|
61
|
+
"label" : "<i class='icon-paste'></i> " + Spree.translations.paste,
|
62
|
+
"action" : function (obj) { is_cut = false; this.paste(obj); },
|
63
|
+
"_disabled" : is_cut == false
|
64
|
+
},
|
65
|
+
"edit" : {
|
66
|
+
"separator_before" : true,
|
67
|
+
"label" : "<i class='icon-edit'></i> " + Spree.translations.edit,
|
68
|
+
"action" : function (obj) { window.location = base_url + obj.attr("id") + "/edit/"; }
|
69
|
+
},
|
70
|
+
"sort" : {
|
71
|
+
"separator_before" : true,
|
72
|
+
"label" : "<i class='icon-th'></i> " + Spree.taxonomy_translations.sort_products,
|
73
|
+
"action" : function (obj) { window.location = base_url + obj.attr("id") + "/sort_products/"; }
|
74
|
+
}
|
75
|
+
}
|
76
|
+
} else {
|
77
|
+
menu = {
|
78
|
+
"create" : {
|
79
|
+
"label" : "<i class='icon-plus'></i> " + Spree.translations.add,
|
80
|
+
"action" : function (obj) { this.create(obj); }
|
81
|
+
},
|
82
|
+
"rename" : {
|
83
|
+
"label" : "<i class='icon-pencil'></i> " + Spree.translations.rename,
|
84
|
+
"action" : function (obj) { this.rename(obj); }
|
85
|
+
},
|
86
|
+
"remove" : {
|
87
|
+
"label" : "<i class='icon-trash'></i> " + Spree.translations.remove,
|
88
|
+
"action" : function (obj) { this.remove(obj); }
|
89
|
+
},
|
90
|
+
"cut" : {
|
91
|
+
"separator_before" : true,
|
92
|
+
"label" : "<i class='icon-cut'></i> " + Spree.translations.cut,
|
93
|
+
"action" : function (obj) { is_cut = true; this.cut(obj); }
|
94
|
+
},
|
95
|
+
"paste" : {
|
96
|
+
"label" : "<i class='icon-paste'></i> " + Spree.translations.paste,
|
97
|
+
"action" : function (obj) { is_cut = false; this.paste(obj); },
|
98
|
+
"_disabled" : is_cut == false
|
99
|
+
},
|
100
|
+
"edit" : {
|
101
|
+
"separator_before" : true,
|
102
|
+
"label" : "<i class='icon-edit'></i> " + Spree.translations.edit,
|
103
|
+
"action" : function (obj) { window.location = base_url + obj.attr("id") + "/edit/"; }
|
104
|
+
},
|
105
|
+
"sort" : {
|
106
|
+
"separator_before" : true,
|
107
|
+
"label" : "<i class='icon-th'></i> " + Spree.taxonomy_translations.sort_products,
|
108
|
+
"action" : function (obj) { window.location = base_url + obj.attr("id") + "/sort_products/"; }
|
109
|
+
}
|
110
|
+
}
|
111
|
+
}
|
112
|
+
return menu;
|
113
|
+
}
|
114
|
+
},
|
115
|
+
|
116
|
+
"plugins" : [ "themes", "json_data", "dnd", "crrm", "contextmenu"]
|
117
|
+
}
|
118
|
+
|
119
|
+
$("#taxonomy_tree").jstree(conf)
|
120
|
+
.bind("move_node.jstree", handle_move)
|
121
|
+
.bind("remove.jstree", handle_delete)
|
122
|
+
.bind("create.jstree", handle_create)
|
123
|
+
.bind("rename.jstree", handle_rename);
|
124
|
+
|
125
|
+
$("#taxonomy_tree a").on("dblclick", function (e) {
|
126
|
+
$("#taxonomy_tree").jstree("rename", this)
|
127
|
+
});
|
128
|
+
|
129
|
+
|
130
|
+
$(document).keypress(function(e){
|
131
|
+
//surpress form submit on enter/return
|
132
|
+
if (e.keyCode == 13){
|
133
|
+
e.preventDefault();
|
134
|
+
}
|
135
|
+
});
|
136
|
+
}
|
137
|
+
});
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Spree
|
2
|
+
module Admin
|
3
|
+
TaxonsController.class_eval do
|
4
|
+
before_filter :load_taxon, :only => [:sort_products, :update_products]
|
5
|
+
|
6
|
+
def sort_products
|
7
|
+
@products = @taxon.products
|
8
|
+
end
|
9
|
+
|
10
|
+
def update_products
|
11
|
+
products = @taxon.products_taxons
|
12
|
+
product_ids_positions = params[:product_positions].split(",").map(&:to_i)
|
13
|
+
product_ids_positions.each_with_index do |id, index|
|
14
|
+
product = products.detect{|p| p.product_id == id }
|
15
|
+
product.update_attributes(:position => index) unless product.nil?
|
16
|
+
end
|
17
|
+
redirect_to sort_products_taxons_path(@taxonomy, @taxon), :notice => t(:sort_products_taxons_update_message)
|
18
|
+
end
|
19
|
+
|
20
|
+
def load_taxon
|
21
|
+
@taxonomy = Taxonomy.find(params[:taxonomy_id])
|
22
|
+
@taxon = Taxon.find(params[:id])
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/app/spree.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
<%= render :partial => 'spree/admin/shared/configuration_menu' %>
|
2
|
+
|
3
|
+
<%= render :partial => 'js_head' %>
|
4
|
+
|
5
|
+
<% content_for :page_title do %>
|
6
|
+
<%= t(:taxonomy_edit) %>
|
7
|
+
<% end %>
|
8
|
+
|
9
|
+
<% content_for :page_actions do %>
|
10
|
+
<li>
|
11
|
+
<%= button_link_to t(:back_to_taxonomies_list), spree.admin_taxonomies_path, :icon => 'icon-arrow-left' %>
|
12
|
+
</li>
|
13
|
+
<% end %>
|
14
|
+
|
15
|
+
<div id="ajax_error" class="errorExplanation" style="display:none;"></div>
|
16
|
+
|
17
|
+
<%= form_for [:admin, @taxonomy] do |f| %>
|
18
|
+
<fieldset class="no-border-top">
|
19
|
+
<%= render :partial => 'form', :locals => { :f => f } %>
|
20
|
+
<div>
|
21
|
+
<%= label_tag nil, t(:tree) %><br />
|
22
|
+
<div id="taxonomy_tree" class="tree" data-url="<%= admin_taxonomy_taxons_path @taxonomy %>"></div>
|
23
|
+
</div>
|
24
|
+
<div id="progress" style="display:none;">
|
25
|
+
<%= image_tag 'spinner.gif', :title => 'Spinner', :style => "vertical-align:bottom;" %> <%= t(:updating) %>..
|
26
|
+
</div>
|
27
|
+
|
28
|
+
<div class="info"><%= t(:taxonomy_tree_instruction) %></div>
|
29
|
+
|
30
|
+
<br>
|
31
|
+
|
32
|
+
<div class="filter-actions actions">
|
33
|
+
<%= button t(:update), 'icon-refresh' %>
|
34
|
+
<span class="or"><%= t(:or) %></span>
|
35
|
+
<%= button_link_to t(:cancel), admin_taxonomies_path, :icon => 'icon-remove' %>
|
36
|
+
</div>
|
37
|
+
</fieldset>
|
38
|
+
<% end %>
|
39
|
+
|
40
|
+
<% content_for :head do %>
|
41
|
+
<%= javascript_include_tag 'admin/taxonomy_overrides' %>
|
42
|
+
<%= render :partial => 'spree/admin/shared/taxonomy_translations' %>
|
43
|
+
|
44
|
+
<%= javascript_tag do -%>
|
45
|
+
var initial = [
|
46
|
+
{ "attr" :
|
47
|
+
{ "id" : "<%= @taxonomy.root.id %>", "rel" : "root" },
|
48
|
+
"data" : "<%= escape_javascript(raw(@taxonomy.root.name)) %>",
|
49
|
+
"state" : "open",
|
50
|
+
"children" : [
|
51
|
+
<% @taxonomy.root.children.each_with_index do |taxon,i| %>
|
52
|
+
{
|
53
|
+
"attr" :
|
54
|
+
{ "id" : "<%= taxon.id %>"},
|
55
|
+
"data" : "<%= escape_javascript(raw(taxon.name)) %>"
|
56
|
+
<% unless taxon.children.empty? %>
|
57
|
+
,"state" : "closed"
|
58
|
+
<% end %>
|
59
|
+
}<%= ',' if i < (@taxonomy.root.children.size - 1) %>
|
60
|
+
<% end %>
|
61
|
+
]
|
62
|
+
}
|
63
|
+
];
|
64
|
+
<% end -%>
|
65
|
+
<% end %>
|
@@ -0,0 +1,37 @@
|
|
1
|
+
<%= render :partial => 'spree/admin/shared/configuration_menu' %>
|
2
|
+
|
3
|
+
<% content_for :page_title do %>
|
4
|
+
<%= t(:sort_taxon_products) %> "<%= @taxon.name %>"
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<%= t(:sort_products_hint_message) %>
|
8
|
+
|
9
|
+
<div id="ajax_error" class="errorExplanation" style="display:none;"></div>
|
10
|
+
<% content_for :page_actions do %>
|
11
|
+
<%= form_for [:update_products, :admin, @taxonomy, @taxon], :method => :post do |f| %>
|
12
|
+
<%= hidden_field_tag :taxon_id, @taxon_id %>
|
13
|
+
<%= hidden_field_tag :product_positions, 0 %>
|
14
|
+
|
15
|
+
<li id="save_order">
|
16
|
+
<%= button_link_to t(:back_to_taxonomies_list), spree.admin_taxonomies_path, :icon => 'icon-arrow-left' %>
|
17
|
+
</li>
|
18
|
+
<% end %>
|
19
|
+
<% end %>
|
20
|
+
|
21
|
+
<ul id="products" class="thumbnails">
|
22
|
+
<% @products.each do |product| %>
|
23
|
+
<%= content_tag_for :li, product, :class=> "three columns", :style => 'list-style-type: none' do %>
|
24
|
+
<div class="two columns thumbnail" style = "cursor: pointer;" value="<%= product.id %>">
|
25
|
+
<%= product_image(product, :width => "145", :height => "190", :id=>"image-map") %>
|
26
|
+
<div class="caption">
|
27
|
+
<% product_name = product.name.split(" ") %>
|
28
|
+
<% product_name.delete(product_name.last) %>
|
29
|
+
<h5><%= product_name.join(" ") %></h5>
|
30
|
+
<p><%= truncate(product.description, :length => 45, :separator => ' ') %></p>
|
31
|
+
</div>
|
32
|
+
</div>
|
33
|
+
<% end %>
|
34
|
+
<% end %>
|
35
|
+
</ul>
|
36
|
+
|
37
|
+
<%= javascript_include_tag 'admin/sort_products' %>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# You can add more files in this directory for other locales.
|
2
|
+
# See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
|
3
|
+
|
4
|
+
en:
|
5
|
+
save_sorted_order: "Save the sorted position"
|
6
|
+
sort_products: "Sort products"
|
7
|
+
sort_products_hint_message: "Drag and Drop products to sort their position and then click on Save button to save their position."
|
8
|
+
sort_products_taxons_update_message: "Products have been re-positioned successfully!"
|
9
|
+
sort_taxon_products: "Sort products in taxon:"
|
data/config/routes.rb
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
Spree::Core::Engine.routes.draw do
|
2
|
+
# Add extension routes here
|
3
|
+
|
4
|
+
match 'admin/taxonomies/:taxonomy_id/taxons/:id/sort_products/' => 'admin/taxons#sort_products', :as => :sort_products_taxons
|
5
|
+
match 'admin/taxonomies/:taxonomy_id/taxons/:id/update_products/' => 'admin/taxons#update_products', :as => :update_products_admin_taxonomy_taxon, :method => :post
|
6
|
+
|
7
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module SpreeSortProducts
|
2
|
+
module Generators
|
3
|
+
class InstallGenerator < Rails::Generators::Base
|
4
|
+
|
5
|
+
def add_javascripts
|
6
|
+
append_file 'app/assets/javascripts/admin/all.js', "//= require admin/spree_sort_products\n"
|
7
|
+
end
|
8
|
+
|
9
|
+
def add_stylesheets
|
10
|
+
inject_into_file 'app/assets/stylesheets/admin/all.css', " *= require admin/spree_sort_products\n", :before => /\*\//, :verbose => true
|
11
|
+
end
|
12
|
+
|
13
|
+
def add_migrations
|
14
|
+
run 'bundle exec rake railties:install:migrations FROM=spree_sort_products'
|
15
|
+
end
|
16
|
+
|
17
|
+
def run_migrations
|
18
|
+
res = ask 'Would you like to run the migrations now? [Y/n]'
|
19
|
+
if res == '' || res.downcase == 'y'
|
20
|
+
run 'bundle exec rake db:migrate'
|
21
|
+
else
|
22
|
+
puts 'Skipping rake db:migrate, don\'t forget to run it!'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module SpreeSortProducts
|
2
|
+
class Engine < Rails::Engine
|
3
|
+
require 'spree/core'
|
4
|
+
isolate_namespace Spree
|
5
|
+
engine_name 'spree_sort_products'
|
6
|
+
|
7
|
+
config.autoload_paths += %W(#{config.root}/lib)
|
8
|
+
|
9
|
+
# use rspec for tests
|
10
|
+
config.generators do |g|
|
11
|
+
g.test_framework :rspec
|
12
|
+
end
|
13
|
+
|
14
|
+
initializer :assets do |config|
|
15
|
+
Rails.application.config.assets.precompile += %w(admin/taxonomy_overrides admin/sort_products)
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.activate
|
19
|
+
Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')) do |c|
|
20
|
+
Rails.configuration.cache_classes ? require(c) : load(c)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
config.to_prepare &method(:activate).to_proc
|
25
|
+
end
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,214 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: spree_sort_products
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.3.2
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Surya Tripathi
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-04-17 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: spree_core
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.3.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.3.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: capybara
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 2.0.2
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 2.0.2
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: coffee-rails
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: factory_girl_rails
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 4.2.0
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 4.2.0
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: ffaker
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: rspec-rails
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ~>
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '2.9'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '2.9'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: guard-rspec
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ~>
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '2.3'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ~>
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '2.3'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: sass-rails
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
type: :development
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: sqlite3
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ! '>='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
type: :development
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
description: Spree Sort Products extends the ability of a taxon on its products to
|
159
|
+
be sorted from the web interface using the drag and drop behavior.
|
160
|
+
email: raj.surya19@gmail.com
|
161
|
+
executables: []
|
162
|
+
extensions: []
|
163
|
+
extra_rdoc_files: []
|
164
|
+
files:
|
165
|
+
- LICENSE
|
166
|
+
- README.md
|
167
|
+
- app/models/spree/product_decorator.rb
|
168
|
+
- app/models/spree/taxon_decorator.rb
|
169
|
+
- app/models/spree/products_taxon.rb
|
170
|
+
- app/assets/stylesheets/admin/spree_sort_products.css
|
171
|
+
- app/assets/javascripts/admin/taxonomy_overrides.js
|
172
|
+
- app/assets/javascripts/admin/spree_sort_products.js
|
173
|
+
- app/assets/javascripts/admin/sort_products.js.coffee.erb
|
174
|
+
- app/spree.rb
|
175
|
+
- app/views/spree/admin/shared/_taxonomy_translations.html.erb
|
176
|
+
- app/views/spree/admin/taxons/sort_products.html.erb
|
177
|
+
- app/views/spree/admin/taxonomies/edit.erb
|
178
|
+
- app/controllers/spree/admin/taxons_controller_decorator.rb
|
179
|
+
- config/routes.rb
|
180
|
+
- config/locales/en.yml
|
181
|
+
- lib/spree_sort_products/engine.rb
|
182
|
+
- lib/generators/spree_sort_products/install/install_generator.rb
|
183
|
+
- lib/spree_sort_products.rb
|
184
|
+
- db/migrate/20130417071146_create_products_taxons.rb
|
185
|
+
homepage: https://github.com/suryart/spree_sort_products
|
186
|
+
licenses: []
|
187
|
+
post_install_message:
|
188
|
+
rdoc_options: []
|
189
|
+
require_paths:
|
190
|
+
- lib
|
191
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
192
|
+
none: false
|
193
|
+
requirements:
|
194
|
+
- - ! '>='
|
195
|
+
- !ruby/object:Gem::Version
|
196
|
+
version: 1.9.2
|
197
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
198
|
+
none: false
|
199
|
+
requirements:
|
200
|
+
- - ! '>='
|
201
|
+
- !ruby/object:Gem::Version
|
202
|
+
version: '0'
|
203
|
+
segments:
|
204
|
+
- 0
|
205
|
+
hash: 547993373614995130
|
206
|
+
requirements:
|
207
|
+
- none
|
208
|
+
rubyforge_project:
|
209
|
+
rubygems_version: 1.8.24
|
210
|
+
signing_key:
|
211
|
+
specification_version: 3
|
212
|
+
summary: Spree Sort Products gives you ability to sort products with in a taxon for
|
213
|
+
spree.
|
214
|
+
test_files: []
|