ahoy_matey 1.6.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE.md +7 -0
  3. data/CHANGELOG.md +22 -0
  4. data/CONTRIBUTING.md +40 -0
  5. data/LICENSE.txt +1 -1
  6. data/README.md +210 -489
  7. data/Rakefile +1 -0
  8. data/ahoy_matey.gemspec +6 -8
  9. data/app/controllers/ahoy/base_controller.rb +2 -6
  10. data/app/controllers/ahoy/events_controller.rb +7 -1
  11. data/app/controllers/ahoy/visits_controller.rb +7 -1
  12. data/app/jobs/ahoy/geocode_job.rb +10 -0
  13. data/app/jobs/ahoy/geocode_v2_job.rb +29 -0
  14. data/config/routes.rb +1 -1
  15. data/docs/Ahoy-2-Upgrade.md +147 -0
  16. data/docs/Data-Store-Examples.md +240 -0
  17. data/lib/ahoy.rb +30 -88
  18. data/lib/ahoy/base_store.rb +72 -0
  19. data/lib/ahoy/controller.rb +4 -10
  20. data/lib/ahoy/database_store.rb +72 -0
  21. data/lib/ahoy/engine.rb +5 -7
  22. data/lib/ahoy/model.rb +4 -26
  23. data/lib/ahoy/{properties.rb → query_methods.rb} +18 -4
  24. data/lib/ahoy/tracker.rb +60 -38
  25. data/lib/ahoy/version.rb +1 -1
  26. data/lib/ahoy/visit_properties.rb +65 -39
  27. data/lib/generators/ahoy/activerecord_generator.rb +58 -0
  28. data/lib/generators/ahoy/base_generator.rb +13 -0
  29. data/lib/generators/ahoy/install_generator.rb +44 -0
  30. data/lib/generators/ahoy/mongoid_generator.rb +20 -0
  31. data/lib/generators/ahoy/templates/active_record_event_model.rb +10 -0
  32. data/lib/generators/ahoy/{stores/templates/active_record_visits_migration.rb → templates/active_record_migration.rb} +19 -21
  33. data/lib/generators/ahoy/templates/active_record_visit_model.rb +6 -0
  34. data/lib/generators/ahoy/templates/base_store_initializer.rb +17 -0
  35. data/lib/generators/ahoy/templates/database_store_initializer.rb +5 -0
  36. data/lib/generators/ahoy/{stores/templates → templates}/mongoid_event_model.rb +4 -2
  37. data/lib/generators/ahoy/{stores/templates → templates}/mongoid_visit_model.rb +7 -3
  38. data/test/query_methods/mongoid_test.rb +23 -0
  39. data/test/{properties → query_methods}/mysql_json_test.rb +1 -1
  40. data/test/{properties → query_methods}/mysql_text_test.rb +1 -1
  41. data/test/{properties → query_methods}/postgresql_hstore_test.rb +1 -1
  42. data/test/{properties → query_methods}/postgresql_json_test.rb +1 -1
  43. data/test/{properties → query_methods}/postgresql_jsonb_test.rb +1 -1
  44. data/test/{properties → query_methods}/postgresql_text_test.rb +1 -1
  45. data/test/test_helper.rb +4 -3
  46. data/vendor/assets/javascripts/ahoy.js +551 -325
  47. metadata +67 -112
  48. data/lib/ahoy/deckhands/location_deckhand.rb +0 -49
  49. data/lib/ahoy/deckhands/request_deckhand.rb +0 -52
  50. data/lib/ahoy/deckhands/technology_deckhand.rb +0 -47
  51. data/lib/ahoy/deckhands/traffic_source_deckhand.rb +0 -22
  52. data/lib/ahoy/deckhands/utm_parameter_deckhand.rb +0 -23
  53. data/lib/ahoy/geocode_job.rb +0 -13
  54. data/lib/ahoy/logger_silencer.rb +0 -75
  55. data/lib/ahoy/stores/active_record_store.rb +0 -61
  56. data/lib/ahoy/stores/active_record_token_store.rb +0 -114
  57. data/lib/ahoy/stores/base_store.rb +0 -88
  58. data/lib/ahoy/stores/bunny_store.rb +0 -33
  59. data/lib/ahoy/stores/fluentd_store.rb +0 -17
  60. data/lib/ahoy/stores/kafka_store.rb +0 -42
  61. data/lib/ahoy/stores/kinesis_firehose_store.rb +0 -42
  62. data/lib/ahoy/stores/log_store.rb +0 -53
  63. data/lib/ahoy/stores/mongoid_store.rb +0 -63
  64. data/lib/ahoy/stores/nats_store.rb +0 -34
  65. data/lib/ahoy/stores/nsq_store.rb +0 -36
  66. data/lib/ahoy/subscribers/active_record.rb +0 -19
  67. data/lib/ahoy/throttle.rb +0 -17
  68. data/lib/generators/ahoy/stores/active_record_events_generator.rb +0 -59
  69. data/lib/generators/ahoy/stores/active_record_generator.rb +0 -16
  70. data/lib/generators/ahoy/stores/active_record_visits_generator.rb +0 -49
  71. data/lib/generators/ahoy/stores/bunny_generator.rb +0 -15
  72. data/lib/generators/ahoy/stores/custom_generator.rb +0 -15
  73. data/lib/generators/ahoy/stores/fluentd_generator.rb +0 -15
  74. data/lib/generators/ahoy/stores/kafka_generator.rb +0 -15
  75. data/lib/generators/ahoy/stores/kinesis_firehose_generator.rb +0 -15
  76. data/lib/generators/ahoy/stores/log_generator.rb +0 -15
  77. data/lib/generators/ahoy/stores/mongoid_events_generator.rb +0 -19
  78. data/lib/generators/ahoy/stores/mongoid_generator.rb +0 -14
  79. data/lib/generators/ahoy/stores/mongoid_visits_generator.rb +0 -27
  80. data/lib/generators/ahoy/stores/nats_generator.rb +0 -15
  81. data/lib/generators/ahoy/stores/nsq_generator.rb +0 -15
  82. data/lib/generators/ahoy/stores/templates/active_record_event_model.rb +0 -12
  83. data/lib/generators/ahoy/stores/templates/active_record_events_migration.rb +0 -20
  84. data/lib/generators/ahoy/stores/templates/active_record_initializer.rb +0 -3
  85. data/lib/generators/ahoy/stores/templates/active_record_visit_model.rb +0 -4
  86. data/lib/generators/ahoy/stores/templates/bunny_initializer.rb +0 -9
  87. data/lib/generators/ahoy/stores/templates/custom_initializer.rb +0 -10
  88. data/lib/generators/ahoy/stores/templates/fluentd_initializer.rb +0 -3
  89. data/lib/generators/ahoy/stores/templates/kafka_initializer.rb +0 -9
  90. data/lib/generators/ahoy/stores/templates/kinesis_firehose_initializer.rb +0 -17
  91. data/lib/generators/ahoy/stores/templates/log_initializer.rb +0 -3
  92. data/lib/generators/ahoy/stores/templates/mongoid_initializer.rb +0 -3
  93. data/lib/generators/ahoy/stores/templates/nats_initializer.rb +0 -9
  94. data/lib/generators/ahoy/stores/templates/nsq_initializer.rb +0 -9
  95. data/test/visit_properties_test.rb +0 -44
