diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..e8a3f9c2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +\#* +*~ +.#* +.DS_Store +.idea +.project +.sass-cache +coverage +Gemfile.lock +tmp +nbproject +pkg +*.swp +spec/dummy diff --git a/.rspec b/.rspec new file mode 100644 index 00000000..5052887a --- /dev/null +++ b/.rspec @@ -0,0 +1 @@ +--color \ No newline at end of file diff --git a/Gemfile b/Gemfile new file mode 100644 index 00000000..80436604 --- /dev/null +++ b/Gemfile @@ -0,0 +1,6 @@ +source 'https://rubygems.org' + +# Provides basic authentication functionality for testing parts of your engine +gem 'spree_auth_devise', github: 'spree/spree_auth_devise' + +gemspec diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..9822124a --- /dev/null +++ b/LICENSE @@ -0,0 +1,26 @@ +Copyright (c) 2013 [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. diff --git a/README.md b/README.md new file mode 100644 index 00000000..1746ae2f --- /dev/null +++ b/README.md @@ -0,0 +1,40 @@ +SpreePaypalExpress +================== + +Introduction goes here. + +Installation +------------ + +Add spree_paypal_express to your Gemfile: + +```ruby +gem 'spree_paypal_express' +``` + +Bundle your dependencies and run the installation generator: + +```shell +bundle +bundle exec rails g spree_paypal_express:install +``` + +Testing +------- + +Be sure to bundle your dependencies and then create a dummy test app for the specs to run against. + +```shell +bundle +bundle exec rake test_app +bundle exec rspec spec +``` + +When testing your applications integration with this extension you may use it's factories. +Simply add this require statement to your spec_helper: + +```ruby +require 'spree_paypal_express/factories' +``` + +Copyright (c) 2013 [name of extension creator], released under the New BSD License diff --git a/Rakefile b/Rakefile new file mode 100644 index 00000000..1df3f826 --- /dev/null +++ b/Rakefile @@ -0,0 +1,15 @@ +require 'bundler' +Bundler::GemHelper.install_tasks + +require 'rspec/core/rake_task' +require 'spree/testing_support/extension_rake' + +RSpec::Core::RakeTask.new + +task :default => [:spec] + +desc 'Generates a dummy app for testing' +task :test_app do + ENV['LIB_NAME'] = 'spree_paypal_express' + Rake::Task['extension:test_app'].invoke +end diff --git a/Versionfile b/Versionfile new file mode 100644 index 00000000..5db83aa5 --- /dev/null +++ b/Versionfile @@ -0,0 +1,11 @@ +# This file is used to designate compatibilty with different versions of Spree +# Please see http://spreecommerce.com/documentation/extensions.html#versionfile for details + +# Examples +# +# '1.2.x' => { :branch => 'master' } +# '1.1.x' => { :branch => '1-1-stable' } +# '1.0.x' => { :branch => '1-0-stable' } +# '0.70.x' => { :branch => '0-70-stable' } +# '0.40.x' => { :tag => 'v1.0.0', :version => '1.0.0' } + diff --git a/app/assets/javascripts/admin/spree_paypal_express.js b/app/assets/javascripts/admin/spree_paypal_express.js new file mode 100644 index 00000000..b181e56d --- /dev/null +++ b/app/assets/javascripts/admin/spree_paypal_express.js @@ -0,0 +1 @@ +//= require admin/spree_backend diff --git a/app/assets/javascripts/store/spree_paypal_express.js b/app/assets/javascripts/store/spree_paypal_express.js new file mode 100644 index 00000000..d10fba7f --- /dev/null +++ b/app/assets/javascripts/store/spree_paypal_express.js @@ -0,0 +1 @@ +//= require store/spree_frontend diff --git a/app/assets/stylesheets/admin/spree_paypal_express.css b/app/assets/stylesheets/admin/spree_paypal_express.css new file mode 100644 index 00000000..ff89c72d --- /dev/null +++ b/app/assets/stylesheets/admin/spree_paypal_express.css @@ -0,0 +1,3 @@ +/* + *= require admin/spree_backend +*/ diff --git a/app/assets/stylesheets/store/spree_paypal_express.css b/app/assets/stylesheets/store/spree_paypal_express.css new file mode 100644 index 00000000..bce0f84f --- /dev/null +++ b/app/assets/stylesheets/store/spree_paypal_express.css @@ -0,0 +1,3 @@ +/* + *= require store/spree_frontend +*/ diff --git a/app/models/gateway/pay_pal_express.rb b/app/models/gateway/pay_pal_express.rb new file mode 100644 index 00000000..790fa2c2 --- /dev/null +++ b/app/models/gateway/pay_pal_express.rb @@ -0,0 +1,13 @@ +module Spree + class Gateway::PayPalExpress < Gateway + preference :login, :string + preference :password, :string + preference :signature, :string + + attr_accessible :preferred_login, :preferred_password, :preferred_signature + + def provider_class + ActiveMerchant::Billing::PaypalGateway + end + end +end \ No newline at end of file diff --git a/app/models/gateway/pay_pal_gateway.rb b/app/models/gateway/pay_pal_gateway.rb new file mode 100644 index 00000000..1bf6835c --- /dev/null +++ b/app/models/gateway/pay_pal_gateway.rb @@ -0,0 +1,10 @@ +module Spree + class Gateway::PayPalGateway< Gateway + paypal_options = { + :login => "seller_1229899173_biz_api1.railscasts.com", + :password => "FXWU58S7KXFC6HBE", + :signature => "AGjv6SW.mTiKxtkm6L9DcSUCUgePAUDQ3L-kTdszkPG8mRfjaRZDYtSu" + } + + end +end \ No newline at end of file diff --git a/config/locales/en.yml b/config/locales/en.yml new file mode 100644 index 00000000..179c14ca --- /dev/null +++ b/config/locales/en.yml @@ -0,0 +1,5 @@ +# Sample localization file for English. Add more files in this directory for other locales. +# See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points. + +en: + hello: "Hello world" diff --git a/config/routes.rb b/config/routes.rb new file mode 100644 index 00000000..53e2eeb8 --- /dev/null +++ b/config/routes.rb @@ -0,0 +1,3 @@ +Spree::Core::Engine.routes.draw do + # Add your extension routes here +end diff --git a/lib/generators/spree_paypal_express/install/install_generator.rb b/lib/generators/spree_paypal_express/install/install_generator.rb new file mode 100644 index 00000000..1862e9a6 --- /dev/null +++ b/lib/generators/spree_paypal_express/install/install_generator.rb @@ -0,0 +1,31 @@ +module SpreePaypalExpress + module Generators + class InstallGenerator < Rails::Generators::Base + + class_option :auto_run_migrations, :type => :boolean, :default => false + + def add_javascripts + append_file 'app/assets/javascripts/store/all.js', "//= require store/spree_paypal_express\n" + append_file 'app/assets/javascripts/admin/all.js', "//= require admin/spree_paypal_express\n" + end + + def add_stylesheets + inject_into_file 'app/assets/stylesheets/store/all.css', " *= require store/spree_paypal_express\n", :before => /\*\//, :verbose => true + inject_into_file 'app/assets/stylesheets/admin/all.css', " *= require admin/spree_paypal_express\n", :before => /\*\//, :verbose => true + end + + def add_migrations + run 'bundle exec rake railties:install:migrations FROM=spree_paypal_express' + end + + def run_migrations + run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask 'Would you like to run the migrations now? [Y/n]') + if run_migrations + run 'bundle exec rake db:migrate' + else + puts 'Skipping rake db:migrate, don\'t forget to run it!' + end + end + end + end +end diff --git a/lib/spree_paypal_express.rb b/lib/spree_paypal_express.rb new file mode 100644 index 00000000..e3dafc39 --- /dev/null +++ b/lib/spree_paypal_express.rb @@ -0,0 +1,2 @@ +require 'spree_core' +require 'spree_paypal_express/engine' diff --git a/lib/spree_paypal_express/engine.rb b/lib/spree_paypal_express/engine.rb new file mode 100644 index 00000000..43cf7031 --- /dev/null +++ b/lib/spree_paypal_express/engine.rb @@ -0,0 +1,26 @@ +module SpreePaypalExpress + class Engine < Rails::Engine + require 'spree/core' + isolate_namespace Spree + engine_name 'spree_paypal_express' + + 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.configuration.cache_classes ? require(c) : load(c) + end + end + + config.to_prepare &method(:activate).to_proc + + initializer "spree.paypal_express.payment_methods", :after => "spree.register.payment_methods" do |app| + app.config.spree.payment_methods << Spree::Gateway::PaypalExpress + end + end +end diff --git a/lib/spree_paypal_express/factories.rb b/lib/spree_paypal_express/factories.rb new file mode 100644 index 00000000..498d735d --- /dev/null +++ b/lib/spree_paypal_express/factories.rb @@ -0,0 +1,6 @@ +FactoryGirl.define do + # Define your Spree extensions Factories within this file to enable applications, and other extensions to use and override them. + # + # Example adding this to your spec_helper will load these Factories for use: + # require 'spree_paypal_express/factories' +end diff --git a/script/rails b/script/rails new file mode 100644 index 00000000..86f8bce0 --- /dev/null +++ b/script/rails @@ -0,0 +1,7 @@ +# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application. + +ENGINE_ROOT = File.expand_path('../..', __FILE__) +ENGINE_PATH = File.expand_path('../../lib/spree_paypal_express/engine', __FILE__) + +require 'rails/all' +require 'rails/engine/commands' diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 00000000..888ef6fb --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1,81 @@ +# Run Coverage report +require 'simplecov' +SimpleCov.start do + add_group 'Controllers', 'app/controllers' + add_group 'Helpers', 'app/helpers' + add_group 'Mailers', 'app/mailers' + add_group 'Models', 'app/models' + add_group 'Views', 'app/views' + add_group 'Libraries', 'lib' +end + +# Configure Rails Environment +ENV['RAILS_ENV'] = 'test' + +require File.expand_path('../dummy/config/environment.rb', __FILE__) + +require 'rspec/rails' +require 'database_cleaner' +require 'ffaker' + +# Requires supporting ruby files with custom matchers and macros, etc, +# in spec/support/ and its subdirectories. +Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each { |f| require f } + +# Requires factories defined in spree_core +require 'spree/testing_support/factories' +require 'spree/testing_support/controller_requests' +require 'spree/testing_support/authorization_helpers' +require 'spree/testing_support/url_helpers' + +# Requires factories defined in lib/spree_paypal_express/factories.rb +require 'spree_paypal_express/factories' + +RSpec.configure do |config| + config.include FactoryGirl::Syntax::Methods + + # == URL Helpers + # + # Allows access to Spree's routes in specs: + # + # visit spree.admin_path + # current_path.should eql(spree.products_path) + config.include Spree::TestingSupport::UrlHelpers + + # == 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 + config.color = true + + # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures + config.fixture_path = "#{::Rails.root}/spec/fixtures" + + # Capybara javascript drivers require transactional fixtures set to false, and we use DatabaseCleaner + # to cleanup after each test instead. Without transactional fixtures set to false the records created + # to setup a test will be unavailable to the browser, which runs under a seperate server instance. + config.use_transactional_fixtures = false + + # Ensure Suite is set to use transactions for speed. + config.before :suite do + DatabaseCleaner.strategy = :transaction + DatabaseCleaner.clean_with :truncation + end + + # Before each spec check if it is a Javascript test and switch between using database transactions or not where necessary. + config.before :each do + DatabaseCleaner.strategy = example.metadata[:js] ? :truncation : :transaction + DatabaseCleaner.start + end + + # After each spec clean the database. + config.after :each do + DatabaseCleaner.clean + end + + config.fail_fast = ENV['FAIL_FAST'] || false +end diff --git a/spree_paypal_express.gemspec b/spree_paypal_express.gemspec new file mode 100644 index 00000000..fa4ff9f1 --- /dev/null +++ b/spree_paypal_express.gemspec @@ -0,0 +1,31 @@ +# encoding: UTF-8 +Gem::Specification.new do |s| + s.platform = Gem::Platform::RUBY + s.name = 'spree_paypal_express' + s.version = '2.0.3' + s.summary = 'TODO: Add gem summary here' + s.description = 'TODO: Add (optional) gem description here' + s.required_ruby_version = '>= 1.9.3' + + # s.author = 'You' + # s.email = 'you@example.com' + # s.homepage = 'http://www.spreecommerce.com' + + #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', '~> 2.0.3' + + s.add_development_dependency 'capybara', '~> 2.1' + s.add_development_dependency 'coffee-rails' + s.add_development_dependency 'database_cleaner' + s.add_development_dependency 'factory_girl', '~> 4.2' + s.add_development_dependency 'ffaker' + s.add_development_dependency 'rspec-rails', '~> 2.13' + s.add_development_dependency 'sass-rails' + s.add_development_dependency 'selenium-webdriver' + s.add_development_dependency 'simplecov' + s.add_development_dependency 'sqlite3' +end