spree 0.4.1 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of spree might be problematic. Click here for more details.
- data/CHANGELOG +35 -0
- data/CONTRIBUTORS +2 -1
- data/README.markdown +8 -52
- data/app/controllers/account_controller.rb +1 -1
- data/app/controllers/addresses_controller.rb +5 -1
- data/app/controllers/admin/inventory_settings_controller.rb +13 -0
- data/app/controllers/admin/option_types_controller.rb +1 -1
- data/app/controllers/admin/orders_controller.rb +14 -8
- data/app/controllers/admin/products_controller.rb +2 -0
- data/app/controllers/admin/variants_controller.rb +7 -0
- data/app/controllers/content_controller.rb +5 -0
- data/app/controllers/creditcard_payments_controller.rb +2 -2
- data/app/controllers/orders_controller.rb +18 -2
- data/app/helpers/admin/inventory_settings_helper.rb +5 -0
- data/app/helpers/admin/product_properties_helper.rb +10 -2
- data/app/helpers/products_helper.rb +2 -2
- data/app/models/address.rb +2 -2
- data/app/models/app_configuration.rb +1 -0
- data/app/models/creditcard_payment.rb +6 -14
- data/app/models/order.rb +6 -12
- data/app/models/order_filter.rb +1 -0
- data/app/models/product.rb +9 -0
- data/app/models/product_property.rb +1 -0
- data/app/models/property.rb +0 -1
- data/app/models/zone.rb +17 -3
- data/app/views/account/login.html.erb +2 -14
- data/app/views/admin/configurations/index.html.erb +4 -0
- data/app/views/admin/inventory_settings/edit.html.erb +18 -0
- data/app/views/admin/inventory_settings/show.html.erb +11 -0
- data/app/views/admin/orders/_address.html.erb +1 -1
- data/app/views/admin/orders/index.html.erb +5 -1
- data/app/views/admin/orders/show.html.erb +3 -3
- data/app/views/admin/product_properties/_product_property.html.erb +6 -3
- data/app/views/admin/products/_form.html.erb +9 -1
- data/app/views/admin/prototypes/select.rjs +3 -1
- data/app/views/admin/variants/_form.html.erb +6 -0
- data/app/views/admin/variants/index.html.erb +7 -1
- data/app/views/creditcard_payments/_form_credit_card.html.erb +1 -1
- data/app/views/creditcard_payments/new.html.erb +7 -2
- data/app/views/products/show.html.erb +8 -2
- data/app/views/shared/_login.html.erb +17 -0
- data/app/views/shared/_products.html.erb +1 -1
- data/app/views/users/_form.html.erb +1 -1
- data/app/views/users/new.html.erb +19 -8
- data/config/boot.rb +1 -1
- data/config/database.yml +7 -3
- data/config/environment.rb +16 -2
- data/config/routes.rb +4 -0
- data/db/migrate/20081016002224_remove_defunct_order_fields.rb +10 -0
- data/db/migrate/20081016162924_drop_category_id_from_products.rb +9 -0
- data/db/sample/addresses.yml +14 -0
- data/db/sample/orders.yml +0 -1
- data/lang/ui/de-DE.yml +2 -1
- data/lang/ui/en-US.yml +50 -25
- data/lang/ui/es-ES.yml +2 -1
- data/lang/ui/it-IT.yml +2 -1
- data/lang/ui/pl-PL.yml +1 -0
- data/lang/ui/pt-BR.yml +5 -2
- data/lib/authenticated_system.rb +1 -1
- data/lib/generators/extension/extension_generator.rb +1 -0
- data/lib/generators/extension/templates/extension.rb +4 -5
- data/lib/generators/extension/templates/tasks.rake +12 -0
- data/lib/generators/extension_migration/extension_migration_generator.rb +32 -0
- data/lib/generators/extension_migration/templates/migration.rb +7 -0
- data/lib/spree.rb +2 -2
- data/lib/spree/extension.rb +0 -7
- data/lib/spree/extension_loader.rb +0 -8
- data/lib/tasks/extensions.rake +47 -0
- data/public/javascripts/application.js +34 -0
- data/public/javascripts/spree-yui.js +2 -2
- data/public/stylesheets/spree.css +11 -1
- data/spec/fixtures/preferences.yml +14 -6
- data/spec/models/address_spec.rb +78 -0
- data/spec/models/country_spec.rb +29 -0
- data/spec/models/option_type_spec.rb +36 -0
- data/spec/models/option_value_spec.rb +39 -0
- data/spec/models/product_option_type_spec.rb +38 -0
- data/spec/models/product_property_spec.rb +36 -0
- data/spec/models/product_spec.rb +109 -32
- data/spec/models/property_spec.rb +38 -0
- data/spec/models/prototype_spec.rb +35 -0
- data/spec/models/state_spec.rb +28 -0
- data/spec/models/taxon_spec.rb +38 -0
- data/spec/models/taxonomy_spec.rb +37 -0
- data/spec/models/variant_spec.rb +73 -12
- data/spec/models/zone_spec.rb +35 -15
- data/spec/spec_helper.rb +15 -0
- data/spec/views/admin/configurations/index.html.erb_spec.rb +29 -0
- data/spec/views/admin/mail_settings/show.html.erb_spec.rb +3 -3
- data/spec/views/products/index.html.erb_spec.rb +46 -0
- data/spec/views/products/show.html.erb_spec.rb +46 -0
- data/vendor/extensions/flat_rate_shipping/README.markdown +3 -0
- data/vendor/extensions/flat_rate_shipping/Rakefile +120 -0
- data/vendor/extensions/flat_rate_shipping/flat_rate_shipping_extension.rb +17 -0
- data/vendor/extensions/flat_rate_shipping/lib/flat_rate_shipping_configuration.rb +7 -0
- data/vendor/extensions/flat_rate_shipping/lib/spree/flat_rate_shipping/calculator.rb +9 -0
- data/vendor/extensions/flat_rate_shipping/lib/spree/flat_rate_shipping/config.rb +22 -0
- data/vendor/extensions/flat_rate_shipping/lib/tasks/flat_rate_shipping_extension_tasks.rake +29 -0
- data/vendor/extensions/flat_rate_shipping/spec/spec.opts +6 -0
- data/vendor/extensions/flat_rate_shipping/spec/spec_helper.rb +37 -0
- data/vendor/extensions/localization/localization_extension.rb +1 -6
- data/vendor/extensions/payment_gateway/lib/gateway_config.rb +7 -0
- data/vendor/extensions/payment_gateway/lib/spree/gateway/config.rb +22 -0
- data/vendor/extensions/payment_gateway/lib/spree/payment_gateway.rb +27 -3
- data/vendor/extensions/payment_gateway/payment_gateway_extension.rb +0 -4
- data/vendor/extensions/shipping/README.markdown +3 -0
- data/vendor/extensions/shipping/Rakefile +120 -0
- data/vendor/extensions/shipping/app/controllers/admin/shipping_categories_controller.rb +17 -0
- data/vendor/extensions/shipping/app/controllers/admin/shipping_methods_controller.rb +21 -0
- data/vendor/extensions/shipping/app/controllers/shipments_controller.rb +84 -0
- data/vendor/extensions/shipping/app/helpers/admin/shipping_categories_helper.rb +2 -0
- data/vendor/extensions/shipping/app/helpers/admin/shipping_methods_helper.rb +2 -0
- data/vendor/extensions/shipping/app/helpers/shipments_helper.rb +20 -0
- data/vendor/extensions/shipping/app/models/shipment.rb +11 -0
- data/vendor/extensions/shipping/app/models/shipping_category.rb +3 -0
- data/vendor/extensions/shipping/app/models/shipping_method.rb +12 -0
- data/vendor/extensions/shipping/app/views/admin/shipping_categories/_form.html.erb +6 -0
- data/vendor/extensions/shipping/app/views/admin/shipping_categories/edit.html.erb +8 -0
- data/vendor/extensions/shipping/app/views/admin/shipping_categories/index.html.erb +24 -0
- data/vendor/extensions/shipping/app/views/admin/shipping_categories/new.html.erb +10 -0
- data/vendor/extensions/shipping/app/views/admin/shipping_methods/_form.html.erb +14 -0
- data/vendor/extensions/shipping/app/views/admin/shipping_methods/edit.html.erb +8 -0
- data/vendor/extensions/shipping/app/views/admin/shipping_methods/index.html.erb +28 -0
- data/vendor/extensions/shipping/app/views/admin/shipping_methods/new.html.erb +10 -0
- data/vendor/extensions/shipping/app/views/orders/fatal_shipping.html.erb +6 -0
- data/vendor/extensions/shipping/app/views/shipments/_form.html.erb +46 -0
- data/vendor/extensions/shipping/app/views/shipments/edit.html.erb +8 -0
- data/vendor/extensions/shipping/app/views/shipments/new.html.erb +8 -0
- data/vendor/extensions/shipping/db/migrate/20081003211336_create_shipping_methods.rb +14 -0
- data/vendor/extensions/shipping/db/migrate/20081003233427_create_shipping_categories.rb +15 -0
- data/vendor/extensions/shipping/db/migrate/20081015001711_create_shipments.rb +14 -0
- data/vendor/extensions/shipping/db/migrate/20081023134446_add_product_dimensions.rb +19 -0
- data/vendor/extensions/shipping/db/sample/shipping_categories.yml +2 -0
- data/vendor/extensions/shipping/db/sample/shipping_methods.yml +12 -0
- data/vendor/extensions/shipping/db/sample/zone_members.yml +8 -0
- data/vendor/extensions/shipping/db/sample/zones.yml +3 -0
- data/vendor/extensions/shipping/lang/en-US.yml +9 -0
- data/vendor/extensions/shipping/lib/spree/shipping_calculator.rb +37 -0
- data/vendor/extensions/shipping/lib/spree/shipping_error.rb +3 -0
- data/vendor/extensions/shipping/lib/tasks/shipping_extension_tasks.rake +29 -0
- data/vendor/extensions/shipping/shipping_extension.rb +39 -0
- data/vendor/extensions/shipping/spec/controllers/admin/shipping_categories_controller_spec.rb +10 -0
- data/vendor/extensions/shipping/spec/controllers/admin/shipping_methods_controller_spec.rb +10 -0
- data/vendor/extensions/shipping/spec/models/order_spec.rb +98 -0
- data/vendor/extensions/shipping/spec/models/shipment_spec.rb +26 -0
- data/vendor/extensions/shipping/spec/models/shipping_category_spec.rb +8 -0
- data/vendor/extensions/shipping/spec/models/shipping_method_spec.rb +53 -0
- data/vendor/extensions/shipping/spec/spec.opts +6 -0
- data/vendor/extensions/shipping/spec/spec_helper.rb +37 -0
- data/vendor/extensions/tax_calculator/lib/spree/sales_tax_calculator.rb +12 -4
- data/vendor/extensions/tax_calculator/spec/controllers/tax_calculator_spec.rb +0 -4
- data/vendor/extensions/tax_calculator/spec/models/sales_tax_calculator_spec.rb +14 -14
- data/vendor/extensions/tax_calculator/tax_calculator_extension.rb +0 -4
- data/vendor/plugins/resource_controller/README.rdoc +38 -6
- data/vendor/plugins/resource_controller/Rakefile +7 -20
- data/vendor/plugins/resource_controller/TODO +0 -1
- data/vendor/plugins/resource_controller/lib/resource_controller/helpers/current_objects.rb +71 -69
- data/vendor/plugins/resource_controller/lib/resource_controller/helpers/internal.rb +69 -65
- data/vendor/plugins/resource_controller/lib/resource_controller/helpers/nested.rb +62 -57
- data/vendor/plugins/resource_controller/lib/resource_controller/helpers/singleton_customizations.rb +50 -46
- data/vendor/plugins/resource_controller/lib/resource_controller/helpers/urls.rb +73 -69
- data/vendor/plugins/resource_controller/resource_controller.gemspec +4 -3
- data/vendor/plugins/resource_controller/test/app/controllers/cms/personnel_controller.rb +2 -0
- data/vendor/plugins/resource_controller/test/app/controllers/cms/photos_controller.rb +6 -0
- data/vendor/plugins/resource_controller/test/app/models/personnel.rb +3 -0
- data/vendor/plugins/resource_controller/test/app/models/photo.rb +1 -0
- data/vendor/plugins/resource_controller/test/app/views/cms/photos/edit.rhtml +17 -0
- data/vendor/plugins/resource_controller/test/app/views/cms/photos/index.rhtml +20 -0
- data/vendor/plugins/resource_controller/test/app/views/cms/photos/new.rhtml +16 -0
- data/vendor/plugins/resource_controller/test/app/views/cms/photos/show.rhtml +8 -0
- data/vendor/plugins/resource_controller/test/config/database.yml +9 -0
- data/vendor/plugins/resource_controller/test/config/environment.rb +1 -18
- data/vendor/plugins/resource_controller/test/config/initializers/inflections.rb +14 -0
- data/vendor/plugins/resource_controller/test/config/routes.rb +3 -0
- data/vendor/plugins/resource_controller/test/db/migrate/013_create_personnel.rb +11 -0
- data/vendor/plugins/resource_controller/test/db/migrate/014_add_personnel_id_to_photos.rb +9 -0
- data/vendor/plugins/resource_controller/test/test/fixtures/personnel.yml +5 -0
- data/vendor/plugins/resource_controller/test/test/functional/cms/photos_controller_test.rb +43 -0
- metadata +136 -6
- data/app/models/spree/extension_meta.rb +0 -5
- data/app/models/variants.rb +0 -2
- data/vendor/plugins/resource_controller/lib/resource_controller/version.rb +0 -9
@@ -0,0 +1,29 @@
|
|
1
|
+
namespace :db do
|
2
|
+
desc "Bootstrap your database for Spree."
|
3
|
+
task :bootstrap => :environment do
|
4
|
+
# load initial database fixtures (in db/sample/*.yml) into the current environment's database
|
5
|
+
ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym)
|
6
|
+
Dir.glob(File.join(FlatRateShippingExtension.root, "db", 'sample', '*.{yml,csv}')).each do |fixture_file|
|
7
|
+
Fixtures.create_fixtures("#{FlatRateShippingExtension.root}/db/sample", File.basename(fixture_file, '.*'))
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
namespace :spree do
|
14
|
+
namespace :extensions do
|
15
|
+
namespace :flat_rate_shipping do
|
16
|
+
desc "Copies public assets of the Flat Rate Shipping to the instance public/ directory."
|
17
|
+
task :update => :environment do
|
18
|
+
is_svn_or_dir = proc {|path| path =~ /\.svn/ || File.directory?(path) }
|
19
|
+
Dir[FlatRateShippingExtension.root + "/public/**/*"].reject(&is_svn_or_dir).each do |file|
|
20
|
+
path = file.sub(FlatRateShippingExtension.root, '')
|
21
|
+
directory = File.dirname(path)
|
22
|
+
puts "Copying #{path}..."
|
23
|
+
mkdir_p RAILS_ROOT + directory
|
24
|
+
cp file, RAILS_ROOT + path
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
unless defined? SPREE_ROOT
|
2
|
+
ENV["RAILS_ENV"] = "test"
|
3
|
+
case
|
4
|
+
when ENV["SPREE_ENV_FILE"]
|
5
|
+
require ENV["SPREE_ENV_FILE"]
|
6
|
+
when File.dirname(__FILE__) =~ %r{vendor/SPREE/vendor/extensions}
|
7
|
+
require "#{File.expand_path(File.dirname(__FILE__) + "/../../../../../../")}/config/environment"
|
8
|
+
else
|
9
|
+
require "#{File.expand_path(File.dirname(__FILE__) + "/../../../../")}/config/environment"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
require "#{SPREE_ROOT}/spec/spec_helper"
|
13
|
+
|
14
|
+
if File.directory?(File.dirname(__FILE__) + "/scenarios")
|
15
|
+
Scenario.load_paths.unshift File.dirname(__FILE__) + "/scenarios"
|
16
|
+
end
|
17
|
+
if File.directory?(File.dirname(__FILE__) + "/matchers")
|
18
|
+
Dir[File.dirname(__FILE__) + "/matchers/*.rb"].each {|file| require file }
|
19
|
+
end
|
20
|
+
|
21
|
+
Spec::Runner.configure do |config|
|
22
|
+
# config.use_transactional_fixtures = true
|
23
|
+
# config.use_instantiated_fixtures = false
|
24
|
+
# config.fixture_path = RAILS_ROOT + '/spec/fixtures'
|
25
|
+
|
26
|
+
# You can declare fixtures for each behaviour like this:
|
27
|
+
# describe "...." do
|
28
|
+
# fixtures :table_a, :table_b
|
29
|
+
#
|
30
|
+
# Alternatively, if you prefer to declare them only once, you can
|
31
|
+
# do so here, like so ...
|
32
|
+
#
|
33
|
+
# config.global_fixtures = :table_a, :table_b
|
34
|
+
#
|
35
|
+
# If you declare global fixtures, be aware that they will be declared
|
36
|
+
# for all of your examples, even those that don't use them.
|
37
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Spree
|
2
|
+
module Gateway
|
3
|
+
# Singleton class to access the gateway configuration object (GatewayConfiguration.first by default) and it's preferences.
|
4
|
+
#
|
5
|
+
# Usage:
|
6
|
+
# Spree::Gateway::Config[:foo] # Returns the foo preference
|
7
|
+
# Spree::Gateway::Config[] # Returns a Hash with all the gateway preferences
|
8
|
+
# Spree::Gateway::Config.instance # Returns the configuration object (GatewayConfiguration.first)
|
9
|
+
# Spree::Gateway::Config.set(preferences_hash) # Set the gateway 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
|
+
GatewayConfig.find_or_create_by_name("Default gateway configuration")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -3,7 +3,7 @@ module Spree
|
|
3
3
|
def authorize
|
4
4
|
gateway = payment_gateway
|
5
5
|
# ActiveMerchant is configured to use cents so we need to multiply order total by 100
|
6
|
-
response = gateway.authorize(order.total * 100, @creditcard, gateway_options)
|
6
|
+
response = gateway.authorize((order.total * 100).to_i, @creditcard, gateway_options)
|
7
7
|
gateway_error(response) unless response.success?
|
8
8
|
# create a transaction to reflect the authorization
|
9
9
|
self.creditcard_txns << CreditcardTxn.new(
|
@@ -16,11 +16,35 @@ module Spree
|
|
16
16
|
def capture
|
17
17
|
authorization = find_authorization
|
18
18
|
gw = payment_gateway
|
19
|
-
response = gw.capture(order.total * 100, authorization.response_code, minimal_gateway_options)
|
19
|
+
response = gw.capture((order.total * 100).to_i, authorization.response_code, minimal_gateway_options)
|
20
20
|
gateway_error(response) unless response.success?
|
21
21
|
self.creditcard_txns.create(:amount => order.total, :response_code => response.authorization, :txn_type => CreditcardTxn::TxnType::CAPTURE)
|
22
22
|
end
|
23
23
|
|
24
|
+
def purchase
|
25
|
+
#purchase is a combined Authorize and Capture that gets processed
|
26
|
+
#by the ActiveMerchant gateway as one single transaction.
|
27
|
+
|
28
|
+
gateway = payment_gateway
|
29
|
+
|
30
|
+
response = gateway.purchase((order.total * 100).to_i, @creditcard, gateway_options)
|
31
|
+
gateway_error(response) unless response.success?
|
32
|
+
|
33
|
+
# create a transaction to reflect the authorization
|
34
|
+
self.creditcard_txns << CreditcardTxn.new(
|
35
|
+
:amount => order.total,
|
36
|
+
:response_code => response.authorization,
|
37
|
+
:txn_type => CreditcardTxn::TxnType::AUTHORIZE
|
38
|
+
)
|
39
|
+
|
40
|
+
# create a transaction to reflect the capture
|
41
|
+
self.creditcard_txns << CreditcardTxn.new(
|
42
|
+
:amount => order.total,
|
43
|
+
:response_code => response.authorization,
|
44
|
+
:txn_type => CreditcardTxn::TxnType::CAPTURE
|
45
|
+
)
|
46
|
+
end
|
47
|
+
|
24
48
|
def void
|
25
49
|
authorization = find_authorization
|
26
50
|
response = payment_gateway.void(authorization.response_code, minimal_gateway_options)
|
@@ -60,7 +84,7 @@ module Spree
|
|
60
84
|
|
61
85
|
# instantiates the selected gateway and configures with the options stored in the database
|
62
86
|
def payment_gateway
|
63
|
-
return Spree::BogusGateway.new if ENV['RAILS_ENV'] == "development"
|
87
|
+
return Spree::BogusGateway.new if ENV['RAILS_ENV'] == "development" and Spree::Gateway::Config[:use_bogus]
|
64
88
|
|
65
89
|
# retrieve gateway configuration from the database
|
66
90
|
gateway_config = GatewayConfiguration.find :first
|
@@ -28,8 +28,4 @@ class PaymentGatewayExtension < Spree::Extension
|
|
28
28
|
Order.state_machines['state'].after_transition(:to => 'returned', :do => lambda {|order| order.creditcard_payment.void})
|
29
29
|
end
|
30
30
|
end
|
31
|
-
|
32
|
-
def deactivate
|
33
|
-
# admin.tabs.remove "Payment Gateway"
|
34
|
-
end
|
35
31
|
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
# I think this is the one that should be moved to the extension Rakefile template
|
2
|
+
|
3
|
+
# In rails 1.2, plugins aren't available in the path until they're loaded.
|
4
|
+
# Check to see if the rspec plugin is installed first and require
|
5
|
+
# it if it is. If not, use the gem version.
|
6
|
+
|
7
|
+
# Determine where the RSpec plugin is by loading the boot
|
8
|
+
unless defined? SPREE_ROOT
|
9
|
+
ENV["RAILS_ENV"] = "test"
|
10
|
+
case
|
11
|
+
when ENV["SPREE_ENV_FILE"]
|
12
|
+
require File.dirname(ENV["SPREE_ENV_FILE"]) + "/boot"
|
13
|
+
when File.dirname(__FILE__) =~ %r{vendor/SPREE/vendor/extensions}
|
14
|
+
require "#{File.expand_path(File.dirname(__FILE__) + "/../../../../../")}/config/boot"
|
15
|
+
else
|
16
|
+
require "#{File.expand_path(File.dirname(__FILE__) + "/../../../")}/config/boot"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
require 'rake'
|
21
|
+
require 'rake/rdoctask'
|
22
|
+
require 'rake/testtask'
|
23
|
+
|
24
|
+
rspec_base = File.expand_path(SPREE_ROOT + '/vendor/plugins/rspec/lib')
|
25
|
+
$LOAD_PATH.unshift(rspec_base) if File.exist?(rspec_base)
|
26
|
+
require 'spec/rake/spectask'
|
27
|
+
# require 'spec/translator'
|
28
|
+
|
29
|
+
# Cleanup the SPREE_ROOT constant so specs will load the environment
|
30
|
+
Object.send(:remove_const, :SPREE_ROOT)
|
31
|
+
|
32
|
+
extension_root = File.expand_path(File.dirname(__FILE__))
|
33
|
+
|
34
|
+
task :default => :spec
|
35
|
+
task :stats => "spec:statsetup"
|
36
|
+
|
37
|
+
desc "Run all specs in spec directory"
|
38
|
+
Spec::Rake::SpecTask.new(:spec) do |t|
|
39
|
+
t.spec_opts = ['--options', "\"#{extension_root}/spec/spec.opts\""]
|
40
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
41
|
+
end
|
42
|
+
|
43
|
+
namespace :spec do
|
44
|
+
desc "Run all specs in spec directory with RCov"
|
45
|
+
Spec::Rake::SpecTask.new(:rcov) do |t|
|
46
|
+
t.spec_opts = ['--options', "\"#{extension_root}/spec/spec.opts\""]
|
47
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
48
|
+
t.rcov = true
|
49
|
+
t.rcov_opts = ['--exclude', 'spec', '--rails']
|
50
|
+
end
|
51
|
+
|
52
|
+
desc "Print Specdoc for all specs"
|
53
|
+
Spec::Rake::SpecTask.new(:doc) do |t|
|
54
|
+
t.spec_opts = ["--format", "specdoc", "--dry-run"]
|
55
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
56
|
+
end
|
57
|
+
|
58
|
+
[:models, :controllers, :views, :helpers].each do |sub|
|
59
|
+
desc "Run the specs under spec/#{sub}"
|
60
|
+
Spec::Rake::SpecTask.new(sub) do |t|
|
61
|
+
t.spec_opts = ['--options', "\"#{extension_root}/spec/spec.opts\""]
|
62
|
+
t.spec_files = FileList["spec/#{sub}/**/*_spec.rb"]
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# Hopefully no one has written their extensions in pre-0.9 style
|
67
|
+
# desc "Translate specs from pre-0.9 to 0.9 style"
|
68
|
+
# task :translate do
|
69
|
+
# translator = ::Spec::Translator.new
|
70
|
+
# dir = RAILS_ROOT + '/spec'
|
71
|
+
# translator.translate(dir, dir)
|
72
|
+
# end
|
73
|
+
|
74
|
+
# Setup specs for stats
|
75
|
+
task :statsetup do
|
76
|
+
require 'code_statistics'
|
77
|
+
::STATS_DIRECTORIES << %w(Model\ specs spec/models)
|
78
|
+
::STATS_DIRECTORIES << %w(View\ specs spec/views)
|
79
|
+
::STATS_DIRECTORIES << %w(Controller\ specs spec/controllers)
|
80
|
+
::STATS_DIRECTORIES << %w(Helper\ specs spec/views)
|
81
|
+
::CodeStatistics::TEST_TYPES << "Model specs"
|
82
|
+
::CodeStatistics::TEST_TYPES << "View specs"
|
83
|
+
::CodeStatistics::TEST_TYPES << "Controller specs"
|
84
|
+
::CodeStatistics::TEST_TYPES << "Helper specs"
|
85
|
+
::STATS_DIRECTORIES.delete_if {|a| a[0] =~ /test/}
|
86
|
+
end
|
87
|
+
|
88
|
+
namespace :db do
|
89
|
+
namespace :fixtures do
|
90
|
+
desc "Load fixtures (from spec/fixtures) into the current environment's database. Load specific fixtures using FIXTURES=x,y"
|
91
|
+
task :load => :environment do
|
92
|
+
require 'active_record/fixtures'
|
93
|
+
ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym)
|
94
|
+
(ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/) : Dir.glob(File.join(RAILS_ROOT, 'spec', 'fixtures', '*.{yml,csv}'))).each do |fixture_file|
|
95
|
+
Fixtures.create_fixtures('spec/fixtures', File.basename(fixture_file, '.*'))
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
desc 'Generate documentation for the shipping extension.'
|
103
|
+
Rake::RDocTask.new(:rdoc) do |rdoc|
|
104
|
+
rdoc.rdoc_dir = 'rdoc'
|
105
|
+
rdoc.title = 'ShippingExtension'
|
106
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
107
|
+
rdoc.rdoc_files.include('README')
|
108
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
109
|
+
end
|
110
|
+
|
111
|
+
# For extensions that are in transition
|
112
|
+
desc 'Test the shipping extension.'
|
113
|
+
Rake::TestTask.new(:test) do |t|
|
114
|
+
t.libs << 'lib'
|
115
|
+
t.pattern = 'test/**/*_test.rb'
|
116
|
+
t.verbose = true
|
117
|
+
end
|
118
|
+
|
119
|
+
# Load any custom rakefiles for extension
|
120
|
+
Dir[File.dirname(__FILE__) + '/tasks/*.rake'].sort.each { |f| require f }
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class Admin::ShippingCategoriesController < ApplicationController
|
2
|
+
resource_controller
|
3
|
+
|
4
|
+
layout 'admin'
|
5
|
+
|
6
|
+
require_role :admin
|
7
|
+
|
8
|
+
update.response do |wants|
|
9
|
+
wants.html { redirect_to collection_url }
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
create.response do |wants|
|
14
|
+
wants.html { redirect_to collection_url }
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class Admin::ShippingMethodsController < ApplicationController
|
2
|
+
resource_controller
|
3
|
+
before_filter :load_data
|
4
|
+
layout 'admin'
|
5
|
+
|
6
|
+
require_role :admin
|
7
|
+
|
8
|
+
update.response do |wants|
|
9
|
+
wants.html { redirect_to collection_url }
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
create.response do |wants|
|
14
|
+
wants.html { redirect_to collection_url }
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
def load_data
|
19
|
+
@available_zones = Zone.find :all, :order => :name
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
class ShipmentsController < Admin::BaseController
|
2
|
+
before_filter :login_required
|
3
|
+
before_filter :state_check
|
4
|
+
before_filter :check_existing, :only => :new
|
5
|
+
before_filter :load_data, :only => [:new, :edit]
|
6
|
+
layout 'application'
|
7
|
+
|
8
|
+
resource_controller
|
9
|
+
belongs_to :order
|
10
|
+
|
11
|
+
create.response do |wants|
|
12
|
+
wants.html do
|
13
|
+
next_step
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
create.before do
|
18
|
+
# add the specified shipping method to the shipment, before it's saved.
|
19
|
+
@shipment.update_attribute(:shipping_method, ShippingMethod.find(params[:method_id]))
|
20
|
+
end
|
21
|
+
|
22
|
+
update.response do |wants|
|
23
|
+
wants.html do
|
24
|
+
next_step
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
update.after do
|
29
|
+
@shipment.update_attribute(:shipping_method, ShippingMethod.find(params[:method_id]))
|
30
|
+
end
|
31
|
+
|
32
|
+
def fail
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
def build_object
|
37
|
+
find_shipment
|
38
|
+
end
|
39
|
+
|
40
|
+
def object
|
41
|
+
return find_shipment if param.blank?
|
42
|
+
@object ||= end_of_association_chain.find(param) unless param.nil?
|
43
|
+
end
|
44
|
+
|
45
|
+
def find_shipment
|
46
|
+
@object = parent_object.shipments.first
|
47
|
+
@object ||= Shipment.new(:order => parent_object)
|
48
|
+
end
|
49
|
+
|
50
|
+
def check_existing
|
51
|
+
load_object
|
52
|
+
redirect_to edit_order_shipment_url(@order, @shipment) unless @order.shipments.empty?
|
53
|
+
end
|
54
|
+
|
55
|
+
def next_step
|
56
|
+
@order.next!
|
57
|
+
redirect_to checkout_order_url(@order)
|
58
|
+
end
|
59
|
+
|
60
|
+
def state_check
|
61
|
+
load_object
|
62
|
+
if @order.checkout_complete
|
63
|
+
redirect_to checkout_order_url(@order) and return
|
64
|
+
end
|
65
|
+
# set the state to shipment (in case user has hit back button from some other state)
|
66
|
+
@order.update_attribute(:state, "shipment")
|
67
|
+
end
|
68
|
+
|
69
|
+
def load_data
|
70
|
+
@shipping_methods = @order.shipping_methods
|
71
|
+
# check that the price of each method is available - if we encounter an error, we can inform the user gracefully
|
72
|
+
# (instead of having the next view just crash when asked the price)
|
73
|
+
begin
|
74
|
+
@shipping_methods.each do |shipping_method|
|
75
|
+
rate = shipping_method.calculate_shipping(@order)
|
76
|
+
@default_method ||= shipping_method unless rate.nil?
|
77
|
+
end
|
78
|
+
rescue Spree::ShippingError => se
|
79
|
+
# We cannot recover from this error (for now.) Send back to the previous step (and alert the user)
|
80
|
+
flash[:error] = se.message
|
81
|
+
redirect_to fatal_shipping_order_url(@order)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|