spree_minicart 0.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.
data/.bundle/config ADDED
@@ -0,0 +1,2 @@
1
+ ---
2
+ BUNDLE_DISABLE_SHARED_GEMS: '1'
data/.gitignore ADDED
@@ -0,0 +1,12 @@
1
+ \#*
2
+ *~
3
+ .#*
4
+ .DS_Store
5
+ .idea
6
+ .project
7
+ tmp
8
+ nbproject
9
+ *.swp
10
+ spec/dummy
11
+ Gemfile.lock
12
+ .rvmrc
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --colour
data/Gemfile ADDED
@@ -0,0 +1,22 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'mysql2'
4
+ group :test do
5
+ gem 'ffaker'
6
+ gem 'rspec-rails'
7
+ gem 'capybara'
8
+ gem 'launchy', '2.0.5'
9
+ end
10
+
11
+ if RUBY_VERSION < "1.9"
12
+ gem "ruby-debug"
13
+ else
14
+ gem "ruby-debug19"
15
+ end
16
+
17
+ group :assets do
18
+ gem 'sass-rails', '~> 3.1.5'
19
+ gem 'uglifier', '>= 1.0.3'
20
+ end
21
+
22
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,26 @@
1
+ Copyright (c) 2012 [name of plugin creator]
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,87 @@
1
+ SpreeMinicart
2
+ =============
3
+
4
+ Minicart feature extracted from [http://www.501kfactory.com](http://www.501kfactory.com).
5
+
6
+ Your shopping cart is an incredibly important part of your e-commerce website.
7
+
8
+ Minicart allows customer to add/remove an item from their cart without ever leaving the page they're on.
9
+ Let your customers preview their cart before they start the checkout process.
10
+
11
+ Installation
12
+ ------------
13
+
14
+ To install Spree Minicart, just add the following to your Gemfile:
15
+
16
+ ```ruby
17
+ gem 'spree_minicart', '0.0.1'
18
+ ```
19
+
20
+ Now, bundle up with:
21
+
22
+ ```ruby
23
+ bundle
24
+ ```
25
+
26
+ And finally run the install generator to automatically insert 'require store/spree_minicart' in your asset file.
27
+
28
+ ```ruby
29
+ rails g spree_minicart:install
30
+ ```
31
+
32
+ Make sure manifest is inserted correctly, it should look like :
33
+ - app/assets/stylesheets/store/all.css :
34
+
35
+ ```css
36
+ /*
37
+ *= require store/spree_core
38
+ *= require store/spree_auth
39
+ *= require store/spree_api
40
+ *= require store/spree_promo
41
+
42
+ *= require store/spree_minicart
43
+ */
44
+ ```
45
+
46
+ - app/assets/javascripts/store/all.js :
47
+
48
+ ```javascript
49
+ //= require store/spree_core
50
+ //= require store/spree_auth
51
+ //= require store/spree_api
52
+ //= require store/spree_promo
53
+ //= require store/spree_minicart
54
+ ```
55
+
56
+ Example
57
+ -------
58
+
59
+ ![Spree Minicart](http://i41.tinypic.com/2n8zszs.png)
60
+
61
+ Todo
62
+ -------
63
+
64
+ - Better html markup and HTML test for customization
65
+ - Better css design
66
+ - Can update minicart's item quantity
67
+
68
+ Testing
69
+ -------
70
+
71
+ Be sure to bundle your dependencies and then create a dummy test app for the specs to run against.
72
+
73
+ $ bundle
74
+ $ bundle exec rake test app
75
+ $ bundle exec rspec spec
76
+
77
+ Compatibility
78
+ ------------
79
+
80
+ Tested under Spree 1.0.0
81
+
82
+ Contribute
83
+ ----------
84
+
85
+ Pull requests for features and bug fix with tests are welcome.
86
+
87
+ Copyright (c) 2012 [Stéphane Bounmy], released under the New BSD License
data/Rakefile ADDED
@@ -0,0 +1,29 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/packagetask'
4
+ require 'rubygems/package_task'
5
+ require 'rspec/core/rake_task'
6
+ require 'spree/core/testing_support/common_rake'
7
+
8
+ RSpec::Core::RakeTask.new
9
+
10
+ task :default => [:spec]
11
+
12
+ spec = eval(File.read('spree_minicart.gemspec'))
13
+
14
+ Gem::PackageTask.new(spec) do |p|
15
+ p.gem_spec = spec
16
+ end
17
+
18
+ desc "Release to gemcutter"
19
+ task :release => :package do
20
+ require 'rake/gemcutter'
21
+ Rake::Gemcutter::Tasks.new(spec).define
22
+ Rake::Task['gem:push'].invoke
23
+ end
24
+
25
+ desc "Generates a dummy app for testing"
26
+ task :test_app do
27
+ ENV['LIB_NAME'] = 'spree_minicart'
28
+ Rake::Task['common:test_app'].invoke
29
+ end
data/Versionfile ADDED
@@ -0,0 +1,9 @@
1
+ # This file is used to designate compatibilty with different versions of Spree
2
+ # Please see http://spreecommerce.com/documentation/extensions.html#versionfile for details
3
+
4
+ # Examples
5
+ #
6
+ # "0.70.x" => { :branch => "master"}
7
+ # "0.60.x" => { :branch => "0-60-stable" }
8
+ # "0.40.x" => { :tag => "v1.0.0", :version => "1.0.0" }
9
+
@@ -0,0 +1 @@
1
+ //= require admin/spree_core
@@ -0,0 +1,55 @@
1
+ //= require store/spree_core
2
+ //= require store/jquery.hoverintent
3
+
4
+ (function($){
5
+ $(document).ready(function(){
6
+ var config = {
7
+ over: function(){
8
+ $("#minicart").slideDown();
9
+ },
10
+ timeout: 250, // number = milliseconds delay before onMouseOut
11
+ out: function(){
12
+ $("#minicart").slideUp();
13
+ }
14
+ };
15
+
16
+ $("#link-to-cart").hoverIntent( config )
17
+
18
+ // hoverintent items created by js http://rndnext.blogspot.com/2009/02/jquery-live-and-plugins.html
19
+ $("ul#minicart-items li").live('mouseover', function(e)
20
+ {
21
+ if (!$(this).data('init'))
22
+ {
23
+ $(this).data('init', true);
24
+ $(this).hoverIntent
25
+ ({
26
+ over: function(){
27
+ $(this).find("[data-hook='cart_item_description']").hide()
28
+ $(this).find("[data-hook='cart_item_actions']").show()
29
+ },
30
+ timeout: 100, // number = milliseconds delay before onMouseOut
31
+ out: function(){
32
+ $(this).find("[data-hook='cart_item_description']").show()
33
+ $(this).find("[data-hook='cart_item_actions']").hide()
34
+ }
35
+ });
36
+ $(this).trigger(e);
37
+ }
38
+ });
39
+
40
+
41
+ $('form#update-minicart a.delete').live('click', function(e){
42
+ $(this).parent().siblings('div[data-hook="cart_item_quantity"]').find("input.line_item_quantity").val(0);
43
+ $(this).parents('form').first().submit();
44
+ e.preventDefault();
45
+ });
46
+
47
+ $("form[data-remote]").live("ajax:beforeSend", function(){
48
+ $("#progress").slideDown();
49
+ })
50
+
51
+ $("form[data-remote]").live("ajax:complete", function(){
52
+ $("#progress").slideUp();
53
+ })
54
+ });
55
+ })(jQuery);
@@ -0,0 +1,3 @@
1
+ /*
2
+ *= require admin/spree_core
3
+ */
@@ -0,0 +1,67 @@
1
+ /*
2
+ *= require store/spree_core
3
+ */
4
+
5
+ #progress {
6
+ display:none;
7
+ z-index: 99;
8
+ top: 0px;
9
+ text-align: center;
10
+ background: #00ADEE;
11
+ padding: 4px 10px;
12
+ color: white;
13
+ margin: 0 auto;
14
+ position: fixed;
15
+ left:50%;
16
+ }
17
+
18
+ nav #main-nav-bar li#link-to-cart #minicart a{
19
+ font-size: 12px
20
+ }
21
+
22
+ nav #main-nav-bar li#link-to-cart #minicart a.button{
23
+ font-size: 12px;
24
+ color: white !important;
25
+ }
26
+
27
+ ul#minicart-items {
28
+ margin: 0 10px;
29
+ }
30
+
31
+
32
+ ul#minicart-items li{
33
+ width: 90px;
34
+ position: relative;
35
+ float: left;
36
+ min-height: 180px;
37
+ padding: 5px 10px 0;
38
+ text-align: center;
39
+ text-transform: none;
40
+ }
41
+
42
+ #minicart {
43
+ background-color:aliceBlue;
44
+ z-index: 100;
45
+ position: absolute;
46
+ right: 16px;
47
+ padding: 10px;
48
+ border: 1px solid #DEDEDE;
49
+ float:right;
50
+ display: none;
51
+ width: 300px;
52
+ }
53
+ ul#minicart-items li img{
54
+ display: block;
55
+ margin-left: 20px;
56
+ }
57
+
58
+ #minicart div#minicart-details a.button.checkout{
59
+ float:right;
60
+ }
61
+
62
+ #link-to-cart span.amount {
63
+ display: none;
64
+ }
65
+ #minicart .minicart-actions {
66
+ display: none;
67
+ }
@@ -0,0 +1,5 @@
1
+ module Spree
2
+ OrdersController.class_eval do
3
+ respond_to :js, :only => [:populate, :update]
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ # insert loading message
2
+ Deface::Override.new(:virtual_path => 'spree/layouts/spree_application',
3
+ :name => 'append_loading_message',
4
+ :insert_top => "#wrapper",
5
+ :text => %q{<div id="progress"><%= image_tag 'admin/progress.gif' %> <%= t(:loading) %>...</div>})
@@ -0,0 +1,11 @@
1
+ Deface::Override.new(:virtual_path => 'spree/shared/_store_menu',
2
+ :name => 'add_mini_cart',
3
+ :insert_bottom => "#link-to-cart",
4
+ :partial => "spree/shared/minicart")
5
+
6
+ Deface::Override.new(:virtual_path => 'spree/products/_cart_form',
7
+ :name => 'set_remote_to_true_to_add_to_cart',
8
+ :replace => "code[erb-loud]:contains('form_for :order, :url => populate_orders_url do |f|')",
9
+ :text => "<%= form_for :order, :url => populate_orders_url, :remote => true do |f| %>",
10
+ :original => "<%= form_for :order, :url => populate_orders_url do |f| %>")
11
+
@@ -0,0 +1,14 @@
1
+ // Refresh minicart count
2
+ $("#link-to-cart a").replaceWith('<%= escape_javascript link_to_cart %>')
3
+
4
+ // Refresh minicart line items
5
+ $("#minicart").replaceWith('<%= escape_javascript render("spree/shared/minicart") %>')
6
+
7
+ // Sliding down minicart
8
+ $("#link-to-cart #minicart").slideDown()
9
+
10
+ // Sliding up minicart
11
+ setTimeout(function () {
12
+ $("#link-to-cart #minicart").slideUp()
13
+ },
14
+ 5000);
@@ -0,0 +1,7 @@
1
+ // Refresh minicart count
2
+ $("#link-to-cart a").replaceWith('<%= escape_javascript link_to_cart %>')
3
+
4
+ // Refresh minicart line items
5
+ $("#minicart").replaceWith('<%= escape_javascript render("spree/shared/minicart") %>')
6
+
7
+ $("#progress").slideUp();
@@ -0,0 +1,39 @@
1
+ <% @order ||= current_order(true) %>
2
+ <div id="minicart">
3
+ <% @body_id = 'cart' %>
4
+
5
+ <% if @order.line_items.empty? %>
6
+
7
+ <div data-hook="empty_cart">
8
+ <p><%= t(:your_cart_is_empty) %></p>
9
+ <p><%= link_to t(:continue_shopping), products_path, :class => 'button continue' %></p>
10
+ </div>
11
+
12
+ <% else %>
13
+ <div data-hook="outside_cart_form">
14
+ <div id="minicart-details" data-hook="minicart_details" class="clearfix">
15
+ <p>
16
+ <span><%= t(:subtotal) %>: <span class="order-total"><%= order_subtotal(@order) %></span></span>
17
+ <%= link_to t(:checkout), checkout_path, :class => 'button checkout primary', :id => 'checkout-link' %>
18
+ </p>
19
+ </div>
20
+ <%= form_for @order, :url => update_cart_path, :html => {:id => 'update-minicart'}, :remote => true do |order_form| %>
21
+ <div data-hook="inside_cart_form">
22
+
23
+ <div data-hook="cart_items" class="clearfix">
24
+ <%= render :partial => 'spree/shared/error_messages', :locals => { :target => @order } %>
25
+ <ul id='minicart-items' class="clearfix">
26
+ <%= order_form.fields_for :line_items do |item_form| %>
27
+ <%= render :partial => 'spree/shared/minicart_line_items', :locals => { :variant => item_form.object.variant, :line_item => item_form.object, :item_form => item_form } %>
28
+ <% end %>
29
+ </ul>
30
+ </div>
31
+ <div id="minicart-footer" data-hook="minicart_footer">
32
+ <p><%= link_to t("view_shopping_cart"), cart_path, :class => 'button cart' %></p>
33
+ </div>
34
+ </div>
35
+ <% end %>
36
+ </div>
37
+ <% end %>
38
+
39
+ </div>
@@ -0,0 +1,32 @@
1
+ <li class="<%= cycle('', 'alt') %>">
2
+ <div data-hook="minicart_item_image">
3
+ <% if variant.images.length == 0 %>
4
+ <%= link_to mini_image(variant.product), variant.product %>
5
+ <% else %>
6
+ <%= link_to image_tag(variant.images.first.attachment.url(:mini)), variant.product %>
7
+ <% end %>
8
+ </div>
9
+ <div data-hook="cart_item_description">
10
+ <div data-hook="cart_item_name">
11
+ <span><%= link_to variant.product.name, product_path(variant.product) %></span>
12
+ <span><%= "x#{line_item.quantity}" -%></span>
13
+ <%= variant.options_text %>
14
+ <% if @order.insufficient_stock_lines.include? line_item %>
15
+ <span class="out-of-stock">
16
+ <%= variant.in_stock? ? t(:insufficient_stock, :on_hand => variant.on_hand) : t(:out_of_stock) %><br />
17
+ </span>
18
+ <% end %>
19
+ </div>
20
+ <div data-hook="cart_item_total">
21
+ <%= number_to_currency(line_item.price * line_item.quantity) unless line_item.quantity.nil? %>
22
+ </div>
23
+ </div>
24
+ <div class='minicart-actions' data-hook="cart_item_actions">
25
+ <div data-hook="cart_item_quantity">
26
+ <%= item_form.hidden_field :quantity, :min => 0, :class => "line_item_quantity" %>
27
+ </div>
28
+ <div data-hook="cart_item_delete">
29
+ <%= link_to t("delete"), '#', :class => 'delete', :id => "delete_#{dom_id(line_item)}" %>
30
+ </div>
31
+ </div>
32
+ </li>
@@ -0,0 +1,6 @@
1
+ # Sample localization file for English. 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
+ hello: "Hello world"
6
+ view_shopping_cart: "See Cart"
data/config/routes.rb ADDED
@@ -0,0 +1,3 @@
1
+ Spree::Core::Engine.routes.draw do
2
+ # Add your extension routes here
3
+ end
@@ -0,0 +1,70 @@
1
+ /**
2
+ * hoverIntent r6 // 2011.02.26 // jQuery 1.5.1+
3
+ * <http://cherne.net/brian/resources/jquery.hoverIntent.html>
4
+ *
5
+ * @param f onMouseOver function || An object with configuration options
6
+ * @param g onMouseOut function || Nothing (use configuration options object)
7
+ * @author Brian Cherne brian(at)cherne(dot)net
8
+ */
9
+ (function ($) {
10
+ $.fn.hoverIntent = function (f, g) {
11
+ var cfg = {
12
+ sensitivity: 7,
13
+ interval: 100,
14
+ timeout: 0
15
+ };
16
+ cfg = $.extend(cfg, g ? {
17
+ over: f,
18
+ out: g
19
+ } : f);
20
+ var cX, cY, pX, pY;
21
+ var track = function (ev) {
22
+ cX = ev.pageX;
23
+ cY = ev.pageY
24
+ };
25
+ var compare = function (ev, ob) {
26
+ ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t);
27
+ if ((Math.abs(pX - cX) + Math.abs(pY - cY)) < cfg.sensitivity) {
28
+ $(ob).unbind("mousemove", track);
29
+ ob.hoverIntent_s = 1;
30
+ return cfg.over.apply(ob, [ev])
31
+ } else {
32
+ pX = cX;
33
+ pY = cY;
34
+ ob.hoverIntent_t = setTimeout(function () {
35
+ compare(ev, ob)
36
+ }, cfg.interval)
37
+ }
38
+ };
39
+ var delay = function (ev, ob) {
40
+ ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t);
41
+ ob.hoverIntent_s = 0;
42
+ return cfg.out.apply(ob, [ev])
43
+ };
44
+ var handleHover = function (e) {
45
+ var ev = jQuery.extend({}, e);
46
+ var ob = this;
47
+ if (ob.hoverIntent_t) {
48
+ ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t)
49
+ }
50
+ if (e.type == "mouseenter") {
51
+ pX = ev.pageX;
52
+ pY = ev.pageY;
53
+ $(ob).bind("mousemove", track);
54
+ if (ob.hoverIntent_s != 1) {
55
+ ob.hoverIntent_t = setTimeout(function () {
56
+ compare(ev, ob)
57
+ }, cfg.interval)
58
+ }
59
+ } else {
60
+ $(ob).unbind("mousemove", track);
61
+ if (ob.hoverIntent_s == 1) {
62
+ ob.hoverIntent_t = setTimeout(function () {
63
+ delay(ev, ob)
64
+ }, cfg.timeout)
65
+ }
66
+ }
67
+ };
68
+ return this.bind('mouseenter', handleHover).bind('mouseleave', handleHover)
69
+ }
70
+ })(jQuery);
@@ -0,0 +1,14 @@
1
+ module SpreeMinicart
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+
5
+ def add_javascripts
6
+ append_file "app/assets/javascripts/store/all.js", "//= require store/spree_minicart\n"
7
+ end
8
+
9
+ def add_stylesheets
10
+ inject_into_file "app/assets/stylesheets/store/all.css", " *= require store/spree_minicart\n", :before => /\*\//, :verbose => true
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,20 @@
1
+ module SpreeMinicart
2
+ class Engine < Rails::Engine
3
+ engine_name 'spree_minicart'
4
+
5
+ config.autoload_paths += %W(#{config.root}/lib)
6
+
7
+ # use rspec for tests
8
+ config.generators do |g|
9
+ g.test_framework :rspec
10
+ end
11
+
12
+ def self.activate
13
+ Dir.glob(File.join(File.dirname(__FILE__), "../../app/**/*_decorator*.rb")) do |c|
14
+ Rails.configuration.cache_classes ? require(c) : load(c)
15
+ end
16
+ end
17
+
18
+ config.to_prepare &method(:activate).to_proc
19
+ end
20
+ end
@@ -0,0 +1,2 @@
1
+ require 'spree_core'
2
+ require 'spree_minicart/engine'
data/script/rails ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ ENGINE_PATH = File.expand_path('../..', __FILE__)
5
+ load File.expand_path('../../spec/dummy/script/rails', __FILE__)
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ feature "minicart", :js => true do
4
+ background { @product = Factory(:product, :name => "ror mug", :price => 30) }
5
+
6
+ scenario "customer should be able to add and delete a product in the minicart" do
7
+ visit spree.products_path
8
+ click_link("ror mug")
9
+ click_button "Add To Cart"
10
+
11
+ within("#link-to-cart a") do
12
+ page.should have_content("(1)")
13
+ end
14
+
15
+ within("#minicart") do
16
+ page.should have_content("ror mug")
17
+ page.should have_content("$30")
18
+ end
19
+
20
+ page.execute_script '$("#minicart-items li").trigger("mouseenter")'
21
+ within "li div.minicart-actions" do
22
+ page.should have_content("Delete")
23
+ # manually sliding down the minicart actions, dont know why its not working
24
+ page.execute_script '$("#minicart-items li div.minicart-actions").slideDown()'
25
+ click_link "Delete"
26
+ end
27
+
28
+ URI.parse(current_url).path.should =~ /products/
29
+
30
+ within("#minicart") do
31
+ page.should_not have_content("ror mug")
32
+ page.should_not have_content("$30")
33
+ end
34
+
35
+ end
36
+
37
+ scenario 'minicart should not freak out standard cart', :js => false do
38
+ visit spree.products_path
39
+ click_link("ror mug")
40
+ click_button "Add To Cart"
41
+ URI.parse(current_url).path.should == "/cart"
42
+ end
43
+ end
@@ -0,0 +1,33 @@
1
+ # Configure Rails Environment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
+
6
+ require 'rspec/rails'
7
+
8
+ # Requires supporting ruby files with custom matchers and macros, etc,
9
+ # in spec/support/ and its subdirectories.
10
+ Dir[File.join(File.dirname(__FILE__), "support/**/*.rb")].each {|f| require f }
11
+
12
+ # Requires factories defined in spree_core
13
+ require 'spree/core/testing_support/factories'
14
+
15
+ RSpec.configure do |config|
16
+ # == Mock Framework
17
+ #
18
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
19
+ #
20
+ # config.mock_with :mocha
21
+ # config.mock_with :flexmock
22
+ # config.mock_with :rr
23
+ config.mock_with :rspec
24
+
25
+ # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
26
+ config.fixture_path = "#{::Rails.root}/spec/fixtures"
27
+
28
+ # If you're not using ActiveRecord, or you'd prefer not to run each of your
29
+ # examples within a transaction, remove the following line or assign false
30
+ # instead of true.
31
+ config.use_transactional_fixtures = true
32
+ config.include Spree::UrlHelpers
33
+ end
@@ -0,0 +1,12 @@
1
+ class ActiveRecord::Base
2
+ mattr_accessor :shared_connection
3
+ @@shared_connection = nil
4
+
5
+ def self.connection
6
+ @@shared_connection || retrieve_connection
7
+ end
8
+ end
9
+
10
+ # Forces all threads to share the same connection. This works on
11
+ # Capybara because it starts the web server in a thread.
12
+ ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection
@@ -0,0 +1,7 @@
1
+ module Spree
2
+ module UrlHelpers
3
+ def spree
4
+ Spree::Core::Engine.routes.url_helpers
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: UTF-8
2
+ Gem::Specification.new do |s|
3
+ s.platform = Gem::Platform::RUBY
4
+ s.name = 'spree_minicart'
5
+ s.version = '0.0.1'
6
+ s.summary = 'Spree Minicart displays a minicart in your spree store'
7
+ s.description = "Spree Minicart allows customer to add/remove an item from their cart without ever leaving the page they're on.Let your customers preview their cart before they start the checkout process."
8
+ s.required_ruby_version = '>= 1.8.7'
9
+
10
+ s.author = 'Stéphane Bounmy'
11
+ s.email = 'stephanebounmy@gmail.com'
12
+ s.homepage = 'https://github.com/sbounmy/spree_minicart'
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.require_path = 'lib'
17
+ s.requirements << 'none'
18
+
19
+ s.add_dependency 'spree_core', '~> 1.0.0'
20
+ s.add_dependency 'spree_sample'
21
+ s.add_development_dependency 'capybara', '1.0.1'
22
+ s.add_development_dependency 'factory_girl'
23
+ s.add_development_dependency 'ffaker'
24
+ s.add_development_dependency 'rspec-rails', '~> 2.7'
25
+ s.add_development_dependency 'sqlite3'
26
+
27
+ end
metadata ADDED
@@ -0,0 +1,160 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spree_minicart
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Stéphane Bounmy
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-03-01 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: spree_core
16
+ requirement: &2156547640 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 1.0.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *2156547640
25
+ - !ruby/object:Gem::Dependency
26
+ name: spree_sample
27
+ requirement: &2156547120 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *2156547120
36
+ - !ruby/object:Gem::Dependency
37
+ name: capybara
38
+ requirement: &2156546320 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - =
42
+ - !ruby/object:Gem::Version
43
+ version: 1.0.1
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *2156546320
47
+ - !ruby/object:Gem::Dependency
48
+ name: factory_girl
49
+ requirement: &2156544440 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *2156544440
58
+ - !ruby/object:Gem::Dependency
59
+ name: ffaker
60
+ requirement: &2156543720 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *2156543720
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec-rails
71
+ requirement: &2156542560 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ version: '2.7'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *2156542560
80
+ - !ruby/object:Gem::Dependency
81
+ name: sqlite3
82
+ requirement: &2156541820 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *2156541820
91
+ description: Spree Minicart allows customer to add/remove an item from their cart
92
+ without ever leaving the page they're on.Let your customers preview their cart before
93
+ they start the checkout process.
94
+ email: stephanebounmy@gmail.com
95
+ executables: []
96
+ extensions: []
97
+ extra_rdoc_files: []
98
+ files:
99
+ - .bundle/config
100
+ - .gitignore
101
+ - .rspec
102
+ - .sass-cache/7039e9d658d15c788901d448e30f792de6523f14/screen.css.scssc
103
+ - Gemfile
104
+ - LICENSE
105
+ - README.md
106
+ - Rakefile
107
+ - Versionfile
108
+ - app/assets/javascripts/admin/spree_minicart.js
109
+ - app/assets/javascripts/store/spree_minicart.js
110
+ - app/assets/stylesheets/admin/spree_minicart.css
111
+ - app/assets/stylesheets/store/spree_minicart.css
112
+ - app/controllers/orders_controller_decorator.rb
113
+ - app/overrides/layout.rb
114
+ - app/overrides/minicart.rb
115
+ - app/views/spree/orders/populate.js.erb
116
+ - app/views/spree/orders/update.js.erb
117
+ - app/views/spree/shared/_minicart.html.erb
118
+ - app/views/spree/shared/_minicart_line_items.html.erb
119
+ - config/locales/en.yml
120
+ - config/routes.rb
121
+ - lib/assets/javascripts/store/jquery.hoverintent.js
122
+ - lib/generators/spree_minicart/install/install_generator.rb
123
+ - lib/spree_minicart.rb
124
+ - lib/spree_minicart/engine.rb
125
+ - script/rails
126
+ - spec/requests/minicart_spec.rb
127
+ - spec/spec_helper.rb
128
+ - spec/support/shared_connection.rb
129
+ - spec/support/url_helpers.rb
130
+ - spree_minicart.gemspec
131
+ homepage: https://github.com/sbounmy/spree_minicart
132
+ licenses: []
133
+ post_install_message:
134
+ rdoc_options: []
135
+ require_paths:
136
+ - lib
137
+ required_ruby_version: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: 1.8.7
143
+ required_rubygems_version: !ruby/object:Gem::Requirement
144
+ none: false
145
+ requirements:
146
+ - - ! '>='
147
+ - !ruby/object:Gem::Version
148
+ version: '0'
149
+ requirements:
150
+ - none
151
+ rubyforge_project:
152
+ rubygems_version: 1.8.17
153
+ signing_key:
154
+ specification_version: 3
155
+ summary: Spree Minicart displays a minicart in your spree store
156
+ test_files:
157
+ - spec/requests/minicart_spec.rb
158
+ - spec/spec_helper.rb
159
+ - spec/support/shared_connection.rb
160
+ - spec/support/url_helpers.rb