locomotive_ecommerce_plugin 1.0.1 → 1.0.4

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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- M2Y4ZTc5NzNjNmFmOTA2ODFlYjIyMjEzYTViZGZkYTMzOWFmZTBmZA==
4
+ NWU3NmY0NDM0ZTBlZDcyNTJmZDM1NDllNmY1MTc0NGIzNzFkNmE1Ng==
5
5
  data.tar.gz: !binary |-
6
- MWVhZDVlM2U4ZmQ3MDMwOWQ1ZWIwZGZiOWI3Mzc1YWU3M2E1ZDk1OA==
6
+ OWJhMTcxMTEyYTAzZTcyZDIyMDI1MTgyZjdhZWIzZmY5ZmM0Y2NjZQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NGNmMzc5ZGU5ZDQ2ZTI4NGFlMTAzNTg4ZTI1MDQ3YmNhNGJhZWM1N2MxMGQ4
10
- OWQ1ZjA5NGQ4ZTMxMDFjY2Y1NmI1M2U5NDY2N2U0MGI5MWFjMmM0NzBkMDcy
11
- NjVkNjE3YmE0MzBkMTRjNTRjOTBkYjU3NjMzYjJmZjk1MmM1ODg=
9
+ ODBlZjBiYzdiYmZmOTkyZTI3NzU4YWZlODZhNTJjNzA0OGMwM2JkZTg3YmUx
10
+ NTMyMDEyYTE3YWQ3MjUxNTJhZGIxMWNkMWEzNDFmZTVkM2QxOTg3MDhiNjU0
11
+ MTI2YzA5OTQxNDE1OGMzMmJjZWY5MTQ5YjMyOTI3YWY2Y2Y5M2U=
12
12
  data.tar.gz: !binary |-
13
- YmI3N2VkNWQzYzk5M2MyYWY0Y2UwZWJhOTBjMTIwOTYyMjlhN2I5YmZlNmRm
14
- Zjk3ZGMyYzI1YzlkNzhlMDY2OGU2NzU3OWM2N2U5YjhlNzhiYzhlNDZhMzVm
15
- MzM4Y2JhYTAzMGYyNzVlMjU3YjczODRkZGY0OWI1Yzk4NjU3YzY=
13
+ ZjZmOGM4OTJjNzNkYjQ1OThiODc5NDZjNzg1MDViMjI3YTQ0YjIxNmU2MWEy
14
+ ODVjYWI5MjU3OWIyZDYzM2JkZjBhNTU2YzYzMjI0MGY3MTE0NmM5YTI0ZDhj
15
+ ZjkyNTY4YmZmNTBjYzE1YTJmMjZhMTY3MGZmN2E0MzhhNTVjZGI=
@@ -1,12 +1,12 @@
1
- module Locomotive
2
- module Ecommerce
3
- class CartController < ::Locomotive::Ecommerce::ApplicationController
4
- def update
5
- @cart = Cart.find(params[:id])
6
- @cart.update_from_params(params)
7
- flash[:success] = 'Updated cart'
8
- redirect_to cart_path
9
- end
10
- end
11
- end
12
- end
1
+ module Locomotive
2
+ module Ecommerce
3
+ class CartController < ::Locomotive::Ecommerce::ApplicationController
4
+ def update
5
+ @cart = Cart.find(params[:id])
6
+ @cart.update_from_params(params)
7
+ flash[:success] = 'Updated cart'
8
+ redirect_to cart_path
9
+ end
10
+ end
11
+ end
12
+ end
@@ -3,7 +3,7 @@ require 'stripe'
3
3
  module Locomotive
4
4
  module Ecommerce
5
5
  class PurchaseController < ::Locomotive::Ecommerce::ApplicationController
6
- before_filter :authenticate_user!, except: [:do_new_purchase]
6
+ before_filter :do_authorize, except: [:do_new_purchase]
7
7
 
8
8
  def create
9
9
  @purchase = current_user_cart(self).purchase
@@ -21,35 +21,12 @@ module Locomotive
21
21
  redirect_to checkout_path
22
22
  end
23
23
 
