Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Initial

  • Loading branch information...
commit d8178c5b7056d60777aedd744a375c0c7c92b173 0 parents
Brian Quinn BDQ authored
Showing with 649 additions and 0 deletions.
  1. +10 −0 .gitignore
  2. +1 −0  .rspec
  3. +18 −0 Gemfile
  4. +185 −0 Gemfile.lock
  5. +26 −0 LICENSE
  6. +20 −0 README.md
  7. +31 −0 Rakefile
  8. +9 −0 Versionfile
  9. +52 −0 app/controllers/checkout_controller_decorator.rb
  10. +19 −0 app/controllers/skrill_status_controller.rb
  11. +2 −0  app/helpers/skrill_status_helper.rb
  12. +45 −0 app/models/billing_integration/skrill/quick_checkout.rb
  13. +7 −0 app/models/skrill_account.rb
  14. +4 −0 app/overrides/add_skrill_status_to_order_show.rb
  15. +1 −0  app/views/checkout/payment/_quickcheckout.html.erb
  16. +6 −0 app/views/shared/_skrill_status.html.erb
  17. +12 −0 config/routes.rb
  18. +8 −0 db/migrate/20111118164630_create_skrill_accounts.rb
  19. +24 −0 lib/active_merchant/billing/skrill.rb
  20. +29 −0 lib/generators/spree_skrill/install/install_generator.rb
  21. +2 −0  lib/spree_skrill.rb
  22. +28 −0 lib/spree_skrill/engine.rb
  23. +7 −0 script/rails
  24. +5 −0 spec/controllers/skrill_status_controller_spec.rb
  25. +4 −0 spec/factories/payment_method_factory.rb
  26. +15 −0 spec/helpers/skrill_status_helper_spec.rb
  27. +14 −0 spec/models/billing_integration/skrill_spec.rb
  28. +5 −0 spec/models/skrill_account_spec.rb
  29. +37 −0 spec/spec_helper.rb
  30. +23 −0 spree_skrill.gemspec
