tb_checkout 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +162 -0
  4. data/Rakefile +24 -0
  5. data/app/assets/images/tb_checkout/admin/shopping_carts.png +0 -0
  6. data/app/assets/images/tb_checkout/admin/transactions.png +0 -0
  7. data/app/assets/javascripts/tb_checkout/admin/carts.js +2 -0
  8. data/app/assets/javascripts/tb_checkout/admin/transactions.js +2 -0
  9. data/app/assets/javascripts/tb_checkout/application.js +13 -0
  10. data/app/assets/javascripts/tb_checkout/cart_items.js +2 -0
  11. data/app/assets/javascripts/tb_checkout/carts.js +2 -0
  12. data/app/assets/javascripts/tb_checkout/transactions.js +2 -0
  13. data/app/assets/stylesheets/tb_checkout/admin/carts.css +4 -0
  14. data/app/assets/stylesheets/tb_checkout/admin/transactions.css +4 -0
  15. data/app/assets/stylesheets/tb_checkout/application.css +15 -0
  16. data/app/assets/stylesheets/tb_checkout/cart_items.css +4 -0
  17. data/app/assets/stylesheets/tb_checkout/carts.css +4 -0
  18. data/app/assets/stylesheets/tb_checkout/transactions.css +4 -0
  19. data/app/controllers/concerns/tb_checkout/controller_helpers.rb +16 -0
  20. data/app/controllers/tb_checkout/admin/carts_controller.rb +39 -0
  21. data/app/controllers/tb_checkout/admin/transactions_controller.rb +26 -0
  22. data/app/controllers/tb_checkout/application_controller.rb +6 -0
  23. data/app/controllers/tb_checkout/cart_items_controller.rb +63 -0
  24. data/app/controllers/tb_checkout/carts_controller.rb +8 -0
  25. data/app/controllers/tb_checkout/transactions_controller.rb +87 -0
  26. data/app/helpers/tb_checkout/admin/carts_helper.rb +13 -0
  27. data/app/helpers/tb_checkout/admin/transactions_helper.rb +16 -0
  28. data/app/helpers/tb_checkout/application_helper.rb +138 -0
  29. data/app/helpers/tb_checkout/transactions_helper.rb +2 -0
  30. data/app/models/concerns/tb_checkout/belongs_to_user_session.rb +15 -0
  31. data/app/models/concerns/tb_checkout/purchasable.rb +81 -0
  32. data/app/models/tb_checkout/basic_product.rb +6 -0
  33. data/app/models/tb_checkout/cart.rb +56 -0
  34. data/app/models/tb_checkout/cart_item.rb +48 -0
  35. data/app/models/tb_checkout/transaction.rb +253 -0
  36. data/app/views/tb_checkout/admin/carts/index.html.erb +54 -0
  37. data/app/views/tb_checkout/admin/carts/show.html.erb +45 -0
  38. data/app/views/tb_checkout/admin/transactions/_table.html.erb +24 -0
  39. data/app/views/tb_checkout/admin/transactions/index.html.erb +7 -0
  40. data/app/views/tb_checkout/admin/transactions/show.html.erb +70 -0
  41. data/app/views/tb_checkout/cart_items/create.html.erb +2 -0
  42. data/app/views/tb_checkout/cart_items/destroy.html.erb +2 -0
  43. data/app/views/tb_checkout/cart_items/update.html.erb +2 -0
  44. data/app/views/tb_checkout/carts/_cart.html.erb +65 -0
  45. data/app/views/tb_checkout/carts/show.html.erb +10 -0
  46. data/app/views/tb_checkout/transactions/_details.html.erb +17 -0
  47. data/app/views/tb_checkout/transactions/confirm.html.erb +11 -0
  48. data/app/views/tb_checkout/transactions/index.html.erb +29 -0
  49. data/app/views/tb_checkout/transactions/new.html.erb +90 -0
  50. data/app/views/tb_checkout/transactions/show.html.erb +14 -0
  51. data/config/locales/en.yml +23 -0
  52. data/config/routes.rb +20 -0
  53. data/db/migrate/20140703185256_create_tb_checkout_carts.rb +12 -0
  54. data/db/migrate/20140703185258_create_tb_checkout_cart_items.rb +15 -0
  55. data/db/migrate/20140703185259_create_tb_checkout_transactions.rb +23 -0
  56. data/db/migrate/20140707142350_create_tb_checkout_basic_products.rb +8 -0
  57. data/db/migrate/20140915202848_add_spud_user_and_session_id_to_transactions.rb +10 -0
  58. data/lib/tasks/tb_checkout_tasks.rake +19 -0
  59. data/lib/tb_checkout.rb +4 -0
  60. data/lib/tb_checkout/configuration.rb +8 -0
  61. data/lib/tb_checkout/engine.rb +36 -0
  62. data/lib/tb_checkout/schema.rb +51 -0
  63. data/lib/tb_checkout/version.rb +3 -0
  64. data/spec/controllers/tb_checkout/carts_controller_spec.rb +11 -0
  65. data/spec/controllers/tb_checkout/transactions_controller_spec.rb +110 -0
  66. data/spec/dummy/README.rdoc +28 -0
  67. data/spec/dummy/Rakefile +6 -0
  68. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  69. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  70. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  71. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  72. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  73. data/spec/dummy/bin/bundle +3 -0
  74. data/spec/dummy/bin/rails +4 -0
  75. data/spec/dummy/bin/rake +4 -0
  76. data/spec/dummy/config.ru +4 -0
  77. data/spec/dummy/config/application.rb +30 -0
  78. data/spec/dummy/config/boot.rb +5 -0
  79. data/spec/dummy/config/database.yml +13 -0
  80. data/spec/dummy/config/environment.rb +5 -0
  81. data/spec/dummy/config/environments/development.rb +37 -0
  82. data/spec/dummy/config/environments/production.rb +82 -0
  83. data/spec/dummy/config/environments/test.rb +39 -0
  84. data/spec/dummy/config/initializers/assets.rb +8 -0
  85. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  86. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  87. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  88. data/spec/dummy/config/initializers/inflections.rb +16 -0
  89. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  90. data/spec/dummy/config/initializers/session_store.rb +3 -0
  91. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  92. data/spec/dummy/config/locales/en.yml +23 -0
  93. data/spec/dummy/config/routes.rb +4 -0
  94. data/spec/dummy/config/secrets.yml +22 -0
  95. data/spec/dummy/db/migrate/20140915202259_create_spud_admin_permissions.tb_core.rb +12 -0
  96. data/spec/dummy/db/migrate/20140915202260_create_spud_users.tb_core.rb +30 -0
  97. data/spec/dummy/db/migrate/20140915202261_add_time_zone_to_spud_user.tb_core.rb +7 -0
  98. data/spec/dummy/db/migrate/20140915202262_add_scope_to_spud_admin_permissions.tb_core.rb +7 -0
  99. data/spec/dummy/db/migrate/20140915202263_create_spud_user_settings.tb_core.rb +12 -0
  100. data/spec/dummy/db/migrate/20140915202264_create_spud_roles.tb_core.rb +11 -0
  101. data/spec/dummy/db/migrate/20140915202265_create_spud_permissions.tb_core.rb +11 -0
  102. data/spec/dummy/db/migrate/20140915202266_create_spud_role_permissions.tb_core.rb +12 -0
  103. data/spec/dummy/db/migrate/20140915202267_drop_spud_admin_permissions.tb_core.rb +16 -0
  104. data/spec/dummy/db/migrate/20140915202268_create_tb_checkout_carts.tb_checkout_engine.rb +13 -0
  105. data/spec/dummy/db/migrate/20140915202269_create_tb_checkout_cart_items.tb_checkout_engine.rb +16 -0
  106. data/spec/dummy/db/migrate/20140915202270_create_tb_checkout_transactions.tb_checkout_engine.rb +24 -0
  107. data/spec/dummy/db/migrate/20140915202271_create_tb_checkout_basic_products.tb_checkout_engine.rb +9 -0
  108. data/spec/dummy/db/migrate/20140915234534_add_spud_user_and_session_id_to_transactions.tb_checkout_engine.rb +11 -0
  109. data/spec/dummy/db/schema.rb +135 -0
  110. data/spec/dummy/public/404.html +67 -0
  111. data/spec/dummy/public/422.html +67 -0
  112. data/spec/dummy/public/500.html +66 -0
  113. data/spec/dummy/public/favicon.ico +0 -0
  114. data/spec/factories/spud_users.rb +16 -0
  115. data/spec/factories/tb_checkout_basic_products.rb +8 -0
  116. data/spec/factories/tb_checkout_cart_items.rb +11 -0
  117. data/spec/factories/tb_checkout_carts.rb +14 -0
  118. data/spec/factories/tb_checkout_transactions.rb +37 -0
  119. data/spec/models/tb_checkout/transaction_spec.rb +5 -0
  120. data/spec/rails_helper.rb +73 -0
  121. data/spec/spec_helper.rb +85 -0
  122. metadata +335 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6855d03966c3d9e13b133132baca368f57f4ed50