24
- def self.complete(purchase_id, user, cart, stripeToken)
25
- purchase = Purchase.where(_id: purchase_id).first
26
-
27
- #Reset user cart
28
- purchase.cart.user_id = nil
29
- purchase.cart.save!
30
- new_cart = Cart.create
31
- new_cart.user_id = user.id
32
- new_cart.save!
33
-
34
- #complete purchase
35
- purchase.stripe_token = stripeToken
36
- purchase.complete
37
- purchase.completed = true
38
- purchase.user_id = user.id
39
- purchase.save!
40
- PurchaseMailer.purchase_confirmation(user, purchase).deliver
41
- after_purchase_hook(purchase, user)
42
- end
43
-
44
24
  private
45
25
 
46
- def self.after_purchase_hook(purchase, user)
47
-
48
- site = Thread.current[:site]
49
- cxt = site.plugin_object_for_id('ecommerce').js3_context
50
- cxt['user'] = user
51
- cxt['purchase'] = purchase
52
- last = cxt.eval(Engine.config_or_default('after_purchase_hook'))
26
+ def do_authorize
27
+ if Engine.config_or_default('require_user')
28
+ authenticate_user!
29
+ end
53
30
  end
54
31
  end
55
32
  end
@@ -1,11 +1,11 @@
1
1
  module Locomotive
2
- module Ecommerce
3
- module EcommerceCartHelper
4
- def current_user_cart(controller)
5
- user = current_user(controller)
6
- id = user == nil ? nil : user.id
7
- Cart.find_or_create(id, controller.session)
8
- end
9
- end
10
- end
2
+ module Ecommerce
3
+ module EcommerceCartHelper
4
+ def current_user_cart(controller)
5
+ user = current_user(controller)
6
+ id = user == nil ? nil : user.id
7
+ Cart.find_or_create(id, controller.session)
8
+ end
9
+ end
10
+ end
11
11
  end
@@ -44,7 +44,7 @@ module Locomotive
44
44
  ext = Engine.config_or_default('edit_extra')
45
45
  return nil unless ext
46
46
  site = Thread.current[:site]
47
- cxt = site.plugin_object_for_id('inventory').js3_context
47
+ cxt = site.plugin_object_for_id('ecommerce').js3_context
48
48
  cxt['purchase_total'] = purchase_total
49
49
  cxt['orders'] = orders
50
50
  js = cxt.eval(ext)
@@ -159,4 +159,4 @@ module Locomotive
159
159
  attr_accessor :source
160
160
  end
161
161
  end
162
- end
162
+ end
@@ -23,11 +23,11 @@ module Locomotive
23
23
  end
24
24
 
25
25
  def price
26
- quantity * product_price(sku).to_i
26
+ quantity * product_price.to_i
27
27
  end
28
28
 
29
29
  def out_of_stock?
30
- quantity > product_quantity(sku)
30
+ quantity > product_quantity
31
31
  end
32
32
 
33
33
  def self.id_to_sku(id)
@@ -36,14 +36,20 @@ module Locomotive
36
36
  end
37
37
 
38
38
  def product
39
- self.class.product_class.find_by_sku(sku)
39
+ klass = self.class.product_class
40
+
41
+ if klass.respond_to?(:find_by_sku)
42
+ klass.find_by_sku(sku)
43
+ else
44
+ klass.where(sku: sku).first
45
+ end
40
46
  end
41
47
 
42
48
  [:size, :color, :quantity, :price, :name].each do |method|
43
49
  defined = "product_#{method}".to_sym
44
50
  default = [:quantity, :price].include?(method)? 0 : ''
45
51
  method = :description if method == :name
46
- define_method(defined) do |sku|
52
+ define_method(defined) do
47
53
  i = product
48
54
  if i == nil
49
55
  default
@@ -90,18 +96,22 @@ module Locomotive
90
96
  "%0.2f" % @source.price.round(2)
91
97
  end
92
98
 
93
- [:size, :color, :quantity, :name].each do |method|
99
+ def product_price
100
+ "%0.2f" % @source.product_price.round(2)
101
+ end
102
+
103
+ [:size, :color, :name].each do |method|
94
104
  defined = "product_#{method}".to_sym
95
105
  define_method(method) do