10 .gitignore
@@ -0,0 +1,10 @@
+\#*
+*~
+.#*
+.DS_Store
+.idea
+.project
+tmp
+nbproject
+*.swp
+spec/dummy
1  .rspec
@@ -0,0 +1 @@
+--colour
18 Gemfile
@@ -0,0 +1,18 @@
+source 'http://rubygems.org'
+
+gem 'sqlite3'
+
+group :test do
+ gem 'rspec-rails', '= 2.7.0'
+ gem 'factory_girl', '= 1.3.3'
+ gem 'factory_girl_rails', '= 1.0.1'
+ gem 'faker'
+end
+
+if RUBY_VERSION < "1.9"
+ gem "ruby-debug"
+else
+ gem "ruby-debug19"
+end
+
+gemspec
185 Gemfile.lock
@@ -0,0 +1,185 @@
+PATH
+ remote: .
+ specs:
+ spree_skrill (0.70.1)
+ spree_core (>= 0.70.1)
+
+GEM
+ remote: http://rubygems.org/
+ specs:
+ actionmailer (3.1.1)
+ actionpack (= 3.1.1)
+ mail (~> 2.3.0)
+ actionpack (3.1.1)
+ activemodel (= 3.1.1)
+ activesupport (= 3.1.1)
+ builder (~> 3.0.0)
+ erubis (~> 2.7.0)
+ i18n (~> 0.6)
+ rack (~> 1.3.2)
+ rack-cache (~> 1.1)
+ rack-mount (~> 0.8.2)
+ rack-test (~> 0.6.1)
+ sprockets (~> 2.0.2)
+ activemerchant (1.17.0)
+ activesupport (>= 2.3.11)
+ braintree (>= 2.0.0)
+ builder (>= 2.0.0)
+ json (>= 1.5.1)
+ activemodel (3.1.1)
+ activesupport (= 3.1.1)
+ builder (~> 3.0.0)
+ i18n (~> 0.6)
+ activerecord (3.1.1)
+ activemodel (= 3.1.1)
+ activesupport (= 3.1.1)
+ arel (~> 2.2.1)
+ tzinfo (~> 0.3.29)
+ activeresource (3.1.1)
+ activemodel (= 3.1.1)
+ activesupport (= 3.1.1)
+ activesupport (3.1.1)
+ multi_json (~> 1.0)
+ acts_as_list (0.1.4)
+ arel (2.2.1)
+ braintree (2.13.1)
+ builder (>= 2.0.0)
+ builder (3.0.0)
+ cocaine (0.2.0)
+ columnize (0.3.4)
+ deface (0.7.1)
+ nokogiri (~> 1.5.0)
+ rails (>= 3.0.9)
+ diff-lcs (1.1.3)
+ erubis (2.7.0)
+ factory_girl (1.3.3)
+ factory_girl_rails (1.0.1)
+ factory_girl (~> 1.3)
+ railties (>= 3.0.0)
+ faker (1.0.0)
+ i18n (~> 0.4)
+ highline (1.5.1)
+ hike (1.2.1)
+ i18n (0.6.0)
+ jquery-rails (1.0.17)
+ railties (~> 3.0)
+ thor (~> 0.14)
+ json (1.6.1)
+ kaminari (0.12.4)
+ rails (>= 3.0.0)
+ linecache (0.46)
+ rbx-require-relative (> 0.0.4)
+ mail (2.3.0)
+ i18n (>= 0.4.0)
+ mime-types (~> 1.16)
+ treetop (~> 1.4.8)
+ meta_search (1.1.1)
+ actionpack (~> 3.1.0)
+ activerecord (~> 3.1.0)
+ activesupport (~> 3.1.0)
+ polyamorous (~> 0.5.0)
+ mime-types (1.17.2)
+ multi_json (1.0.3)
+ nested_set (1.6.8)
+ activerecord (>= 3.0.0)
+ railties (>= 3.0.0)
+ nokogiri (1.5.0)
+ paperclip (2.4.1)
+ activerecord (>= 2.3.0)
+ activesupport (>= 2.3.2)
+ cocaine (>= 0.0.2)
+ mime-types
+ polyamorous (0.5.0)
+ activerecord (~> 3.0)
+ polyglot (0.3.3)
+ rack (1.3.5)
+ rack-cache (1.1)
+ rack (>= 0.4)
+ rack-mount (0.8.3)
+ rack (>= 1.0.0)
+ rack-ssl (1.3.2)
+ rack
+ rack-test (0.6.1)
+ rack (>= 1.0)
+ rails (3.1.1)
+ actionmailer (= 3.1.1)
+ actionpack (= 3.1.1)
+ activerecord (= 3.1.1)
+ activeresource (= 3.1.1)
+ activesupport (= 3.1.1)
+ bundler (~> 1.0)
+ railties (= 3.1.1)
+ railties (3.1.1)
+ actionpack (= 3.1.1)
+ activesupport (= 3.1.1)
+ rack-ssl (~> 1.3.2)
+ rake (>= 0.8.7)
+ rdoc (~> 3.4)
+ thor (~> 0.14.6)
+ rake (0.9.2.2)
+ rbx-require-relative (0.0.5)
+ rd_find_by_param (0.1.1)
+ activerecord (~> 3.0)
+ activesupport (~> 3.0)
+ rd_resource_controller (1.0.1)
+ rdoc (3.11)
+ json (~> 1.4)
+ rspec (2.7.0)
+ rspec-core (~> 2.7.0)
+ rspec-expectations (~> 2.7.0)
+ rspec-mocks (~> 2.7.0)
+ rspec-core (2.7.1)
+ rspec-expectations (2.7.0)
+ diff-lcs (~> 1.1.2)
+ rspec-mocks (2.7.0)
+ rspec-rails (2.7.0)
+ actionpack (~> 3.0)
+ activesupport (~> 3.0)
+ railties (~> 3.0)
+ rspec (~> 2.7.0)
+ ruby-debug (0.10.4)
+ columnize (>= 0.1)
+ ruby-debug-base (~> 0.10.4.0)
+ ruby-debug-base (0.10.4)
+ linecache (>= 0.3)
+ spree_core (0.70.1)
+ activemerchant (= 1.17.0)
+ acts_as_list (= 0.1.4)
+ deface (>= 0.7.0)
+ faker (= 1.0.0)
+ highline (= 1.5.1)
+ jquery-rails (>= 1.0.14)
+ kaminari (>= 0.12.4)
+ meta_search (= 1.1.1)
+ nested_set (= 1.6.8)
+ paperclip (= 2.4.1)
+ rails (= 3.1.1)
+ rd_find_by_param (= 0.1.1)
+ rd_resource_controller
+ state_machine (= 1.0.1)
+ stringex (= 1.0.3)
+ sprockets (2.0.3)
+ hike (~> 1.2)
+ rack (~> 1.0)
+ tilt (~> 1.1, != 1.3.0)
+ sqlite3 (1.3.4)
+ state_machine (1.0.1)
+ stringex (1.0.3)
+ thor (0.14.6)
+ tilt (1.3.3)
+ treetop (1.4.10)
+ polyglot
+ polyglot (>= 0.3.1)
+ tzinfo (0.3.31)
+
+PLATFORMS
+ ruby
+
+DEPENDENCIES
+ factory_girl (= 1.3.3)
+ factory_girl_rails (= 1.0.1)
+ faker
+ rspec-rails (= 2.7.0)
+ ruby-debug
+ spree_skrill!
+ sqlite3
26 LICENSE
@@ -0,0 +1,26 @@
+Copyright (c) 2011 [name of plugin creator]
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name Spree nor the names of its contributors may be used to
+ endorse or promote products derived from this software without specific
+ prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
20 README.md
@@ -0,0 +1,20 @@
+SpreeSkrill
+===========
+
+Introduction goes here.
+
+
+Example
+=======
+
+Example goes here.
+
+Testing
+-------
+
+Be sure to add the rspec-rails gem to your Gemfile and then create a dummy test app for the specs to run against.
+
+ $ bundle exec rake test app
+ $ bundle exec rspec spec
+
+Copyright (c) 2011 [name of extension creator], released under the New BSD License
31 Rakefile
@@ -0,0 +1,31 @@
+require 'rake'
+require 'rake/testtask'
+require 'rake/packagetask'
+require 'rubygems/package_task'
+require 'rspec/core/rake_task'
+require 'cucumber/rake/task'
+require 'spree_core/testing_support/common_rake'
+
+RSpec::Core::RakeTask.new
+Cucumber::Rake::Task.new
+
+task :default => [:spec, :cucumber ]
+
+spec = eval(File.read('spree_skrill.gemspec'))
+
+Gem::PackageTask.new(spec) do |p|
+ p.gem_spec = spec
+end
+
+desc "Release to gemcutter"
+task :release => :package do
+ require 'rake/gemcutter'
+ Rake::Gemcutter::Tasks.new(spec).define
+ Rake::Task['gem:push'].invoke
+end
+
+desc "Generates a dummy app for testing"
+task :test_app do
+ ENV['LIB_NAME'] = 'spree_skrill'
+ Rake::Task['common:test_app'].invoke
+end
9 Versionfile
@@ -0,0 +1,9 @@
+# This file is used to designate compatibilty with different versions of Spree
+# Please see http://spreecommerce.com/documentation/extensions.html#versionfile for details
+
+# Examples
+#
+# "0.70.x" => { :branch => "master"}
+# "0.60.x" => { :branch => "0-60-stable" }
+# "0.40.x" => { :tag => "v1.0.0", :version => "1.0.0" }
+
52 app/controllers/checkout_controller_decorator.rb
@@ -0,0 +1,52 @@
+CheckoutController.class_eval do
+ before_filter :redirect_to_skrill_if_needed, :only => [:update]
+
+
+ def skrill_return
+ #need to force checkout to complete state
+ until @order.state == "complete"
+ if @order.next!
+ @order.update!
+ state_callback(:after)
+ end
+ end
+
+ redirect_to completion_route
+ end
+
+ private
+
+ def redirect_to_skrill_if_needed
+ return unless (params[:state] == "payment")
+ return unless params[:order][:payments_attributes]
+
+ if params[:order][:coupon_code]
+ @order.update_attributes(object_params)
+ @order.process_coupon_code
+ end
+
+ payment_method = PaymentMethod.find(params[:order][:payments_attributes].first[:payment_method_id])
+
+ if payment_method.kind_of?(BillingIntegration::Skrill::QuickCheckout)
+ skrill_account = SkrillAccount.find_or_create_by_email(@order.email)
+
+ payment = @order.payments.create(
+ :amount => @order.total,
+ :source => skrill_account,
+ :payment_method => payment_method)
+
+ opts = {}
+ opts[:transaction_id] = payment.id
+ opts[:amount] = payment.amount
+ opts[:return_url] = skrill_return_order_checkout_url(@order)
+ opts[:status_url] = skrill_status_update_url
+ opts[:cancel_url] = order_url(@order)
+
+ payment.started_processing!
+ payment.pend!
+
+ redirect_to payment_method.redirect_url(@order, opts)
+ end
+ end
+
+end
19 app/controllers/skrill_status_controller.rb
@@ -0,0 +1,19 @@
+class SkrillStatusController < ApplicationController
+ def update
+ payment = Payment.find(params[:transaction_id])
+
+ case params[:status]
+ when "0"
+ payment.pend #may already be pending
+ when "2" #processed / captured
+ payment.complete!
+ when "-1", "-2"
+ payment.failure!
+ else
+ raise "Unexpected payment status"
+ end
+
+
+ render :text => ""
+ end
+end
2  app/helpers/skrill_status_helper.rb
@@ -0,0 +1,2 @@
+module SkrillStatusHelper
+end
45 app/models/billing_integration/skrill/quick_checkout.rb
@@ -0,0 +1,45 @@
+require 'active_merchant/billing/skrill'
+
+class BillingIntegration::Skrill::QuickCheckout < BillingIntegration
+ preference :merchant_id, :string
+ preference :language, :string, :default => 'EN'
+ preference :currency, :string, :default => 'EUR'
+
+ def provider_class
+ ActiveMerchant::Billing::Skrill
+ end
+
+ def redirect_url(order, opts = {})
+ opts.merge! self.preferences
+
+ set_global_options(opts)
+
+ opts[:detail1_text] = order.number
+ opts[:detail1_description] = 'Order Number:'
+
+ opts[:pay_from_email] = order.email
+ opts[:firstname] = order.bill_address.firstname
+ opts[:lastname] = order.bill_address.lastname
+ opts[:address] = order.bill_address.address1
+ opts[:address2] = order.bill_address.address2
+ opts[:phone_number] = order.bill_address.phone
+ opts[:city] = order.bill_address.city
+ opts[:postal_code] = order.bill_address.zipcode
+ opts[:state] = order.bill_address.state.nil? ? order.bill_address.state_name.to_s : order.bill_address.state.abbr
+ opts[:country] = order.bill_address.country.name
+
+ skrill = self.provider
+ sid = skrill.setup_payment_session(opts)
+ puts opts
+
+ skrill.session_url(sid)
+ end
+
+ private
+ def set_global_options(opts)
+ opts[:recipient_description] = Spree::Config[:site_name]
+ end
+
+end
+
+
7 app/models/skrill_account.rb
@@ -0,0 +1,7 @@
+class SkrillAccount < ActiveRecord::Base
+ has_many :payments, :as => :source
+
+ def actions
+ []
+ end
+end
4 app/overrides/add_skrill_status_to_order_show.rb
@@ -0,0 +1,4 @@
+Deface::Override.new(:virtual_path => 'orders/show',
+ :name => 'add_skrill_status_to_order_show',
+ :insert_before => "code[erb-loud]:contains('shared/order_details')",
+ :partial => 'shared/skrill_status')
1  app/views/checkout/payment/_quickcheckout.html.erb
@@ -0,0 +1 @@
+<p>You will be redireted to Skrill for your payment information when you select 'Save and Continue' below.</p>
6 app/views/shared/_skrill_status.html.erb
@@ -0,0 +1,6 @@
+<% if @order.outstanding_balance? %>
+ <h4>Thank you for your order, however we're still waiting to hear from Skrill about your payment status.</h4>
+ <p>Your payment is currently <em>Pending</em>, once its completed we'll start processing your shipment.</p>
+<% else %>
+ <p>Your payment has been received from Skrill.</p>
+<% end %>
12 config/routes.rb
@@ -0,0 +1,12 @@
+Rails.application.routes.draw do
+ resources :orders do
+ resource :checkout, :controller => 'checkout' do
+ member do
+ get :skrill_return
+ end
+ end
+ end
+
+ match '/skrill' => 'skrill_status#update', :as => :skrill_status_update
+
+end
8 db/migrate/20111118164630_create_skrill_accounts.rb
@@ -0,0 +1,8 @@
+class CreateSkrillAccounts < ActiveRecord::Migration
+ def change
+ create_table :skrill_accounts do |t|
+ t.string :email
+ t.timestamps
+ end
+ end
+end
24 lib/active_merchant/billing/skrill.rb
@@ -0,0 +1,24 @@
+module ActiveMerchant #:nodoc:
+ module Billing #:nodoc:
+ class Skrill < Gateway
+
+ def service_url
+ "https://www.moneybookers.com/app/payment.pl"
+ end
+
+ def session_url(session_id)
+ "#{service_url}?sid=#{session_id}"
+ end
+
+ def setup_payment_session(opts)
+ post = PostData.new
+ post.merge! opts
+
+ post[:prepare_only] = true
+
+ ssl_post(service_url, post.to_s)
+ end
+
+ end
+ end
+end
29 lib/generators/spree_skrill/install/install_generator.rb
@@ -0,0 +1,29 @@
+module SpreeSkrill
+ module Generators
+ class InstallGenerator < Rails::Generators::Base
+
+ def add_javascripts
+ append_file "app/assets/javascripts/store/all.js", "//= require store/spree_skrill\n"
+ append_file "app/assets/javascripts/admin/all.js", "//= require admin/spree_skrill\n"
+ end
+
+ def add_stylesheets
+ inject_into_file "app/assets/stylesheets/store/all.css", " *= require store/spree_skrill\n", :before => /\*\//, :verbose => true
+ inject_into_file "app/assets/stylesheets/admin/all.css", " *= require admin/spree_skrill\n", :before => /\*\//, :verbose => true
+ end
+
+ def add_migrations
+ run 'bundle exec rake railties:install:migrations FROM=spree_skrill'
+ end
+
+ def run_migrations
+ res = ask "Would you like to run the migrations now? [Y/n]"
+ if res == "" || res.downcase == "y"
+ run 'bundle exec rake db:migrate'
+ else
+ puts "Skiping rake db:migrate, don't forget to run it!"
+ end
+ end
+ end
+ end
+end
2  lib/spree_skrill.rb
@@ -0,0 +1,2 @@
+require 'spree_core'
+require 'spree_skrill/engine'
28 lib/spree_skrill/engine.rb
@@ -0,0 +1,28 @@
+module SpreeSkrill
+ class Engine < Rails::Engine
+ engine_name 'spree_skrill'
+
+ config.autoload_paths += %W(#{config.root}/lib)
+
+ # use rspec for tests
+ config.generators do |g|
+ g.test_framework :rspec
+ end
+
+ def self.activate
+ Dir.glob(File.join(File.dirname(__FILE__), "../../app/**/*_decorator*.rb")) do |c|
+ Rails.application.config.cache_classes ? require(c) : load(c)
+ end
+ end
+
+ config.to_prepare &method(:activate).to_proc
+
+ initializer "spree_skrill.register.payment_methods" do |app|
+ app.config.spree.payment_methods += [
+ Spree::BillingIntegration::Skrill::QuickCheckout
+ ]
+ end
+
+
+ end
+end
7 script/rails
@@ -0,0 +1,7 @@
+#!/usr/bin/env ruby
+# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
+
+
+ENGINE_PATH = File.expand_path('../..', __FILE__)
+load File.expand_path('../../spec/dummy/script/rails', __FILE__)
+
5 spec/controllers/skrill_status_controller_spec.rb
@@ -0,0 +1,5 @@
+require 'spec_helper'
+
+describe SkrillStatusController do
+
+end
4 spec/factories/payment_method_factory.rb
@@ -0,0 +1,4 @@
+Factory.define(:skrill_quick_checkout, :class => BillingIntegration::Skrill::QuickCheckout) do |record|
+ record.name 'Skrill - Quick Checkout'
+ record.environment 'test'
+end
15 spec/helpers/skrill_status_helper_spec.rb
@@ -0,0 +1,15 @@
+require 'spec_helper'
+
+# Specs in this file have access to a helper object that includes
+# the SkrillStatusHelper. For example:
+#
+# describe SkrillStatusHelper do
+# describe "string concat" do
+# it "concats two strings with spaces" do
+# helper.concat_strings("this","that").should == "this that"
+# end
+# end
+# end
+describe SkrillStatusHelper do
+ pending "add some examples to (or delete) #{__FILE__}"
+end
14 spec/models/billing_integration/skrill_spec.rb
@@ -0,0 +1,14 @@
+require 'spec_helper'
+
+describe BillingIntegration::Skrill::QuickCheckout do
+ context "redirect_url" do
+ let(:payment_method) { Factory :skrill_quick_checkout }
+ let(:order) { Factory(:order) }
+
+ it "should return url" do
+ ActiveMerchant::Billing::Skrill.any_instance.should_receive(:setup_payment_session).and_return('123')
+ payment_method.redirect_url(order).should == "#{ActiveMerchant::Billing::Skrill.new.service_url}?sid=123"
+ end
+ end
+
+end
5 spec/models/skrill_account_spec.rb
@@ -0,0 +1,5 @@
+require 'spec_helper'
+
+describe SkrillAccount do
+ pending "add some examples to (or delete) #{__FILE__}"
+end
37 spec/spec_helper.rb
@@ -0,0 +1,37 @@
+# Configure Rails Environment
+ENV["RAILS_ENV"] = "test"
+
+
+require File.expand_path("../dummy/config/environment.rb", __FILE__)
+
+
+require 'rspec/rails'
+
+# Requires supporting ruby files with custom matchers and macros, etc,
+# in spec/support/ and its subdirectories.
+Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
+
+#include spree's factories
+require 'spree_core/testing_support/factories'
+
+# include local factories
+Dir["#{File.dirname(__FILE__)}/factories/**/*.rb"].each { |f| require File.expand_path(f) }
+
+RSpec.configure do |config|
+ # == Mock Framework
+ #
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
+ #
+ # config.mock_with :mocha
+ # config.mock_with :flexmock
+ # config.mock_with :rr
+ config.mock_with :rspec
+
+ # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
+ config.fixture_path = "#{::Rails.root}/spec/fixtures"
+
+ # If you're not using ActiveRecord, or you'd prefer not to run each of your
+ # examples within a transaction, remove the following line or assign false
+ # instead of true.
+ config.use_transactional_fixtures = true
+end
23 spree_skrill.gemspec
@@ -0,0 +1,23 @@
+# encoding: UTF-8
+Gem::Specification.new do |s|
+ s.platform = Gem::Platform::RUBY
+ s.name = 'spree_skrill'
+ s.version = '0.70.1'
+ s.summary = 'Add gem summary here'
+ s.description = 'Add (optional) gem description here'
+ s.required_ruby_version = '>= 1.8.7'
+
+ # s.author = 'David Heinemeier Hansson'
+ # s.email = 'david@loudthinking.com'
+ # s.homepage = 'http://www.rubyonrails.org'
+ # s.rubyforge_project = 'actionmailer'
+
+ #s.files = `git ls-files`.split("\n")
+ #s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
+ s.require_path = 'lib'
+ s.requirements << 'none'
+
+ s.add_dependency 'spree_core', '>= 0.70.1'
+ s.add_development_dependency 'rspec-rails'
+end
+
Please sign in to comment.
Something went wrong with that request. Please try again.