+ import Ecto.Query
+
+ defp query_context_ids(contexts) do
+ query = from o in Object,
+ where: fragment("(?)->>'id' = ANY(?)", o.data, ^contexts)
+
+ Repo.all(query)
+ end
+
+ defp collect_context_ids(activities) do
+ contexts = activities
+ |> Enum.map(fn(%{data: data}) ->
+ data["context"]
+ end)
+ |> Enum.filter(&(&1))
+ |> query_context_ids()
+ |> Enum.reduce(%{}, fn(%{data: %{"id" => ap_id}, id: id}, acc) ->
+ Map.put(acc, ap_id, id)
+ end)
+ end
+
+ defp get_context_id(%{data: %{"context" => nil}}), do: nil
+ defp get_context_id(%{data: %{"context" => context}}, options) do
+ cond do
+ id = options[:context_ids][context] -> id
+ true -> TwitterAPI.context_to_conversation_id(context)
+ end
+ end
+