spree_advanced_cart 0.40.0

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.
@@ -0,0 +1,12 @@
1
+ \#*
2
+ *~
3
+ .#*
4
+ .DS_Store
5
+ .idea
6
+ .project
7
+ tmp
8
+ nbproject
9
+ *.swp
10
+ spec/test_app
11
+ Gemfile
12
+
data/LICENSE ADDED
@@ -0,0 +1,23 @@
1
+ Redistribution and use in source and binary forms, with or without modification,
2
+ are permitted provided that the following conditions are met:
3
+
4
+ * Redistributions of source code must retain the above copyright notice,
5
+ this list of conditions and the following disclaimer.
6
+ * Redistributions in binary form must reproduce the above copyright notice,
7
+ this list of conditions and the following disclaimer in the documentation
8
+ and/or other materials provided with the distribution.
9
+ * Neither the name of the Rails Dog LLC nor the names of its
10
+ contributors may be used to endorse or promote products derived from this
11
+ software without specific prior written permission.
12
+
13
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
14
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
15
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
16
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
17
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
21
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
22
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
23
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,18 @@
1
+ Spree Advanced Cart
2
+ =================
3
+
4
+ This extension provide replacement to Spree cart with several additional improvements like:
5
+
6
+ * coupon applying
7
+ * shipping cost precalculation
8
+
9
+
10
+ Installation
11
+ ============
12
+
13
+ Add `gem "spree_advanced_cart", :git => "git://github.com/romul/spree_advanced_cart.git"
14
+ Run `bundle install`
15
+ Run `rake spree_advanced_cart:install:assets`
16
+
17
+
18
+ Copyright (c) 2011 Roman Smirnov
@@ -0,0 +1,80 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/testtask'
4
+ require 'rake/packagetask'
5
+ require 'rake/gempackagetask'
6
+
7
+ gemfile = File.expand_path('../spec/test_app/Gemfile', __FILE__)
8
+ if File.exists?(gemfile) && (%w(spec cucumber).include?(ARGV.first.to_s) || ARGV.size == 0)
9
+ require 'bundler'
10
+ ENV['BUNDLE_GEMFILE'] = gemfile
11
+ Bundler.setup
12
+
13
+ require 'rspec'
14
+ require 'rspec/core/rake_task'
15
+ RSpec::Core::RakeTask.new
16
+
17
+ require 'cucumber/rake/task'
18
+ Cucumber::Rake::Task.new do |t|
19
+ t.cucumber_opts = %w{--format progress}
20
+ end
21
+ end
22
+
23
+ desc "Default Task"
24
+ task :default => [:spec, :cucumber ]
25
+
26
+ spec = eval(File.read('spree_advanced_cart.gemspec'))
27
+
28
+ Rake::GemPackageTask.new(spec) do |p|
29
+ p.gem_spec = spec
30
+ end
31
+
32
+ desc "Release to gemcutter"
33
+ task :release => :package do
34
+ require 'rake/gemcutter'
35
+ Rake::Gemcutter::Tasks.new(spec).define
36
+ Rake::Task['gem:push'].invoke
37
+ end
38
+
39
+ desc "Default Task"
40
+ task :default => [ :spec ]
41
+
42
+ desc "Regenerates a rails 3 app for testing"
43
+ task :test_app do
44
+ require '../spree/lib/generators/spree/test_app_generator'
45
+ class AdvancedCartTestAppGenerator < Spree::Generators::TestAppGenerator
46
+
47
+ def install_gems
48
+ inside "test_app" do
49
+ run 'rake spree_core:install'
50
+ run 'rake spree_auth:install'
51
+ run 'rake spree_promo:install'
52
+ run 'rake spree_advanced_cart:install'
53
+ end
54
+ end
55
+
56
+ def migrate_db
57
+ run_migrations
58
+ end
59
+
60
+ protected
61
+ def full_path_for_local_gems
62
+ <<-gems
63
+ gem 'spree_core', :path => \'#{File.join(File.dirname(__FILE__), "../spree/", "core")}\'
64
+ gem 'spree_auth', :path => \'#{File.join(File.dirname(__FILE__), "../spree/", "auth")}\'
65
+ gem 'spree_promo', :path => \'#{File.join(File.dirname(__FILE__), "../spree/", "promo")}\'
66
+ gem 'spree_advanced_cart', :path => \'#{File.dirname(__FILE__)}\'
67
+ gems
68
+ end
69
+
70
+ end
71
+ AdvancedCartTestAppGenerator.start
72
+ end
73
+
74
+ namespace :test_app do
75
+ desc 'Rebuild test and cucumber databases'
76
+ task :rebuild_dbs do
77
+ system("cd spec/test_app && rake db:drop db:migrate RAILS_ENV=test && rake db:drop db:migrate RAILS_ENV=cucumber")
78
+ end
79
+ end
80
+
@@ -0,0 +1,2 @@
1
+ "0.40.x" => { :branch => "master" }
2
+ "0.50.x" => { :branch => "master" }
@@ -0,0 +1,29 @@
1
+ OrdersController.class_eval do
2
+
3
+ def update
4
+ @order = current_order
5
+ if @order.update_attributes(params[:order])
6
+ @order.line_items = @order.line_items.select {|li| li.quantity > 0 }
7
+ if request.xhr?
8
+ @order.update!
9
+ else
10
+ redirect_to cart_path
11
+ end
12
+ else
13
+ render :edit
14
+ end
15
+ end
16
+
17
+ def estimate_shipping_cost
18
+ if params[:zipcode] =~ /^\d{5}$/ || Spree::AdvancedCart::Config[:skip_zipcode_validation]
19
+ @order = current_order
20
+ @order.ship_address = Address.new(:zipcode => params[:zipcode], :country_id => Spree::Config[:default_country_id])
21
+ @shipping_methods = ShippingMethod.all_available(@order)
22
+ @esc_values = @shipping_methods.map {|sm| [sm.name, sm.calculator.compute(@order)]}
23
+ else
24
+ flash[:error] = I18n.t(:estimation_works_only_with_us_zipcodes)
25
+ end
26
+ end
27
+
28
+ end
29
+
@@ -0,0 +1,45 @@
1
+ <%= form_for(@order, :url => update_cart_path, :html=>{:id=>'updatecart'}, :remote => true) do |order_form| %>
2
+ <%= hook :inside_cart_form do %>
3
+
4
+ <%= hook :cart_items do %>
5
+ <%= render :partial => 'form', :locals => {:order_form => order_form} %>
6
+ <% end %>
7
+
8
+ <% if Spree::AdvancedCart::Config[:enable_coupon_applying] %>
9
+ <table id="order-charges">
10
+ <tbody>
11
+ <% @order.adjustments.each do |adjustment| %>
12
+ <tr>
13
+ <td><strong><%= adjustment.label %></strong></td>
14
+ <td class="total"><span><%= number_to_currency adjustment.amount %></span></td>
15
+ </tr>
16
+ <% end %>
17
+ </tbody>
18
+ </table>
19
+
20
+ <div id="applying_coupon">
21
+ <h3><%= t(:apply_coupon) %></h3>
22
+ <label><%= t(:coupon_code) %></label>
23
+ <%= order_form.text_field :coupon_code, :size => 19 %>
24
+ <span class="ajax_loader"><%= image_tag 'ajax_loader.gif', :alt => t('loading') %></span>
25
+ <%= order_form.submit t("apply") %>
26
+ </div>
27
+ <% end %>
28
+
29
+ <div id="subtotal">
30
+ <%= hook :advanced_cart_subtotal do %>
31
+ <h3><%= "#{t("subtotal")}: #{order_price(@order)}" %></h3>
32
+ <% if Spree::AdvancedCart::Config[:enable_coupon_applying] %>
33
+ <h3><%= "#{t("total")}: #{number_to_currency @order.total}" %></h3>
34
+ <% end %>
35
+ <% end %>
36
+ <%= hook :advanced_cart_subtotal_links do %>
37
+ <div class="links">
38
+ <%= link_to image_tag('/images/update.png') + t("update"), '#', :class => 'button checkout primary', :onclick => "$('form#updatecart').submit(); return false;" %>
39
+ <%= link_to image_tag('/images/checkout.png') + t("checkout"), checkout_path, :class => 'button checkout primary' %>
40
+ </div>
41
+ <% end %>
42
+ </div>
43
+
44
+ <% end %>
45
+ <% end %>
@@ -0,0 +1,12 @@
1
+ <table id="shipping_costs">
2
+ <tr>
3
+ <th><%= t(:shipping_method) %></th>
4
+ <th class="price"><%= t(:price) %></th>
5
+ </tr>
6
+ <% @esc_values.each do |name, price| %>
7
+ <tr>
8
+ <td><%= name %></td>
9
+ <td><%= number_to_currency price %></td>
10
+ </tr>
11
+ <% end %>
12
+ </table>
@@ -0,0 +1,41 @@
1
+ <% @body_id = 'cart' %>
2
+
3
+ <h1><%= t("shopping_cart")%></h1>
4
+
5
+ <% if @order.line_items.empty? %>
6
+
7
+ <%= hook :empty_cart do %>
8
+ <p><%= t("your_cart_is_empty.") %></p>
9
+ <p><%= link_to t("continue_shopping"), products_path, :class => 'button continue' %></p>
10
+ <% end %>
11
+
12
+ <% else %>
13
+ <div id="advanced_cart">
14
+ <%= render :partial => 'orders/advanced_cart' %>
15
+ </div>
16
+ <div style="clear:both;">
17
+ <% if Spree::AdvancedCart::Config[:enable_shipping_cost_calculation] %>
18
+ <%= hook :estimate_shipping_costs do %>
19
+ <div id="estimate_shipping_costs">
20
+ <h3><%= t(:calc_estimated_shipping_cost) %></h3>
21
+ <%= form_tag estimate_shipping_cost_path, :remote => true, :method => :get do %>
22
+ <%= label_tag t(:enter_zipcode) %>: <%= text_field_tag :zipcode %>
23
+ <span class="ajax_loader"><%= image_tag 'ajax_loader.gif', :alt => t('loading') %></span>
24
+ <%= submit_tag t("actions.calc") %>
25
+ <% end %>
26
+ <div id="estimate_shipping_cost_table"></div>
27
+ </div>
28
+ <% end %>
29
+ <% end %>
30
+
31
+ <%= hook :continue_shopping_or_empty_cart do %>
32
+ <%= form_tag empty_cart_path, :method => :put do %>
33
+ <p id="clear_cart_link">
34
+ <%= link_to t("continue_shopping"), products_path, :class => 'button continue' %>
35
+ <%= t(:or) %>
36
+ <input type="submit" value="<%= t('empty_cart') %>" class="button" />
37
+ </p>
38
+ <% end %>
39
+ <% end %>
40
+ </div>
41
+ <% end %>
@@ -0,0 +1,5 @@
1
+ <% if @esc_values %>
2
+ $("#estimate_shipping_cost_table").html("<%= escape_javascript(render('estimate_shipping_cost_table')) %>");
3
+ <% else %>
4
+ $("#estimate_shipping_cost_table").html("<span class=\"error\"><%= flash[:error] %></span>");
5
+ <% end %>
@@ -0,0 +1,2 @@
1
+ $("#advanced_cart").html("<%= escape_javascript(render('advanced_cart')) %>");
2
+
@@ -0,0 +1,7 @@
1
+ en:
2
+ enter_zipcode: "Enter zipcode"
3
+ apply_coupon: "Apply coupon"
4
+ calc_estimated_shipping_cost: "Calc estimated shipping cost"
5
+ estimation_works_only_with_us_zipcodes: "Shipping Estimation only works with US zip codes"
6
+ actions:
7
+ calc: "Calc"
@@ -0,0 +1,3 @@
1
+ Rails.application.routes.draw do
2
+ match "/estimate_shipping_cost", :to => 'orders#estimate_shipping_cost', :via => :get, :as => :estimate_shipping_cost
3
+ end
@@ -0,0 +1,21 @@
1
+ Feature: AdvancedCart
2
+
3
+ @selenium
4
+ Scenario: Add coupon in the cart
5
+ Given a promotion with code "SPREE" and "FlatRate" amount "5"
6
+ When I add a product with name: "RoR Mug", price: "40" to cart
7
+ And I fill in "order_coupon_code" with "SPREE"
8
+ And I press "Apply"
9
+ Then I should see "Coupon (SPREE)"
10
+ And I should see "-$5"
11
+ And I should see "Total: $35"
12
+
13
+ @selenium
14
+ Scenario: Precalculate shipping cost in the cart
15
+ Given a shipping_method with name "UPS Ground" and "FlatRate" amount "5"
16
+ When I add a product with name: "RoR Mug", price: "40" to cart
17
+ And I fill in "zipcode" with "90210"
18
+ And I press "Calc"
19
+ Then I should see "UPS Ground"
20
+ And I should see "$5"
21
+ And I should see "Total: $40"
@@ -0,0 +1,17 @@
1
+ Given /^a promotion with code "([^"]*)" and "([^"]*)" amount "([^"]*)"$/ do |code, calc_name, amount|
2
+ promotion = Promotion.new(:name => code, :code => code)
3
+ promotion.calculator = "Calculator::#{calc_name}".constantize.new
4
+ promotion.save
5
+ promotion.calculator.preferred_amount = amount.to_f
6
+ promotion.save
7
+ end
8
+
9
+
10
+ Given /^a shipping_method with name "([^"]*)" and "([^"]*)" amount "([^"]*)"$/ do |name, calc_name, amount|
11
+ zone = Zone.find_by_name('North America')
12
+ shipping_method = ShippingMethod.new(:name => name, :zone => zone)
13
+ shipping_method.calculator = "Calculator::#{calc_name}".constantize.new
14
+ shipping_method.save
15
+ shipping_method.calculator.preferred_amount = amount.to_f
16
+ shipping_method.save
17
+ end
@@ -0,0 +1,22 @@
1
+ FEATURES_PATH = File.expand_path('../..', __FILE__)
2
+
3
+ # load shared env with features
4
+ require File.expand_path('../../../../spree/features/support/env', __FILE__)
5
+
6
+ # load the rest of files for support and step definitions
7
+ directories = [ File.expand_path('../../../../spree/features/support', __FILE__),
8
+ File.expand_path('../../../../spree/features/step_definitions', __FILE__),
9
+ File.expand_path('../../../spec/factories', __FILE__) ]
10
+
11
+ files = directories.map do |dir|
12
+ Dir["#{dir}/**/*.rb"]
13
+ end.flatten.uniq
14
+
15
+ files.each do |path|
16
+ if path !~ /env.rb$/
17
+ fp = File.expand_path(path)
18
+ #puts fp
19
+ load(fp)
20
+ end
21
+ end
22
+
@@ -0,0 +1,40 @@
1
+ module NavigationHelpers
2
+ # Maps a name to a path. Used by the
3
+ #
4
+ # When /^I go to (.+)$/ do |page_name|
5
+ #
6
+ # step definition in web_steps.rb
7
+ #
8
+ def path_to(page_name)
9
+ case page_name
10
+
11
+ when "admin promotions page"
12
+ admin_promotions_path
13
+ when /the home\s?page/
14
+ '/'
15
+ when /the sign in page/
16
+ new_user_session_path
17
+ when /the sign up page/
18
+ new_user_registration_path
19
+
20
+ # Add more mappings here.
21
+ # Here is an example that pulls values out of the Regexp:
22
+ #
23
+ # when /^(.*)'s profile page$/i
24
+ # user_profile_path(User.find_by_login($1))
25
+
26
+ else
27
+ begin
28
+ page_name =~ /the (.*) page/
29
+ path_components = $1.split(/\s+/)
30
+ self.send(path_components.push('path').join('_').to_sym)
31
+ rescue Object => e
32
+ raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
33
+ "Now, go and add a mapping in #{__FILE__}"
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ World(NavigationHelpers)
40
+
@@ -0,0 +1,5 @@
1
+ class AdvancedCartConfiguration < Configuration
2
+ preference :enable_coupon_applying, :boolean, :default => true
3
+ preference :enable_shipping_cost_calculation, :boolean, :default => true
4
+ preference :skip_zipcode_validation, :boolean, :default => false
5
+ end
@@ -0,0 +1,23 @@
1
+ module Spree
2
+ module AdvancedCart
3
+ # Singleton class to access the advanced cart configuration object (AdvancedCartConfiguration.first by default) and it's preferences.
4
+ #
5
+ # Usage:
6
+ # Spree::AdvancedCart::Config[:foo] # Returns the foo preference
7
+ # Spree::AdvancedCart::Config[] # Returns a Hash with all the google base preferences
8
+ # Spree::AdvancedCart::Config.instance # Returns the configuration object (AdvancedCartConfiguration.first)
9
+ # Spree::AdvancedCart::Config.set(preferences_hash) # Set the advanced cart preferences as especified in +preference_hash+
10
+ class Config
11
+ include Singleton
12
+ include PreferenceAccess
13
+
14
+ class << self
15
+ def instance
16
+ return nil unless ActiveRecord::Base.connection.tables.include?('configurations')
17
+ AdvancedCartConfiguration.find_or_create_by_name("Advanced Cart configuration")
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+
@@ -0,0 +1,17 @@
1
+ require 'spree_core'
2
+ require 'spree_advanced_cart_hooks'
3
+
4
+ module SpreeAdvancedCart
5
+ class Engine < Rails::Engine
6
+
7
+ config.autoload_paths += %W(#{config.root}/lib)
8
+
9
+ def self.activate
10
+ Dir.glob(File.join(File.dirname(__FILE__), "../app/**/*_decorator*.rb")) do |c|
11
+ Rails.env.production? ? require(c) : load(c)
12
+ end
13
+ end
14
+
15
+ config.to_prepare &method(:activate).to_proc
16
+ end
17
+ end
@@ -0,0 +1,6 @@
1
+ class SpreeAdvancedCartHooks < Spree::ThemeSupport::HookListener
2
+ insert_after :inside_head do
3
+ "<%= stylesheet_link_tag 'advanced_cart' %><%= javascript_include_tag 'advanced_cart' %>"
4
+ end
5
+ end
6
+
@@ -0,0 +1,25 @@
1
+ namespace :spree_advanced_cart do
2
+ desc "Copies all migrations and assets (NOTE: This will be obsolete with Rails 3.1)"
3
+ task :install do
4
+ Rake::Task['spree_advanced_cart:install:migrations'].invoke
5
+ Rake::Task['spree_advanced_cart:install:assets'].invoke
6
+ end
7
+
8
+ namespace :install do
9
+ desc "Copies all migrations (NOTE: This will be obsolete with Rails 3.1)"
10
+ task :migrations do
11
+ source = File.join(File.dirname(__FILE__), '..', '..', 'db')
12
+ destination = File.join(Rails.root, 'db')
13
+ Spree::FileUtilz.mirror_files(source, destination)
14
+ end
15
+
16
+ desc "Copies all assets (NOTE: This will be obsolete with Rails 3.1)"
17
+ task :assets do
18
+ source = File.join(File.dirname(__FILE__), '..', '..', 'public')
19
+ destination = File.join(Rails.root, 'public')
20
+ puts "INFO: Mirroring assets from #{source} to #{destination}"
21
+ Spree::FileUtilz.mirror_files(source, destination)
22
+ end
23
+ end
24
+
25
+ end
@@ -0,0 +1 @@
1
+ # add custom rake tasks here
@@ -0,0 +1,21 @@
1
+ (function($){
2
+ $(document).ready(function(){
3
+
4
+ $('#estimate_shipping_costs form').bind('ajax:before', function() {
5
+ $(this).children("input[type=submit]").fadeOut();
6
+ $(this).children(".ajax_loader").show();
7
+ });
8
+
9
+ $('#estimate_shipping_costs form').bind('ajax:success', function() {
10
+ $(this).children(".ajax_loader").fadeOut();
11
+ $(this).children("input[type=submit]").show();
12
+ });
13
+
14
+ $('form#updatecart').live('ajax:before', function() {
15
+ $("#order_submit").fadeOut();
16
+ $("#applying_coupon").children(".ajax_loader").show();
17
+ });
18
+
19
+ });
20
+ })(jQuery);
21
+
@@ -0,0 +1,28 @@
1
+ #updatecart #order-charges td {
2
+ text-align: right;
3
+ }
4
+
5
+ #updatecart #order-charges td.total {
6
+ text-align: left;
7
+ width: 115px;
8
+ }
9
+
10
+ table#shipping_costs {
11
+ width: 40%;
12
+ }
13
+
14
+ table#shipping_costs th.price {
15
+ width: 70px;
16
+ }
17
+
18
+ div#estimate_shipping_costs {
19
+ margin: 40px 0;
20
+ }
21
+
22
+ div#applying_coupon {
23
+ float: left;
24
+ clear: left;
25
+ }
26
+
27
+ .ajax_loader { display: none; }
28
+
@@ -0,0 +1,31 @@
1
+ # This file is copied to ~/spec when you run 'ruby script/generate rspec'
2
+ # from the project root directory.
3
+ ENV["RAILS_ENV"] ||= 'test'
4
+ require File.expand_path("../test_app/config/environment", __FILE__)
5
+ require 'rspec/rails'
6
+
7
+ # Requires supporting files with custom matchers and macros, etc,
8
+ # in ./support/ and its subdirectories.
9
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
10
+
11
+ RSpec.configure do |config|
12
+ # == Mock Framework
13
+ #
14
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
15
+ #
16
+ # config.mock_with :mocha
17
+ # config.mock_with :flexmock
18
+ # config.mock_with :rr
19
+ config.mock_with :rspec
20
+
21
+ config.fixture_path = "#{::Rails.root}/spec/fixtures"
22
+
23
+ #config.include Devise::TestHelpers, :type => :controller
24
+ # If you're not using ActiveRecord, or you'd prefer not to run each of your
25
+ # examples within a transaction, comment the following line or assign false
26
+ # instead of true.
27
+ config.use_transactional_fixtures = true
28
+ end
29
+
30
+ @configuration ||= AppConfiguration.find_or_create_by_name("Default configuration")
31
+
@@ -0,0 +1,24 @@
1
+ Gem::Specification.new do |s|
2
+ s.platform = Gem::Platform::RUBY
3
+ s.name = 'spree_advanced_cart'
4
+ s.version = '0.40.0'
5
+ s.summary = 'Cart with several useful additions for Spree'
6
+ #s.description = 'Add (optional) gem description here'
7
+ s.required_ruby_version = '>= 1.8.7'
8
+
9
+ s.author = 'Roman Smirnov'
10
+ s.email = 'roman@railsdog.com'
11
+ s.homepage = 'http://github.com/romul/spree_advanced_cart'
12
+ # s.rubyforge_project = 'actionmailer'
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.has_rdoc = true
20
+
21
+ s.add_dependency('spree_core', '>= 0.40.0')
22
+ s.add_dependency('spree_promo', '>= 0.40.0')
23
+ end
24
+
metadata ADDED
@@ -0,0 +1,117 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spree_advanced_cart
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 40
8
+ - 0
9
+ version: 0.40.0
10
+ platform: ruby
11
+ authors:
12
+ - Roman Smirnov
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-04-05 00:00:00 +04:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: spree_core
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ - 40
30
+ - 0
31
+ version: 0.40.0
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: spree_promo
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ - 40
44
+ - 0
45
+ version: 0.40.0
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ description:
49
+ email: roman@railsdog.com
50
+ executables: []
51
+
52
+ extensions: []
53
+
54
+ extra_rdoc_files: []
55
+
56
+ files:
57
+ - .gitignore
58
+ - LICENSE
59
+ - README.md
60
+ - Rakefile
61
+ - Versionfile
62
+ - app/controllers/orders_controller_decorator.rb
63
+ - app/views/orders/_advanced_cart.html.erb
64
+ - app/views/orders/_estimate_shipping_cost_table.html.erb
65
+ - app/views/orders/edit.html.erb
66
+ - app/views/orders/estimate_shipping_cost.js.erb
67
+ - app/views/orders/update.js.erb
68
+ - config/locales/en.yml
69
+ - config/routes.rb
70
+ - features/advanced_cart.feature
71
+ - features/step_definitions/advanced_cart_steps.rb
72
+ - features/support/env.rb
73
+ - features/support/paths.rb
74
+ - lib/advanced_cart_configuration.rb
75
+ - lib/spree/advanced_cart/config.rb
76
+ - lib/spree_advanced_cart.rb
77
+ - lib/spree_advanced_cart_hooks.rb
78
+ - lib/tasks/install.rake
79
+ - lib/tasks/spree_advanced_cart.rake
80
+ - public/javascripts/advanced_cart.js
81
+ - public/stylesheets/advanced_cart.css
82
+ - spec/spec_helper.rb
83
+ - spree_advanced_cart.gemspec
84
+ has_rdoc: true
85
+ homepage: http://github.com/romul/spree_advanced_cart
86
+ licenses: []
87
+
88
+ post_install_message:
89
+ rdoc_options: []
90
+
91
+ require_paths:
92
+ - lib
93
+ required_ruby_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ segments:
98
+ - 1
99
+ - 8
100
+ - 7
101
+ version: 1.8.7
102
+ required_rubygems_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ segments:
107
+ - 0
108
+ version: "0"
109
+ requirements:
110
+ - none
111
+ rubyforge_project:
112
+ rubygems_version: 1.3.6
113
+ signing_key:
114
+ specification_version: 3
115
+ summary: Cart with several useful additions for Spree
116
+ test_files: []
117
+