Current section
38 Versions
Jump to
Current section
38 Versions
Compare versions
9
files changed
+53
additions
-99
deletions
| @@ -13,9 +13,8 @@ | |
| 13 13 | <<"lib/exd/repo">>,<<"lib/exd/repo.ex">>,<<"lib/exd/repo/supervisor.ex">>, |
| 14 14 | <<"lib/exd/schema.ex">>,<<"lib/exd/sink">>,<<"lib/exd/sink.ex">>, |
| 15 15 | <<"lib/exd/sink/adapter">>,<<"lib/exd/sink/adapter.ex">>, |
| 16 | - <<"lib/exd/sink/adapter/logger.ex">>,<<"lib/exd/sink/adapter/sql.ex">>, |
| 17 | - <<"lib/exd/sink/adapter/test.ex">>,<<"lib/exd/source">>, |
| 18 | - <<"lib/exd/source.ex">>,<<"lib/exd/source/adapter">>, |
| 16 | + <<"lib/exd/sink/adapter/logger.ex">>,<<"lib/exd/sink/adapter/test.ex">>, |
| 17 | + <<"lib/exd/source">>,<<"lib/exd/source.ex">>,<<"lib/exd/source/adapter">>, |
| 19 18 | <<"lib/exd/source/adapter.ex">>,<<"lib/exd/source/adapter/crawler.ex">>, |
| 20 19 | <<"lib/exd/source/adapter/file.ex">>,<<"lib/exd/source/adapter/list.ex">>, |
| 21 20 | <<"lib/exd/store">>,<<"lib/exd/store.ex">>,<<"lib/exd/store/memory.ex">>, |
| @@ -24,7 +23,12 @@ | |
| 24 23 | {<<"links">>,[{<<"GitHub">>,<<"https://github.com/madshargreave/exd">>}]}. |
| 25 24 | {<<"name">>,<<"exd">>}. |
| 26 25 | {<<"requirements">>, |
| 27 | - [[{<<"app">>,<<"mustache">>}, |
| 26 | + [[{<<"app">>,<<"atomic_map">>}, |
| 27 | + {<<"name">>,<<"atomic_map">>}, |
| 28 | + {<<"optional">>,false}, |
| 29 | + {<<"repository">>,<<"hexpm">>}, |
| 30 | + {<<"requirement">>,<<"~> 0.8">>}], |
| 31 | + [{<<"app">>,<<"mustache">>}, |
| 28 32 | {<<"name">>,<<"mustache">>}, |
| 29 33 | {<<"optional">>,false}, |
| 30 34 | {<<"repository">>,<<"hexpm">>}, |
| @@ -44,4 +48,4 @@ | |
| 44 48 | {<<"optional">>,false}, |
| 45 49 | {<<"repository">>,<<"hexpm">>}, |
| 46 50 | {<<"requirement">>,<<"~> 0.20.0">>}]]}. |
| 47 | - {<<"version">>,<<"0.1.2">>}. |
| 51 | + {<<"version">>,<<"0.1.3">>}. |
| @@ -1,11 +1,17 @@ | |
| 1 1 | defimpl Exd.Parseable, for: Map do |
| 2 2 | alias Exd.Query |
| 3 3 | |
| 4 | + @plugins %{ |
| 5 | + "sql" => Exd.Sink.SQL |
| 6 | + } |
| 7 | + |
| 4 8 | def parse(map) do |
| 5 9 | query = |
| 6 10 | Query.new |
| 7 11 | |> parse_from(map) |
| 8 12 | |> parse_where(map) |
| 13 | + |> parse_select(map) |
| 14 | + |> parse_into(map) |
| 9 15 | {:ok, query} |
| 10 16 | end |
| 11 17 | |
| @@ -49,4 +55,28 @@ defimpl Exd.Parseable, for: Map do | |
| 49 55 | defp parse_relation("is"), do: := |
| 50 56 | defp parse_relation("is_not"), do: :<> |
| 51 57 | |
| 58 | + defp parse_select(query, %{ |
| 59 | + "select" => select |
| 60 | + }) do |
| 61 | + Query.select(query, select) |
| 62 | + end |
| 63 | + |
| 64 | + defp parse_into(query, %{ |
| 65 | + "into" => %{ |
| 66 | + "type" => type, |
| 67 | + "config" => config |
| 68 | + }, |
| 69 | + }) do |
| 70 | + module = parse_into_module(type) |
| 71 | + config = parse_into_config(config) |
| 72 | + Query.into(query, module, config) |
| 73 | + end |
| 74 | + defp parse_into(query, _), do: query |
| 75 | + defp parse_into_module(name), do: Map.fetch!(@plugins, name) |
| 76 | + defp parse_into_config(config) when is_map(config) do |
| 77 | + config |
| 78 | + |> AtomicMap.convert(%{safe: false}) |
| 79 | + |> Map.to_list |
| 80 | + end |
| 81 | + |
| 52 82 | end |
| @@ -15,6 +15,12 @@ defimpl Exd.Sourceable, for: List do | |
| 15 15 | def source(list, context) do |
| 16 16 | Flow.from_enumerable(list) |
| 17 17 | end |
| 18 | + # def into([first | _rest] = sinks, flow) when is_tuple(first) do |
| 19 | + # sinks |
| 20 | + # |> Enum.reduce(flow, fn sink, flow -> |
| 21 | + # Exd.Sourceable.into(sink, flow) |
| 22 | + # end) |
| 23 | + # end |
| 18 24 | end |
| 19 25 | |
| 20 26 | defimpl Exd.Sourceable, for: Tuple do |
| @@ -42,6 +42,7 @@ defmodule Exd.Query.Builder do | |
| 42 42 | """ |
| 43 43 | @spec into(Query.t, term, keyword) :: Query.t |
| 44 44 | def into(query, sink, opts \\ []) do |
| 45 | + # intos = [{sink, opts} | query.into] |
| 45 46 | %Query{query | into: {sink, opts}} |
| 46 47 | end |
| @@ -32,7 +32,7 @@ defmodule Exd.Sink do | |
| 32 32 | |
| 33 33 | @impl true |
| 34 34 | def handle_events(events, _from, {adapter, sink_state}) do |
| 35 | - adapter.handle_into(events, sink_state) |
| 35 | + {:ok, sink_state} = adapter.handle_into(events, sink_state) |
| 36 36 | {:noreply, [], {adapter, sink_state}} |
| 37 37 | end |
Loading more files…