aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorkballou <kballou@devnulllabs.io>2016-03-22 11:37:34 -0600
committerkballou <kballou@devnulllabs.io>2016-04-27 15:33:05 -0600
commit4ca1b6dbdd1c58155faddde18908e6b09e80c757 (patch)
treec6690f622cd36941a3b20689dc2b5440a1766bff /lib
downloadtoglx-4ca1b6dbdd1c58155faddde18908e6b09e80c757.tar.gz
toglx-4ca1b6dbdd1c58155faddde18908e6b09e80c757.tar.xz
toglx: toggl cli client - initial commitv0.0.1
Diffstat (limited to 'lib')
-rw-r--r--lib/toglx.ex50
-rw-r--r--lib/toglx/escript.ex18
-rw-r--r--lib/toglx/supervisor.ex15
3 files changed, 83 insertions, 0 deletions
diff --git a/lib/toglx.ex b/lib/toglx.ex
new file mode 100644
index 0000000..454233b
--- /dev/null
+++ b/lib/toglx.ex
@@ -0,0 +1,50 @@
+defmodule Toglx do
+ use Application
+
+ @config_file Application.get_env(:toglx, :config_file)
+
+ def start(_, _) do
+ Toglx.Supervisor.start_link
+ end
+
+ def submit_start_event(nil), do: {:error, :badarg}
+ def submit_start_event(task) do
+ submit_stop_event
+
+ create_togglex_client
+ |> Togglex.Api.TimeEntries.start(%{description: task})
+ end
+
+ def submit_stop_event do
+ case current do
+ %{data: nil} -> :ok
+ %{data: %{id: time_entry_id}} ->
+ create_togglex_client
+ |> Togglex.Api.TimeEntries.stop(time_entry_id)
+ end
+ end
+
+ def current do
+ create_togglex_client
+ |> Togglex.Api.TimeEntries.current
+ end
+
+ def list do
+ create_togglex_client
+ |> Togglex.Api.TimeEntries.list
+ end
+
+ defp create_togglex_client do
+ Togglex.Client.new(%{access_token: get_auth_token!}, :api)
+ end
+
+ defp get_auth_token! do
+ case ConfigParser.parse_file(Path.join(System.user_home!, @config_file)) do
+ {:ok, parse_results} ->
+ ConfigParser.get(parse_results, "toglx", "access_token")
+ {:error, _} = error ->
+ raise(error)
+ end
+ end
+
+end
diff --git a/lib/toglx/escript.ex b/lib/toglx/escript.ex
new file mode 100644
index 0000000..5ccc40c
--- /dev/null
+++ b/lib/toglx/escript.ex
@@ -0,0 +1,18 @@
+defmodule Toglx.Escript do
+ use ArgumentParser.Builder.Escript, add_help: false
+ @arg [:cmd, required: true, action: :store]
+ @arg [:task, action: {:store, :+}]
+
+ def run(%{cmd: "start", task: task}) do
+ task
+ |> Enum.join(" ")
+ |> Toglx.submit_start_event
+ |> IO.inspect
+ end
+
+ def run(%{cmd: "stop"}) do
+ Toglx.submit_stop_event
+ |> IO.inspect
+ end
+
+end
diff --git a/lib/toglx/supervisor.ex b/lib/toglx/supervisor.ex
new file mode 100644
index 0000000..74091a1
--- /dev/null
+++ b/lib/toglx/supervisor.ex
@@ -0,0 +1,15 @@
+defmodule Toglx.Supervisor do
+ use Supervisor
+
+ def start_link do
+ Supervisor.start_link(__MODULE__, [], name: __MODULE__)
+ end
+
+ def init(_) do
+ children = [
+ ]
+
+ opts = [strategy: :one_for_one]
+ supervise(children, opts)
+ end
+end