96
- @source.send(defined, @source.sku)
106
+ @source.send(defined)
97
107
  end
98
- end
108
+ end
99
109
 
100
- delegate :sku, :product, :out_of_stock?, :product_quantity, :cart, to: :@source
110
+ delegate :sku, :product, :quantity, :out_of_stock?, :product_quantity, :cart, to: :@source
101
111
 
102
112
  protected
103
113
 
104
- attr_accessor :source
114
+ attr_accessor :source
105
115
  end
106
116
  end
107
- end
117
+ end
@@ -11,6 +11,29 @@ module Locomotive
11
11
  field :stripe_token, :type => String
12
12
  has_one :cart, :class_name => "::Locomotive::Ecommerce::Cart"
13
13
 
14
+ def self.complete(purchase_id, user, cart, stripeToken, session)
15
+ purchase = Purchase.where(_id: purchase_id).first
16
+
17
+ #Reset user cart
18
+ purchase.cart.user_id = nil
19
+ purchase.cart.save!
20
+ new_cart = Cart.create
21
+ new_cart.user_id = user.id if user
22
+ new_cart.save!
23
+ session[:cart_id] = new_cart.id
24
+
25
+ #complete purchase
26
+ purchase.stripe_token = stripeToken
27
+ purchase.complete
28
+ purchase.completed = true
29
+ purchase.user_id = user.id if user
30
+ purchase.save!
31
+ if user
32
+ PurchaseMailer.purchase_confirmation(user, purchase).deliver
33
+ end
34
+ after_purchase_hook(purchase, user)
35
+ end
36
+
14
37
  def complete
15
38
  cart.orders.each { |order| order.product_quantity -= order.quantity }
16
39
  end
@@ -43,42 +66,42 @@ module Locomotive
43
66
  end
44
67
 
45
68
  def tax
46
- if precent = tax_precentage
69
+ if precent = tax_percentage
47
70
  cart.purchase_total * (precent.to_f/100)
48
71
  else
49
72
  -1
50
73
  end
51
74
  end
52
75
 
53
- def tax_precentage
54
- unless @tax_precentage
76
+ def tax_percentage
77
+ unless @tax_percentage
55
78
  ct = Thread.current[:site].content_types.where(slug: Engine.config_or_default('tax_model')).first
56
79
  if ct
57
80
  query_hash = {}
58
81
  country_field = Engine.config_or_default('country_slug').to_sym
59
82
  province_field = Engine.config_or_default('province_slug').to_sym
60
- precentage_field = Engine.config_or_default('precentage_slug').to_sym
83
+ percentage_field = Engine.config_or_default('percentage_slug').to_sym
61
84
  query_hash[country_field] = /#{shipping_info[country_field.to_s]}/i
62
85
  query = ct.entries.where(query_hash)
63
86
  if query.count == 1
64
- @tax_precentage = query.first.send(precentage_field)
87
+ @tax_percentage = query.first.send(percentage_field)
65
88
  elsif query.count > 0
66
89
  query_hash = {}
67
90
  query_hash[province_field] = /#{shipping_info[province_field.to_s]}/i
68
91
  query = query.and(query_hash)
69
92
  if query.count > 0
70
- @tax_precentage = query.first.send(precentage_field)
93
+ @tax_percentage = query.first.send(percentage_field)
71
94
  else
72
- @tax_precentage = nil
95
+ @tax_percentage = nil
73
96
  end
74
97
  else
75
- @tax_precentage = nil
98
+ @tax_percentage = nil
76
99
  end
77
100
  else
78
- @tax_precentage = nil
101
+ @tax_percentage = nil
79
102
  end
80
103
  end
81
- @tax_precentage
104
+ @tax_percentage
82
105
  end
83
106
 
84
107
  def shipping
@@ -92,9 +115,9 @@ module Locomotive
92
115
  query_hash = {}
93
116
  query_hash[name_field] = self.shipping_method
94
117
  method = ct.entries.where(query_hash).first
95
- if self.cart.purchase_total > price_break
118
+ if method && self.cart.purchase_total > price_break
96
119
  @shipping = method.send(over_field).to_f
