From 158210d630e63db1336d718dad951799ad7e5ab7 Mon Sep 17 00:00:00 2001 From: Carlo Gilmar Date: Fri, 19 Apr 2024 13:03:02 -0600 Subject: [PATCH 1/4] Adding first modules --- lib/d2.ex | 7 ++++++ lib/d2/backbone.ex | 53 +++++++++++++++++++++++++++++++++++++++ lib/module_unit.ex | 14 +++++++++++ test/module_unit_test.exs | 8 ++++++ 4 files changed, 82 insertions(+) create mode 100644 lib/d2.ex create mode 100644 lib/d2/backbone.ex create mode 100644 lib/module_unit.ex create mode 100644 test/module_unit_test.exs diff --git a/lib/d2.ex b/lib/d2.ex new file mode 100644 index 0000000..47f95a2 --- /dev/null +++ b/lib/d2.ex @@ -0,0 +1,7 @@ +defmodule ExPlain.D2 do + @moduledoc """ + Module to convert data into D2 diagrams + """ + + ### ExPlain Diagram I Module backbone diagram +end diff --git a/lib/d2/backbone.ex b/lib/d2/backbone.ex new file mode 100644 index 0000000..128af2d --- /dev/null +++ b/lib/d2/backbone.ex @@ -0,0 +1,53 @@ +defmodule ExPlain.D2.Backbone do + def create_diagram(%{ + name: module_name, + public_functions: public_functions, + private_functions: private_functions + }) do + classes = get_backbone_class() + header = get_header_title(module_name) + public_functions_boxes = get_public_functions_boxes(public_functions) + private_functions_boxes = get_private_functions_boxes(private_functions) + + classes <> header <> public_functions_boxes <> private_functions_boxes + end + + defp get_public_functions_boxes(public_functions) do + for fun <- public_functions, into: "", do: "#{fun}.class: public \n" + end + + defp get_private_functions_boxes(private_functions) do + for fun <- private_functions, into: "", do: "#{fun}.class: private\n" + end + + defp get_header_title(module_name) do + """ + explanation: |md + # #{module_name} + | + grid-columns: 3 + """ + end + + defp get_backbone_class do + """ + classes: { + public: { + style: { + stroke-width: 0 + fill: "#85b4ff" + shadow: true + border-radius: 5 + } + } + + private: { + style: { + fill: "#fff585" + stroke: "#F69E03" + } + } + } + """ + end +end diff --git a/lib/module_unit.ex b/lib/module_unit.ex new file mode 100644 index 0000000..f0dce21 --- /dev/null +++ b/lib/module_unit.ex @@ -0,0 +1,14 @@ +defmodule ExPlain.ModuleUnit do + @doc """ + Struct for module unit + """ + defstruct [:name, :public_functions, :private_functions] + + def new(name, public_functions \\ [], private_functions \\ []) do + %__MODULE__{ + name: name, + public_functions: public_functions, + private_functions: private_functions + } + end +end diff --git a/test/module_unit_test.exs b/test/module_unit_test.exs new file mode 100644 index 0000000..a4f89c0 --- /dev/null +++ b/test/module_unit_test.exs @@ -0,0 +1,8 @@ +defmodule ExPlainTest do + use ExUnit.Case + alias ExPlain.ModuleUnit + + test "create a module unit struct" do + assert %ModuleUnit{name: "MyModule"} = ModuleUnit.new("MyModule") + end +end From 9ea6f008741e172bc178ee4f478dc897144b9f48 Mon Sep 17 00:00:00 2001 From: Carlo Gilmar Date: Mon, 22 Apr 2024 23:17:54 -0600 Subject: [PATCH 2/4] Refactor --- lib/d2/backbone.ex | 5 ++++- lib/{ => d2}/d2.ex | 0 lib/{ => reader}/module_unit.ex | 3 ++- test/module_unit_test.exs | 4 ++-- 4 files changed, 8 insertions(+), 4 deletions(-) rename lib/{ => d2}/d2.ex (100%) rename lib/{ => reader}/module_unit.ex (81%) diff --git a/lib/d2/backbone.ex b/lib/d2/backbone.ex index 128af2d..cdd7a77 100644 --- a/lib/d2/backbone.ex +++ b/lib/d2/backbone.ex @@ -1,5 +1,8 @@ defmodule ExPlain.D2.Backbone do - def create_diagram(%{ + alias ExPlain.Reader.ModuleUnit + + @spec create_diagram(ModuleUnit.t()) :: String.t() + def create_diagram(%ModuleUnit{ name: module_name, public_functions: public_functions, private_functions: private_functions diff --git a/lib/d2.ex b/lib/d2/d2.ex similarity index 100% rename from lib/d2.ex rename to lib/d2/d2.ex diff --git a/lib/module_unit.ex b/lib/reader/module_unit.ex similarity index 81% rename from lib/module_unit.ex rename to lib/reader/module_unit.ex index f0dce21..69e507c 100644 --- a/lib/module_unit.ex +++ b/lib/reader/module_unit.ex @@ -1,7 +1,8 @@ -defmodule ExPlain.ModuleUnit do +defmodule ExPlain.Reader.ModuleUnit do @doc """ Struct for module unit """ + @type t() :: %__MODULE__{} defstruct [:name, :public_functions, :private_functions] def new(name, public_functions \\ [], private_functions \\ []) do diff --git a/test/module_unit_test.exs b/test/module_unit_test.exs index a4f89c0..784ad45 100644 --- a/test/module_unit_test.exs +++ b/test/module_unit_test.exs @@ -1,6 +1,6 @@ -defmodule ExPlainTest do +defmodule ExPlain.Reader.ModuleUnitTest do use ExUnit.Case - alias ExPlain.ModuleUnit + alias ExPlain.Reader.ModuleUnit test "create a module unit struct" do assert %ModuleUnit{name: "MyModule"} = ModuleUnit.new("MyModule") From 591d9c1f303bb8fb3bf267df5e3f3c0fbceeb9c0 Mon Sep 17 00:00:00 2001 From: Carlo Gilmar Date: Mon, 22 Apr 2024 23:36:15 -0600 Subject: [PATCH 3/4] Add docs --- lib/d2/backbone.ex | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/d2/backbone.ex b/lib/d2/backbone.ex index cdd7a77..19ea4fb 100644 --- a/lib/d2/backbone.ex +++ b/lib/d2/backbone.ex @@ -1,4 +1,7 @@ defmodule ExPlain.D2.Backbone do + @moduledoc """ + Module to create backbone diagram + """ alias ExPlain.Reader.ModuleUnit @spec create_diagram(ModuleUnit.t()) :: String.t() From f0c9df82affa8f751085707c0e7ad73f74e05ed2 Mon Sep 17 00:00:00 2001 From: Carlo Gilmar Date: Sun, 28 Apr 2024 13:44:20 -0600 Subject: [PATCH 4/4] Fix error --- lib/reader/module_unit.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/reader/module_unit.ex b/lib/reader/module_unit.ex index 69e507c..b8a6d1e 100644 --- a/lib/reader/module_unit.ex +++ b/lib/reader/module_unit.ex @@ -1,5 +1,5 @@ defmodule ExPlain.Reader.ModuleUnit do - @doc """ + @moduledoc """ Struct for module unit """ @type t() :: %__MODULE__{}