spree_rejoiner 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +22 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +24 -0
  5. data/.travis.yml +36 -0
  6. data/Appraisals +27 -0
  7. data/Gemfile +19 -0
  8. data/LICENSE +26 -0
  9. data/README.md +24 -0
  10. data/Rakefile +21 -0
  11. data/app/assets/javascripts/spree/backend/spree_rejoiner.js +2 -0
  12. data/app/assets/javascripts/spree/frontend/spree_rejoiner.js +4 -0
  13. data/app/assets/stylesheets/spree/backend/spree_rejoiner.css +4 -0
  14. data/app/assets/stylesheets/spree/frontend/spree_rejoiner.css +4 -0
  15. data/app/controllers/spree/admin/rejoiner_settings_controller.rb +20 -0
  16. data/app/controllers/spree/checkout_controller_decorator.rb +5 -0
  17. data/app/controllers/spree/store_controller_decorator.rb +5 -0
  18. data/app/helpers/spree/rejoiner_helper.rb +45 -0
  19. data/app/models/spree/app_configuration_decorator.rb +8 -0
  20. data/app/models/spree/rejoiner.rb +17 -0
  21. data/app/overrides/rejoiner_admin_sidebar.rb +6 -0
  22. data/app/overrides/rejoiner_base.rb +6 -0
  23. data/app/overrides/rejoiner_cart_view.rb +6 -0
  24. data/app/overrides/rejoiner_checkout_view.rb +6 -0
  25. data/app/overrides/rejoiner_conversion.rb +6 -0
  26. data/app/overrides/rejoiner_product_view.rb +6 -0
  27. data/app/views/spree/admin/rejoiner_settings/edit.html.erb +42 -0
  28. data/app/views/spree/shared/_rejoiner_base.js.erb +14 -0
  29. data/app/views/spree/shared/_rejoiner_cart.js.erb +18 -0
  30. data/app/views/spree/shared/_rejoiner_conversion.js.erb +18 -0
  31. data/app/views/spree/shared/_rejoiner_product.js.erb +5 -0
  32. data/bin/rails +8 -0
  33. data/config/locales/en.yml +8 -0
  34. data/config/routes.rb +5 -0
  35. data/gemfiles/spree_3_2.gemfile +10 -0
  36. data/gemfiles/spree_3_5.gemfile +10 -0
  37. data/gemfiles/spree_3_7.gemfile +10 -0
  38. data/gemfiles/spree_master.gemfile +10 -0
  39. data/lib/generators/spree_rejoiner/install/install_generator.rb +28 -0
  40. data/lib/spree_rejoiner.rb +4 -0
  41. data/lib/spree_rejoiner/engine.rb +20 -0
  42. data/lib/spree_rejoiner/factories.rb +2 -0
  43. data/lib/spree_rejoiner/version.rb +17 -0
  44. data/spree_rejoiner.gemspec +46 -0
  45. metadata +393 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 59ecf69900545e53dfbe228398c8262e9c6417005c4d0821d3d4ba4aab88feb3
