spree_google_checkout 0.40.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ \#*
2
+ *~
3
+ .#*
4
+ .DS_Store
5
+ .idea
6
+ .project
7
+ tmp
8
+ nbproject
9
+ *.swp
data/README.markdown ADDED
@@ -0,0 +1,22 @@
1
+ Google Checkout
2
+ ==================
3
+
4
+ ### Installation
5
+
6
+ 1. Add `gem 'spree_google_checkout', :git => "git://github.com/railsdog/spree-google-checkout.git"` to Gemfile
7
+ 1. Run `rake spree_google_checkout:install`
8
+ 1. Run `rake db:migrate`
9
+ 1. Create seller account in Google Checkout
10
+ 1. Open `https://sandbox.google.com/checkout/sell/settings?section=Integration`
11
+ or `https://checkout.google.com/sell/settings?section=Integration`
12
+ 1. remember your merchant ID and merchant key
13
+ 1. set 'API callback URL' to `https://your.spree.site/google_checkout_notification`
14
+ 1. select 'Notification as XML'
15
+ 1. Create a billing integration using `http://your.spree.site/admin/payment_methods` and set the merchant ID, etc.
16
+ 1. Set `Spree::Config[:allow_ssl_in_production]` to true
17
+
18
+
19
+ ### Usage
20
+
21
+ * After filling your gateway settings, users can place order through Google Checkout.
22
+ * After placing order through Google Checkout, you can charge it or cancel it from Spree admin-panel.
data/Rakefile ADDED
@@ -0,0 +1,31 @@
1
+ require File.expand_path('../../config/application', __FILE__)
2
+
3
+ require 'rubygems'
4
+ require 'rake'
5
+ require 'rake/testtask'
6
+ require 'rake/packagetask'
7
+ require 'rake/gempackagetask'
8
+
9
+ spec = eval(File.read('spree_google_checkout.gemspec'))
10
+
11
+ Rake::GemPackageTask.new(spec) do |p|
12
+ p.gem_spec = spec
13
+ end
14
+
15
+ desc "Release to gemcutter"
16
+ task :release => :package do
17
+ require 'rake/gemcutter'
18
+ Rake::Gemcutter::Tasks.new(spec).define
19
+ Rake::Task['gem:push'].invoke
20
+ end
21
+
22
+ desc "Default Task"
23
+ task :default => [ :spec ]
24
+
25
+ require 'rspec/core/rake_task'
26
+ RSpec::Core::RakeTask.new
27
+
28
+ # require 'cucumber/rake/task'
29
+ # Cucumber::Rake::Task.new do |t|
30
+ # t.cucumber_opts = %w{--format pretty}
31
+ # end
data/Versionfile ADDED
@@ -0,0 +1,3 @@
1
+ "0.10.x" => { :branch => "0-11-stable" }
2
+ "0.11.x" => { :branch => "0-11-stable" }
3
+ "0.50.x" => { :branch => "master" }
@@ -0,0 +1,49 @@
1
+ Admin::OrdersController.class_eval do
2
+ include GoogleCheckout::ControllerExtender
3
+
4
+ def charge_google_order
5
+ begin
6
+ @frontend = get_google_checkout_frontend
7
+ if @frontend
8
+ order = @frontend.create_charge_order_command
9
+ o = Order.find_by_number(params[:id])
10
+ order.google_order_number = o.google_order_number if o.google_order_number.present?
11
+ order.amount = Money.new(100 * o.total, Billing::GoogleCheckout.current[:currency])
12
+ res = order.send_to_google_checkout
13
+
14
+ payment = Payment.new(:amount => o.total, :payment_method_id => Billing::GoogleCheckout.current.id)
15
+ payment.order = o
16
+ payment.save
17
+ payment.started_processing
18
+ payment.complete
19
+ flash[:notice] = t('google_checkout.order_charged')
20
+ end
21
+ rescue
22
+ flash[:error] = t('google_checkout.order_charge_failed')
23
+ logger.error $!
24
+ end
25
+ redirect_to :back
26
+ end
27
+
28
+ def cancel_google_checkout_order
29
+ begin
30
+ @frontend = get_google_checkout_frontend
31
+ if @frontend
32
+ order = @frontend.create_cancel_order_command
33
+ o = Order.find_by_number(params[:id])
34
+ order.google_order_number = o.google_order_number if o.google_order_number.present?
35
+ order.reason = params[o.number][:reason]
36
+ order.comment = params[o.number][:comment]
37
+ res = order.send_to_google_checkout
38
+
39
+ o.cancel!
40
+ flash[:notice] = t('google_checkout.order_cancelled')
41
+ end
42
+ rescue
43
+ flash[:error] = t('google_checkout.order_cancel_failed')
44
+ logger.error $!
45
+ end
46
+ redirect_to :back
47
+ end
48
+
49
+ end
@@ -0,0 +1,84 @@
1
+ class GoogleCheckoutNotificationController < ApplicationController
2
+ protect_from_forgery :except => :create
3
+ include GoogleCheckout::ControllerExtender
4
+ include SslRequirement
5
+ ssl_required :create
6
+
7
+ def create
8
+ frontend = get_google_checkout_frontend
9
+ frontend.tax_table_factory = TaxTableFactory.new
10
+ handler = frontend.create_notification_handler
11
+
12
+ begin
13
+ notification = handler.handle(request.raw_post) # raw_post contains the XML
14
+ puts "GoogleCheckoutNotification: #{notification.inspect}"
15
+ if notification.is_a?(Google4R::Checkout::NewOrderNotification)
16
+ @order = Order.find_by_id(params[:new_order_notification][:shopping_cart][:merchant_private_data][:order_number].strip.to_i)
17
+ unless @order.completed?
18
+ @order.user_id = current_user.try(:id)
19
+ @order.email = notification.buyer_shipping_address.email || "undefined@un.def"
20
+ @order.ip_address = request.env['REMOTE_ADDR'] if @order.respond_to?('ip_address=')
21
+ @order.adjustment_total = notification.order_adjustment.adjustment_total.cents.to_f / 100
22
+ @order.buyer_id = notification.buyer_id
23
+ @order.financial_order_state = notification.financial_order_state
24
+ @order.google_order_number = notification.google_order_number
25
+ @order.gateway = "Google Checkout"
26
+
27
+ new_billing_address =
28
+ create_spree_address_from_google_address(notification.buyer_billing_address)
29
+
30
+ @order['bill_address_id'] = new_billing_address.id
31
+
32
+ new_shipping_address =
33
+ create_spree_address_from_google_address(notification.buyer_shipping_address)
34
+
35
+ @order['ship_address_id'] = new_shipping_address.id
36
+
37
+ ship_method = ShippingMethod.find_by_name(notification.order_adjustment.shipping.name)
38
+ @order.shipping_method = ship_method
39
+ @order.save
40
+
41
+ @order.next while @order.errors.blank? && @order.state != "complete"
42
+ end
43
+ render :text => 'proccess Google4R::Checkout::NewOrderNotification' and return
44
+ end
45
+
46
+ if notification.is_a?(Google4R::Checkout::ChargeAmountNotification)
47
+ @order = Order.find_by_google_order_number(notification.google_order_number)
48
+ payment = Payment.new(:amount => notification.latest_charge_amount, :payment_method_id => Billing::GoogleCheckout.current.id)
49
+ payment.order = @order
50
+ payment.save
51
+ payment.started_processing
52
+ payment.complete
53
+ render :text => 'proccess Google4R::Checkout::ChargeAmountNotification' and return
54
+ end
55
+
56
+ rescue Google4R::Checkout::UnknownNotificationType => e
57
+ # This can happen if Google adds new commands and Google4R has not been
58
+ # upgraded yet. It is not fatal.
59
+ render :text => 'ignoring unknown notification type', :status => 200 and return
60
+ end
61
+ end
62
+
63
+ private
64
+ def create_spree_address_from_google_address(google_address)
65
+ address = Address.new
66
+ address.country = Country.find_by_iso(google_address.country_code)
67
+ address.state = State.find_by_abbr(google_address.region)
68
+ address.state_name = (google_address.region || '-') unless address.state
69
+
70
+ address_attrs = {
71
+ :firstname => google_address.contact_name[/^\S+/] || '-',
72
+ :lastname => google_address.contact_name[/\s.*/] || '-',
73
+ :address1 => google_address.address1 || '-',
74
+ :address2 => google_address.address2 || '-',
75
+ :city => google_address.city || '-',
76
+ :phone => google_address.phone || '-',
77
+ :zipcode => google_address.postal_code || '-'
78
+ }
79
+ address.attributes = address_attrs
80
+ address.save(false)
81
+ address
82
+ end
83
+
84
+ end
@@ -0,0 +1,47 @@
1
+ OrdersController.class_eval do
2
+ helper :google_checkout
3
+ include GoogleCheckout::ControllerExtender
4
+ before_filter :clear_session, :only => [:show]
5
+
6
+ def edit
7
+ @order = current_order(true)
8
+ @frontend = get_google_checkout_frontend
9
+ if @frontend
10
+ checkout_command = @frontend.create_checkout_command
11
+ # Adding an item to shopping cart
12
+ @order.line_items.each do |l|
13
+ checkout_command.shopping_cart.create_item do |item|
14
+ item.name = l.product.name
15
+ item.description = l.product.description
16
+ item.unit_price = Money.new(100 * l.price, Billing::GoogleCheckout.current[:currency])
17
+ item.quantity = l.quantity
18
+ end
19
+ end
20
+ checkout_command.shopping_cart.private_data = { 'order_number' => @order.id }
21
+ checkout_command.edit_cart_url = edit_order_url(@order)
22
+ checkout_command.continue_shopping_url = order_url(@order, :checkout_complete => true)
23
+
24
+ fake_shipment = Shipment.new :order => @order, :address => @order.ship_address
25
+ ShippingMethod.all.each do |ship_method|
26
+
27
+ checkout_command.create_shipping_method(Google4R::Checkout::FlatRateShipping) do |shipping_method|
28
+ shipping_method.name = ship_method.name
29
+ shipping_method.price = Money.new(100*ship_method.calculator.compute(fake_shipment), Billing::GoogleCheckout.current[:currency])
30
+ shipping_method.create_allowed_area(Google4R::Checkout::UsCountryArea) do |area|
31
+ area.area = Google4R::Checkout::UsCountryArea::ALL
32
+ end
33
+ end
34
+ end
35
+ @response = checkout_command.to_xml #send_to_google_checkout
36
+
37
+ # puts "===========#{request.raw_post}"
38
+ end
39
+ end
40
+
41
+ private
42
+ def clear_session
43
+ session[:order_id] = nil
44
+ end
45
+ end
46
+
47
+
@@ -0,0 +1,19 @@
1
+ module GoogleCheckoutHelper
2
+
3
+ def google_checkout_button(merchant_id)
4
+ img_src = Billing::GoogleCheckout.current[:use_sandbox] ?
5
+ "http://sandbox.google.com/checkout/buttons/checkout.gif" :
6
+ "https://checkout.google.com/buttons/checkout.gif"
7
+ params_hash = {:merchant_id => merchant_id,
8
+ :w => 180, :h => 46, :style => "white",
9
+ :variant => "text", :loc => "en_US" }
10
+ params_str = params_hash.to_a.inject([]){|arr, p| arr << p.join('=')}.join('&')
11
+
12
+
13
+ image_submit_tag( [img_src, params_str].join('?'),
14
+ :name => "Google Checkout",
15
+ :alt => "Fast checkout through Google",
16
+ :height => 46, :width => 180 )
17
+ end
18
+
19
+ end
@@ -0,0 +1,9 @@
1
+ Spree::BaseHelper.module_eval do
2
+ def signature(base_string, consumer_secret)
3
+ secret="#{escape(consumer_secret)}"
4
+ Base64.encode64(HMAC::SHA1.digest(secret,base_string)).chomp.gsub(/\n/,'')
5
+ end
6
+ def escape(value)
7
+ CGI.escape(value.to_s).gsub("%7E", '~').gsub("+", "%20")
8
+ end
9
+ end
@@ -0,0 +1,22 @@
1
+ class Billing::GoogleCheckout < BillingIntegration
2
+ preference :use_sandbox, :boolean, :default => true
3
+ preference :merchant_id, :string
4
+ preference :merchant_key, :string
5
+ preference :currency, :string, :default => "USD"
6
+
7
+ def tax_table_factory
8
+ TaxTableFactory.new
9
+ end
10
+
11
+ def [](config_setting)
12
+ begin
13
+ self.send("preferred_#{config_setting}")
14
+ rescue NoMethodError
15
+ super
16
+ end
17
+ end
18
+
19
+ def self.current
20
+ self.where(:type => self.to_s, :environment => Rails.env, :active => true).first
21
+ end
22
+ end
@@ -0,0 +1,7 @@
1
+ Order.class_eval do
2
+ def restock_inventory
3
+ inventory_units.each do |inventory_unit|
4
+ inventory_unit.restock!
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,20 @@
1
+ class TaxTableFactory
2
+ def effective_tax_tables_at(time)
3
+ # Tax table 1 will be used before Apr 09 2008
4
+ #if time < "Wed Apr 09 08:56:03 CDT 2008".to_time then
5
+ #if time < Time.now
6
+ table1 = Google4R::Checkout::TaxTable.new(false)
7
+ table1.name = "Default Tax Table"
8
+ # table1.create_rule do |rule|
9
+ # # Set California tax to 8%
10
+ # rule.area = Google4R::Checkout::UsStateArea.new("CA")
11
+ # rule.rate = 0.08
12
+ # end
13
+ [ table1 ]
14
+ #else
15
+ # table2 = Google4R::Checkout::TaxTable.new(false)
16
+ # ... set rules
17
+ # [ table2 ]
18
+ #end
19
+ end
20
+ end
@@ -0,0 +1,18 @@
1
+ <% if Billing::GoogleCheckout.current && order.google_order_number.present? %>
2
+ <td><p>
3
+ <% if order.completed? && order.state != 'canceled' && order.payment_state != 'paid' %>
4
+ <%= link_to(t("google_checkout.charge"), charge_google_order_admin_order_path(order)) %>
5
+ <% end %>
6
+ </p><p>
7
+ <% if order.allow_cancel? && order.payment_state != 'paid' %>
8
+ <% form_tag cancel_google_checkout_order_admin_order_path(order) , :method => :get do %>
9
+ <p><%= t(:reason)%>:<br /><%= text_field_tag "#{order.number}[reason]" %></p>
10
+ <!--<p><%= t(:comment)%>:<br /><%= text_field_tag "#{order.number}[comment]" %></p>-->
11
+ <p><%= submit_tag t("google_checkout.cancel_order"), :onclick => "if (jQuery('##{order.number}_reason').val().length == 0) { jQuery.alerts.alert('#{t(:fill_reason)}'); return false; }" %></p>
12
+ <% end %>
13
+ <% end %>
14
+ </p>
15
+ </td>
16
+ <% else %>
17
+ <td></td>
18
+ <% end %>
File without changes
File without changes
@@ -0,0 +1,24 @@
1
+ <script type="text/javascript">
2
+ var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
3
+ document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
4
+ </script>
5
+ <script type="text/javascript">
6
+ var pageTracker = _gat._getTracker("<%= Spree::Config[:google_analytics_id] %>");
7
+ pageTracker._initData();
8
+ pageTracker._trackPageview();
9
+ pageTracker._addTrans(
10
+ "<%= order.number %>", //Order Number
11
+ "", //Affiliation
12
+ "<%= order.total %>", //Order total
13
+ "<%= order.tax_charges.sum(:amount).to_s %>", //Tax Amount
14
+ "<%= order.shipping_charges.sum(:amount).to_s %>", //Ship Amount
15
+ "", //City
16
+ "", //State
17
+ "" //Country
18
+ );
19
+ <% order.line_items.each do |line_item| -%>
20
+ pageTracker._addItem("<%= order.number %>", "<%= line_item.variant.sku %>", "<%= line_item.variant.product.name %>",
21
+ "" /*Product Category*/, "<%= line_item.price %>", "<%= line_item.quantity %>");
22
+ <% end -%>
23
+ pageTracker._trackTrans();
24
+ </script>
@@ -0,0 +1,13 @@
1
+ <% if Billing::GoogleCheckout.current && @order.line_items.present? && @response
2
+ handler_url = Billing::GoogleCheckout.current[:use_sandbox] ?
3
+ "https://sandbox.google.com/checkout/" : "https://checkout.google.com/"
4
+ handler_url += "api/checkout/v2/checkout/Merchant/#{Billing::GoogleCheckout.current[:merchant_id]}"
5
+ %>
6
+ <div id='google_checkout_button'>
7
+ <form method="POST" action="<%= handler_url %>">
8
+ <%= hidden_field_tag :cart, Base64.encode64(@response).chomp %>
9
+ <%= hidden_field_tag :signature, signature(@response, Billing::GoogleCheckout.current[:merchant_key]) %>
10
+ <%= google_checkout_button(Billing::GoogleCheckout.current[:merchant_id]) %>
11
+ </form>
12
+ </div>
13
+ <% end -%>
@@ -0,0 +1,18 @@
1
+ ---
2
+ en:
3
+ google_checkout:
4
+ cancel_order: "Cancel order"
5
+ charge: "Charge"
6
+ order_cancelled: "Order successfully cancelled"
7
+ order_cancel_failed: "Order cancel failed"
8
+ order_charged: "Order successfully changed"
9
+ order_charge_failed: "Order charge failed"
10
+ google_checkout_status: "Google Checkout"
11
+ comment: "Comment"
12
+ reason: "Reason"
13
+ use_sandbox: Sandbox
14
+ merchant_id: Merchant Id
15
+ merchant_key: Merchant Key
16
+ currency: Currency
17
+
18
+
@@ -0,0 +1,13 @@
1
+ ---
2
+ ru:
3
+ google_checkout:
4
+ cancel_order: "Отменить заказ"
5
+ charge: "Принять оплату"
6
+ order_cancelled: "Заказ успешно отменён"
7
+ order_cancel_failed: "Не удалось отменить заказ"
8
+ order_charged: "Заказ успешно оплачен"
9
+ order_charge_failed: "Оплата заказа не прошла"
10
+ google_checkout_status: "Google Checkout"
11
+ comment: "Комментарий"
12
+ reason: "Причина"
13
+
data/config/routes.rb ADDED
@@ -0,0 +1,11 @@
1
+ Rails.application.routes.draw do
2
+ resources :google_checkout_notification
3
+ namespace :admin do
4
+ resources :orders do
5
+ member do
6
+ get :charge_google_order
7
+ get :cancel_google_checkout_order
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ class AddGoogleCheckoutColumnsInOrder < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :orders, :financial_order_state , :string
4
+ add_column :orders, :google_order_number, :string
5
+ add_column :orders, :buyer_id, :string
6
+ add_column :orders, :gateway, :string
7
+ end
8
+
9
+ def self.down
10
+ remove_column :orders, :financial_order_state
11
+ remove_column :orders, :google_order_number
12
+ remove_column :orders, :buyer_id
13
+ remove_column :orders, :gateway
14
+ end
15
+ end
@@ -0,0 +1,19 @@
1
+ module GoogleCheckout::ControllerExtender
2
+ protected
3
+
4
+ def get_google_checkout_frontend
5
+ return nil unless integration = Billing::GoogleCheckout.current
6
+ #return nil unless load_google_gateway
7
+ gc_config = {
8
+ :merchant_id => integration.preferred_merchant_id,
9
+ :merchant_key => integration.preferred_merchant_key,
10
+ :use_sandbox => integration.preferred_use_sandbox }
11
+
12
+
13
+ #@gc_currency = @gw.gateway_option_values[2].value
14
+ front_end = Google4R::Checkout::Frontend.new(gc_config)
15
+ front_end.tax_table_factory = TaxTableFactory.new
16
+ front_end
17
+ end
18
+
19
+ end
@@ -0,0 +1,21 @@
1
+ require 'google4r/checkout'
2
+ require 'hmac-sha1'
3
+ require 'spree_core'
4
+ require 'spree_google_checkout_hooks'
5
+
6
+ module SpreeGoogleCheckout
7
+ class Engine < Rails::Engine
8
+
9
+ config.autoload_paths += %W(#{config.root}/lib)
10
+
11
+ def self.activate
12
+ Dir.glob(File.join(File.dirname(__FILE__), "../app/**/*_decorator*.rb")) do |c|
13
+ Rails.env.production? ? require(c) : load(c)
14
+ end
15
+ # register the BillingIntegration
16
+ Billing::GoogleCheckout.register
17
+ end
18
+
19
+ config.to_prepare &method(:activate).to_proc
20
+ end
21
+ end
@@ -0,0 +1,13 @@
1
+ class SpreeGoogleCheckoutHooks < Spree::ThemeSupport::HookListener
2
+ insert_after :outside_cart_form, 'shared/google_checkout_bar'
3
+
4
+ insert_after :admin_orders_index_headers do
5
+ %(
6
+ <% if Billing::GoogleCheckout.current -%>
7
+ <th><%= t(:google_checkout_status) %></th>
8
+ <% end -%>
9
+ )
10
+ end
11
+
12
+ insert_after :admin_orders_index_rows, 'admin/shared/google_checkout_status'
13
+ end
@@ -0,0 +1,25 @@
1
+ namespace :spree_google_checkout do
2
+ desc "Copies all migrations and assets (NOTE: This will be obsolete with Rails 3.1)"
3
+ task :install do
4
+ Rake::Task['spree_google_checkout:install:migrations'].invoke
5
+ Rake::Task['spree_google_checkout:install:assets'].invoke
6
+ end
7
+
8
+ namespace :install do
9
+ desc "Copies all migrations (NOTE: This will be obsolete with Rails 3.1)"
10
+ task :migrations do
11
+ source = File.join(File.dirname(__FILE__), '..', '..', 'db')
12
+ destination = File.join(Rails.root, 'db')
13
+ Spree::FileUtilz.mirror_files(source, destination)
14
+ end
15
+
16
+ desc "Copies all assets (NOTE: This will be obsolete with Rails 3.1)"
17
+ task :assets do
18
+ source = File.join(File.dirname(__FILE__), '..', '..', 'public')
19
+ destination = File.join(Rails.root, 'public')
20
+ puts "INFO: Mirroring assets from #{source} to #{destination}"
21
+ Spree::FileUtilz.mirror_files(source, destination)
22
+ end
23
+ end
24
+
25
+ end
@@ -0,0 +1 @@
1
+ # add custom rake tasks here
@@ -0,0 +1,25 @@
1
+ Gem::Specification.new do |s|
2
+ s.platform = Gem::Platform::RUBY
3
+ s.name = 'spree_google_checkout'
4
+ s.version = '0.40.0'
5
+ s.summary = 'Google Checkout extension for Spree'
6
+ #s.description = 'Add (optional) gem description here'
7
+ s.required_ruby_version = '>= 1.8.7'
8
+
9
+ # s.author = 'David Heinemeier Hansson'
10
+ # s.email = 'david@loudthinking.com'
11
+ # s.homepage = 'http://www.rubyonrails.org'
12
+ # s.rubyforge_project = 'actionmailer'
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.require_path = 'lib'
17
+ s.requirements << 'none'
18
+
19
+ s.has_rdoc = true
20
+
21
+ s.add_dependency('spree_core', '>= 0.50.0')
22
+ s.add_dependency('oauth', '>= 0.4.4')
23
+ s.add_dependency('google4r-checkout', '>= 1.0.5')
24
+ s.add_dependency('ruby-hmac', '>= 0.3.2')
25
+ end
metadata ADDED
@@ -0,0 +1,145 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spree_google_checkout
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 40
8
+ - 0
9
+ version: 0.40.0
10
+ platform: ruby
11
+ authors: []
12
+
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-04-05 00:00:00 +04:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: spree_core
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ - 50
30
+ - 0
31
+ version: 0.50.0
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: oauth
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ - 4
44
+ - 4
45
+ version: 0.4.4
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: google4r-checkout
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ segments:
56
+ - 1
57
+ - 0
58
+ - 5
59
+ version: 1.0.5
60
+ type: :runtime
61
+ version_requirements: *id003
62
+ - !ruby/object:Gem::Dependency
63
+ name: ruby-hmac
64
+ prerelease: false
65
+ requirement: &id004 !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ segments:
70
+ - 0
71
+ - 3
72
+ - 2
73
+ version: 0.3.2
74
+ type: :runtime
75
+ version_requirements: *id004
76
+ description:
77
+ email:
78
+ executables: []
79
+
80
+ extensions: []
81
+
82
+ extra_rdoc_files: []
83
+
84
+ files:
85
+ - .gitignore
86
+ - README.markdown
87
+ - Rakefile
88
+ - Versionfile
89
+ - app/controllers/admin/orders_controller_decorator.rb
90
+ - app/controllers/google_checkout_notification_controller.rb
91
+ - app/controllers/orders_controller_decorator.rb
92
+ - app/helpers/google_checkout_helper.rb
93
+ - app/helpers/spree_base_helper_decorator.rb
94
+ - app/models/billing/google_checkout.rb
95
+ - app/models/order_decorator.rb
96
+ - app/models/tax_table_factory.rb
97
+ - app/views/admin/shared/_google_checkout_status.html.erb
98
+ - app/views/checkout/payment/_googlecheckout.erb
99
+ - app/views/checkouts/payment/_googlecheckout.erb
100
+ - app/views/orders/_google_order.html.erb
101
+ - app/views/shared/_google_checkout_bar.html.erb
102
+ - config/locales/en.yml
103
+ - config/locales/ru.yml
104
+ - config/routes.rb
105
+ - db/migrate/20090925072036_add_google_checkout_columns_in_order.rb
106
+ - lib/google_checkout/controller_extender.rb
107
+ - lib/spree_google_checkout.rb
108
+ - lib/spree_google_checkout_hooks.rb
109
+ - lib/tasks/install.rake
110
+ - lib/tasks/spree_google_checkout.rake
111
+ - spree_google_checkout.gemspec
112
+ has_rdoc: true
113
+ homepage:
114
+ licenses: []
115
+
116
+ post_install_message:
117
+ rdoc_options: []
118
+
119
+ require_paths:
120
+ - lib
121
+ required_ruby_version: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ segments:
126
+ - 1
127
+ - 8
128
+ - 7
129
+ version: 1.8.7
130
+ required_rubygems_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ segments:
135
+ - 0
136
+ version: "0"
137
+ requirements:
138
+ - none
139
+ rubyforge_project:
140
+ rubygems_version: 1.3.6
141
+ signing_key:
142
+ specification_version: 3
143
+ summary: Google Checkout extension for Spree
144
+ test_files: []
145
+