# Gamco
This library aims to provide a wrapper around Google Analytics v4.
It offers some useful helpers to send data to GA.
## Installation
Add `gamco` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[
{:gamco, "~> 0.1.0"}
]
end
```
## Configuration
Provide a `TAG_ID` in your configuration file:
```elixir
# config/config.exs
config :my_app, MyAppWeb.Gamco,
tag_id: "G-XXXXXXXXX",
active: false
```
And activate it in your `config/production.exs`
```elixir
# config/prod.exs
config :my_app, MyAppWeb.Gamco, active: true
```
You can set up multiple `tag_id` in different environments if you need
it. Just add the `tag_id` in the proper config file.
## Usage
Add a `MyAppWeb.Gamco` module as the following example:
```elixir
# lib/my_app_web/gamco.ex
defmodule MyAppWeb.Gamco do
use Gamco, otp_app: :my_app
end
```
Then import the Gamco module inside your phoenix view or component
depending on what you are using. Example:
```elixir
# lib/my_app_web/views/layout_view.ex
defmodule MyAppWeb.LayoutView do
import MyAppWeb.Gamco
...
end
```
Usually you'll want to add your Google Analytics script
immediately after the `<head>` tag in your html template.
```elixir
# lib/my_app_web/templates/layout/root.html.heex
<!DOCTYPE html>
<html lang="en">
<head>
<%= ga_javascript_tags() %>
...
</head>
...
</html>
```
This will send the default `page_view` event every time the user
navigates to a different path in your application. You can pass
other dimensions if you want to collect extra data. Example:
```elixir
# lib/my_app_web/templates/layout/root.html.heex
<!DOCTYPE html>
<html lang="en">
<head>
<%= ga_javascript_tags(extra_data: "FooBar") %>
...
</head>
...
</html>
```
## Custom events
Also, you can send custom messages to Google Analytics per page
or when needed by using the `ga_tag` helper as the following example:
```elixir
# lib/my_app_web/templates/product/show.html.heex
<%= ga_tag("event", "product_view", product_id: @product.id) %>
```
## Secure data
There are sensitive information that you might not want to send
directly to Google Analytics to prevent some vulnerabilities.
You can achieve this by using the `ga_secure` helper which
generates a digest for the passed value:
```elixir
# lib/my_app_web/templates/product/show.html.heex
<%= ga_tag("event", "product_view",
user: ga_secure(@conn.assigns.current_user.id),
product_id: @product.id) %>
```
By default the generated value is a MD5 digest. You can configure
which secure module will be used in your config using `secure_module`
option as the following:
```elixir
# config/config.exs
config :my_app, MyAppWeb.Gamco,
tag_id: "G-XXXXXXXXX",
secure_module: MyAppWeb.Secure
```
Then create your own secure module:
```elixir
# lib/my_app_web/secure.ex
defmodule MyAppWeb.Secure do
def call(value) do
:crypto.hash(:sha , value)
|> Base.encode16()
|> String.downcase()
end
end
```
Documentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_doc)
and published on [HexDocs](https://hexdocs.pm). Once published, the docs can
be found at <https://hexdocs.pm/gamco>.