View Source Electric.Client.ShapeDefinition (Electric Client v0.2.5)

Struct for defining a shape.

iex> ShapeDefinition.new("items", where: "something = true")
{:ok, %ShapeDefinition{table: "items", where: "something = true"}}

Summary

Functions

Tests if two %ShapeDefinition{} instances are equal, ignoring the parser setting.

Create a ShapeDefinition for the given table_name.

Return a string representation of the shape's table, quoted for use in API URLs.

Types

@type option() ::
  {:where, nil | binary()}
  | {:columns, nil | [binary()]}
  | {:namespace, nil | binary()}
  | {:parser, {module(), [term()]}}
@type options() :: [option()]
@type t() :: %Electric.Client.ShapeDefinition{
  columns: [String.t(), ...] | nil,
  namespace: String.t() | nil,
  parser: {atom(), term()},
  table: String.t(),
  where: nil | String.t()
}

Functions

Link to this function

matches?(shape1, shape2)

View Source
@spec matches?(t(), t()) :: boolean()

Tests if two %ShapeDefinition{} instances are equal, ignoring the parser setting.

Example

iex> {:ok, shape1} = Electric.Client.ShapeDefinition.new("items")
iex> {:ok, shape2} = Electric.Client.ShapeDefinition.new("items")
iex> Electric.Client.ShapeDefinition.matches?(shape1, shape2)
true
iex> {:ok, shape3} = Electric.Client.ShapeDefinition.new("items", where: "something = 'here'")
iex> Electric.Client.ShapeDefinition.matches?(shape1, shape3)
false
Link to this function

new(table_name, opts \\ [])

View Source
@spec new(String.t(), options()) :: {:ok, t()} | {:error, term()}

Create a ShapeDefinition for the given table_name.

Options

  • :where - Filter the table according to the where clause. The default value is nil.

  • :columns - List of columns to include in the shape. Must include all primary keys. If nil this is equivalent to all columns (SELECT *) The default value is nil.

  • :namespace - The namespace the table belongs to. If nil then Postgres will use whatever schema is the default (usually public). The default value is nil.

  • :parser - A {module, args} tuple specifying the Electric.Client.ValueMapper implementation to use for mapping values from the sync stream into Elixir terms. The default value is {Electric.Client.ValueMapper, []}.

Link to this function

new!(table_name, opts \\ [])

View Source
@spec new!(String.t(), options()) :: t() | no_return()
Link to this function

url_table_name(shape_definition)

View Source
@spec url_table_name(t()) :: String.t()

Return a string representation of the shape's table, quoted for use in API URLs.

iex> ShapeDefinition.url_table_name(ShapeDefinition.new!("my_table"))
"my_table"

iex> ShapeDefinition.url_table_name(ShapeDefinition.new!("my_table", namespace: "my_app"))
"my_app.my_table"

iex> ShapeDefinition.url_table_name(ShapeDefinition.new!("my table", namespace: "my app"))
~s["my app"."my table"]