@@ -1,15 +0,0 @@
1
- require "rails/generators"
2
-
3
- module Ahoy
4
- module Stores
5
- module Generators
6
- class BunnyGenerator < Rails::Generators::Base
7
- source_root File.expand_path("../templates", __FILE__)
8
-
9
- def create_initializer
10
- template "bunny_initializer.rb", "config/initializers/ahoy.rb"
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- require "rails/generators"
2
-
3
- module Ahoy
4
- module Stores
5
- module Generators
6
- class CustomGenerator < Rails::Generators::Base
7
- source_root File.expand_path("../templates", __FILE__)
8
-
9
- def create_initializer
10
- template "custom_initializer.rb", "config/initializers/ahoy.rb"
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- require "rails/generators"
2
-
3
- module Ahoy
4
- module Stores
5
- module Generators
6
- class FluentdGenerator < Rails::Generators::Base
7
- source_root File.expand_path("../templates", __FILE__)
8
-
9
- def create_initializer
10
- template "fluentd_initializer.rb", "config/initializers/ahoy.rb"
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- require "rails/generators"
2
-
3
- module Ahoy
4
- module Stores
5
- module Generators
6
- class KafkaGenerator < Rails::Generators::Base
7
- source_root File.expand_path("../templates", __FILE__)
8
-
9
- def create_initializer
10
- template "kafka_initializer.rb", "config/initializers/ahoy.rb"
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- require "rails/generators"
2
-
3
- module Ahoy
4
- module Stores
5
- module Generators
6
- class KinesisFirehoseGenerator < Rails::Generators::Base
7
- source_root File.expand_path("../templates", __FILE__)
8
-
9
- def create_initializer
10
- template "kinesis_firehose_initializer.rb", "config/initializers/ahoy.rb"
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- require "rails/generators"
2
-
3
- module Ahoy
4
- module Stores
5
- module Generators
6
- class LogGenerator < Rails::Generators::Base
7
- source_root File.expand_path("../templates", __FILE__)
8
-
9
- def create_initializer
10
- template "log_initializer.rb", "config/initializers/ahoy.rb"
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,19 +0,0 @@
1
- require "rails/generators"
2
-
3
- module Ahoy
4
- module Stores
5
- module Generators
6
- class MongoidEventsGenerator < Rails::Generators::Base
7
- source_root File.expand_path("../templates", __FILE__)
8
-
9
- def generate_model
10
- template "mongoid_event_model.rb", "app/models/ahoy/event.rb"
11
- end
12
-
13
- def create_initializer
14
- template "mongoid_initializer.rb", "config/initializers/ahoy.rb"
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,14 +0,0 @@
1
- require "rails/generators"
2
-
3
- module Ahoy
4
- module Stores
5
- module Generators
6
- class MongoidGenerator < Rails::Generators::Base
7
- def boom
8
- invoke "ahoy:stores:mongoid_visits"
9
- invoke "ahoy:stores:mongoid_events"
10
- end
11
- end
12
- end
13
- end
14
- end
@@ -1,27 +0,0 @@
1
- require "rails/generators"
2
-
3
- module Ahoy
4
- module Stores
5
- module Generators
6
- class MongoidVisitsGenerator < Rails::Generators::Base
7
- source_root File.expand_path("../templates", __FILE__)
8
-
9
- def generate_model
10
- @visitor_id_type =
11
- if defined?(::BSON)
12
- "BSON::Binary"
13
- elsif defined?(::Moped::BSON)
14
- "Moped::BSON::Binary"
15
- else
16
- "String"
17
- end
18
- template "mongoid_visit_model.rb", "app/models/visit.rb"
19
- end
20
-
21
- def create_initializer
22
- template "mongoid_initializer.rb", "config/initializers/ahoy.rb"
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,15 +0,0 @@
1
- require "rails/generators"
2
-
3
- module Ahoy
4
- module Stores
5
- module Generators
6
- class NatsGenerator < Rails::Generators::Base
7
- source_root File.expand_path("../templates", __FILE__)
8
-
9
- def create_initializer
10
- template "nats_initializer.rb", "config/initializers/ahoy.rb"
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- require "rails/generators"
2
-
3
- module Ahoy
4
- module Stores
5
- module Generators
6
- class NsqGenerator < Rails::Generators::Base
7
- source_root File.expand_path("../templates", __FILE__)
8
-
9
- def create_initializer
10
- template "nsq_initializer.rb", "config/initializers/ahoy.rb"
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,12 +0,0 @@
1
- module Ahoy
2
- class Event < ActiveRecord::Base
3
- include Ahoy::Properties
4
-
5
- self.table_name = "ahoy_events"
6
-
7
- belongs_to :visit
8
- belongs_to :user<%= Rails::VERSION::MAJOR >= 5 ? ", optional: true" : nil %><% unless %w(postgresql postgresql-jsonb).include?(@database) %>
9
-
10
- serialize :properties, JSON<% end %>
11
- end
12
- end
@@ -1,20 +0,0 @@
1
- class <%= migration_class_name %> < ActiveRecord::Migration<%= migration_version %>
2
- def change
3
- create_table :ahoy_events do |t|
4
- t.integer :visit_id
5
-
6
- # user
7
- t.integer :user_id
8
- # add t.string :user_type if polymorphic
9
-
10
- t.string :name
11
- t.<% case @database when "postgresql" %>json<% when "postgresql-jsonb" %>jsonb<% else %>text<% end %> :properties
12
- t.timestamp :time
13
- end
14
-
15
- add_index :ahoy_events, [:visit_id, :name]
16
- add_index :ahoy_events, [:user_id, :name]
17
- add_index :ahoy_events, [:name, :time]
18
- <% if @database == "postgresql-jsonb" && ActiveRecord::VERSION::MAJOR >= 5 %>add_index :ahoy_events, 'properties jsonb_path_ops', using: 'gin'<% end %>
19
- end
20
- end
@@ -1,3 +0,0 @@
1
- class Ahoy::Store < Ahoy::Stores::ActiveRecordTokenStore
2
- # customize here
3
- end
@@ -1,4 +0,0 @@
1
- class Visit < ActiveRecord::Base
2
- has_many :ahoy_events, class_name: "Ahoy::Event"
3
- belongs_to :user<%= Rails::VERSION::MAJOR >= 5 ? ", optional: true" : nil %>
4
- end
@@ -1,9 +0,0 @@
1
- class Ahoy::Store < Ahoy::Stores::BunnyStore
2
- def visits_queue
3
- "ahoy_visits"
4
- end
5
-
6
- def events_queue
7
- "ahoy_events"
8
- end
9
- end
@@ -1,10 +0,0 @@
1
- class Ahoy::Store < Ahoy::Stores::BaseStore
2
- def track_visit(options)
3
- end
4
-
5
- def track_event(name, properties, options)
6
- end
7
-
8
- def current_visit
9
- end
10
- end
@@ -1,3 +0,0 @@
1
- class Ahoy::Store < Ahoy::Stores::FluentdStore
2
- # customize here
3
- end
@@ -1,9 +0,0 @@
1
- class Ahoy::Store < Ahoy::Stores::KafkaStore
2
- def visits_topic
3
- "ahoy_visits"
4
- end
5
-
6
- def events_topic
7
- "ahoy_events"
8
- end
9
- end
@@ -1,17 +0,0 @@
1
- class Ahoy::Store < Ahoy::Stores::KinesisFirehoseStore
2
- def credentials
3
- {
4
- access_key_id: ENV["AWS_ACCESS_KEY_ID"],
5
- secret_access_key: ENV["AWS_SECRET_ACCESS_KEY"],
6
- region: "us-east-1"
7
- }
8
- end
9
-
10
- def visits_stream
11
- "ahoy_visits"
12
- end
13
-
14
- def events_stream
15
- "ahoy_events"
16
- end
17
- end
@@ -1,3 +0,0 @@
1
- class Ahoy::Store < Ahoy::Stores::LogStore
2
- # customize here
3
- end
@@ -1,3 +0,0 @@
1
- class Ahoy::Store < Ahoy::Stores::MongoidStore
2
- # customize here
3
- end
@@ -1,9 +0,0 @@
1
- class Ahoy::Store < Ahoy::Stores::NatsStore
2
- def visits_subject
3
- "ahoy_visits"
4
- end
5
-
6
- def events_subject
7
- "ahoy_events"
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- class Ahoy::Store < Ahoy::Stores::NsqStore
2
- def visits_topic
3
- "ahoy_visits"
4
- end
5
-
6
- def events_topic
7
- "ahoy_events"
8
- end
9
- end
@@ -1,44 +0,0 @@
1
- require_relative "test_helper"
2
-
3
- class TestVisitProperties < Minitest::Test
4
- def setup
5
- request = MiniTest::Mock.new
6
- @visit_properties = Ahoy::VisitProperties.new(request)
7
- end
8
-
9
- def test_keys
10
- with_geocode(true) do
11
- assert_equal @visit_properties.keys, Ahoy::VisitProperties::KEYS
12
- end
13
- end
14
-
15
- def test_keys_when_geocode_disabled
16
- with_geocode(false) do
17
- keys = @visit_properties.keys
18
-
19
- refute keys.include?(:country)
20
- refute keys.include?(:region)
21
- refute keys.include?(:city)
22
- end
23
- end
24
-
25
- def test_keys_when_geocode_async
26
- with_geocode(:async) do
27
- keys = @visit_properties.keys
28
-
29
- refute keys.include?(:country)
30
- refute keys.include?(:region)
31
- refute keys.include?(:city)
32
- end
33
- end
34
-
35
- private
36
-
37
- def with_geocode(enabled)
38
- original = Ahoy.geocode
39
- Ahoy.geocode = enabled
40
- yield
41
- ensure
42
- Ahoy.geocode = original
43
- end
44
- end