4
+ data.tar.gz: 810740b48a84765bfc42e5be5ca3e14d95506ed1
5
+ SHA512:
6
+ metadata.gz: 8cb3dc92f75a684adf1902102b471be4d4339c127ff7247f4467ad381e39d0c032199e5d87fc36bf03ca8e7a071ce255f375e25aae102db57476dfc3ce7a25e8
7
+ data.tar.gz: afaf30847266b291b4d6b6007f2f4154fadd0472e005625e0650f7a5cc8561a0bcfc3525d6433c5bd4f935f2b110be3a86391259a93bfecda4f33e25e33b5a7b
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2014 YOURNAME
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,162 @@
1
+ # TB Checkout
2
+
3
+ TB Checkout is a shopping cart engine intended for use with Rails and [Twice Baked](https://bitbucket.org/westlakedesign/tb_core/). The goal of this engine is to make a drop-in tool for shopping carts and transaction management to your existing product database.
4
+
5
+ TB Checkout is **not** a full-fledged product management system. Instead, our goal is to make it easy for any of your existing ActiveRecord models to fit into the shopping cart and facilite transactions through a payment gateway.
6
+
7
+ ## Requirements
8
+
9
+ Checkout requires at minimum the following gems:
10
+
11
+ - Rails 4
12
+ - TB Core 1.2
13
+ - Active Merchant 1.43
14
+
15
+ ## Payment Gateways
16
+
17
+ Those familiar with [Active Merchant](http://activemerchant.org) will know that it supports a wide variety of payment gateways. However, it should be noted that TB Checkout is currently being built and tested against [Authorize.net](authorize.net).
18
+
19
+ More gateways may be added in the future, but we do not intend to cover them all. Pull requests adding support for a particular gateway are welcome.
20
+
21
+ ## Installation & Usage
22
+
23
+ First, it is recommended you run the steps listed in the "Installation/Usage" section of the [TB Core](https://bitbucket.org/westlakedesign/tb_core/) README file. Then, perform the following steps:
24
+
25
+ 1. Add the following to your Gemfile
26
+
27
+ gem 'tb_checkout'
28
+
29
+ 2. Run bundle install
30
+ 3. Copy in database migrations to your new rails project
31
+
32
+ bundle exec rake railties:install:migrations
33
+ rake db:migrate
34
+
35
+ 4. Restart your application
36
+
37
+ ## Configuration
38
+
39
+ TB Checkout accepts the following configuration options.
40
+
41
+ TbCheckout.configure do |config|
42
+ config.gateway = ActiveMerchant::Billing::AuthorizeNetGateway.new({ ... })
43
+ config.card_types = [:visa, :master, :discover, :american_express]
44
+ config.layout = 'application'
45
+ config.canada_is_real = true
46
+ config.cart_lifespan = 3.days
47
+ end
48
+
49
+ #### gateway
50
+
51
+ An `ActiveMerchant` gateway. See the [Active Merchant](http://activemerchant.org) documentation for help creating a payment gateway.
52
+
53
+ #### card_types
54
+
55
+ An array of acceptable credit card types. Remove any types you do not wish to see in the payment form.
56
+
57
+ #### layout
58
+
59
+ The base view layout to be used for all user-facing views. The default value will inherit from your base `ApplicationController` configuration.
60
+
61
+ #### canada_is_real
62
+
63
+ Set to true or false in order to show/hide Canadian provinces in the billing address section of the payment form. Defaults true.
64
+
65
+
66
+ #### cart_lifespan
67
+
68
+ Configures how long a cart lives until it is marked as abandoned. **NOTE:** Carts are not actually marked as abandoned until
69
+
70
+ ## Purchasable Models
71
+
72
+ As stated earlier, TB Checkout is not a product management system. You are expected to build your own library of products, categorizations, and so on. Once you have a product model, making it eligible for the shopping cart is easy.
73
+
74
+ At minimum, a product must have a `price` decimal attribute and a `description` string attribute. You can add these columns to your model using the built-in migration method `add_tb_checkout_purchasable`. Or you could treat these as virtual attributes using instance methods.
75
+
76
+ class AddPurchasableToProducts < ActiveRecord::Migration
77
+ def change
78
+ add_tb_checkout_purchasable :products
79
+ end
80
+ end
81
+
82
+ And in your model you should include the `TbCheckout::Purchasable` concern.
83
+
84
+ class Product < ActiveRecord::Base
85
+ include TbCheckout::Purchasable
86
+ end
87
+
88
+ ### Model Configuration
89
+
90
+ The `TbCheckout::Purchasable` concern also addes a couple class methods for optional configuration.
91
+
92
+ class Product < ActiveRecord::Base
93
+ include TbCheckout::Purchasable
94
+
95
+ # Disable the quanitity picker in the shopping cart
96
+ tb_checkout_quantity_is_editable false
97
+
98
+ # Run this block after a transaction is captured
99
+ tb_checkout_after_capture ->(instance){
100
+ logger.debug 'My transaction was completed!'
101
+ }
102
+
103
+ # Alternatively, pass a method name as a symbol
104
+ tb_checkout_after_capture :after_capture
105
+
106
+ def after_capture(instance)
107
+ logger.debug 'My transaction was completed!'
108
+ end
109
+
110
+ # Delete this object if it is removed from the shopping cart
111
+ tb_checkout_delete_on_removal true
112
+
113
+ # Use this helper method to generate a product page url
114
+ tb_checkout_url_builder ->(instance, view){
115
+ view.product_path(product)
116
+ }
117
+
118
+ # Configure a partial that you want to render in the shopping cart
119
+ tb_checkout_cart_detail_view '/products/cart_view'
120
+ end
121
+
122
+ #### tb_checkout_quantity_is_editable
123
+
124
+ Pass false to remove the ability to modify quantities in the shopping cart. This is useful in situations where it only makes sense to purchase 1 quantity of something, i.e., making a donation.
125
+
126
+ #### tb_checkout_after_capture
127
+
128
+ Pass a lambda literal, or a symbol naming the method you wish to call. This hook will be called after a successful transation.
129
+
130
+ #### tb_checkout_delete_on_removal
131
+
132
+ Set to `true` if the object should be permanently deleted when it is removed from the shopping cart. This might make sense in a scenario where your purchasable objects are one-time use records, but not if your purchasable objects are reused across many carts. Defaults to `false`.
133
+
134
+ #### tb_checkout_url_builder
135
+
136
+ Pass a lambda literal, or a symbol naming the method you wish to call. This method will be called whenever we want to generate a URL to your product.
137
+
138
+ #### tb_checkout_cart_detail_view
139
+
140
+ Sometimes you want to render some custom HTML in the row of a shopping cart. This configuration allows you to point to a partial view file in your project. This partial will be passed an `item` local variable.
141
+
142
+ **NOTE:** This partial will only be rendered after a succesful checkout. In-progress carts will only render the product description.
143
+
144
+ ## View Helpers
145
+
146
+ The following helper methods are provided for convenience. See the Rdocs for the most up to date information regarding arguments and return values.
147
+
148
+ #### tb_checkout_current_cart
149
+
150
+ Returns the currently active shopping cart or nil if no cart is active.
151
+
152
+ #### tb_checkout_cart_link
153
+
154
+ <%= tb_checkout_cart_link() %>
155
+
156
+ Returns a link to the shopping cart.
157
+
158
+ #### tb_checkout_add_to_cart
159
+
160
+ <%= tb_checkout_add_to_cart(my_product) %>
161
+
162
+ Returns a button that, when clicked, adds a product to the shopping cart.
data/Rakefile ADDED
@@ -0,0 +1,24 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'TbCheckout'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.md')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ rdoc.rdoc_files.include('app/**/*.rb')
16
+ end
17
+
18
+ APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
19
+ load 'rails/tasks/engine.rake'
20
+
21
+ Bundler::GemHelper.install_tasks
22
+
23
+ require 'rspec/core'
24
+ require 'rspec/core/rake_task'
@@ -0,0 +1,2 @@
1
+ // Place all the behaviors and hooks related to the matching controller here.
2
+ // All this logic will automatically be available in application.js.
@@ -0,0 +1,2 @@
1
+ // Place all the behaviors and hooks related to the matching controller here.
2
+ // All this logic will automatically be available in application.js.
@@ -0,0 +1,13 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // compiled file.
9
+ //
10
+ // Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
11
+ // about supported directives.
12
+ //
13
+ //= require_tree .
@@ -0,0 +1,2 @@
1
+ // Place all the behaviors and hooks related to the matching controller here.
2
+ // All this logic will automatically be available in application.js.
@@ -0,0 +1,2 @@
1
+ // Place all the behaviors and hooks related to the matching controller here.
2
+ // All this logic will automatically be available in application.js.
@@ -0,0 +1,2 @@
1
+ // Place all the behaviors and hooks related to the matching controller here.
2
+ // All this logic will automatically be available in application.js.
@@ -0,0 +1,4 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
@@ -0,0 +1,4 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
@@ -0,0 +1,15 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
+ * compiled file so the styles you add here take precedence over styles defined in any styles
10
+ * defined in the other CSS/SCSS files in this directory. It is generally better to create a new
11
+ * file per style scope.
12
+ *
13
+ *= require_tree .
14
+ *= require_self
15
+ */
@@ -0,0 +1,4 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
@@ -0,0 +1,4 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
@@ -0,0 +1,4 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
@@ -0,0 +1,16 @@
1
+ module TbCheckout::ControllerHelpers
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ helper_method :tb_checkout_current_cart
6
+ end
7
+
8
+ def tb_checkout_current_cart
9
+ return TbCheckout::Cart.find_or_create_by({
10
+ :session_id => session.id,
11
+ :spud_user_id => current_user.try(:id),
12
+ :is_completed => false
13
+ })
14
+ end
15
+
16
+ end
@@ -0,0 +1,39 @@
1
+ class TbCheckout::Admin::CartsController < Spud::Admin::ApplicationController
2
+ belongs_to_spud_app :shopping_carts
3
+ before_action :setup_breadcrumb
4
+ before_action :load_cart, :only => :show
5
+
6
+ def index
7
+ @carts = TbCheckout::Cart.order('created_at desc').includes(:cart_items).paginate(:page => params[:page])
8
+ if params[:status]
9
+ if params[:status] == 'completed'
10
+ @carts = @carts.completed()
11
+ elsif params[:status] == 'in-progress'
12
+ @carts = @carts.in_progress()
13
+ elsif params[:status] == 'abandoned'
14
+ @carts = @carts.abandoned()
15
+ end
16
+ end
17
+ respond_with @carts
18
+ end
19
+
20
+ def show
21
+ respond_with @cart
22
+ end
23
+
24
+ private
25
+
26
+ def setup_breadcrumb
27
+ add_breadcrumb 'Shopping Carts', tb_checkout_admin_carts_path(:status => params[:status])
28
+ end
29
+
30
+ def load_cart
31
+ @cart = TbCheckout::Cart.where(:id => params[:id]).first
32
+ if @cart.blank?
33
+ flash[:error] = "Could not find the requested Shopping Cart"
34
+ redirect_to tb_checkout_admin_carts_path
35
+ return false
36
+ end
37
+ end
38
+
39
+ end
@@ -0,0 +1,26 @@
1
+ class TbCheckout::Admin::TransactionsController < Spud::Admin::ApplicationController
2
+ belongs_to_spud_app :transactions
3
+ add_breadcrumb 'Transactions', :tb_checkout_admin_transactions_path
4
+ before_action :load_transaction, :only => :show
5
+
6
+ def index
7
+ @transactions = TbCheckout::Transaction.order('created_at desc').paginate(:page => params[:page])
8
+ respond_with @transactions
9
+ end
10
+
11
+ def show
12
+ respond_with @transaction
13
+ end
14
+
15
+ private
16
+
17
+ def load_transaction
18
+ @transaction = TbCheckout::Transaction.where(:id => params[:id]).first
19
+ if @transaction.blank?
20
+ flash[:error] = 'Could not find the requested Transaction'
21
+ redirect_to tb_checkout_admin_transactions_path
22
+ return false
23
+ end
24
+ end
25
+
26
+ end
@@ -0,0 +1,6 @@
1
+ module TbCheckout
2
+ class ApplicationController < ::ApplicationController
3
+ respond_to :html, :json
4
+ layout TbCheckout.config.layout
5
+ end
6
+ end
@@ -0,0 +1,63 @@
1
+ class TbCheckout::CartItemsController < TbCheckout::ApplicationController
2
+
3
+ before_action :load_cart
4
+ before_action :load_cart_item, :only => [:update, :destroy]
5
+
6
+ def create
7
+ @cart_item = @cart.cart_items.create(cart_item_params)
8
+ respond_with @cart_item do |format|
9
+ format.html{
10
+ if @cart_item.errors.any?
11
+ flash[:error] = "An error occurred: \"#{@cart_item.errors.full_messages.first}\""
12
+ redirect_to :back
13
+ else
14
+ flash[:notice] = "Added \"#{@cart_item.item_description}\" to your cart"
15
+ redirect_to tb_checkout_cart_path
16
+ end
17
+ }
18
+ end
19
+ end
20
+
21
+ def update
22
+ @cart_item.update_attributes(cart_item_params)
23
+ respond_with @cart_item do |format|
24
+ format.html{
25
+ if @cart_item.errors.any?
26
+ flash[:error] = "An error occurred: \"#{@cart_item.errors.full_messages.first}\""
27
+ redirect_to :back
28
+ else
29
+ flash[:notice] = "Updated \"#{@cart_item.item_description}\" in your cart"
30
+ redirect_to tb_checkout_cart_path
31
+ end
32
+ }
33
+ end
34
+ end
35
+
36
+ def destroy
37
+ @cart_item.destroy()
38
+ respond_with @cart_item do |format|
39
+ format.html{
40
+ flash[:notice] = "Removed \"#{@cart_item.item_description}\" from your cart"
41
+ redirect_to tb_checkout_cart_path
42
+ }
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ def load_cart
49
+ @cart = tb_checkout_current_cart
50
+ end
51
+
52
+ def load_cart_item
53
+ @cart_item = @cart.cart_items.where(:id => params[:id]).first
54
+ if @cart_item.blank?
55
+ raise Spud::NotFoundError('Cart Item')
56
+ end
57
+ end
58
+
59
+ def cart_item_params
60
+ params.require(:tb_checkout_cart_item).permit(:item_type, :item_id, :quantity)
61
+ end
62
+
63
+ end