97
- else
120
+ elsif method
98
121
  @shipping = method.send(under_field).to_f
99
122
  end
100
123
  end
@@ -110,6 +133,16 @@ module Locomotive
110
133
  end
111
134
  end
112
135
 
136
+ protected
137
+
138
+ def self.after_purchase_hook(purchase, user)
139
+
140
+ site = Thread.current[:site]
141
+ cxt = site.plugin_object_for_id('ecommerce').js3_context
142
+ cxt['user'] = user
143
+ cxt['purchase'] = purchase
144
+ last = cxt.eval(Engine.config_or_default('after_purchase_hook'))
145
+ end
113
146
  end
114
147
 
115
148
  class PurchaseDrop < ::Liquid::Drop
@@ -126,9 +159,9 @@ module Locomotive
126
159
  end
127
160
 
128
161
  [:subtotal_est_tax, :shipping_estimate, :subtotal_est_shipping,
129
- :shipping, :tax, :tax_precentage, :total].each do |method|
162
+ :shipping, :tax, :tax_percentage, :total].each do |method|
130
163
  define_method("#{method.to_s}_value".to_sym) {@source.send(method).round(2)}
131
- define_method(method) {"%0.2f" % @source.send(method).round(2)}
164
+ define_method(method) {"%0.2f" % @source.send(method).round(2) if @source.send(method)}
132
165
  end
133
166
 
134
167
  delegate :cart, :stripe_token, :completed, :shipping_info, to: :@source
@@ -145,4 +178,4 @@ module Locomotive
145
178
  attr_accessor :source
146
179
  end
147
180
  end
148
- end
181
+ end
@@ -24,10 +24,11 @@ module Locomotive
24
24
 
25
25
  success_proc = lambda do |controller, token, stripe|
26
26
  purchase = Purchase.where(_id: token).first
27
- PurchaseController.complete(token,
28
- helper.current_user(controller),
29
- helper.current_user_cart(controller),
30
- stripe)
27
+ Purchase.complete(token,
28
+ helper.current_user(controller),
29
+ helper.current_user_cart(controller),
30
+ stripe,
31
+ controller.session)
31
32
  controller.flash[:notice] = "Thank you for your purchase."
32
33
  helper.post_checkout_path
33
34
  end
@@ -37,4 +38,4 @@ module Locomotive
37
38
  config.charge_success = success_proc
38
39
  end
39
40
  end
40
- end
41
+ end
@@ -16,6 +16,11 @@
16
16
  <input type="text" name="checkout_url" />
17
17
  </li>
18
18
 
19
+ <li>
20
+ <label name="confirm_order_url">Confirm Order URL:</label>
21
+ <input type="text" name="confirm_order_url" />
22
+ </li>
23
+
19
24
  <li>
20
25
  <label name="new_checkout_url">Post Checkout URL:</label>
21
26
  <input type="text" name="post_checkout_url" />
@@ -24,10 +29,6 @@
24
29
  <label name="purchases_url">Purchases URL:</label>
25
30
  <input type="text" name="purchases_url" />
26
31
  </li>
27
- <li>
28
- <label name="with_quantity">Only in Stock Items:</label>
29
- <input type="checkbox" name="with_quantity" />
30
- </li>
31
32
  <li>
32
33
  <label name="purchases_url">Estimated Tax Rate (in percent):</label>
33
34
  <input type="text" name="estimated_tax_rate" />
@@ -51,8 +52,8 @@
51
52
  <input type="text" name="province_slug" />
52
53
  </li>
53
54
  <li>
54
- <label name="precentage_slug">Precentage Slug:</label>
55
- <input type="text" name="precentage_slug" />
55
+ <label name="percentage_slug">Precentage Slug:</label>
56
+ <input type="text" name="percentage_slug" />
56
57
  </li>
57
58
  <li>
58
59
  <label name="shipping_model">Shipping Model:</label>
@@ -109,3 +110,7 @@
109
110
  <label name="contact">Contact</label>
110
111
  <input type="text" name="contact" />
111
112
  </li>
113
+ <li>
114
+ <label name="require_user">Require User?</label>
115
+ <input type="checkbox" name="require_user" />
116
+ </li>
@@ -7,9 +7,9 @@ module Locomotive
7
7
  "#{stem}cart/#{cart.id}"
