README.md

# Rudder

Elixir package for interacting with RudderStack HTTP API

## Installation

If [available in Hex](https://hex.pm/docs/publish), the package can be installed
by adding `rudder` to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [
    {:rudder, "~> 0.1.0"}
  ]
end
```

## Create a client

```elixir
client = Rudder.Client.new(write_key: "abc123", data_plane_url: "https://example.com")
```

## Identify

```elixir
Rudder.identify(client, %Rudder.Identity{
  user_id: "123",
  context: %{ip: '10.81.20.10'},
  traits: %{email: user.email }
})
```

See [Docs](https://www.rudderstack.com/docs/api/http-api/#5-identify)

## Track

```elixir
Rudder.track(client, %Rudder.Event{
  user_id: "123",
  name: "Item Sold",
  properties: %{revenue: 9.95, shipping: 'Free'}
})
```

See [Docs](https://www.rudderstack.com/docs/api/http-api/#6-track)

## Page

```elixir
Rudder.page(client, %Rudder.Page{
  user_id: "123",
  name: "Page View",
  properties: %{title: "Home", path: "/"}
})
```

See [Docs](https://www.rudderstack.com/docs/api/http-api/#7-page)

## Screen

```elixir
Rudder.screen(client, %Rudder.Screen{
  user_id: "123",
  name: "Screen View",
  properties: %{prop1: "5"}
})
```

See [Docs](https://www.rudderstack.com/docs/api/http-api/#8-screen)

## Group

```elixir
Rudder.group(client, %Rudder.group{
  user_id: "123",
  group_id: "group-a",
  traits: %{
    name: "Company",
    industry: "Industry",
    employees: 123
  },
  context: %{
    ip: "14.5.67.21"
  }
})
```

See [Docs](https://www.rudderstack.com/docs/api/http-api/#9-group)

## Alias

```elixir
Rudder.alias(client, %Rudder.Alias{
  user_id: "123",
  previous_id: "456",
  context: %{
    traits: %{
      trait1: "new-val"
    },
    ip: "14.5.67.21"
  }
})

```

See [Docs](https://www.rudderstack.com/docs/api/http-api/#10-alias)

## Merge

```elixir
Rudder.merge(client, %Rudder.Merge{
  user_id: "123",
  merge_properties: [
    %{type: "email", value: "someone@example.com"},
    %{type: "mobile", value: "+15555552263"}
})
```

See [Docs](https://www.rudderstack.com/docs/api/http-api/#11-merge)

## Batch

```elixir
Rudder.batch(client, %Rudder.Batch{
  items: [
    %Rudder.Identity{
      user_id: "123",
      context: %{ip: '10.81.20.10'},
      traits: %{email: user.email }
    },
    %Rudder.Page{
      user_id: "123",
      name: "Page View",
      properties: %{title: "Home", path: "/"}
    }
  ]
)
```

See [Docs](https://www.rudderstack.com/docs/api/http-api/#12-batch)

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/rudder>.