From acdd87445050d4e2dcaaf46cecf92c817f9f5d9b Mon Sep 17 00:00:00 2001 From: Ryan Bigg Date: Fri, 12 Jul 2013 09:39:05 +1000 Subject: [PATCH] Beginnings. --- .gitignore | 14 ++++ .rspec | 1 + Gemfile | 6 ++ LICENSE | 26 ++++++ README.md | 40 +++++++++ Rakefile | 15 ++++ Versionfile | 11 +++ .../javascripts/admin/spree_paypal_express.js | 1 + .../javascripts/store/spree_paypal_express.js | 1 + .../admin/spree_paypal_express.css | 3 + .../store/spree_paypal_express.css | 3 + app/models/gateway/pay_pal_express.rb | 13 +++ app/models/gateway/pay_pal_gateway.rb | 10 +++ config/locales/en.yml | 5 ++ config/routes.rb | 3 + .../install/install_generator.rb | 31 +++++++ lib/spree_paypal_express.rb | 2 + lib/spree_paypal_express/engine.rb | 26 ++++++ lib/spree_paypal_express/factories.rb | 6 ++ script/rails | 7 ++ spec/spec_helper.rb | 81 +++++++++++++++++++ spree_paypal_express.gemspec | 31 +++++++ 22 files changed, 336 insertions(+) create mode 100644 .gitignore create mode 100644 .rspec create mode 100644 Gemfile create mode 100644 LICENSE create mode 100644 README.md create mode 100644 Rakefile create mode 100644 Versionfile create mode 100644 app/assets/javascripts/admin/spree_paypal_express.js create mode 100644 app/assets/javascripts/store/spree_paypal_express.js create mode 100644 app/assets/stylesheets/admin/spree_paypal_express.css create mode 100644 app/assets/stylesheets/store/spree_paypal_express.css create mode 100644 app/models/gateway/pay_pal_express.rb create mode 100644 app/models/gateway/pay_pal_gateway.rb create mode 100644 config/locales/en.yml create mode 100644 config/routes.rb create mode 100644 lib/generators/spree_paypal_express/install/install_generator.rb create mode 100644 lib/spree_paypal_express.rb create mode 100644 lib/spree_paypal_express/engine.rb create mode 100644 lib/spree_paypal_express/factories.rb create mode 100644 script/rails create mode 100644 spec/spec_helper.rb create mode 100644 spree_paypal_express.gemspec 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