effective_orders 1.7.5 → 1.8.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.
- checksums.yaml +4 -4
- data/README.md +73 -0
- data/app/controllers/effective/orders_controller.rb +7 -3
- data/app/controllers/effective/providers/app_checkout.rb +28 -0
- data/app/helpers/effective_orders_helper.rb +2 -0
- data/app/views/effective/orders/_checkout_step_2.html.haml +4 -0
- data/app/views/effective/orders/app_checkout/_form.html.haml +2 -0
- data/config/routes.rb +4 -0
- data/lib/effective_orders.rb +4 -1
- data/lib/effective_orders/app_checkout_service.rb +27 -0
- data/lib/effective_orders/engine.rb +16 -0
- data/lib/effective_orders/version.rb +1 -1
- data/lib/generators/templates/effective_orders.rb +8 -0
- data/spec/dummy/config/initializers/effective_orders.rb +8 -0
- data/spec/dummy/log/development.log +82 -0
- data/spec/dummy/log/test.log +52 -0
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 620fed45e324ddd47e54d737c2bc737e9eeec797
|
4
|
+
data.tar.gz: e7bf75ddee55b77e04ce2ae897b92d9f5b8b52dc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7293cfe64c1d8b4690038c61356b2861109cbfcaa055324f452f3c699247e14b8415ff6aee20ba131cd5f9fc97943213273d5cffce09b60a1b7da77b79931fd7
|
7
|
+
data.tar.gz: 071870737b47f189d6759ffecad0230c31dbc9b1577bce69e21d8d203d27d915fc8078ab06518e9af11279836151ef9f48b7746344f6142f8ffcdf1e585aa913
|
data/README.md
CHANGED
@@ -934,6 +934,79 @@ This process should be very similar although you'll create and configure a selle
|
|
934
934
|
You should generate separate private and public certificates/keys for this and it is advisable to not keep production certificates/keys in version control.
|
935
935
|
|
936
936
|
|
937
|
+
## Paying Using App Currency or Logic
|
938
|
+
|
939
|
+
There are situations when you want to handle payment logic inside your application. For example, an app could
|
940
|
+
have it's own type of currency (tokens, points, kudos) that could be used to make payments.
|
941
|
+
|
942
|
+
Let's look at a sample app checkout configuration to see how to get this kind of checkout working:
|
943
|
+
|
944
|
+
```ruby
|
945
|
+
config.app_checkout_enabled = true
|
946
|
+
|
947
|
+
config.app_checkout = {
|
948
|
+
checkout_label: 'Checkout with Tokens',
|
949
|
+
service: TokenCheckoutService,
|
950
|
+
declined_flash: "Payment was unsuccessful. Please try again."
|
951
|
+
}
|
952
|
+
```
|
953
|
+
|
954
|
+
First, decide on a checkout button label (this is only used when there's more than one checkout option available).
|
955
|
+
Other checkout buttons follow the pattern of "Checkout with \_\_\_", like "Checkout with Moneris".
|
956
|
+
|
957
|
+
Second, create a service object in your app and add a reference to it here ([see below for details](#the-app-checkout-service-object)).
|
958
|
+
|
959
|
+
The last configuration option is the declined flash message displayed when the `successful?` method
|
960
|
+
returns `false`.
|
961
|
+
|
962
|
+
Finally, *the app checkout button is hidden* unless effective orders receives authorzation to
|
963
|
+
display it. This is helpful if certain users don't use the in-app currency or in-app checkout.
|
964
|
+
To authorize effective orders and display the button, you should make sure that the effective
|
965
|
+
orders `authorization_method`, defined earlier in the config file, returns `true` if the three
|
966
|
+
arguments are: An instance of `Effective::OrdersController`, the Symbol `:app_checkout`, and the
|
967
|
+
instance of `Effective::Order`.
|
968
|
+
|
969
|
+
### The App Checkout Service Object
|
970
|
+
|
971
|
+
The app checkout [service object](http://stevelorek.com/service-objects.html) is responsible for containing
|
972
|
+
the businiess logic of in-app payments (i.e. with tokens).
|
973
|
+
|
974
|
+
There are two recommended ways to implement the service object:
|
975
|
+
|
976
|
+
1. Create a service object that inherits from `EffectiveOrders::AppCheckoutService`
|
977
|
+
2. Use the [interactor gem](https://github.com/collectiveidea/interactor) (interactor is just another
|
978
|
+
term for service object)
|
979
|
+
|
980
|
+
Here's a sample service object (and likely the minimal implementation that you'll want):
|
981
|
+
|
982
|
+
```ruby
|
983
|
+
# located in /app/services/token_checkout_service.rb
|
984
|
+
|
985
|
+
# Instances of this class have access to the Effective::Order object in the instance variable, @order.
|
986
|
+
class TokenCheckoutService < EffectiveOrders::AppCheckoutService
|
987
|
+
# This method is responsible to complete the payment transaction
|
988
|
+
def call
|
989
|
+
cost_in_tokens = Token.cost_in_tokens(@order.price)
|
990
|
+
@order.user.tokens = @order.user.tokens - cost_in_tokens
|
991
|
+
@success = @order.user.save
|
992
|
+
end
|
993
|
+
|
994
|
+
# Did the purchase finish correctly?
|
995
|
+
def successful?
|
996
|
+
@success
|
997
|
+
end
|
998
|
+
|
999
|
+
# - optional -
|
1000
|
+
# return a Hash or easily serializable object like a String
|
1001
|
+
#
|
1002
|
+
# The return value of this method will be serialized and stored on the `payment_details` attribute
|
1003
|
+
# of the `Effective::Order`.
|
1004
|
+
def payment_details
|
1005
|
+
end
|
1006
|
+
end
|
1007
|
+
```
|
1008
|
+
|
1009
|
+
|
937
1010
|
## License
|
938
1011
|
|
939
1012
|
MIT License. Copyright [Code and Effect Inc.](http://www.codeandeffect.com/)
|
@@ -6,6 +6,7 @@ module Effective
|
|
6
6
|
include Providers::Paypal if EffectiveOrders.paypal_enabled
|
7
7
|
include Providers::Stripe if EffectiveOrders.stripe_enabled
|
8
8
|
include Providers::StripeConnect if EffectiveOrders.stripe_connect_enabled
|
9
|
+
include Providers::AppCheckout if EffectiveOrders.app_checkout_enabled
|
9
10
|
|
10
11
|
layout (EffectiveOrders.layout.kind_of?(Hash) ? EffectiveOrders.layout[:orders] : EffectiveOrders.layout)
|
11
12
|
|
@@ -158,10 +159,13 @@ module Effective
|
|
158
159
|
end
|
159
160
|
end
|
160
161
|
|
161
|
-
|
162
|
-
|
162
|
+
# options:
|
163
|
+
# flash: What flash message should be displayed
|
164
|
+
def order_declined(details = nil, redirect_url = nil, options = {})
|
165
|
+
flash = options.fetch(:flash, "Payment was unsuccessful. Your credit card was declined by the payment processor. Please try again.")
|
163
166
|
|
164
|
-
|
167
|
+
@order.decline!(details) rescue nil
|
168
|
+
flash[:danger] = flash
|
165
169
|
|
166
170
|
redirect_to (redirect_url.presence || effective_orders.order_declined_path(@order)).gsub(':id', @order.id.to_s)
|
167
171
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Effective
|
2
|
+
module Providers
|
3
|
+
module AppCheckout
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
def app_checkout
|
7
|
+
@order = Order.find(params[:id])
|
8
|
+
checkout = EffectiveOrders.app_checkout[:service].call(order: @order)
|
9
|
+
if checkout.success?
|
10
|
+
order_purchased(payment_details(checkout))
|
11
|
+
else
|
12
|
+
flash = EffectiveOrders.app_checkout[:declined_flash]
|
13
|
+
order_declined(payment_details(checkout), nil, flash: flash)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def payment_details(checkout)
|
18
|
+
default = 'App Checkout'
|
19
|
+
if checkout.respond_to?(:payment_details)
|
20
|
+
checkout.payment_details.presence || default
|
21
|
+
else
|
22
|
+
default
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
@@ -41,6 +41,8 @@ module EffectiveOrdersHelper
|
|
41
41
|
EffectiveOrders.allow_pretend_purchase_in_production ? 'Purchase Order' : 'Purchase Order (development only)'
|
42
42
|
when :stripe
|
43
43
|
'Checkout with Stripe'
|
44
|
+
when :app_checkout
|
45
|
+
EffectiveOrders.app_checkout[:checkout_label]
|
44
46
|
else
|
45
47
|
'Checkout'
|
46
48
|
end
|
@@ -16,6 +16,10 @@
|
|
16
16
|
- if EffectiveOrders.stripe_enabled
|
17
17
|
= render :partial => '/effective/orders/stripe/form', locals: {order: order}
|
18
18
|
|
19
|
+
- if EffectiveOrders.authorized?(controller, :app_checkout, order)
|
20
|
+
- if EffectiveOrders.app_checkout_enabled
|
21
|
+
= render :partial => '/effective/orders/app_checkout/form', locals: {order: order}
|
22
|
+
|
19
23
|
- if (Rails.env.production? == true && EffectiveOrders.allow_pretend_purchase_in_production)
|
20
24
|
%p= EffectiveOrders.allow_pretend_purchase_in_production_message
|
21
25
|
|
data/config/routes.rb
CHANGED
@@ -31,6 +31,10 @@ EffectiveOrders::Engine.routes.draw do
|
|
31
31
|
match 'orders/my_sales', :to => 'orders#my_sales', :as => 'my_sales', :via => :get
|
32
32
|
end
|
33
33
|
|
34
|
+
if EffectiveOrders.app_checkout_enabled
|
35
|
+
match 'orders/:id/app_checkout', :to => 'orders#app_checkout', :as => 'app_checkout', :via => :post
|
36
|
+
end
|
37
|
+
|
34
38
|
if (Rails.env.development? || Rails.env.test?) || EffectiveOrders.allow_pretend_purchase_in_production
|
35
39
|
match 'orders/:id/pretend_purchase', :to => 'orders#pretend_purchase', :as => 'pretend_purchase', :via => [:get, :post]
|
36
40
|
end
|
data/lib/effective_orders.rb
CHANGED
@@ -5,6 +5,7 @@ require 'effective_addresses'
|
|
5
5
|
require 'effective_obfuscation'
|
6
6
|
require 'effective_orders/engine'
|
7
7
|
require 'effective_orders/version'
|
8
|
+
require 'effective_orders/app_checkout_service'
|
8
9
|
|
9
10
|
module EffectiveOrders
|
10
11
|
PURCHASED = 'purchased'
|
@@ -46,6 +47,7 @@ module EffectiveOrders
|
|
46
47
|
|
47
48
|
mattr_accessor :paypal_enabled
|
48
49
|
mattr_accessor :moneris_enabled
|
50
|
+
mattr_accessor :app_checkout_enabled
|
49
51
|
|
50
52
|
mattr_accessor :show_order_history_button
|
51
53
|
|
@@ -61,6 +63,7 @@ module EffectiveOrders
|
|
61
63
|
mattr_accessor :paypal
|
62
64
|
mattr_accessor :moneris
|
63
65
|
mattr_accessor :stripe
|
66
|
+
mattr_accessor :app_checkout
|
64
67
|
|
65
68
|
mattr_accessor :deliver_method
|
66
69
|
|
@@ -89,7 +92,7 @@ module EffectiveOrders
|
|
89
92
|
end
|
90
93
|
|
91
94
|
def self.single_payment_processor?
|
92
|
-
[moneris_enabled, paypal_enabled, stripe_enabled].select { |enabled| enabled }.length == 1
|
95
|
+
[moneris_enabled, paypal_enabled, stripe_enabled, app_checkout_enabled].select { |enabled| enabled }.length == 1
|
93
96
|
end
|
94
97
|
|
95
98
|
class SoldOutException < Exception; end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module EffectiveOrders
|
2
|
+
class AppCheckoutService
|
3
|
+
def self.call(options = {})
|
4
|
+
order = options[:order]
|
5
|
+
new(order).tap(&:call)
|
6
|
+
end
|
7
|
+
|
8
|
+
attr_reader :order
|
9
|
+
|
10
|
+
def initialize(order)
|
11
|
+
@order = order
|
12
|
+
end
|
13
|
+
|
14
|
+
def call
|
15
|
+
raise NotImplementedError, "overwrite the `call` instance method in #{self.class}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def success?
|
19
|
+
raise NotImplementedError, "overwrite the `success?` instance method in #{self.class}"
|
20
|
+
end
|
21
|
+
|
22
|
+
# A Hash or easily serializable object like a String
|
23
|
+
def payment_details
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
@@ -90,6 +90,22 @@ module EffectiveOrders
|
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
93
|
+
initializer 'effective_orders.app_checkout_config_validation', :after => :load_config_initializers do
|
94
|
+
if EffectiveOrders.app_checkout_enabled
|
95
|
+
unless EffectiveOrders.app_checkout.is_a?(Hash)
|
96
|
+
raise ArgumentError, "expected EffectiveOrders.app_checkout to be a Hash but it is a #{EffectiveOrders.app_checkout.class}"
|
97
|
+
end
|
98
|
+
missing = EffectiveOrders.app_checkout.select {|_config, value| value.blank? }
|
99
|
+
missing = missing | [:service] unless EffectiveOrders.app_checkout.has_key?(:service)
|
100
|
+
|
101
|
+
raise "Missing effective_orders App Checkout configuration values: #{missing.keys.join(', ')}" if missing.present?
|
102
|
+
unless EffectiveOrders.app_checkout[:service].respond_to?(:call)
|
103
|
+
msg = "EffectiveOrders.app_checkout[:service] is not a compatible service object. Inherit from EffectiveOrders::AppCheckoutService or implement a similar API"
|
104
|
+
raise ArgumentError, msg
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
93
109
|
# Use ActiveAdmin (optional)
|
94
110
|
initializer 'effective_orders.active_admin' do
|
95
111
|
if EffectiveOrders.use_active_admin?
|
@@ -222,4 +222,12 @@ EffectiveOrders.setup do |config|
|
|
222
222
|
}
|
223
223
|
end
|
224
224
|
|
225
|
+
# App checkout configuration
|
226
|
+
config.app_checkout_enabled = false
|
227
|
+
|
228
|
+
config.app_checkout = {
|
229
|
+
checkout_label: '', # Checkout button to finalize the order
|
230
|
+
service: nil, # an EffectiveOrders::AppCheckout type object
|
231
|
+
declined_flash: "Payment was unsuccessful. Please try again."
|
232
|
+
}
|
225
233
|
end
|
@@ -213,4 +213,12 @@ EffectiveOrders.setup do |config|
|
|
213
213
|
}
|
214
214
|
end
|
215
215
|
|
216
|
+
# App checkout configuration
|
217
|
+
config.app_checkout_enabled = false
|
218
|
+
|
219
|
+
config.app_checkout = {
|
220
|
+
checkout_label: '', # Checkout button to finalize the order
|
221
|
+
service: nil, # an EffectiveOrders::AppCheckout type object
|
222
|
+
declined_flash: "Payment was unsuccessful. Please try again."
|
223
|
+
}
|
216
224
|
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
[1m[36m (1.2ms)[0m [1mCREATE TABLE "addresses" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "addressable_type" varchar, "addressable_id" integer, "category" varchar(64), "full_name" varchar, "address1" varchar, "address2" varchar, "city" varchar, "state_code" varchar, "country_code" varchar, "postal_code" varchar, "updated_at" datetime, "created_at" datetime) [0m
|
2
|
+
[1m[35m (0.1ms)[0m select sqlite_version(*)
|
3
|
+
[1m[36m (0.8ms)[0m [1mCREATE INDEX "index_addresses_on_addressable_id" ON "addresses" ("addressable_id")[0m
|
4
|
+
[1m[35m (0.2ms)[0m SELECT sql
|
5
|
+
FROM sqlite_master
|
6
|
+
WHERE name='index_addresses_on_addressable_id' AND type='index'
|
7
|
+
UNION ALL
|
8
|
+
SELECT sql
|
9
|
+
FROM sqlite_temp_master
|
10
|
+
WHERE name='index_addresses_on_addressable_id' AND type='index'
|
11
|
+
|
12
|
+
[1m[36m (0.9ms)[0m [1mCREATE INDEX "index_addresses_on_addressable_type_and_addressable_id" ON "addresses" ("addressable_type", "addressable_id")[0m
|
13
|
+
[1m[35m (1.0ms)[0m CREATE TABLE "cart_items" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "cart_id" integer, "purchasable_type" varchar, "purchasable_id" integer, "quantity" integer, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL)
|
14
|
+
[1m[36m (1.0ms)[0m [1mCREATE INDEX "index_cart_items_on_cart_id" ON "cart_items" ("cart_id")[0m
|
15
|
+
[1m[35m (0.1ms)[0m SELECT sql
|
16
|
+
FROM sqlite_master
|
17
|
+
WHERE name='index_cart_items_on_cart_id' AND type='index'
|
18
|
+
UNION ALL
|
19
|
+
SELECT sql
|
20
|
+
FROM sqlite_temp_master
|
21
|
+
WHERE name='index_cart_items_on_cart_id' AND type='index'
|
22
|
+
|
23
|
+
[1m[36m (1.0ms)[0m [1mCREATE INDEX "index_cart_items_on_purchasable_id" ON "cart_items" ("purchasable_id")[0m
|
24
|
+
[1m[35m (0.1ms)[0m SELECT sql
|
25
|
+
FROM sqlite_master
|
26
|
+
WHERE name='index_cart_items_on_purchasable_id' AND type='index'
|
27
|
+
UNION ALL
|
28
|
+
SELECT sql
|
29
|
+
FROM sqlite_temp_master
|
30
|
+
WHERE name='index_cart_items_on_purchasable_id' AND type='index'
|
31
|
+
|
32
|
+
[1m[36m (0.1ms)[0m [1m SELECT sql
|
33
|
+
FROM sqlite_master
|
34
|
+
WHERE name='index_cart_items_on_cart_id' AND type='index'
|
35
|
+
UNION ALL
|
36
|
+
SELECT sql
|
37
|
+
FROM sqlite_temp_master
|
38
|
+
WHERE name='index_cart_items_on_cart_id' AND type='index'
|
39
|
+
[0m
|
40
|
+
[1m[35m (1.0ms)[0m CREATE INDEX "index_cart_items_on_purchasable_type_and_purchasable_id" ON "cart_items" ("purchasable_type", "purchasable_id")
|
41
|
+
[1m[36m (0.9ms)[0m [1mCREATE TABLE "carts" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "user_id" integer, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL) [0m
|
42
|
+
[1m[35m (0.8ms)[0m CREATE INDEX "index_carts_on_user_id" ON "carts" ("user_id")
|
43
|
+
[1m[36m (0.9ms)[0m [1mCREATE TABLE "custom_products" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar, "price" integer DEFAULT 0, "tax_exempt" boolean, "created_at" datetime, "updated_at" datetime) [0m
|
44
|
+
[1m[35m (1.0ms)[0m CREATE TABLE "customers" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "user_id" integer, "stripe_customer_id" varchar, "stripe_active_card" varchar, "stripe_connect_access_token" varchar, "created_at" datetime, "updated_at" datetime)
|
45
|
+
[1m[36m (1.0ms)[0m [1mCREATE TABLE "order_items" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "order_id" integer, "seller_id" integer, "purchasable_type" varchar, "purchasable_id" integer, "title" varchar, "quantity" integer, "price" integer DEFAULT 0, "tax_exempt" boolean, "tax_rate" decimal(5,3) DEFAULT 0.0, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL) [0m
|
46
|
+
[1m[35m (0.9ms)[0m CREATE INDEX "index_order_items_on_order_id" ON "order_items" ("order_id")
|
47
|
+
[1m[36m (0.1ms)[0m [1m SELECT sql
|
48
|
+
FROM sqlite_master
|
49
|
+
WHERE name='index_order_items_on_order_id' AND type='index'
|
50
|
+
UNION ALL
|
51
|
+
SELECT sql
|
52
|
+
FROM sqlite_temp_master
|
53
|
+
WHERE name='index_order_items_on_order_id' AND type='index'
|
54
|
+
[0m
|
55
|
+
[1m[35m (0.9ms)[0m CREATE INDEX "index_order_items_on_purchasable_id" ON "order_items" ("purchasable_id")
|
56
|
+
[1m[36m (0.1ms)[0m [1m SELECT sql
|
57
|
+
FROM sqlite_master
|
58
|
+
WHERE name='index_order_items_on_purchasable_id' AND type='index'
|
59
|
+
UNION ALL
|
60
|
+
SELECT sql
|
61
|
+
FROM sqlite_temp_master
|
62
|
+
WHERE name='index_order_items_on_purchasable_id' AND type='index'
|
63
|
+
[0m
|
64
|
+
[1m[35m (0.1ms)[0m SELECT sql
|
65
|
+
FROM sqlite_master
|
66
|
+
WHERE name='index_order_items_on_order_id' AND type='index'
|
67
|
+
UNION ALL
|
68
|
+
SELECT sql
|
69
|
+
FROM sqlite_temp_master
|
70
|
+
WHERE name='index_order_items_on_order_id' AND type='index'
|
71
|
+
|
72
|
+
[1m[36m (0.9ms)[0m [1mCREATE INDEX "index_order_items_on_purchasable_type_and_purchasable_id" ON "order_items" ("purchasable_type", "purchasable_id")[0m
|
73
|
+
[1m[35m (0.9ms)[0m CREATE TABLE "orders" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "user_id" integer, "purchase_state" varchar, "purchased_at" datetime, "payment" text, "details" text, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL, "note" text)
|
74
|
+
[1m[36m (0.9ms)[0m [1mCREATE INDEX "index_orders_on_user_id" ON "orders" ("user_id")[0m
|
75
|
+
[1m[35m (1.1ms)[0m CREATE TABLE "products" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar, "price" integer DEFAULT 0, "tax_exempt" boolean, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL)
|
76
|
+
[1m[36m (0.9ms)[0m [1mCREATE TABLE "product_with_float_prices" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar, "price" decimal DEFAULT 0, "tax_exempt" boolean, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL) [0m
|
77
|
+
[1m[35m (1.0ms)[0m CREATE TABLE "subscriptions" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "customer_id" integer, "stripe_plan_id" varchar, "stripe_subscription_id" varchar, "stripe_coupon_id" varchar, "title" varchar, "price" integer DEFAULT 0, "created_at" datetime, "updated_at" datetime)
|
78
|
+
[1m[36m (1.1ms)[0m [1mCREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "encrypted_password" varchar, "reset_password_token" varchar, "reset_password_sent_at" datetime, "remember_created_at" datetime, "confirmation_sent_at" datetime, "confirmed_at" datetime, "confirmation_token" varchar, "unconfirmed_email" varchar, "sign_in_count" integer DEFAULT 0, "current_sign_in_at" datetime, "last_sign_in_at" datetime, "current_sign_in_ip" varchar, "last_sign_in_ip" varchar, "email" varchar, "roles_mask" integer DEFAULT 0, "archived" boolean DEFAULT 'f', "updated_at" datetime, "created_at" datetime) [0m
|
79
|
+
[1m[35m (1.0ms)[0m CREATE TABLE "schema_migrations" ("version" varchar NOT NULL)
|
80
|
+
[1m[36m (0.9ms)[0m [1mCREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version")[0m
|
81
|
+
[1m[35m (0.1ms)[0m SELECT version FROM "schema_migrations"
|
82
|
+
[1m[36m (0.8ms)[0m [1mINSERT INTO "schema_migrations" (version) VALUES ('4')[0m
|
data/spec/dummy/log/test.log
CHANGED
@@ -207,3 +207,55 @@
|
|
207
207
|
[1m[36m (0.4ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
208
208
|
[1m[36m (0.3ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
209
209
|
[1m[36m (0.4ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
210
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
211
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
212
|
+
[1m[36m (0.3ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
213
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
214
|
+
[1m[36m (0.3ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
215
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
216
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
217
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
218
|
+
[1m[36m (0.3ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
219
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
220
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
221
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
222
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
223
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
224
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
225
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
226
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
227
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
228
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
229
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
230
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
231
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
232
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
233
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
234
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
235
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
236
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
237
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
238
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
239
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
240
|
+
[1m[36m (0.3ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
241
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
242
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
243
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
244
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
245
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
246
|
+
[1m[36m (0.3ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
247
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
248
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
249
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
250
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
251
|
+
[1m[36m (0.4ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
252
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
253
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
254
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
255
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
256
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
257
|
+
[1m[36m (0.3ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
258
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
259
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
260
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
261
|
+
[1m[36m (0.2ms)[0m [1mSELECT MAX("orders"."id") FROM "orders"[0m
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: effective_orders
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Code and Effect
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -316,6 +316,7 @@ files:
|
|
316
316
|
- app/controllers/concerns/acts_as_active_admin_controller.rb
|
317
317
|
- app/controllers/effective/carts_controller.rb
|
318
318
|
- app/controllers/effective/orders_controller.rb
|
319
|
+
- app/controllers/effective/providers/app_checkout.rb
|
319
320
|
- app/controllers/effective/providers/moneris.rb
|
320
321
|
- app/controllers/effective/providers/paypal.rb
|
321
322
|
- app/controllers/effective/providers/stripe.rb
|
@@ -362,6 +363,7 @@ files:
|
|
362
363
|
- app/views/effective/orders/_order_payment_details.html.haml
|
363
364
|
- app/views/effective/orders/_order_shipping.html.haml
|
364
365
|
- app/views/effective/orders/_order_user_fields.html.haml
|
366
|
+
- app/views/effective/orders/app_checkout/_form.html.haml
|
365
367
|
- app/views/effective/orders/checkout.html.haml
|
366
368
|
- app/views/effective/orders/declined.html.haml
|
367
369
|
- app/views/effective/orders/moneris/_form.html.haml
|
@@ -386,6 +388,7 @@ files:
|
|
386
388
|
- db/upgrade/02_upgrade_effective_orders_from03x.rb.erb
|
387
389
|
- db/upgrade/upgrade_price_column_on_table.rb.erb
|
388
390
|
- lib/effective_orders.rb
|
391
|
+
- lib/effective_orders/app_checkout_service.rb
|
389
392
|
- lib/effective_orders/engine.rb
|
390
393
|
- lib/effective_orders/version.rb
|
391
394
|
- lib/generators/effective_orders/install_generator.rb
|
@@ -436,6 +439,7 @@ files:
|
|
436
439
|
- spec/dummy/config/secrets.yml
|
437
440
|
- spec/dummy/db/schema.rb
|
438
441
|
- spec/dummy/db/test.sqlite3
|
442
|
+
- spec/dummy/log/development.log
|
439
443
|
- spec/dummy/log/test.log
|
440
444
|
- spec/dummy/public/404.html
|
441
445
|
- spec/dummy/public/422.html
|
@@ -518,6 +522,7 @@ test_files:
|
|
518
522
|
- spec/dummy/config.ru
|
519
523
|
- spec/dummy/db/schema.rb
|
520
524
|
- spec/dummy/db/test.sqlite3
|
525
|
+
- spec/dummy/log/development.log
|
521
526
|
- spec/dummy/log/test.log
|
522
527
|
- spec/dummy/public/404.html
|
523
528
|
- spec/dummy/public/422.html
|