4
+ data.tar.gz: 3be7d3e06f078afc4c79455c125b4fcff7a8ab3ae46ec2dd7e561ba6d85a803b
5
+ SHA512:
6
+ metadata.gz: 6181cfdc0113f4c21d071339047ae13c3486d76185d9654624c0076134075de2f9ae74d27a2e7c29870d837d8ce4ebfe89ccb815d7e0912847b23d1674f89d7d
7
+ data.tar.gz: ab0f8e762943a46479bd8cb353dc2bc93b1da7f8ab42f761d0dee2e3dc6d9dc57054f4ef4497768a558e7f40741dee998753098b13b0c434d8e4af03ef3427ba
data/.gitignore ADDED
@@ -0,0 +1,22 @@
1
+ \#*
2
+ *~
3
+ .#*
4
+ .DS_Store
5
+ .idea
6
+ .localeapp/locales
7
+ .project
8
+ .vscode
9
+ coverage
10
+ default
11
+ Gemfile.lock
12
+ tmp
13
+ nbproject
14
+ pkg
15
+ *.sw?
16
+ spec/dummy
17
+ .rvmrc
18
+ .sass-cache
19
+ public/spree
20
+ .ruby-version
21
+ .ruby-gemset
22
+ gemfiles/*.gemfile.lock
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ -r spec_helper
3
+ -f documentation
data/.rubocop.yml ADDED
@@ -0,0 +1,24 @@
1
+ AllCops:
2
+ DisplayCopNames: true
3
+ TargetRubyVersion: 2.3
4
+ Include:
5
+ - '**/Gemfile'
6
+ - '**/Rakefile'
7
+ - '**/Appraisals'
8
+ Exclude:
9
+ - 'spec/dummy/**/*'
10
+ - 'lib/generators/**/*'
11
+
12
+ Rails:
13
+ Enabled: true
14
+
15
+ Metrics/LineLength:
16
+ Max: 150
17
+
18
+ # DISABLED
19
+
20
+ Style/Documentation:
21
+ Enabled: false
22
+
23
+ Style/FrozenStringLiteralComment:
24
+ Enabled: false
data/.travis.yml ADDED
@@ -0,0 +1,36 @@
1
+ sudo: required
2
+ dist: trusty
3
+
4
+ language: ruby
5
+
6
+ env:
7
+ - DB=postgres
8
+ - DB=mysql
9
+
10
+ gemfile:
11
+ - gemfiles/spree_3_2.gemfile
12
+ - gemfiles/spree_3_5.gemfile
13
+ - gemfiles/spree_3_7.gemfile
14
+ - gemfiles/spree_master.gemfile
15
+
16
+ script:
17
+ - bundle exec rake test_app
18
+ - bundle exec rake spec
19
+
20
+ rvm:
21
+ - 2.5.1
22
+ - 2.4.2
23
+ - 2.3.1
24
+
25
+ matrix:
26
+ allow_failures:
27
+ - gemfile: gemfiles/spree_master.gemfile
28
+
29
+ before_install:
30
+ - mysql -u root -e "GRANT ALL ON *.* TO 'travis'@'%';"
31
+ - wget -N https://chromedriver.storage.googleapis.com/2.35/chromedriver_linux64.zip -P ~/
32
+ - unzip ~/chromedriver_linux64.zip -d ~/
33
+ - rm ~/chromedriver_linux64.zip
34
+ - sudo mv -f ~/chromedriver /usr/local/share/
35
+ - sudo chmod +x /usr/local/share/chromedriver
36
+ - sudo ln -s /usr/local/share/chromedriver /usr/local/bin/chromedriver
data/Appraisals ADDED
@@ -0,0 +1,27 @@
1
+ appraise 'spree-3-2' do
2
+ gem 'spree_core', '~> 3.2.0'
3
+ gem 'spree_backend', '~> 3.2.0'
4
+ gem 'spree_auth_devise', '~> 3.4.0'
5
+ gem 'rails-controller-testing'
6
+ end
7
+
8
+ appraise 'spree-3-5' do
9
+ gem 'spree_core', '~> 3.5.0'
10
+ gem 'spree_backend', '~> 3.5.0'
11
+ gem 'spree_auth_devise', '~> 3.4.0'
12
+ gem 'rails-controller-testing'
13
+ end
14
+
15
+ appraise 'spree-3-7' do
16
+ gem 'spree_core', '~> 3.7.0'
17
+ gem 'spree_backend', '~> 3.7.0'
18
+ gem 'spree_auth_devise', '~> 3.5.0'
19
+ gem 'rails-controller-testing'
20
+ end
21
+
22
+ appraise 'spree-master' do
23
+ gem 'spree_core', github: 'spree/spree', branch: 'master'
24
+ gem 'spree_backend', github: 'spree/spree', branch: 'master'
25
+ gem 'spree_auth_devise', github: 'spree/spree_auth_devise', branch: 'master'
26
+ gem 'rails-controller-testing'
27
+ end
data/Gemfile ADDED
@@ -0,0 +1,19 @@
1
+ source 'https://rubygems.org'
2
+
3
+ git_source(:github) do |repo_name|
4
+ repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?('/')
5
+ "https://github.com/#{repo_name}.git"
6
+ end
7
+
8
+ gem 'spree_core', github: 'spree/spree', branch: 'master'
9
+ gem 'spree_backend', github: 'spree/spree', branch: 'master'
10
+ # Provides basic authentication functionality for testing parts of your engine
11
+ gem 'spree_auth_devise', github: 'spree/spree_auth_devise', branch: 'master'
12
+ gem 'rails-controller-testing'
13
+
14
+ gem 'public_suffix'
15
+
16
+ gem 'rubocop', require: false
17
+ gem 'rubocop-rspec', require: false
18
+
19
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,26 @@
1
+ Copyright (c) 2019 [name of plugin creator]
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+ * Redistributions in binary form must reproduce the above copyright notice,
10
+ this list of conditions and the following disclaimer in the documentation
11
+ and/or other materials provided with the distribution.
12
+ * Neither the name Spree nor the names of its contributors may be used to
13
+ endorse or promote products derived from this software without specific
14
+ prior written permission.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
20
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,24 @@
1
+ # SpreeRejoiner
2
+
3
+ Introduction goes here.
4
+
5
+ ## Installation
6
+
7
+ 1. Add this extension to your Gemfile with this line:
8
+ ```ruby
9
+ gem 'spree_rejoiner', github: 'rejoiner/spree_rejoiner'
10
+ ```
11
+
12
+ 2. Install the gem using Bundler:
13
+ ```ruby
14
+ bundle install
15
+ ```
16
+
17
+ 3. Copy & run migrations
18
+ ```ruby
19
+ bundle exec rails g spree_rejoiner:install
20
+ ```
21
+
22
+ 4. Restart your server
23
+
24
+ If your server was running, restart it so that it can find the assets properly.
data/Rakefile ADDED
@@ -0,0 +1,21 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rspec/core/rake_task'
5
+ require 'spree/testing_support/extension_rake'
6
+
7
+ RSpec::Core::RakeTask.new
8
+
9
+ task :default do
10
+ if Dir['spec/dummy'].empty?
11
+ Rake::Task[:test_app].invoke
12
+ Dir.chdir('../../')
13
+ end
14
+ Rake::Task[:spec].invoke
15
+ end
16
+
17
+ desc 'Generates a dummy app for testing'
18
+ task :test_app do
19
+ ENV['LIB_NAME'] = 'spree_rejoiner'
20
+ Rake::Task['extension:test_app'].invoke
21
+ end
@@ -0,0 +1,2 @@
1
+ // Placeholder manifest file.
2
+ // the installer will append this file to the app vendored assets here: vendor/assets/javascripts/spree/backend/all.js'
@@ -0,0 +1,4 @@
1
+ // Placeholder manifest file.
2
+ // the installer will append this file to the app vendored assets here: vendor/assets/javascripts/spree/frontend/all.js'
3
+
4
+ console.log('Spree / Rejoiner test...');
@@ -0,0 +1,4 @@
1
+ /*
2
+ Placeholder manifest file.
3
+ the installer will append this file to the app vendored assets here: 'vendor/assets/stylesheets/spree/backend/all.css'
4
+ */
@@ -0,0 +1,4 @@
1
+ /*
2
+ Placeholder manifest file.
3
+ the installer will append this file to the app vendored assets here: 'vendor/assets/stylesheets/spree/frontend/all.css'
4
+ */
@@ -0,0 +1,20 @@
1
+ module Spree
2
+ module Admin
3
+ class RejoinerSettingsController < Spree::Admin::BaseController
4
+ def edit
5
+ @site_settings = %w[rejoiner_site_id rejoiner_domain rejoiner_api_key]
6
+ end
7
+
8
+ def update
9
+ params.each do |name, value|
10
+ next unless Spree::Config.has_preference? name
11
+
12
+ Spree::Config[name] = value
13
+ end
14
+
15
+ flash[:success] = Spree.t(:successfully_updated, resource: Spree.t(:rejoiner_settings))
16
+ redirect_to edit_admin_rejoiner_settings_path
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,5 @@
1
+ if defined?(Spree::CheckoutController)
2
+ Spree::CheckoutController.class_eval do
3
+ helper Spree::RejoinerHelper
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ if defined?(Spree::StoreController)
2
+ Spree::StoreController.class_eval do
3
+ helper Spree::RejoinerHelper
4
+ end
5
+ end
@@ -0,0 +1,45 @@
1
+ module Spree
2
+ module RejoinerHelper
3
+ def convert_price_to_cents(price)
4
+ (price * 100).round
5
+ end
6
+
7
+ def get_image_path(image)
8
+ if defined?(ActiveStorage) && !Rails.application.config.use_paperclip
9
+ Rails.application.routes.url_helpers.rails_blob_path(image.attachment, only_path: true)
10
+ else
11
+ asset_url(image.attachment)
12
+ end
13
+ end
14
+
15
+ def get_image_url(image)
16
+ request.base_url + get_image_path(image)
17
+ end
18
+
19
+ def get_base_product(product)
20
+ {
21
+ product_id: product.id,
22
+ name: product.name,
23
+ category: product.try(:category).try(:name),
24
+ price: convert_price_to_cents(product.price),
25
+ product_url: product_url(product)
26
+ }
27
+ end
28
+
29
+ def get_rejoiner_product(product, opts = {})
30
+ base_product = get_base_product product
31
+ base_product[:sku] = product.sku if product.sku
32
+ base_product[:image_url] = get_image_url(opts.delete(:image)) if opts[:image]
33
+ base_product[:qty_price] = base_product[:price] * opts[:item_qty] if opts[:item_qty]
34
+ base_product.merge(opts).to_json.html_safe
35
+ end
36
+
37
+ def get_rejoiner_cart_data(order)
38
+ {
39
+ cart_value: convert_price_to_cents(order.item_total),
40
+ cart_item_count: order.item_count,
41
+ order_number: order.number
42
+ }.to_json.html_safe
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,8 @@
1
+ if defined?(Spree::AppConfiguration)
2
+ Spree::AppConfiguration.class_eval do
3
+ preference :rejoiner_active, :boolean, default: false
4
+ preference :rejoiner_site_id, :string
5
+ preference :rejoiner_domain, :string
6
+ preference :rejoiner_api_key, :string
7
+ end
8
+ end
@@ -0,0 +1,17 @@
1
+ require 'public_suffix'
2
+
3
+ module Spree
4
+ class Rejoiner < Spree::Base
5
+ def self.active?
6
+ Spree::Config.rejoiner_site_id.present?
7
+ end
8
+
9
+ def self.site_id
10
+ Spree::Config.rejoiner_site_id
11
+ end
12
+
13
+ def self.domain
14
+ PublicSuffix.domain(Spree::Config.rejoiner_domain)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,6 @@
1
+ Deface::Override.new(
2
+ virtual_path: 'spree/admin/shared/sub_menu/_configuration',
3
+ name: 'rejoiner_admin_sidebar',
4
+ insert_bottom: '[data-hook="admin_configurations_sidebar_menu"]',
5
+ text: '<%= configurations_sidebar_menu_item(Spree.t(:rejoiner_settings), spree.edit_admin_rejoiner_settings_path) %>'
6
+ )
@@ -0,0 +1,6 @@
1
+ Deface::Override.new(
2
+ virtual_path: 'spree/layouts/spree_application',
3
+ name: 'rejoiner_base',
4
+ insert_top: "[data-hook='body']",
5
+ partial: 'spree/shared/rejoiner_base.js'
6
+ )
@@ -0,0 +1,6 @@
1
+ Deface::Override.new(
2
+ virtual_path: 'spree/orders/edit',
3
+ name: 'rejoiner_cart_view',
4
+ insert_top: "[data-hook='cart_container']",
5
+ partial: 'spree/shared/rejoiner_cart.js'
6
+ )
@@ -0,0 +1,6 @@
1
+ Deface::Override.new(
2
+ virtual_path: 'spree/checkout/edit',
3
+ name: 'rejoiner_checkout_view',
4
+ insert_before: '#checkout',
5
+ partial: 'spree/shared/rejoiner_cart.js'
6
+ )
@@ -0,0 +1,6 @@
1
+ Deface::Override.new(
2
+ virtual_path: 'spree/orders/show',
3
+ name: 'rejoiner_conversion',
4
+ insert_before: "#order_summary",
5
+ partial: 'spree/shared/rejoiner_conversion.js'
6
+ )
@@ -0,0 +1,6 @@
1
+ Deface::Override.new(
2
+ virtual_path: 'spree/products/show',
3
+ name: 'rejoiner_product_view',
4
+ insert_before: "[data-hook='product_show']",
5
+ partial: 'spree/shared/rejoiner_product.js'
6
+ )
@@ -0,0 +1,42 @@
1
+ <% content_for :page_title do %>
2
+ <%= Spree.t(:rejoiner_settings) %>
3
+ <% end %>
4
+
5
+ <%= form_tag admin_rejoiner_settings_path, method: :put do %>
6
+ <div id="rejoiner-settings" data-hook>
7
+ <fieldset class="general no-border-top">
8
+ <div class="row">
9
+ <div class="col-xs-12 col-md-6">
10
+ <div class="panel panel-default">
11
+ <div class="panel-heading">
12
+ <h1 class="panel-title">
13
+ <%= Spree.t(:rejoiner_site_settings) %>
14
+ </h1>
15
+ </div>
16
+
17
+ <div class="panel-body">
18
+ <% @site_settings.each do |key|
19
+ type = Spree::Config.preference_type(key) %>
20
+ <div class="form-group">
21
+ <%= label_tag key do %>
22
+ <%= Spree.t(key) %>
23
+ <% end %>
24
+ <%= preference_field_tag(key, Spree::Config[key], type: type) %>
25
+ </div>
26
+ <% end %>
27
+ </div>
28
+ </div>
29
+ </div>
30
+ </div>
31
+ <div class="row">
32
+ <div class="col-xs-12 col-md-6">
33
+ <div class="form-actions" data-hook="buttons">
34
+ <%= button Spree.t('actions.update'), 'save' %>
35
+ <span class="or"><%= Spree.t(:or) %></span>
36
+ <%= button_link_to Spree.t('actions.cancel'), edit_admin_rejoiner_settings_url, icon: 'delete' %>
37
+ </div>
38
+ </div>
39
+ </div>
40
+ </fieldset>
41
+ </div>
42
+ <% end %>
@@ -0,0 +1,14 @@
1
+ <% if Spree::Rejoiner.active? %>
2
+ <script>
3
+ var _rejoiner = _rejoiner || [];
4
+ _rejoiner.push(['setAccount', '<%= Spree::Rejoiner.site_id %>']);
5
+ _rejoiner.push(['setDomain', '<%= Spree::Rejoiner.domain %>' || document.location.hostname]);
6
+ (function() {
7
+ var s = document.createElement('script');
8
+ s.async = true;
9
+ s.src = 'https://cdn.rejoiner.com/js/v4/rj2.lib.js';
10
+ var x = document.getElementsByTagName('script')[0];
11
+ x.parentNode.insertBefore(s, x);
12
+ })();
13
+ </script>
14
+ <% end %>
@@ -0,0 +1,18 @@
1
+ <script>
2
+ var _rejoiner = _rejoiner || [];
3
+
4
+ <% if @order.email.present? %>
5
+ _rejoiner.push(['setCustomerEmail', { email: '<%= @order.email %>'}])
6
+ <% end %>
7
+
8
+ <% if @order.line_items.empty? %>
9
+ _rejoiner.push(['clearCartData']);
10
+ <% else %>
11
+ _rejoiner.push(['setCartData', <%= get_rejoiner_cart_data(@order) %>]);
12
+
13
+ <% @order.line_items.each do |line_item| %>
14
+ <% product = line_item.variant.product %>
15
+ _rejoiner.push(['setCartItem', <%= get_rejoiner_product(product, image: product.images.first, item_qty: line_item.quantity) %>]);
16
+ <% end %>
17
+ <% end %>
18
+ </script>
@@ -0,0 +1,18 @@
1
+ <script>
2
+ var _rejoiner = _rejoiner || [];
3
+ var _rejoinerCartItems = [];
4
+
5
+ <% if @order.email.present? %>
6
+ _rejoiner.push(['setCustomerEmail', { email: '<%= @order.email %>'}])
7
+ <% end %>
8
+
9
+ <% @order.line_items.each do |line_item| %>
10
+ <% product = line_item.variant.product %>
11
+ _rejoinerCartItems.push(<%= get_rejoiner_product(product, image: product.images.first, item_qty: line_item.quantity) %>);
12
+ <% end %>
13
+
14
+ _rejoiner.push(['sendConversion', {
15
+ cart_data: <%= get_rejoiner_cart_data(@order) %>,
16
+ cart_items: _rejoinerCartItems,
17
+ }]);
18
+ </script>
@@ -0,0 +1,5 @@
1
+ <script>
2
+ var _rejoiner = _rejoiner || [];
3
+
4
+ _rejoiner.push(['trackProductView', <%= get_rejoiner_product(@product, image: @product.images.first) %>]);
5
+ </script>
data/bin/rails ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" from the root of your extension
3
+
4
+ ENGINE_ROOT = File.expand_path('../..', __FILE__)
5
+ ENGINE_PATH = File.expand_path('../../lib/spree_rejoiner/engine', __FILE__)
6
+
7
+ require 'rails/all'
8
+ require 'rails/engine/commands'
@@ -0,0 +1,8 @@
1
+ en:
2
+ spree:
3
+ rejoiner_settings: Rejoiner Configuration
4
+ rejoiner_site_settings: Site Settings
5
+ rejoiner_active: Active
6
+ rejoiner_site_id: Site ID
7
+ rejoiner_domain: Domain
8
+ rejoiner_api_key: API Key
data/config/routes.rb ADDED
@@ -0,0 +1,5 @@
1
+ Spree::Core::Engine.add_routes do
2
+ namespace :admin, path: Spree.admin_path do
3
+ resource :rejoiner_settings
4
+ end
5
+ end
@@ -0,0 +1,10 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gem 'rails-controller-testing'
6
+ gem 'spree_core', '~> 3.2.0'
7
+ gem 'spree_backend', '~> 3.2.0'
8
+ gem 'spree_auth_devise', '~> 3.4.0'
9
+
10
+ gemspec path: '../'
@@ -0,0 +1,10 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gem 'rails-controller-testing'
6
+ gem 'spree_core', '~> 3.5.0'
7
+ gem 'spree_backend', '~> 3.5.0'
8
+ gem 'spree_auth_devise', '~> 3.4.0'
9
+
10
+ gemspec path: '../'
@@ -0,0 +1,10 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gem 'rails-controller-testing'
6
+ gem 'spree_core', '~> 3.7.0'
7
+ gem 'spree_backend', '~> 3.7.0'
8
+ gem 'spree_auth_devise', '~> 3.5.0'
9
+
10
+ gemspec path: '../'
@@ -0,0 +1,10 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gem 'rails-controller-testing'
6
+ gem 'spree_core', github: 'spree/spree', branch: 'master'
7
+ gem 'spree_backend', github: 'spree/spree', branch: 'master'
8
+ gem 'spree_auth_devise', github: 'spree/spree_auth_devise', branch: 'master'
9
+
10
+ gemspec path: '../'
@@ -0,0 +1,28 @@
1
+ module SpreeRejoiner
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ class_option :auto_run_migrations, type: :boolean, default: false
5
+
6
+ def add_javascripts
7
+ append_file 'vendor/assets/javascripts/spree/backend/all.js', "//= require spree/backend/spree_rejoiner\n"
8
+ end
9
+
10
+ def add_stylesheets
11
+ inject_into_file 'vendor/assets/stylesheets/spree/backend/all.css', " *= require spree/backend/spree_rejoiner\n", before: %r{\*\/}, verbose: true
12
+ end
13
+
14
+ def add_migrations
15
+ run 'bundle exec rake railties:install:migrations FROM=spree_rejoiner'
16
+ end
17
+
18
+ def run_migrations
19
+ run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask('Would you like to run the migrations now? [Y/n]'))
20
+ if run_migrations
21
+ run 'bundle exec rake db:migrate'
22
+ else
23
+ puts 'Skipping rake db:migrate, don\'t forget to run it!'
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,4 @@
1
+ require 'spree_core'
2
+ require 'spree_extension'
3
+ require 'spree_rejoiner/engine'
4
+ require 'spree_rejoiner/version'
@@ -0,0 +1,20 @@
1
+ module SpreeRejoiner
2
+ class Engine < Rails::Engine
3
+ require 'spree/core'
4
+ isolate_namespace Spree
5
+ engine_name 'spree_rejoiner'
6
+
7
+ # use rspec for tests
8
+ config.generators do |g|
9
+ g.test_framework :rspec
10
+ end
11
+
12
+ def self.activate
13
+ Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')) do |c|
14
+ Rails.configuration.cache_classes ? require(c) : load(c)
15
+ end
16
+ end
17
+
18
+ config.to_prepare(&method(:activate).to_proc)
19
+ end
20
+ end
@@ -0,0 +1,2 @@
1
+ FactoryBot.define do
2
+ end
@@ -0,0 +1,17 @@
1
+ module SpreeRejoiner
2
+ module_function
3
+
4
+ # Returns the version of the currently loaded SpreeRejoiner as a
5
+ # <tt>Gem::Version</tt>.
6
+ def version
7
+ Gem::Version.new VERSION::STRING
8
+ end
9
+
10
+ module VERSION
11
+ MAJOR = 1
12
+ MINOR = 0
13
+ TINY = 1
14
+
15
+ STRING = [MAJOR, MINOR, TINY].compact.join('.')
16
+ end
17
+ end
@@ -0,0 +1,46 @@
1
+ lib = File.expand_path('lib', __dir__)
2
+ $LOAD_PATH.unshift lib unless $LOAD_PATH.include?(lib)
3
+
4
+ require 'spree_rejoiner/version'
5
+
6
+ Gem::Specification.new do |s|
7
+ s.platform = Gem::Platform::RUBY
8
+ s.name = 'spree_rejoiner'
9
+ s.version = SpreeRejoiner.version
10
+ s.summary = 'Adds Rejoiner tracking snippets'
11
+ s.description = 'Supports Rejoiner2'
12
+ s.required_ruby_version = '>= 2.3.3'
13
+
14
+ s.author = 'Sascha Bratton'
15
+ s.email = 'sascha@rejoiner.com'
16
+ s.homepage = 'https://github.com/rejoiner/spree-plugin'
17
+ s.license = 'BSD-3-Clause'
18
+
19
+ s.files = `git ls-files`.split("\n").reject { |f| f.match(/^spec/) && !f.match(/^spec\/fixtures/) }
20
+ s.require_path = 'lib'
21
+ s.requirements << 'none'
22
+
23
+ spree_version = '>= 3.5.0', '< 5.0'
24
+ s.add_dependency 'spree_core', spree_version
25
+ s.add_dependency 'spree_backend', spree_version
26
+ s.add_dependency 'spree_extension'
27
+ s.add_dependency 'public_suffix'
28
+
29
+ s.add_development_dependency 'appraisal'
30
+ s.add_development_dependency 'awesome_print'
31
+ s.add_development_dependency 'capybara'
32
+ s.add_development_dependency 'capybara-screenshot'
33
+ s.add_development_dependency 'chromedriver-helper'
34
+ s.add_development_dependency 'coffee-rails'
35
+ s.add_development_dependency 'database_cleaner'
36
+ s.add_development_dependency 'factory_bot', '~> 4.7'
37
+ s.add_development_dependency 'ffaker'
38
+ s.add_development_dependency 'mysql2'
39
+ s.add_development_dependency 'pg'
40
+ s.add_development_dependency 'pry'
41
+ s.add_development_dependency 'rspec-rails'
42
+ s.add_development_dependency 'sass-rails'
43
+ s.add_development_dependency 'selenium-webdriver'
44
+ s.add_development_dependency 'simplecov'
45
+ s.add_development_dependency 'sqlite3'
46
+ end
metadata ADDED
@@ -0,0 +1,393 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spree_rejoiner
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Sascha Bratton
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-03-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: spree_core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 3.5.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '5.0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 3.5.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '5.0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: spree_backend
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 3.5.0
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '5.0'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 3.5.0
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '5.0'
53
+ - !ruby/object:Gem::Dependency
54
+ name: spree_extension
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ type: :runtime
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ - !ruby/object:Gem::Dependency
68
+ name: public_suffix
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ type: :runtime
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ - !ruby/object:Gem::Dependency
82
+ name: appraisal
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ - !ruby/object:Gem::Dependency
96
+ name: awesome_print
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ - !ruby/object:Gem::Dependency
110
+ name: capybara
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ type: :development
117
+ prerelease: false
118
+ version_requirements: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ - !ruby/object:Gem::Dependency
124
+ name: capybara-screenshot
125
+ requirement: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ type: :development
131
+ prerelease: false
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ - !ruby/object:Gem::Dependency
138
+ name: chromedriver-helper
139
+ requirement: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ type: :development
145
+ prerelease: false
146
+ version_requirements: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
151
+ - !ruby/object:Gem::Dependency
152
+ name: coffee-rails
153
+ requirement: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ type: :development
159
+ prerelease: false
160
+ version_requirements: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ - !ruby/object:Gem::Dependency
166
+ name: database_cleaner
167
+ requirement: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ version: '0'
172
+ type: :development
173
+ prerelease: false
174
+ version_requirements: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ version: '0'
179
+ - !ruby/object:Gem::Dependency
180
+ name: factory_bot
181
+ requirement: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - "~>"
184
+ - !ruby/object:Gem::Version
185
+ version: '4.7'
186
+ type: :development
187
+ prerelease: false
188
+ version_requirements: !ruby/object:Gem::Requirement
189
+ requirements:
190
+ - - "~>"
191
+ - !ruby/object:Gem::Version
192
+ version: '4.7'
193
+ - !ruby/object:Gem::Dependency
194
+ name: ffaker
195
+ requirement: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - ">="
198
+ - !ruby/object:Gem::Version
199
+ version: '0'
200
+ type: :development
201
+ prerelease: false
202
+ version_requirements: !ruby/object:Gem::Requirement
203
+ requirements:
204
+ - - ">="
205
+ - !ruby/object:Gem::Version
206
+ version: '0'
207
+ - !ruby/object:Gem::Dependency
208
+ name: mysql2
209
+ requirement: !ruby/object:Gem::Requirement
210
+ requirements:
211
+ - - ">="
212
+ - !ruby/object:Gem::Version
213
+ version: '0'
214
+ type: :development
215
+ prerelease: false
216
+ version_requirements: !ruby/object:Gem::Requirement
217
+ requirements:
218
+ - - ">="
219
+ - !ruby/object:Gem::Version
220
+ version: '0'
221
+ - !ruby/object:Gem::Dependency
222
+ name: pg
223
+ requirement: !ruby/object:Gem::Requirement
224
+ requirements:
225
+ - - ">="
226
+ - !ruby/object:Gem::Version
227
+ version: '0'
228
+ type: :development
229
+ prerelease: false
230
+ version_requirements: !ruby/object:Gem::Requirement
231
+ requirements:
232
+ - - ">="
233
+ - !ruby/object:Gem::Version
234
+ version: '0'
235
+ - !ruby/object:Gem::Dependency
236
+ name: pry
237
+ requirement: !ruby/object:Gem::Requirement
238
+ requirements:
239
+ - - ">="
240
+ - !ruby/object:Gem::Version
241
+ version: '0'
242
+ type: :development
243
+ prerelease: false
244
+ version_requirements: !ruby/object:Gem::Requirement
245
+ requirements:
246
+ - - ">="
247
+ - !ruby/object:Gem::Version
248
+ version: '0'
249
+ - !ruby/object:Gem::Dependency
250
+ name: rspec-rails
251
+ requirement: !ruby/object:Gem::Requirement
252
+ requirements:
253
+ - - ">="
254
+ - !ruby/object:Gem::Version
255
+ version: '0'
256
+ type: :development
257
+ prerelease: false
258
+ version_requirements: !ruby/object:Gem::Requirement
259
+ requirements:
260
+ - - ">="
261
+ - !ruby/object:Gem::Version
262
+ version: '0'
263
+ - !ruby/object:Gem::Dependency
264
+ name: sass-rails
265
+ requirement: !ruby/object:Gem::Requirement
266
+ requirements:
267
+ - - ">="
268
+ - !ruby/object:Gem::Version
269
+ version: '0'
270
+ type: :development
271
+ prerelease: false
272
+ version_requirements: !ruby/object:Gem::Requirement
273
+ requirements:
274
+ - - ">="
275
+ - !ruby/object:Gem::Version
276
+ version: '0'
277
+ - !ruby/object:Gem::Dependency
278
+ name: selenium-webdriver
279
+ requirement: !ruby/object:Gem::Requirement
280
+ requirements:
281
+ - - ">="
282
+ - !ruby/object:Gem::Version
283
+ version: '0'
284
+ type: :development
285
+ prerelease: false
286
+ version_requirements: !ruby/object:Gem::Requirement
287
+ requirements:
288
+ - - ">="
289
+ - !ruby/object:Gem::Version
290
+ version: '0'
291
+ - !ruby/object:Gem::Dependency
292
+ name: simplecov
293
+ requirement: !ruby/object:Gem::Requirement
294
+ requirements:
295
+ - - ">="
296
+ - !ruby/object:Gem::Version
297
+ version: '0'
298
+ type: :development
299
+ prerelease: false
300
+ version_requirements: !ruby/object:Gem::Requirement
301
+ requirements:
302
+ - - ">="
303
+ - !ruby/object:Gem::Version
304
+ version: '0'
305
+ - !ruby/object:Gem::Dependency
306
+ name: sqlite3
307
+ requirement: !ruby/object:Gem::Requirement
308
+ requirements:
309
+ - - ">="
310
+ - !ruby/object:Gem::Version
311
+ version: '0'
312
+ type: :development
313
+ prerelease: false
314
+ version_requirements: !ruby/object:Gem::Requirement
315
+ requirements:
316
+ - - ">="
317
+ - !ruby/object:Gem::Version
318
+ version: '0'
319
+ description: Supports Rejoiner2
320
+ email: sascha@rejoiner.com
321
+ executables: []
322
+ extensions: []
323
+ extra_rdoc_files: []
324
+ files:
325
+ - ".gitignore"
326
+ - ".rspec"
327
+ - ".rubocop.yml"
328
+ - ".travis.yml"
329
+ - Appraisals
330
+ - Gemfile
331
+ - LICENSE
332
+ - README.md
333
+ - Rakefile
334
+ - app/assets/javascripts/spree/backend/spree_rejoiner.js
335
+ - app/assets/javascripts/spree/frontend/spree_rejoiner.js
336
+ - app/assets/stylesheets/spree/backend/spree_rejoiner.css
337
+ - app/assets/stylesheets/spree/frontend/spree_rejoiner.css
338
+ - app/controllers/spree/admin/rejoiner_settings_controller.rb
339
+ - app/controllers/spree/checkout_controller_decorator.rb
340
+ - app/controllers/spree/store_controller_decorator.rb
341
+ - app/helpers/spree/rejoiner_helper.rb
342
+ - app/models/spree/app_configuration_decorator.rb
343
+ - app/models/spree/rejoiner.rb
344
+ - app/overrides/rejoiner_admin_sidebar.rb
345
+ - app/overrides/rejoiner_base.rb
346
+ - app/overrides/rejoiner_cart_view.rb
347
+ - app/overrides/rejoiner_checkout_view.rb
348
+ - app/overrides/rejoiner_conversion.rb
349
+ - app/overrides/rejoiner_product_view.rb
350
+ - app/views/spree/admin/rejoiner_settings/edit.html.erb
351
+ - app/views/spree/shared/_rejoiner_base.js.erb
352
+ - app/views/spree/shared/_rejoiner_cart.js.erb
353
+ - app/views/spree/shared/_rejoiner_conversion.js.erb
354
+ - app/views/spree/shared/_rejoiner_product.js.erb
355
+ - bin/rails
356
+ - config/locales/en.yml
357
+ - config/routes.rb
358
+ - gemfiles/spree_3_2.gemfile
359
+ - gemfiles/spree_3_5.gemfile
360
+ - gemfiles/spree_3_7.gemfile
361
+ - gemfiles/spree_master.gemfile
362
+ - lib/generators/spree_rejoiner/install/install_generator.rb
363
+ - lib/spree_rejoiner.rb
364
+ - lib/spree_rejoiner/engine.rb
365
+ - lib/spree_rejoiner/factories.rb
366
+ - lib/spree_rejoiner/version.rb
367
+ - spree_rejoiner.gemspec
368
+ homepage: https://github.com/rejoiner/spree-plugin
369
+ licenses:
370
+ - BSD-3-Clause
371
+ metadata: {}
372
+ post_install_message:
373
+ rdoc_options: []
374
+ require_paths:
375
+ - lib
376
+ required_ruby_version: !ruby/object:Gem::Requirement
377
+ requirements:
378
+ - - ">="
379
+ - !ruby/object:Gem::Version
380
+ version: 2.3.3
381
+ required_rubygems_version: !ruby/object:Gem::Requirement
382
+ requirements:
383
+ - - ">="
384
+ - !ruby/object:Gem::Version
385
+ version: '0'
386
+ requirements:
387
+ - none
388
+ rubyforge_project:
389
+ rubygems_version: 2.7.8
390
+ signing_key:
391
+ specification_version: 4
392
+ summary: Adds Rejoiner tracking snippets
393
+ test_files: []