ecart 0.0.2 → 1.0.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.
data/README.md CHANGED
@@ -26,7 +26,7 @@ You can run bundle from command line
26
26
 
27
27
  ## Before installing
28
28
 
29
- I'm assuming you have a Product model on your rails app, but don't worry
29
+ I'm assuming you have a Product model and index action on your rails app, but don't worry
30
30
  if that's not the case you can customize it as you like
31
31
 
32
32
  ## Installing to App (using Generators)
@@ -53,9 +53,16 @@ You can do so in the config/application.rb file
53
53
  config.autoload_paths += Dir["#{config.root}/lib", "#{config.root}/lib/**/"]
54
54
  ```
55
55
 
56
+ ## Example of rails app using ecart
57
+
58
+ https://github.com/kurenn/ecart-example
59
+
56
60
  ## Changelog
57
61
  <ul>
58
- <li>Current gem v.0.0.1</li>
62
+ <li>Provide views for the cart</li>
63
+ <li>Paypal express checkout integration</li>
64
+ <li>Current gem v.1.0.0</li>
65
+ <li>Released gem v.0.0.1</li>
59
66
  </ul>
60
67
 
61
68
 
@@ -69,7 +76,6 @@ config.autoload_paths += Dir["#{config.root}/lib", "#{config.root}/lib/**/"]
69
76
  <ul>
70
77
  <li>Add dinamic association with a model</li>
71
78
  <li>Update the price by fetching from DB</li>
72
- <li>Provide views for the cart</li>
73
79
  </ul>
74
80
 
75
81
 
@@ -21,5 +21,6 @@ Gem::Specification.new do |s|
21
21
  # specify any dependencies here; for example:
22
22
  s.add_development_dependency 'rails', '>= 3.1'
23
23
  s.add_development_dependency "rspec"
24
+ s.add_dependency "activemerchant", '>= 1.26.0'
24
25
  # s.add_runtime_dependency "rest-client"
25
26
  end
@@ -52,4 +52,16 @@ class Cart
52
52
  self.total_items.zero?
53
53
  end
54
54
 
55
+ def items_for_paypal
56
+ @cart_items.collect do |cart_item|
57
+ item = cart_item.item
58
+
59
+ {
60
+ :name => item.name,
61
+ :quantity => cart_item.quantity,
62
+ :amount => cart_item.to_cents,
63
+ }
64
+ end
65
+ end
66
+
55
67
  end
@@ -13,4 +13,8 @@ class CartItem
13
13
  def decrease_quantity
14
14
  @quantity -= 1
15
15
  end
16
+
17
+ def to_cents
18
+ (self.item.price * 100).round
19
+ end
16
20
  end
@@ -0,0 +1,9 @@
1
+ development:
2
+ login: "seller_1340253894_biz_api1.calmecac.me"
3
+ password: "1340253926"
4
+ signature: "AiPC9BjkCyDFQXbSkoZcgqH3hpacA08uw5uvFFESX6lHI4ectk1Nt.PZ "
5
+
6
+ production:
7
+ login: "seller_1340253894_biz_api1.calmecac.me"
8
+ password: "1340253926"
9
+ signature: "AiPC9BjkCyDFQXbSkoZcgqH3hpacA08uw5uvFFESX6lHI4ectk1Nt.PZ "
@@ -1,3 +1,3 @@
1
1
  module Ecart
2
- VERSION = "0.0.2"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -12,6 +12,10 @@ module Ecart
12
12
  copy_file 'cart_item.rb', 'lib/cart_item.rb'
13
13
  copy_file 'generators/templates/cart_helper.rb', 'app/helpers/cart_helper.rb'
14
14
  copy_file 'generators/templates/cart_controller.rb', 'app/controllers/cart_controller.rb'
15
+ copy_file 'generators/templates/paypal_express_controller.rb', 'app/controllers/paypal_express_controller.rb'
16
+ copy_file 'generators/templates/pay_pal_helper.rb', 'app/helpers/pay_pal_helper.rb'
17
+ directory 'generators/templates/cart', 'app/views/cart'
18
+ directory 'generators/templates/paypal_express', 'app/views/paypal_express'
15
19
  end
16
20
 
17
21
  def add_ecart_routes
@@ -27,8 +31,17 @@ module Ecart
27
31
  match 'add_to_cart/:id' => 'cart#add_to_cart', :as => :add_to_cart
28
32
  match 'remove_from_cart/:id' => 'cart#remove_from_cart', :as => :remove_from_cart
29
33
  match 'empty_cart' => 'cart#empty', :as => :empty_cart
34
+ match 'cart' => 'cart#show', :as => :cart
35
+ get 'paypal_express/checkout'
36
+ get 'paypal_express/purchase'
37
+ get 'paypal_express/review'
30
38
  CONTENT
31
39
  end
40
+
41
+ def add_paypal_configuration
42
+ copy_file 'config/paypal_config.yml', 'config/paypal_config.yml'
43
+ copy_file 'generators/templates/paypal_express_checkout.rb', 'config/initializers/paypal_express_checkout.rb'
44
+ end
32
45
  end
33
46
  end
34
47
  end
@@ -0,0 +1,8 @@
1
+ <% @cart.cart_items.each do |cart_item| %>
2
+ <%= cart_item.item.name %> <%= cart_item.item.price %> | <%= cart_item.quantity %><br />
3
+ <% end %>
4
+ <%= @cart.total_items %> items
5
+ <br />
6
+ Total <%= number_to_currency @cart.total %> | <%= link_to_empty_cart %>
7
+ <br />
8
+ <%= link_to image_tag("https://www.paypal.com/en_US/i/btn/btn_xpressCheckout.gif"), paypal_express_checkout_path %>
@@ -18,4 +18,8 @@ class CartController < ApplicationController
18
18
  empty_cart
19
19
  end
20
20
 
21
+ def show
22
+ @cart = cart
23
+ end
24
+
21
25
  end
@@ -0,0 +1,46 @@
1
+ module PayPalHelper
2
+
3
+ def purchase_params(cart, ip)
4
+ subtotal = cart.total
5
+ return to_cents(subtotal), {
6
+ :ip => request.remote_ip,
7
+ :return_url => url_for(:action => 'review', :only_path => false),
8
+ :cancel_return_url => products_url,
9
+ :subtotal => to_cents(subtotal),
10
+ :handling => 0,
11
+ :tax => 0,
12
+ :allow_note => true,
13
+ :items => cart.items_for_paypal,
14
+ }
15
+ end
16
+
17
+ #Paypal gets the total with cents
18
+ def to_cents(subtotal)
19
+ (subtotal * 100).round
20
+ end
21
+
22
+ def order_info(gateway_response, cart)
23
+ total = cart.total
24
+ return {
25
+ gateway_details: {
26
+ :token => gateway_response.token,
27
+ :payer_id => gateway_response.payer_id,
28
+ },
29
+ total: total,
30
+ }
31
+ end
32
+
33
+ def get_purchase_params(cart, request, params)
34
+ subtotal = cart.total
35
+ return to_cents(subtotal), {
36
+ :ip => request.remote_ip,
37
+ :token => params[:token],
38
+ :payer_id => params[:payer_id],
39
+ :subtotal => to_cents(subtotal),
40
+ :handling => 0,
41
+ :tax => 0,
42
+ :items => cart.items_for_paypal,
43
+ }
44
+ end
45
+ end
46
+
@@ -0,0 +1,15 @@
1
+
2
+ <h4>Your Total</h4>
3
+ <p><%= "Subtotal: #{number_to_currency @order[:total]}"%></p>
4
+
5
+ <% cart.cart_items.each do |cart_item| %>
6
+ <%= cart_item.item.name %> <%= cart_item.item.price %> | <%= cart_item.quantity %><br />
7
+ <% end %>
8
+ <%= cart.total_items %> items
9
+ <br />
10
+ Total <%= number_to_currency cart.total %>
11
+ <br />
12
+
13
+ <%= link_to 'Complete Purchase', paypal_express_purchase_path(:token => @order[:gateway_details][:token], :payer_id => @order[:gateway_details][:payer_id]) %>
14
+
15
+
@@ -0,0 +1,16 @@
1
+ require 'yaml'
2
+ require 'active_merchant'
3
+
4
+ def paypal_options
5
+ @config = YAML::load(File.open("#{Rails.root}/config/paypal_config.yml"))
6
+ @config[Rails.env].inject({}){|paypal_option,(key,value)| paypal_option[key.to_sym] = value; paypal_option}
7
+ end
8
+
9
+ ::Rails.application.class.to_s.split("::").first.constantize::Application.configure do
10
+
11
+ config.after_initialize do
12
+ ActiveMerchant::Billing::Base.mode = :test
13
+ ::EXPRESS_GATEWAY = ActiveMerchant::Billing::PaypalExpressGateway.new(paypal_options)
14
+ end
15
+
16
+ end
@@ -0,0 +1,49 @@
1
+ class PaypalExpressController < ApplicationController
2
+
3
+ include PayPalHelper
4
+
5
+ def checkout
6
+ total, setup_purchase_params = purchase_params cart, request
7
+ setup_response = EXPRESS_GATEWAY.setup_purchase(total, setup_purchase_params)
8
+ redirect_to EXPRESS_GATEWAY.redirect_url_for(setup_response.token)
9
+ end
10
+
11
+ def review
12
+ if params[:token].nil?
13
+ redirect_to products_url, :notice => 'Something went wrong!'
14
+ return
15
+ end
16
+
17
+ response = EXPRESS_GATEWAY.details_for(params[:token])
18
+
19
+ unless response.success?
20
+ redirect_to products_url, :notice => "Something went wrong with the Paypal purchase. Paypal said: #{response.message}"
21
+ return
22
+ end
23
+
24
+ @order = order_info response, cart
25
+ end
26
+
27
+ def purchase
28
+ if params[:token].nil? or params[:payer_id].nil?
29
+ redirect_to orders_url, :notice => "Sorry but something went wrong"
30
+ return
31
+ end
32
+
33
+ total_in_cents, purchase_params = get_purchase_params cart, request, params
34
+ purchase = EXPRESS_GATEWAY.purchase total_in_cents, purchase_params
35
+
36
+ if purchase.success?
37
+ session[:cart] = nil
38
+ # you might want to destroy your cart here if you have a shopping cart
39
+ notice = "Thanks!, your purchase was successfull"
40
+ else
41
+ notice = "Something wrong happened when trying to complete the purchase with Paypal. Paypal said: #{purchase.message}"
42
+ end
43
+
44
+ redirect_to products_url, :notice => notice
45
+ end
46
+
47
+ end
48
+
49
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ecart
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-09 00:00:00.000000000Z
12
+ date: 2012-07-21 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &70306821506700 !ruby/object:Gem::Requirement
16
+ requirement: &70290051904440 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '3.1'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70306821506700
24
+ version_requirements: *70290051904440
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &70306821505400 !ruby/object:Gem::Requirement
27
+ requirement: &70290051904020 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,18 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70306821505400
35
+ version_requirements: *70290051904020
36
+ - !ruby/object:Gem::Dependency
37
+ name: activemerchant
38
+ requirement: &70290051903180 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: 1.26.0
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70290051903180
36
47
  description: Setup a fully functional e-commerce cart
37
48
  email:
38
49
  - kurenn@icalialabs.com
@@ -49,11 +60,17 @@ files:
49
60
  - ecart.gemspec
50
61
  - lib/cart.rb
51
62
  - lib/cart_item.rb
63
+ - lib/config/paypal_config.yml
52
64
  - lib/ecart.rb
53
65
  - lib/ecart/version.rb
54
66
  - lib/generators/ecart/install/install_generator.rb
67
+ - lib/generators/templates/cart/show.html.erb
55
68
  - lib/generators/templates/cart_controller.rb
56
69
  - lib/generators/templates/cart_helper.rb
70
+ - lib/generators/templates/pay_pal_helper.rb
71
+ - lib/generators/templates/paypal_express/review.html.erb
72
+ - lib/generators/templates/paypal_express_checkout.rb
73
+ - lib/generators/templates/paypal_express_controller.rb
57
74
  - lib/item.rb
58
75
  - spec/cart_spec.rb
59
76
  - spec/spec_helper.rb