op_cart 0.0.11 → 0.0.12
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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/op_cart/orders.js.coffee +25 -21
- data/app/controllers/op_cart/orders_controller.rb +43 -28
- data/app/models/op_cart/order.rb +1 -1
- data/app/models/op_cart/shipping_address.rb +9 -0
- data/app/views/op_cart/orders/new.html.slim +16 -13
- data/app/views/op_cart/orders/show.html.slim +4 -2
- data/config/locales/op_cart.en.yml +10 -10
- data/db/migrate/20140829200318_create_op_cart_orders.rb +1 -0
- data/db/migrate/20150125000000_create_op_cart_shipping_addresses.rb +15 -0
- data/lib/op_cart/version.rb +1 -1
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 32b387aaa77d790a4531b2632ee96549d64e9e19
|
4
|
+
data.tar.gz: f9d4749e1df95fa59d4e958afcfc6e1e8858791e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d15243927655156b24360107719bf6e2c08edb8f03d3c3332a3f8601416c4b51fde9f3eeb33b26d3c394a484deccda34e96d01fd4cf904c97931c33c897bc5ac
|
7
|
+
data.tar.gz: f9db8fd0ba1c303c0c76b95aa0badd6fc870ae5d577345eb899a6442dbb372593be8f749c6dd15e23267f54ea7124082fe9397dc9ca038c8894263360529f245
|
@@ -1,33 +1,37 @@
|
|
1
1
|
@OpCart =
|
2
2
|
ready: ->
|
3
3
|
if $('body').is '.op_cart-orders-new, .op_cart-orders-create'
|
4
|
-
$
|
5
|
-
$
|
6
|
-
$
|
7
|
-
|
8
|
-
|
9
|
-
$expiry = $ '#order_credit_cards_expiry'
|
10
|
-
$cvc = $ '#order_credit_cards_cvc'
|
11
|
-
|
12
|
-
$zip.change ->
|
13
|
-
if $zip.val().length == 5
|
14
|
-
$.ziptastic $zip.val(), (country, state, state_short, city, zip) ->
|
15
|
-
$city.val city
|
16
|
-
$state.val state
|
17
|
-
$city.prop "disabled", false
|
18
|
-
$state.prop "disabled", false
|
19
|
-
|
20
|
-
if $('#card_details')
|
4
|
+
$number = $ '#credit_card_number'
|
5
|
+
$expiry = $ '#credit_card_expiry'
|
6
|
+
$cvc = $ '#credit_card_cvc'
|
7
|
+
|
8
|
+
if $('#card_form_inputs')
|
21
9
|
$number.payment 'formatCardNumber'
|
22
10
|
$expiry.payment 'formatCardExpiry'
|
23
11
|
$cvc.payment 'formatCardCVC'
|
24
12
|
|
13
|
+
$('#shipping_address_postal_code').change => @updateZipFields()
|
14
|
+
|
15
|
+
@updateZipFields()
|
25
16
|
@updateDisplayedQuantities()
|
26
17
|
@stripeCreateToken()
|
27
18
|
|
28
19
|
load: ->
|
29
20
|
OpCart.ready()
|
30
21
|
|
22
|
+
updateZipFields: ->
|
23
|
+
$locality = $ '#shipping_address_locality'
|
24
|
+
$region = $ '#shipping_address_region'
|
25
|
+
$zip = $ '#shipping_address_postal_code'
|
26
|
+
|
27
|
+
if $zip.val().length == 5
|
28
|
+
$.ziptastic $zip.val(), (country, region, region_short, locality, zip) ->
|
29
|
+
$locality.val locality
|
30
|
+
$region.val region
|
31
|
+
$locality.prop "disabled", false
|
32
|
+
$region.prop "disabled", false
|
33
|
+
|
34
|
+
|
31
35
|
stripeCreateToken: ->
|
32
36
|
$("#new_order").submit (event) ->
|
33
37
|
$form = $(this)
|
@@ -35,11 +39,11 @@
|
|
35
39
|
|
36
40
|
Stripe.setPublishableKey $form.data("stripe-key")
|
37
41
|
|
38
|
-
expiration = $("#
|
42
|
+
expiration = $("#credit_card_expiry").payment "cardExpiryVal"
|
39
43
|
|
40
44
|
Stripe.card.createToken
|
41
|
-
number: $("#
|
42
|
-
cvc: $("#
|
45
|
+
number: $("#credit_card_number").val()
|
46
|
+
cvc: $("#credit_card_cvc").val()
|
43
47
|
exp_month: expiration.month || 0
|
44
48
|
exp_year: expiration.year || 0
|
45
49
|
, OpCart.stripeResponseHandler
|
@@ -78,7 +82,7 @@
|
|
78
82
|
$quantity.html @lineItemQuantity(productId)
|
79
83
|
|
80
84
|
lineItemQuantity: (productId, quantity) ->
|
81
|
-
$liQuantities = $ '#
|
85
|
+
$liQuantities = $ '#line_items_quantities_json'
|
82
86
|
liQuantities = JSON.parse $liQuantities.val() || "{}"
|
83
87
|
|
84
88
|
if quantity >= 0
|
@@ -4,65 +4,80 @@ module OpCart
|
|
4
4
|
before_action :set_order, only: [:show, :edit, :update, :destroy]
|
5
5
|
|
6
6
|
def new
|
7
|
-
@products = Product.all
|
7
|
+
@products = Product.all #TODO: Move to find_products
|
8
8
|
@order = Order.new
|
9
|
+
if signed_in?
|
10
|
+
@shipping_address = current_user.shipping_addresses.first
|
11
|
+
end
|
9
12
|
end
|
10
13
|
|
11
14
|
def create
|
12
15
|
@products = Product.all
|
13
|
-
@order = Order.new order_params
|
14
|
-
|
15
|
-
if user.valid_password? params[:user][:password]
|
16
|
-
sign_in user
|
17
|
-
else
|
18
|
-
flash[:alert] = 'A user with that email already exists. Please sign in or pick another email.'
|
19
|
-
return render :new
|
20
|
-
end
|
21
|
-
end
|
22
|
-
sign_in create_user unless signed_in?
|
23
|
-
@order.user = current_user
|
16
|
+
@order = Order.new order_params #TODO: Move to set_order
|
17
|
+
add_user
|
24
18
|
add_line_items
|
19
|
+
add_shipping_address
|
25
20
|
|
26
|
-
if @order.save
|
21
|
+
if signed_in? && @order.save
|
27
22
|
redirect_to @order, notice: 'Thank you for your purchase'
|
28
23
|
else
|
24
|
+
# TODO Set flash w/ error
|
29
25
|
render :new
|
30
26
|
end
|
31
27
|
end
|
32
28
|
|
33
|
-
def show
|
34
|
-
end
|
29
|
+
def show; end
|
35
30
|
|
36
31
|
private
|
37
32
|
|
38
|
-
def create_user
|
39
|
-
User.create name: params[:order][:shipping_address][:full_name], email: params[:user][:email],
|
40
|
-
password: params[:user][:password], password_confirmation: params[:user][:password]
|
41
|
-
end
|
42
|
-
|
43
33
|
def set_order
|
44
|
-
|
45
|
-
# @order = current_user.orders.find params[:id]
|
46
|
-
@order = Order.find params[:id]
|
34
|
+
@order = current_user.orders.find params[:id]
|
47
35
|
end
|
48
36
|
|
49
37
|
def order_params
|
50
|
-
params.require(:order).permit
|
51
|
-
# { shipping_address: [ :full_name, :address, :zip_code, :city, :state ] },
|
52
|
-
)
|
38
|
+
params.require(:order).permit :email, :password, :card_token
|
53
39
|
end
|
54
40
|
|
55
41
|
def line_items_params
|
56
|
-
params.require(:line_items).permit :
|
42
|
+
params.require(:line_items).permit :quantities_json
|
43
|
+
end
|
44
|
+
|
45
|
+
def shipping_address_params
|
46
|
+
params.require(:shipping_address).permit :full_name, :street, :postal_code,
|
47
|
+
:locality, :region
|
57
48
|
end
|
58
49
|
|
59
50
|
def add_line_items
|
60
|
-
|
51
|
+
@line_items = OpenStruct.new(quantities_json: line_items_params[:quantities_json] || {})
|
52
|
+
li_quantities_json = JSON.parse @line_items.quantities_json
|
61
53
|
li_quantities_json.each do |product_id, quantity|
|
62
54
|
@order.line_items <<
|
63
55
|
LineItem.new(sellable: Product.find(product_id), quantity: quantity)
|
64
56
|
end
|
65
57
|
end
|
66
58
|
|
59
|
+
def add_user
|
60
|
+
if current_user.blank? && user = User.find_by(email: params[:user][:email])
|
61
|
+
if user.valid_password? params[:user][:password]
|
62
|
+
sign_in user
|
63
|
+
else
|
64
|
+
flash[:alert] = 'A user with that email already exists. Please sign in or pick another email.'
|
65
|
+
return false
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
unless signed_in?
|
70
|
+
sign_in User.create name: params[:order][:shipping_address][:full_name],
|
71
|
+
email: params[:user][:email], password: params[:user][:password],
|
72
|
+
password_confirmation: params[:user][:password]
|
73
|
+
end
|
74
|
+
@order.user = current_user
|
75
|
+
end
|
76
|
+
|
77
|
+
def add_shipping_address
|
78
|
+
@order.shipping_address = @shipping_address ||= ShippingAddress.create(
|
79
|
+
shipping_address_params.merge user_id: current_user.try(:id)
|
80
|
+
)
|
81
|
+
end
|
67
82
|
end
|
68
83
|
end
|
data/app/models/op_cart/order.rb
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
span.payment-errors
|
27
27
|
p
|
28
28
|
h2 Your Information
|
29
|
-
- if
|
29
|
+
- if signed_in?
|
30
30
|
strong Email:
|
31
31
|
span = current_user.email
|
32
32
|
- else
|
@@ -36,25 +36,28 @@
|
|
36
36
|
|
37
37
|
p
|
38
38
|
h2 Shipping Address
|
39
|
-
=
|
40
|
-
=
|
41
|
-
= sa.input :
|
42
|
-
= sa.input :
|
43
|
-
= sa.input :
|
44
|
-
= sa.input :
|
39
|
+
= simple_fields_for :shipping_address do |sa|
|
40
|
+
- focus_name = signed_in? ? true : false
|
41
|
+
= sa.input :full_name, autofocus: focus_name, input_html: { autocomplete: 'name' }
|
42
|
+
= sa.input :street, input_html: { autocomplete: 'street-address' }
|
43
|
+
= sa.input :postal_code, input_html: { autocomplete: 'postal-code' }
|
44
|
+
= sa.input :locality, disabled: true, input_html: { autocomplete: 'city' }
|
45
|
+
= sa.input :region, disabled: true, input_html: { autocomplete: 'state' }
|
45
46
|
|
46
|
-
p
|
47
|
+
p
|
47
48
|
h2 Card Details
|
48
49
|
- if f.object.card_token.present?
|
49
50
|
span Card information already provided.
|
50
51
|
- else
|
51
|
-
|
52
|
-
=
|
53
|
-
|
54
|
-
|
52
|
+
#card_form_inputs
|
53
|
+
= simple_fields_for :credit_card do |c|
|
54
|
+
= c.input :number, input_html: { autocomplete: 'cc-number' }
|
55
|
+
= c.input :expiry, input_html: { autocomplete: 'cc-exp' }
|
56
|
+
= c.input :cvc, input_html: { autocomplete: 'cc-csc' }
|
55
57
|
|
58
|
+
= simple_fields_for :line_items do |li|
|
59
|
+
= li.input :quantities_json, as: :hidden
|
56
60
|
= f.input :card_token, as: :hidden
|
57
|
-
= hidden_field :line_items, :quantities, value: params.fetch(:line_items, {}).fetch(:quantities, {})
|
58
61
|
|
59
62
|
.form-actions
|
60
63
|
= f.button :button, "Submit Payment"
|
@@ -3,13 +3,13 @@ en:
|
|
3
3
|
placeholders:
|
4
4
|
order:
|
5
5
|
email: "Email"
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
6
|
+
credit_card:
|
7
|
+
number: "Card Number"
|
8
|
+
expiry: 'MM/YY'
|
9
|
+
cvc: 'CVC'
|
10
|
+
shipping_address:
|
11
|
+
full_name: "Full Name"
|
12
|
+
street: "Street Address"
|
13
|
+
locality: "City"
|
14
|
+
region: "State"
|
15
|
+
postal_code: "Zip Code"
|
@@ -5,6 +5,7 @@ class CreateOpCartOrders < ActiveRecord::Migration
|
|
5
5
|
t.integer :total, null: false
|
6
6
|
t.integer :tax_amount, default: 0
|
7
7
|
t.string :status, null: false
|
8
|
+
t.references :shipping_address, index: true, null: false
|
8
9
|
t.references :user, index: true, null: false
|
9
10
|
|
10
11
|
t.timestamps null: false
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class CreateOpCartShippingAddresses < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :op_cart_shipping_addresses do |t|
|
4
|
+
t.string :full_name, null: false
|
5
|
+
t.string :street, null: false
|
6
|
+
t.string :street_2
|
7
|
+
t.string :locality, null: false
|
8
|
+
t.string :region, null: false
|
9
|
+
t.string :postal_code, null: false
|
10
|
+
t.references :user, index: true
|
11
|
+
|
12
|
+
t.timestamps null: false
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/op_cart/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: op_cart
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Boehs
|
@@ -86,6 +86,7 @@ files:
|
|
86
86
|
- app/models/op_cart/line_item.rb
|
87
87
|
- app/models/op_cart/order.rb
|
88
88
|
- app/models/op_cart/product.rb
|
89
|
+
- app/models/op_cart/shipping_address.rb
|
89
90
|
- app/views/op_cart/orders/new.html.slim
|
90
91
|
- app/views/op_cart/orders/show.html.slim
|
91
92
|
- config/initializers/stripe.rb
|
@@ -94,6 +95,7 @@ files:
|
|
94
95
|
- db/migrate/20140829191646_create_op_cart_products.rb
|
95
96
|
- db/migrate/20140829200318_create_op_cart_orders.rb
|
96
97
|
- db/migrate/20140829201756_create_op_cart_line_items.rb
|
98
|
+
- db/migrate/20150125000000_create_op_cart_shipping_addresses.rb
|
97
99
|
- db/seeds.rb
|
98
100
|
- lib/op_cart.rb
|
99
101
|
- lib/op_cart/engine.rb
|