diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..81842e4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,21 @@ +\#* +*~ +.#* +.DS_Store +.idea +.localeapp/locales +.project +coverage +default +Gemfile.lock +tmp +nbproject +pkg +*.sw? +spec/dummy +.rvmrc +.sass-cache +public/spree +.ruby-version +.ruby-gemset +gemfiles/*.gemfile.lock diff --git a/.rspec b/.rspec new file mode 100644 index 0000000..d72f951 --- /dev/null +++ b/.rspec @@ -0,0 +1,3 @@ +--color +-r spec_helper +-f documentation diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..99dd81b --- /dev/null +++ b/.travis.yml @@ -0,0 +1,24 @@ +sudo: required +dist: trusty + +language: ruby + +env: + - DB=postgres + - DB=mysql + +gemfile: + - gemfiles/spree_3_1.gemfile + - gemfiles/spree_3_2.gemfile + - gemfiles/spree_master.gemfile + +script: + - bundle exec rake test_app + - bundle exec rake spec + +rvm: + - 2.3.1 + - 2.2.7 + +before_install: + - mysql -u root -e "GRANT ALL ON *.* TO 'travis'@'%';" diff --git a/Appraisals b/Appraisals new file mode 100644 index 0000000..b0b615f --- /dev/null +++ b/Appraisals @@ -0,0 +1,29 @@ +appraise 'spree-3-1' do + gem 'spree', '~> 3.1.0' + gem 'spree_auth_devise', '~> 3.1.0' + gem 'rails_test_params_backport', group: :test +end + +appraise 'spree-3-2' do + gem 'spree', '~> 3.2.0' + gem 'spree_auth_devise', '~> 3.2.0' + gem 'rails-controller-testing' +end + +appraise 'spree-3-3' do + gem 'spree', '~> 3.3.0' + gem 'spree_auth_devise', '~> 3.3.0' + gem 'rails-controller-testing' +end + +appraise 'spree-3-4' do + gem 'spree', '~> 3.4.0' + gem 'spree_auth_devise', '~> 3.3.0' + gem 'rails-controller-testing' +end + +appraise 'spree-master' do + gem 'spree', github: 'spree/spree', branch: 'master' + gem 'spree_auth_devise', github: 'spree/spree_auth_devise', branch: 'master' + gem 'rails-controller-testing' +end diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..cc1d193 --- /dev/null +++ b/Gemfile @@ -0,0 +1,7 @@ +source 'https://rubygems.org' + +gem 'spree', github: 'spree/spree', branch: 'master' +gem 'spree_auth_devise', github: 'spree/spree_auth_devise', branch: 'master' +gem 'rails-controller-testing' + +gemspec diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d16832a --- /dev/null +++ b/LICENSE @@ -0,0 +1,26 @@ +Copyright (c) 2017 [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 0000000..126f028 --- /dev/null +++ b/README.md @@ -0,0 +1,50 @@ +SpreeAnalytics +============== + +Introduction goes here. + +## Installation + +1. Add this extension to your Gemfile with this line: + ```ruby + gem 'spree_analytics', github: '[your-github-handle]/spree_analytics' + ``` + +2. Install the gem using Bundler: + ```ruby + bundle install + ``` + +3. Copy & run migrations + ```ruby + bundle exec rails g spree_analytics:install + ``` + +4. Restart your server + + If your server was running, restart it so that it can find the assets properly. + +## Testing + +First bundle your dependencies, then run `rake`. `rake` will default to building the dummy app if it does not exist, then it will run specs. The dummy app can be regenerated by using `rake test_app`. + +```shell +bundle +bundle exec rake +``` + +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_analytics/factories' +``` + + +## Contributing + +If you'd like to contribute, please take a look at the +[instructions](CONTRIBUTING.md) for installing dependencies and crafting a good +pull request. + +Copyright (c) 2017 [name of extension creator], released under the New BSD License diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..d4da38b --- /dev/null +++ b/Rakefile @@ -0,0 +1,21 @@ +require 'bundler' +Bundler::GemHelper.install_tasks + +require 'rspec/core/rake_task' +require 'spree/testing_support/extension_rake' + +RSpec::Core::RakeTask.new + +task :default do + if Dir["spec/dummy"].empty? + Rake::Task[:test_app].invoke + Dir.chdir("../../") + end + Rake::Task[:spec].invoke +end + +desc 'Generates a dummy app for testing' +task :test_app do + ENV['LIB_NAME'] = 'spree_analytics' + Rake::Task['extension:test_app'].invoke +end diff --git a/app/assets/javascripts/spree/backend/spree_analytics.js b/app/assets/javascripts/spree/backend/spree_analytics.js new file mode 100644 index 0000000..8aa3b01 --- /dev/null +++ b/app/assets/javascripts/spree/backend/spree_analytics.js @@ -0,0 +1,2 @@ +// Placeholder manifest file. +// the installer will append this file to the app vendored assets here: vendor/assets/javascripts/spree/backend/all.js' \ No newline at end of file diff --git a/app/assets/javascripts/spree/frontend/spree_analytics.js b/app/assets/javascripts/spree/frontend/spree_analytics.js new file mode 100644 index 0000000..a79f2e9 --- /dev/null +++ b/app/assets/javascripts/spree/frontend/spree_analytics.js @@ -0,0 +1,2 @@ +// Placeholder manifest file. +// the installer will append this file to the app vendored assets here: vendor/assets/javascripts/spree/frontend/all.js' \ No newline at end of file diff --git a/app/assets/stylesheets/spree/backend/spree_analytics.css b/app/assets/stylesheets/spree/backend/spree_analytics.css new file mode 100644 index 0000000..e3c2366 --- /dev/null +++ b/app/assets/stylesheets/spree/backend/spree_analytics.css @@ -0,0 +1,4 @@ +/* +Placeholder manifest file. +the installer will append this file to the app vendored assets here: 'vendor/assets/stylesheets/spree/backend/all.css' +*/ diff --git a/app/assets/stylesheets/spree/frontend/spree_analytics.css b/app/assets/stylesheets/spree/frontend/spree_analytics.css new file mode 100644 index 0000000..da23623 --- /dev/null +++ b/app/assets/stylesheets/spree/frontend/spree_analytics.css @@ -0,0 +1,4 @@ +/* +Placeholder manifest file. +the installer will append this file to the app vendored assets here: 'vendor/assets/stylesheets/spree/frontend/all.css' +*/ diff --git a/bin/rails b/bin/rails new file mode 100644 index 0000000..3c10597 --- /dev/null +++ b/bin/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_analytics/engine', __FILE__) + +require 'rails/all' +require 'rails/engine/commands' diff --git a/config/locales/en.yml b/config/locales/en.yml new file mode 100644 index 0000000..179c14c --- /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 0000000..0339717 --- /dev/null +++ b/config/routes.rb @@ -0,0 +1,3 @@ +Spree::Core::Engine.add_routes do + # Add your extension routes here +end diff --git a/gemfiles/.bundle/config b/gemfiles/.bundle/config new file mode 100644 index 0000000..c127f80 --- /dev/null +++ b/gemfiles/.bundle/config @@ -0,0 +1,2 @@ +--- +BUNDLE_RETRY: "1" diff --git a/gemfiles/spree_3_1.gemfile b/gemfiles/spree_3_1.gemfile new file mode 100644 index 0000000..d749eb5 --- /dev/null +++ b/gemfiles/spree_3_1.gemfile @@ -0,0 +1,9 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "spree", "~> 3.1.0" +gem "spree_auth_devise", "~> 3.1.0" +gem "rails_test_params_backport", group: :test + +gemspec path: "../" diff --git a/gemfiles/spree_3_2.gemfile b/gemfiles/spree_3_2.gemfile new file mode 100644 index 0000000..05e3ff8 --- /dev/null +++ b/gemfiles/spree_3_2.gemfile @@ -0,0 +1,9 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "spree", "~> 3.2.0" +gem "spree_auth_devise", "~> 3.2.0" +gem "rails-controller-testing" + +gemspec path: "../" diff --git a/gemfiles/spree_3_3.gemfile b/gemfiles/spree_3_3.gemfile new file mode 100644 index 0000000..2549f1a --- /dev/null +++ b/gemfiles/spree_3_3.gemfile @@ -0,0 +1,9 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "spree", "~> 3.3.0" +gem "spree_auth_devise", "~> 3.3.0" +gem "rails-controller-testing" + +gemspec path: "../" diff --git a/gemfiles/spree_3_4.gemfile b/gemfiles/spree_3_4.gemfile new file mode 100644 index 0000000..184e509 --- /dev/null +++ b/gemfiles/spree_3_4.gemfile @@ -0,0 +1,9 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "spree", "~> 3.4.0" +gem "spree_auth_devise", "~> 3.3.0" +gem "rails-controller-testing" + +gemspec path: "../" diff --git a/gemfiles/spree_master.gemfile b/gemfiles/spree_master.gemfile new file mode 100644 index 0000000..3888f1f --- /dev/null +++ b/gemfiles/spree_master.gemfile @@ -0,0 +1,9 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "spree", github: "spree/spree", branch: "master" +gem "spree_auth_devise", github: "spree/spree_auth_devise", branch: "master" +gem "rails-controller-testing" + +gemspec path: "../" diff --git a/lib/generators/spree_analytics/install/install_generator.rb b/lib/generators/spree_analytics/install/install_generator.rb new file mode 100644 index 0000000..25bf3dd --- /dev/null +++ b/lib/generators/spree_analytics/install/install_generator.rb @@ -0,0 +1,31 @@ +module SpreeAnalytics + module Generators + class InstallGenerator < Rails::Generators::Base + + class_option :auto_run_migrations, type: :boolean, default: false + + def add_javascripts + append_file 'vendor/assets/javascripts/spree/frontend/all.js', "//= require spree/frontend/spree_analytics\n" + append_file 'vendor/assets/javascripts/spree/backend/all.js', "//= require spree/backend/spree_analytics\n" + end + + def add_stylesheets + inject_into_file 'vendor/assets/stylesheets/spree/frontend/all.css', " *= require spree/frontend/spree_analytics\n", before: /\*\//, verbose: true + inject_into_file 'vendor/assets/stylesheets/spree/backend/all.css', " *= require spree/backend/spree_analytics\n", before: /\*\//, verbose: true + end + + def add_migrations + run 'bundle exec rake railties:install:migrations FROM=spree_analytics' + 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_analytics.rb b/lib/spree_analytics.rb new file mode 100644 index 0000000..1282b6a --- /dev/null +++ b/lib/spree_analytics.rb @@ -0,0 +1,3 @@ +require 'spree_core' +require 'spree_analytics/engine' +require 'spree_analytics/version' diff --git a/lib/spree_analytics/engine.rb b/lib/spree_analytics/engine.rb new file mode 100644 index 0000000..a7cd106 --- /dev/null +++ b/lib/spree_analytics/engine.rb @@ -0,0 +1,20 @@ +module SpreeAnalytics + class Engine < Rails::Engine + require 'spree/core' + isolate_namespace Spree + engine_name 'spree_analytics' + + # 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 + end +end diff --git a/lib/spree_analytics/factories.rb b/lib/spree_analytics/factories.rb new file mode 100644 index 0000000..001722c --- /dev/null +++ b/lib/spree_analytics/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_analytics/factories' +end diff --git a/lib/spree_analytics/version.rb b/lib/spree_analytics/version.rb new file mode 100644 index 0000000..a9c47be --- /dev/null +++ b/lib/spree_analytics/version.rb @@ -0,0 +1,18 @@ +module SpreeAnalytics + module_function + + # Returns the version of the currently loaded SpreeAnalytics as a + # Gem::Version. + def version + Gem::Version.new VERSION::STRING + end + + module VERSION + MAJOR = 0 + MINOR = 0 + TINY = 1 + PRE = 'alpha'.freeze + + STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.') + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 0000000..b52caaa --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1,93 @@ +# Run Coverage report +require 'simplecov' +SimpleCov.start do + add_filter 'spec/dummy' + 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 and other useful helpers defined in spree_core. +require 'spree/testing_support/authorization_helpers' +require 'spree/testing_support/capybara_ext' +require 'spree/testing_support/controller_requests' +require 'spree/testing_support/factories' +require 'spree/testing_support/url_helpers' + +# Requires factories defined in lib/spree_analytics/factories.rb +require 'spree_analytics/factories' + +RSpec.configure do |config| + config.include FactoryGirl::Syntax::Methods + + # Infer an example group's spec type from the file location. + config.infer_spec_type_from_file_location! + + # == 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 + + # == Requests support + # + # Adds convenient methods to request Spree's controllers + # spree_get :index + config.include Spree::TestingSupport::ControllerRequests, type: :controller + + # == 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 separate 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 = RSpec.current_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 + config.order = "random" +end diff --git a/spree_analytics.gemspec b/spree_analytics.gemspec new file mode 100644 index 0000000..a1886dc --- /dev/null +++ b/spree_analytics.gemspec @@ -0,0 +1,39 @@ +# encoding: UTF-8 +lib = File.expand_path('../lib/', __FILE__) +$LOAD_PATH.unshift lib unless $LOAD_PATH.include?(lib) + +require 'spree_analytics/version' + +Gem::Specification.new do |s| + s.platform = Gem::Platform::RUBY + s.name = 'spree_analytics' + s.version = SpreeAnalytics.version + s.summary = 'Add extension summary here' + s.description = 'Add (optional) extension description here' + s.required_ruby_version = '>= 2.2.7' + + s.author = 'Bartosz Bonisławski' + s.email = 'b.bonislawski@hotmail.com' + s.homepage = 'https://github.com/spree-contrib/spree_analytics' + s.license = 'BSD-3-Clause' + + s.require_path = 'lib' + s.requirements << 'none' + + s.add_dependency 'spree_core', '>= 3.1.0', '< 4.0' + s.add_dependency 'spree_extension' + + s.add_development_dependency 'capybara' + s.add_development_dependency 'capybara-screenshot' + s.add_development_dependency 'coffee-rails' + s.add_development_dependency 'database_cleaner' + s.add_development_dependency 'factory_girl' + s.add_development_dependency 'ffaker' + s.add_development_dependency 'rspec-rails' + s.add_development_dependency 'sass-rails' + s.add_development_dependency 'selenium-webdriver' + s.add_development_dependency 'simplecov' + s.add_development_dependency 'pg' + s.add_development_dependency 'mysql2' + s.add_development_dependency 'appraisal' +end