spree_analytics_trackers 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +21 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +29 -0
  5. data/Appraisals +17 -0
  6. data/Gemfile +7 -0
  7. data/LICENSE +26 -0
  8. data/README.md +73 -0
  9. data/Rakefile +21 -0
  10. data/app/controllers/spree/admin/trackers_controller.rb +6 -0
  11. data/app/controllers/spree/store_controller_decorator.rb +5 -0
  12. data/app/helpers/spree/trackers_helper.rb +23 -0
  13. data/app/models/spree/line_item_decorator.rb +6 -0
  14. data/app/models/spree/order_decorator.rb +7 -0
  15. data/app/models/spree/product_decorator.rb +11 -0
  16. data/app/models/spree/tracker.rb +25 -0
  17. data/app/models/spree/user_decorator.rb +5 -0
  18. data/app/overrides/add_analytics_to_admin_sidebar.rb +9 -0
  19. data/app/overrides/add_cart_viewed_to_orders_edit.rb +10 -0
  20. data/app/overrides/add_checkout_step_viewed_to_checkout_edit.rb +10 -0
  21. data/app/overrides/add_google_analytics_to_spree_application.rb +9 -0
  22. data/app/overrides/add_google_checkout_to_checkout_edit.rb +9 -0
  23. data/app/overrides/add_google_purchase_to_orders_show.rb +9 -0
  24. data/app/overrides/add_order_complete_to_orders_show.rb +10 -0
  25. data/app/overrides/add_product_added_to_orders_edit.rb +10 -0
  26. data/app/overrides/add_product_list_filtered_to_taxons_show.rb +10 -0
  27. data/app/overrides/add_product_list_viewed_to_products_list.rb +10 -0
  28. data/app/overrides/add_product_viewed_to_products_show.rb +10 -0
  29. data/app/overrides/add_products_searched_to_products_list.rb +10 -0
  30. data/app/overrides/add_segment_initializer_to_layout.rb +10 -0
  31. data/app/views/spree/admin/shared/_analytics_sidebar_menu.html.erb +5 -0
  32. data/app/views/spree/admin/trackers/_form.html.erb +36 -0
  33. data/app/views/spree/admin/trackers/edit.html.erb +13 -0
  34. data/app/views/spree/admin/trackers/index.html.erb +44 -0
  35. data/app/views/spree/admin/trackers/new.html.erb +13 -0
  36. data/app/views/spree/shared/_google_add_items.html.erb +13 -0
  37. data/app/views/spree/shared/_google_analytics.html.erb +18 -0
  38. data/app/views/spree/shared/_google_checkout.html.erb +14 -0
  39. data/app/views/spree/shared/_google_purchase.html.erb +19 -0
  40. data/app/views/spree/shared/trackers/segment/_cart_viewed.js.erb +22 -0
  41. data/app/views/spree/shared/trackers/segment/_checkout_step_viewed.js.erb +12 -0
  42. data/app/views/spree/shared/trackers/segment/_initializer.js.erb +8 -0
  43. data/app/views/spree/shared/trackers/segment/_order_complete.js.erb +48 -0
  44. data/app/views/spree/shared/trackers/segment/_product_added.js.erb +9 -0
  45. data/app/views/spree/shared/trackers/segment/_product_list_filtered.js.erb +32 -0
  46. data/app/views/spree/shared/trackers/segment/_product_list_viewed.js.erb +22 -0
  47. data/app/views/spree/shared/trackers/segment/_product_viewed.js.erb +6 -0
  48. data/app/views/spree/shared/trackers/segment/_products_searched.js.erb +12 -0
  49. data/bin/rails +7 -0
  50. data/config/locales/en.yml +20 -0
  51. data/config/routes.rb +5 -0
  52. data/db/migrate/20171013160337_create_spree_trackers.rb +20 -0
  53. data/gemfiles/.bundle/config +2 -0
  54. data/gemfiles/spree_3_5.gemfile +9 -0
  55. data/gemfiles/spree_3_7.gemfile +9 -0
  56. data/gemfiles/spree_master.gemfile +10 -0
  57. data/lib/generators/spree_analytics_trackers/install/install_generator.rb +20 -0
  58. data/lib/spree_analytics_trackers.rb +4 -0
  59. data/lib/spree_analytics_trackers/engine.rb +20 -0
  60. data/lib/spree_analytics_trackers/factories.rb +9 -0
  61. data/lib/spree_analytics_trackers/version.rb +17 -0
  62. data/spec/features/admin/configuration/analytics_tracker_spec.rb +50 -0
  63. data/spec/models/spree/tracker_spec.rb +17 -0
  64. data/spec/spec_helper.rb +93 -0
  65. data/spree_analytics_trackers.gemspec +44 -0
  66. metadata +75 -8
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
+ resources :trackers
4
+ end
5
+ end
@@ -0,0 +1,20 @@
1
+ class CreateSpreeTrackers < SpreeExtension::Migration[4.2]
2
+ def change
3
+ if table_exists?(:spree_trackers)
4
+ add_index :spree_trackers, :active unless index_exists?(:spree_trackers, :active)
5
+ remove_column :spree_trackers, :environment if column_exists?(:spree_trackers, :environment)
6
+ unless column_exists?(:spree_trackers, :engine)
7
+ add_column :spree_trackers, :kind, :integer, default: 0, null: false, index: true unless column_exists?(:spree_trackers, :kind)
8
+ rename_column :spree_trackers, :kind, :engine if column_exists?(:spree_trackers, :kind)
9
+ end
10
+ else
11
+ create_table :spree_trackers do |t|
12
+ t.string 'analytics_id'
13
+ t.boolean 'active', default: true, index: true
14
+ t.datetime 'created_at', null: false
15
+ t.datetime 'updated_at', null: false
16
+ t.integer 'engine', default: 0, null: false, index: true
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,2 @@
1
+ ---
2
+ BUNDLE_RETRY: "1"
@@ -0,0 +1,9 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "spree", "~> 3.5.0"
6
+ gem "spree_auth_devise", "~> 3.3.0"
7
+ gem "rails-controller-testing"
8
+
9
+ gemspec path: "../"
@@ -0,0 +1,9 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "spree", "~> 3.7.0"
6
+ gem "spree_auth_devise", "~> 3.5.0"
7
+ gem "rails-controller-testing"
8
+
9
+ gemspec path: "../"
@@ -0,0 +1,10 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "spree", github: "spree/spree", branch: "master"
6
+ gem "spree_auth_devise", github: "spree/spree_auth_devise", branch: "master"
7
+ gem "mysql2", "~> 0.5.1"
8
+ gem "rails-controller-testing"
9
+
10
+ gemspec path: "../"
@@ -0,0 +1,20 @@
1
+ module SpreeAnalyticsTrackers
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ class_option :auto_run_migrations, type: :boolean, default: false
5
+
6
+ def add_migrations
7
+ run 'bundle exec rake railties:install:migrations FROM=spree_analytics_trackers'
8
+ end
9
+
10
+ def run_migrations
11
+ run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask 'Would you like to run the migrations now? [Y/n]')
12
+ if run_migrations
13
+ run 'bundle exec rake db:migrate'
14
+ else
15
+ puts 'Skipping rake db:migrate, don\'t forget to run it!'
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,4 @@
1
+ require 'spree_core'
2
+ require 'spree_extension'
3
+ require 'spree_analytics_trackers/engine'
4
+ require 'spree_analytics_trackers/version'
@@ -0,0 +1,20 @@
1
+ module SpreeAnalyticsTrackers
2
+ class Engine < Rails::Engine
3
+ require 'spree/core'
4
+ isolate_namespace Spree
5
+ engine_name 'spree_analytics_trackers'
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,9 @@
1
+ unless FactoryBot.factories.registered?(:tracker)
2
+ FactoryBot.define do
3
+ factory :tracker, class: Spree::Tracker do
4
+ analytics_id { 'A100' }
5
+ active { true }
6
+ engine { :google_analytics }
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,17 @@
1
+ module SpreeAnalyticsTrackers
2
+ module_function
3
+
4
+ # Returns the version of the currently loaded SpreeAnalyticsTrackers 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,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Analytics Tracker', type: :feature do
4
+ stub_authorization!
5
+
6
+ context 'index' do
7
+ before(:each) do
8
+ create(:tracker)
9
+ create(:tracker, analytics_id: 'A200')
10
+ visit spree.admin_trackers_path
11
+ end
12
+
13
+ it 'should have the right content' do
14
+ expect(page).to have_content('Analytics Trackers')
15
+ end
16
+
17
+ it 'should have the right tabular values displayed' do
18
+ within_row(1) do
19
+ expect(column_text(1)).to eq('A100')
20
+ expect(column_text(2)).to eq('Google analytics')
21
+ expect(column_text(3)).to eq('Yes')
22
+ end
23
+
24
+ within_row(2) do
25
+ expect(column_text(1)).to eq('A200')
26
+ expect(column_text(2)).to eq('Google analytics')
27
+ expect(column_text(3)).to eq('Yes')
28
+ end
29
+ end
30
+ end
31
+
32
+ context 'create' do
33
+ before(:each) do
34
+ visit spree.admin_trackers_path
35
+ end
36
+
37
+ it 'should be able to create a new analytics tracker' do
38
+ click_link 'admin_new_tracker_link'
39
+ fill_in 'tracker_analytics_id', with: 'A100'
40
+ click_button 'Create'
41
+
42
+ expect(page).to have_content('successfully created!')
43
+ within_row(1) do
44
+ expect(column_text(1)).to eq('A100')
45
+ expect(column_text(2)).to eq('Google analytics')
46
+ expect(column_text(3)).to eq('Yes')
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Tracker, type: :model do
4
+ describe 'current' do
5
+ it 'returns the first active tracker' do
6
+ tracker = create(:tracker)
7
+ tracker.clear_cache
8
+ expect(Spree::Tracker.current).to eq(tracker)
9
+ end
10
+
11
+ it 'does not return an inactive tracker' do
12
+ tracker = create(:tracker, active: false)
13
+ tracker.clear_cache
14
+ expect(Spree::Tracker.current).to be_nil
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,93 @@
1
+ # Run Coverage report
2
+ require 'simplecov'
3
+ SimpleCov.start do
4
+ add_filter 'spec/dummy'
5
+ add_group 'Controllers', 'app/controllers'
6
+ add_group 'Helpers', 'app/helpers'
7
+ add_group 'Mailers', 'app/mailers'
8
+ add_group 'Models', 'app/models'
9
+ add_group 'Views', 'app/views'
10
+ add_group 'Libraries', 'lib'
11
+ end
12
+
13
+ # Configure Rails Environment
14
+ ENV['RAILS_ENV'] = 'test'
15
+
16
+ require File.expand_path('../dummy/config/environment.rb', __FILE__)
17
+
18
+ require 'rspec/rails'
19
+ require 'database_cleaner'
20
+ require 'ffaker'
21
+
22
+ # Requires supporting ruby files with custom matchers and macros, etc,
23
+ # in spec/support/ and its subdirectories.
24
+ Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each { |f| require f }
25
+
26
+ # Requires factories and other useful helpers defined in spree_core.
27
+ require 'spree/testing_support/authorization_helpers'
28
+ require 'spree/testing_support/capybara_ext'
29
+ require 'spree/testing_support/controller_requests'
30
+ require 'spree/testing_support/factories'
31
+ require 'spree/testing_support/url_helpers'
32
+
33
+ # Requires factories defined in lib/spree_analytics_trackers/factories.rb
34
+ require 'spree_analytics_trackers/factories'
35
+
36
+ RSpec.configure do |config|
37
+ config.include FactoryBot::Syntax::Methods
38
+
39
+ # Infer an example group's spec type from the file location.
40
+ config.infer_spec_type_from_file_location!
41
+
42
+ # == URL Helpers
43
+ #
44
+ # Allows access to Spree's routes in specs:
45
+ #
46
+ # visit spree.admin_path
47
+ # current_path.should eql(spree.products_path)
48
+ config.include Spree::TestingSupport::UrlHelpers
49
+
50
+ # == Requests support
51
+ #
52
+ # Adds convenient methods to request Spree's controllers
53
+ # spree_get :index
54
+ config.include Spree::TestingSupport::ControllerRequests, type: :controller
55
+
56
+ # == Mock Framework
57
+ #
58
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
59
+ #
60
+ # config.mock_with :mocha
61
+ # config.mock_with :flexmock
62
+ # config.mock_with :rr
63
+ config.mock_with :rspec
64
+ config.color = true
65
+
66
+ # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
67
+ config.fixture_path = "#{::Rails.root}/spec/fixtures"
68
+
69
+ # Capybara javascript drivers require transactional fixtures set to false, and we use DatabaseCleaner
70
+ # to cleanup after each test instead. Without transactional fixtures set to false the records created
71
+ # to setup a test will be unavailable to the browser, which runs under a separate server instance.
72
+ config.use_transactional_fixtures = false
73
+
74
+ # Ensure Suite is set to use transactions for speed.
75
+ config.before :suite do
76
+ DatabaseCleaner.strategy = :transaction
77
+ DatabaseCleaner.clean_with :truncation
78
+ end
79
+
80
+ # Before each spec check if it is a Javascript test and switch between using database transactions or not where necessary.
81
+ config.before :each do
82
+ DatabaseCleaner.strategy = RSpec.current_example.metadata[:js] ? :truncation : :transaction
83
+ DatabaseCleaner.start
84
+ end
85
+
86
+ # After each spec clean the database.
87
+ config.after :each do
88
+ DatabaseCleaner.clean
89
+ end
90
+
91
+ config.fail_fast = ENV['FAIL_FAST'] || false
92
+ config.order = "random"
93
+ end
@@ -0,0 +1,44 @@
1
+ lib = File.expand_path('../lib/', __FILE__)
2
+ $LOAD_PATH.unshift lib unless $LOAD_PATH.include?(lib)
3
+
4
+ require 'spree_analytics_trackers/version'
5
+
6
+ Gem::Specification.new do |s|
7
+ s.platform = Gem::Platform::RUBY
8
+ s.name = 'spree_analytics_trackers'
9
+ s.version = SpreeAnalyticsTrackers.version
10
+ s.summary = 'Adds analytics trackers functionality to Spree'
11
+ s.description = 'Supports Google Analytics '
12
+ s.required_ruby_version = '>= 2.2.7'
13
+
14
+ s.author = 'Spark Solutions'
15
+ s.email = 'we@sparksolutions.co'
16
+ s.homepage = 'https://github.com/spree-contrib/spree_analytics_trackers'
17
+ s.license = 'BSD-3-Clause'
18
+
19
+ s.files = `git ls-files`.split("\n")
20
+ s.test_files = `git ls-files -- spec/*`.split("\n")
21
+ s.require_path = 'lib'
22
+ s.requirements << 'none'
23
+
24
+ spree_version = '>= 3.1.0', '< 5.0'
25
+ s.add_dependency 'spree_core', spree_version
26
+ s.add_dependency 'spree_backend', spree_version
27
+ s.add_dependency 'spree_extension'
28
+
29
+ s.add_development_dependency 'appraisal'
30
+ s.add_development_dependency 'capybara'
31
+ s.add_development_dependency 'capybara-screenshot'
32
+ s.add_development_dependency 'chromedriver-helper'
33
+ s.add_development_dependency 'coffee-rails'
34
+ s.add_development_dependency 'database_cleaner'
35
+ s.add_development_dependency 'factory_bot', '~> 4.7'
36
+ s.add_development_dependency 'ffaker'
37
+ s.add_development_dependency 'mysql2'
38
+ s.add_development_dependency 'pg'
39
+ s.add_development_dependency 'rspec-rails'
40
+ s.add_development_dependency 'sass-rails'
41
+ s.add_development_dependency 'selenium-webdriver'
42
+ s.add_development_dependency 'simplecov'
43
+ s.add_development_dependency 'sqlite3', '~> 1.3.6'
44
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_analytics_trackers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Spark Solutions
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-07 00:00:00.000000000 Z
11
+ date: 2019-04-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spree_core
@@ -264,22 +264,86 @@ dependencies:
264
264
  name: sqlite3