8
8
  end
9
9
 
10
- def add_to_cart_path(product)
10
+ def add_to_cart_path(product_sku)
11
11
  stem = @context.registers[:plugin_object].path
12
- "#{stem}add_to_cart/#{product.id}"
12
+ "#{stem}add_to_cart/#{product_sku}"
13
13
  end
14
14
 
15
15
  def remove_from_cart_path(product_sku)
@@ -12,10 +12,12 @@ module Locomotive
12
12
  super
13
13
  session = context.registers[:controller].session
14
14
  site = Thread.current[:site]
15
- user_from_plugin = site.plugin_object_for_id('identity_plugin').js3_context['identity_plugin_users']
16
- user = user_from_plugin.find(session[:user_id])
17
- # user = IdentityPlugin::User.find(session[:user_id])
18
- id = user == nil ? nil : user.id
15
+ id = nil
16
+ if session[:user_id]
17
+ user_from_plugin = site.plugin_object_for_id('identity_plugin').js3_context['identity_plugin_users']
18
+ user = user_from_plugin.find(session[:user_id])
19
+ id = user == nil ? nil : user.id
20
+ end
19
21
  cart = Cart.find_or_create(id, session)
20
22
  @purchase = cart.purchase
21
23
  context.registers[:controller].render_cell 'stripe_helper/stripe', :show,
@@ -28,4 +30,4 @@ module Locomotive
28
30
  end
29
31
  end
30
32
  end
31
- end
33
+ end
@@ -24,15 +24,15 @@ module Locomotive
24
24
  'estimated_tax_rate' => '15',
25
25
  'country_slug' => 'country',
26
26
  'province_slug' => 'province',
27
- 'precentage_slug' => 'precentage',
27
+ 'percentage_slug' => 'percentage',
28
28
  'shipping_name_slug' => 'name',
29
29
  'shipping_over_slug' => 'over',
30
30
  'shipping_under_slug' => 'under',
31
31
  'price_break' => '100',
32
- 'edit_extra' => 'add extras through JS',
33
32
  'shop_name' => "<insert name>",
34
33
  'shop_inventory' => "inventory_itemsUpdate",
35
- 'contact' => "fake@email.com"
34
+ 'contact' => "fake@email.com",
35
+ 'require_user' => false
36
36
  }
37
37
  hash = defaults.merge(config_hash)
38
38
  hash[key]
@@ -2,21 +2,21 @@ module Locomotive
2
2
  module Ecommerce
3
3
  module InventoryInterface
4
4
  # Inventory
5
- def self.included(base)
6
- base.send :extend, Methods
7
- base.send :include, Methods
8
- end
9
- module Methods
5
+ def self.included(base)
6
+ base.send :extend, Methods
7
+ base.send :include, Methods
8
+ end
9
+ module Methods
10
10
 
11
- def inventory_items
12
- site = Thread.current[:site]
13
- site.plugin_object_for_id('inventory').js3_context.eval(Engine.config_or_default('shop_inventory_update'))
14
- end
15
- def inventory_items_class
16
- site = Thread.current[:site]
17
- site.plugin_object_for_id('inventory').js3_context.eval(Engine.config_or_default('shop_inventory_items'))
18
- end
19
- end
11
+ def inventory_items
12
+ site = Thread.current[:site]
13
+ site.plugin_object_for_id('ecommerce').js3_context.eval(Engine.config_or_default('shop_inventory_update'))
14
+ end
15
+ def inventory_items_class
16
+ site = Thread.current[:site]
17
+ site.plugin_object_for_id('ecommerce').js3_context.eval(Engine.config_or_default('shop_inventory_items'))
18
+ end
19
+ end
20
20
  end
21
21
  end
22
- end
22
+ end
@@ -1,5 +1,5 @@
1
1
  module Locomotive
2
2
  module Ecommerce
3
- VERSION = "1.0.1"
3
+ VERSION = "1.0.4"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: locomotive_ecommerce_plugin
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Colibri Software
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-16 00:00:00.000000000 Z
11
+ date: 2014-10-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails