spree_last_address 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/LICENSE +23 -0
- data/README.md +34 -0
- data/Rakefile +1 -0
- data/Versionfile +6 -0
- data/app/controllers/spree/checkout_controller_decorator.rb +15 -0
- data/lib/spree_last_address.rb +28 -0
- data/lib/spree_last_address/version.rb +5 -0
- data/lib/tasks/install.rake +25 -0
- data/lib/tasks/spree_last_address.rake +1 -0
- data/spree_last_address.gemspec +25 -0
- metadata +74 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
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.
|
data/README.md
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
Last Address extension for Spree
|
2
|
+
================================
|
3
|
+
|
4
|
+
During checkout, causes the address to be prefilled with the address from their most recent order or
|
5
|
+
the user’s saved address (if available).
|
6
|
+
|
7
|
+
This relieves the customer of having to type in his address again on a second order. (The
|
8
|
+
unnecessary typing make them more likely to bounce instead of completing the order.)
|
9
|
+
|
10
|
+
If your app allows a user to set and edit their "preferred" or "default" address (as reflected by
|
11
|
+
`user.bill_address`/`user.ship_address`), and the user has set a preferred address for their
|
12
|
+
account, that address will take priority and be used instead of the address from their most recent
|
13
|
+
order. (Similar to [spree-default-addresses](https://github.com/swistak/spree-default-addresses).)
|
14
|
+
|
15
|
+
As of Spree 1.2, the `belongs_to :bill_address` and `belongs_to :ship_address` associations are
|
16
|
+
provided for the `Spree::User` model by the spree_auth_devise gem . If those associations are not
|
17
|
+
available or if the user doesn't have a saved address (which will be the case unless you've provided
|
18
|
+
a way in your app to set an address), then it will just use the address from user's most recent
|
19
|
+
order.
|
20
|
+
|
21
|
+
Installation
|
22
|
+
=============
|
23
|
+
|
24
|
+
Just put this in your Gemfile:
|
25
|
+
|
26
|
+
gem 'spree_last_address', :git => "git://github.com/TylerRick/spree_last_address.git"
|
27
|
+
|
28
|
+
Contributors
|
29
|
+
============
|
30
|
+
|
31
|
+
* kenscotthlebek
|
32
|
+
* TylerRick
|
33
|
+
|
34
|
+
Copyright (c) 2010 [Torsten Rüger], released under the New BSD License
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
data/Versionfile
ADDED
@@ -0,0 +1,6 @@
|
|
1
|
+
"1.3.x" => { :branch => "master" }
|
2
|
+
"1.2.x" => { :branch => "master" }
|
3
|
+
"1.1.x" => { :branch => "master" }
|
4
|
+
"1.0.x" => { :branch => "master" }
|
5
|
+
"0.70.x" => { :ref => "fab7efd6c813dd4accc86ebcf2293fc34a13c89d" }
|
6
|
+
"0.60.x" => { :ref => "fab7efd6c813dd4accc86ebcf2293fc34a13c89d" }
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Spree
|
2
|
+
CheckoutController.class_eval do
|
3
|
+
|
4
|
+
private
|
5
|
+
|
6
|
+
def before_address
|
7
|
+
return if @order.bill_address or @order.ship_address
|
8
|
+
last_used_bill_address, last_used_ship_address = SpreeLastAddress.find_last_used_addresses(@order.email)
|
9
|
+
preferred_bill_address, preferred_ship_address = current_user.bill_address, current_user.ship_address if current_user.respond_to?(:bill_address) && current_user.respond_to?(:ship_address)
|
10
|
+
@order.bill_address ||= preferred_bill_address || last_used_bill_address || Address.default
|
11
|
+
@order.ship_address ||= preferred_ship_address || last_used_ship_address || Address.default
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require "spree_last_address/version"
|
2
|
+
|
3
|
+
module SpreeLastAddress
|
4
|
+
class Engine < Rails::Engine
|
5
|
+
|
6
|
+
config.autoload_paths += %W(#{config.root}/lib)
|
7
|
+
|
8
|
+
def self.activate
|
9
|
+
Dir.glob(File.join(File.dirname(__FILE__), "../app/**/*_decorator*.rb")) do |c|
|
10
|
+
Rails.env.production? ? require(c) : load(c)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
config.to_prepare &method(:activate).to_proc
|
15
|
+
end
|
16
|
+
|
17
|
+
class << self
|
18
|
+
def find_last_used_addresses(email)
|
19
|
+
past = Spree::Order.order("id desc").where(:email => email).where("state != 'cart'").limit(8)
|
20
|
+
if order = past.detect(&:bill_address)
|
21
|
+
bill_address = order.bill_address.clone if order.bill_address
|
22
|
+
ship_address = order.ship_address.clone if order.ship_address
|
23
|
+
end
|
24
|
+
#puts "Found address= #{bill_address} "
|
25
|
+
return bill_address , ship_address
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
namespace :spree_last_address 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_last_address:install:migrations'].invoke
|
5
|
+
Rake::Task['spree_last_address: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,25 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "spree_last_address/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = 'spree_last_address'
|
7
|
+
s.version = SpreeLastAddress.version
|
8
|
+
s.summary = "Prefill address with last-used address"
|
9
|
+
s.description = "During checkout, causes the address to be prefilled with the address from their most recent order or the user's saved address."
|
10
|
+
|
11
|
+
s.authors = ['Tyler Rick', 'Torsten Rüger']
|
12
|
+
s.email = 'tyler.rick@k3integrations.com'
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
+
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
s.platform = Gem::Platform::RUBY
|
19
|
+
|
20
|
+
s.add_dependency('spree_core', '~> 1.0')
|
21
|
+
|
22
|
+
# Soft requirement if using Spree > 1.2, since spree_auth_devise is now what provides
|
23
|
+
# user.bill_address association:
|
24
|
+
#s.add_development_dependency('spree_auth_devise', '~> 1.2')
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: spree_last_address
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Tyler Rick
|
9
|
+
- Torsten Rüger
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2013-02-04 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: spree_core
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ~>
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '1.0'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ~>
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '1.0'
|
31
|
+
description: During checkout, causes the address to be prefilled with the address
|
32
|
+
from their most recent order or the user's saved address.
|
33
|
+
email: tyler.rick@k3integrations.com
|
34
|
+
executables: []
|
35
|
+
extensions: []
|
36
|
+
extra_rdoc_files: []
|
37
|
+
files:
|
38
|
+
- .gitignore
|
39
|
+
- Gemfile
|
40
|
+
- LICENSE
|
41
|
+
- README.md
|
42
|
+
- Rakefile
|
43
|
+
- Versionfile
|
44
|
+
- app/controllers/spree/checkout_controller_decorator.rb
|
45
|
+
- lib/spree_last_address.rb
|
46
|
+
- lib/spree_last_address/version.rb
|
47
|
+
- lib/tasks/install.rake
|
48
|
+
- lib/tasks/spree_last_address.rake
|
49
|
+
- spree_last_address.gemspec
|
50
|
+
homepage:
|
51
|
+
licenses: []
|
52
|
+
post_install_message:
|
53
|
+
rdoc_options: []
|
54
|
+
require_paths:
|
55
|
+
- lib
|
56
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
64
|
+
requirements:
|
65
|
+
- - ! '>='
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
requirements: []
|
69
|
+
rubyforge_project:
|
70
|
+
rubygems_version: 1.8.25
|
71
|
+
signing_key:
|
72
|
+
specification_version: 3
|
73
|
+
summary: Prefill address with last-used address
|
74
|
+
test_files: []
|