265
265
  requirement: !ruby/object:Gem::Requirement
266
266
  requirements:
267
- - - ">="
267
+ - - "~>"
268
268
  - !ruby/object:Gem::Version
269
- version: '0'
269
+ version: 1.3.6
270
270
  type: :development
271
271
  prerelease: false
272
272
  version_requirements: !ruby/object:Gem::Requirement
273
273
  requirements:
274
- - - ">="
274
+ - - "~>"
275
275
  - !ruby/object:Gem::Version
276
- version: '0'
276
+ version: 1.3.6
277
277
  description: 'Supports Google Analytics '
278
278
  email: we@sparksolutions.co
279
279
  executables: []
280
280
  extensions: []
281
281
  extra_rdoc_files: []
282
- files: []
282
+ files:
283
+ - ".gitignore"
284
+ - ".rspec"
285
+ - ".travis.yml"
286
+ - Appraisals
287
+ - Gemfile
288
+ - LICENSE
289
+ - README.md
290
+ - Rakefile
291
+ - app/controllers/spree/admin/trackers_controller.rb
292
+ - app/controllers/spree/store_controller_decorator.rb
293
+ - app/helpers/spree/trackers_helper.rb
294
+ - app/models/spree/line_item_decorator.rb
295
+ - app/models/spree/order_decorator.rb
296
+ - app/models/spree/product_decorator.rb
297
+ - app/models/spree/tracker.rb
298
+ - app/models/spree/user_decorator.rb
299
+ - app/overrides/add_analytics_to_admin_sidebar.rb
300
+ - app/overrides/add_cart_viewed_to_orders_edit.rb
301
+ - app/overrides/add_checkout_step_viewed_to_checkout_edit.rb
302
+ - app/overrides/add_google_analytics_to_spree_application.rb
303
+ - app/overrides/add_google_checkout_to_checkout_edit.rb
304
+ - app/overrides/add_google_purchase_to_orders_show.rb
305
+ - app/overrides/add_order_complete_to_orders_show.rb
306
+ - app/overrides/add_product_added_to_orders_edit.rb
307
+ - app/overrides/add_product_list_filtered_to_taxons_show.rb
308
+ - app/overrides/add_product_list_viewed_to_products_list.rb
309
+ - app/overrides/add_product_viewed_to_products_show.rb
310
+ - app/overrides/add_products_searched_to_products_list.rb
311
+ - app/overrides/add_segment_initializer_to_layout.rb
312
+ - app/views/spree/admin/shared/_analytics_sidebar_menu.html.erb
313
+ - app/views/spree/admin/trackers/_form.html.erb
314
+ - app/views/spree/admin/trackers/edit.html.erb
315
+ - app/views/spree/admin/trackers/index.html.erb
316
+ - app/views/spree/admin/trackers/new.html.erb
317
+ - app/views/spree/shared/_google_add_items.html.erb
318
+ - app/views/spree/shared/_google_analytics.html.erb
319
+ - app/views/spree/shared/_google_checkout.html.erb
320
+ - app/views/spree/shared/_google_purchase.html.erb
321
+ - app/views/spree/shared/trackers/segment/_cart_viewed.js.erb
322
+ - app/views/spree/shared/trackers/segment/_checkout_step_viewed.js.erb
323
+ - app/views/spree/shared/trackers/segment/_initializer.js.erb
324
+ - app/views/spree/shared/trackers/segment/_order_complete.js.erb
325
+ - app/views/spree/shared/trackers/segment/_product_added.js.erb
326
+ - app/views/spree/shared/trackers/segment/_product_list_filtered.js.erb
327
+ - app/views/spree/shared/trackers/segment/_product_list_viewed.js.erb
328
+ - app/views/spree/shared/trackers/segment/_product_viewed.js.erb
329
+ - app/views/spree/shared/trackers/segment/_products_searched.js.erb
330
+ - bin/rails
331
+ - config/locales/en.yml
332
+ - config/routes.rb
333
+ - db/migrate/20171013160337_create_spree_trackers.rb
334
+ - gemfiles/.bundle/config
335
+ - gemfiles/spree_3_5.gemfile
336
+ - gemfiles/spree_3_7.gemfile
337
+ - gemfiles/spree_master.gemfile
338
+ - lib/generators/spree_analytics_trackers/install/install_generator.rb
339
+ - lib/spree_analytics_trackers.rb
340
+ - lib/spree_analytics_trackers/engine.rb
341
+ - lib/spree_analytics_trackers/factories.rb
342
+ - lib/spree_analytics_trackers/version.rb
343
+ - spec/features/admin/configuration/analytics_tracker_spec.rb
344
+ - spec/models/spree/tracker_spec.rb
345
+ - spec/spec_helper.rb
346
+ - spree_analytics_trackers.gemspec
283
347
  homepage: https://github.com/spree-contrib/spree_analytics_trackers
284
348
  licenses:
285
349
  - BSD-3-Clause
@@ -304,4 +368,7 @@ rubygems_version: 3.0.2
304
368
  signing_key:
305
369
  specification_version: 4
306
370
  summary: Adds analytics trackers functionality to Spree
307
- test_files: []
371
+ test_files:
372
+ - spec/features/admin/configuration/analytics_tracker_spec.rb
373
+ - spec/models/spree/tracker_spec.rb
374
+ - spec/spec_helper.rb