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.
- checksums.yaml +4 -4
- data/.github/ISSUE_TEMPLATE.md +7 -0
- data/CHANGELOG.md +22 -0
- data/CONTRIBUTING.md +40 -0
- data/LICENSE.txt +1 -1
- data/README.md +210 -489
- data/Rakefile +1 -0
- data/ahoy_matey.gemspec +6 -8
- data/app/controllers/ahoy/base_controller.rb +2 -6
- data/app/controllers/ahoy/events_controller.rb +7 -1
- data/app/controllers/ahoy/visits_controller.rb +7 -1
- data/app/jobs/ahoy/geocode_job.rb +10 -0
- data/app/jobs/ahoy/geocode_v2_job.rb +29 -0
- data/config/routes.rb +1 -1
- data/docs/Ahoy-2-Upgrade.md +147 -0
- data/docs/Data-Store-Examples.md +240 -0
- data/lib/ahoy.rb +30 -88
- data/lib/ahoy/base_store.rb +72 -0
- data/lib/ahoy/controller.rb +4 -10
- data/lib/ahoy/database_store.rb +72 -0
- data/lib/ahoy/engine.rb +5 -7
- data/lib/ahoy/model.rb +4 -26
- data/lib/ahoy/{properties.rb → query_methods.rb} +18 -4
- data/lib/ahoy/tracker.rb +60 -38
- data/lib/ahoy/version.rb +1 -1
- data/lib/ahoy/visit_properties.rb +65 -39
- data/lib/generators/ahoy/activerecord_generator.rb +58 -0
- data/lib/generators/ahoy/base_generator.rb +13 -0
- data/lib/generators/ahoy/install_generator.rb +44 -0
- data/lib/generators/ahoy/mongoid_generator.rb +20 -0
- data/lib/generators/ahoy/templates/active_record_event_model.rb +10 -0
- data/lib/generators/ahoy/{stores/templates/active_record_visits_migration.rb → templates/active_record_migration.rb} +19 -21
- data/lib/generators/ahoy/templates/active_record_visit_model.rb +6 -0
- data/lib/generators/ahoy/templates/base_store_initializer.rb +17 -0
- data/lib/generators/ahoy/templates/database_store_initializer.rb +5 -0
- data/lib/generators/ahoy/{stores/templates → templates}/mongoid_event_model.rb +4 -2
- data/lib/generators/ahoy/{stores/templates → templates}/mongoid_visit_model.rb +7 -3
- data/test/query_methods/mongoid_test.rb +23 -0
- data/test/{properties → query_methods}/mysql_json_test.rb +1 -1
- data/test/{properties → query_methods}/mysql_text_test.rb +1 -1
- data/test/{properties → query_methods}/postgresql_hstore_test.rb +1 -1
- data/test/{properties → query_methods}/postgresql_json_test.rb +1 -1
- data/test/{properties → query_methods}/postgresql_jsonb_test.rb +1 -1
- data/test/{properties → query_methods}/postgresql_text_test.rb +1 -1
- data/test/test_helper.rb +4 -3
- data/vendor/assets/javascripts/ahoy.js +551 -325
- metadata +67 -112
- data/lib/ahoy/deckhands/location_deckhand.rb +0 -49
- data/lib/ahoy/deckhands/request_deckhand.rb +0 -52
- data/lib/ahoy/deckhands/technology_deckhand.rb +0 -47
- data/lib/ahoy/deckhands/traffic_source_deckhand.rb +0 -22
- data/lib/ahoy/deckhands/utm_parameter_deckhand.rb +0 -23
- data/lib/ahoy/geocode_job.rb +0 -13
- data/lib/ahoy/logger_silencer.rb +0 -75
- data/lib/ahoy/stores/active_record_store.rb +0 -61
- data/lib/ahoy/stores/active_record_token_store.rb +0 -114
- data/lib/ahoy/stores/base_store.rb +0 -88
- data/lib/ahoy/stores/bunny_store.rb +0 -33
- data/lib/ahoy/stores/fluentd_store.rb +0 -17
- data/lib/ahoy/stores/kafka_store.rb +0 -42
- data/lib/ahoy/stores/kinesis_firehose_store.rb +0 -42
- data/lib/ahoy/stores/log_store.rb +0 -53
- data/lib/ahoy/stores/mongoid_store.rb +0 -63
- data/lib/ahoy/stores/nats_store.rb +0 -34
- data/lib/ahoy/stores/nsq_store.rb +0 -36
- data/lib/ahoy/subscribers/active_record.rb +0 -19
- data/lib/ahoy/throttle.rb +0 -17
- data/lib/generators/ahoy/stores/active_record_events_generator.rb +0 -59
- data/lib/generators/ahoy/stores/active_record_generator.rb +0 -16
- data/lib/generators/ahoy/stores/active_record_visits_generator.rb +0 -49
- data/lib/generators/ahoy/stores/bunny_generator.rb +0 -15
- data/lib/generators/ahoy/stores/custom_generator.rb +0 -15
- data/lib/generators/ahoy/stores/fluentd_generator.rb +0 -15
- data/lib/generators/ahoy/stores/kafka_generator.rb +0 -15
- data/lib/generators/ahoy/stores/kinesis_firehose_generator.rb +0 -15
- data/lib/generators/ahoy/stores/log_generator.rb +0 -15
- data/lib/generators/ahoy/stores/mongoid_events_generator.rb +0 -19
- data/lib/generators/ahoy/stores/mongoid_generator.rb +0 -14
- data/lib/generators/ahoy/stores/mongoid_visits_generator.rb +0 -27
- data/lib/generators/ahoy/stores/nats_generator.rb +0 -15
- data/lib/generators/ahoy/stores/nsq_generator.rb +0 -15
- data/lib/generators/ahoy/stores/templates/active_record_event_model.rb +0 -12
- data/lib/generators/ahoy/stores/templates/active_record_events_migration.rb +0 -20
- data/lib/generators/ahoy/stores/templates/active_record_initializer.rb +0 -3
- data/lib/generators/ahoy/stores/templates/active_record_visit_model.rb +0 -4
- data/lib/generators/ahoy/stores/templates/bunny_initializer.rb +0 -9
- data/lib/generators/ahoy/stores/templates/custom_initializer.rb +0 -10
- data/lib/generators/ahoy/stores/templates/fluentd_initializer.rb +0 -3
- data/lib/generators/ahoy/stores/templates/kafka_initializer.rb +0 -9
- data/lib/generators/ahoy/stores/templates/kinesis_firehose_initializer.rb +0 -17
- data/lib/generators/ahoy/stores/templates/log_initializer.rb +0 -3
- data/lib/generators/ahoy/stores/templates/mongoid_initializer.rb +0 -3
- data/lib/generators/ahoy/stores/templates/nats_initializer.rb +0 -9
- data/lib/generators/ahoy/stores/templates/nsq_initializer.rb +0 -9
- 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,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,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,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
|