From 5f3066ddc613b445fa19e1a05569a56a4f7c307e Mon Sep 17 00:00:00 2001 From: Conrad Taylor Date: Tue, 26 Apr 2022 14:07:49 -0700 Subject: [PATCH 1/4] Fix Credo configuration. (#121) --- config/config.exs | 16 ++++++++-------- mix.exs | 5 ++--- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/config/config.exs b/config/config.exs index 961cf22..ba24f7e 100644 --- a/config/config.exs +++ b/config/config.exs @@ -49,14 +49,14 @@ config :flix, Flix.Mailer, api_key: System.get_env("SENDGRID_API_KEY") # Configure mix_test_watch -# if Mix.env == :dev do -# config :mix_test_watch, -# clear: true, -# tasks: [ -# "test", -# "credo", -# ] -# end +if Mix.env == :dev do + config :mix_test_watch, + clear: true, + tasks: [ + "test", + "credo" + ] +end # Configure Absinthe SDL/JSON code generation. config :absinthe, diff --git a/mix.exs b/mix.exs index 3ea9c9b..45f117b 100644 --- a/mix.exs +++ b/mix.exs @@ -63,9 +63,8 @@ defmodule Flix.MixProject do {:ex_parameterize, "~> 1.0"}, {:bamboo, "~> 2.1.0"}, {:bamboo_phoenix, "~> 1.0"}, - {:credo, "~> 1.5", only: [:dev, :test], runtime: false} - # , - # {:mix_test_watch, "~> 1.1"} + {:credo, "~> 1.6.4", only: [:dev, :test], runtime: false}, + {:mix_test_watch, "~> 1.1.0", only: [:dev, :test], runtime: false} ] end From d86b21d6f47baf342a1acae5dcf3c4811ed5a10e Mon Sep 17 00:00:00 2001 From: Conrad Taylor Date: Tue, 26 Apr 2022 14:13:27 -0700 Subject: [PATCH 2/4] Add missing credo configuration file. (#122) --- .credo.exs | 210 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 210 insertions(+) create mode 100644 .credo.exs diff --git a/.credo.exs b/.credo.exs new file mode 100644 index 0000000..9965c2f --- /dev/null +++ b/.credo.exs @@ -0,0 +1,210 @@ +# This file contains the configuration for Credo and you are probably reading +# this after creating it with `mix credo.gen.config`. +# +# If you find anything wrong or unclear in this file, please report an +# issue on GitHub: https://github.com/rrrene/credo/issues +# +%{ + # + # You can have as many configs as you like in the `configs:` field. + configs: [ + %{ + # + # Run any config using `mix credo -C `. If no config name is given + # "default" is used. + # + name: "default", + # + # These are the files included in the analysis: + files: %{ + # + # You can give explicit globs or simply directories. + # In the latter case `**/*.{ex,exs}` will be used. + # + included: [ + "lib/", + "src/", + "test/", + "web/", + "apps/*/lib/", + "apps/*/src/", + "apps/*/test/", + "apps/*/web/" + ], + excluded: [~r"/_build/", ~r"/deps/", ~r"/node_modules/"] + }, + # + # Load and configure plugins here: + # + plugins: [], + # + # If you create your own checks, you must specify the source files for + # them here, so they can be loaded by Credo before running the analysis. + # + requires: [], + # + # If you want to enforce a style guide and need a more traditional linting + # experience, you can change `strict` to `true` below: + # + strict: false, + # + # To modify the timeout for parsing files, change this value: + # + parse_timeout: 5000, + # + # If you want to use uncolored output by default, you can change `color` + # to `false` below: + # + color: true, + # + # You can customize the parameters of any check by adding a second element + # to the tuple. + # + # To disable a check put `false` as second element: + # + # {Credo.Check.Design.DuplicatedCode, false} + # + checks: %{ + enabled: [ + # + ## Consistency Checks + # + {Credo.Check.Consistency.ExceptionNames, []}, + {Credo.Check.Consistency.LineEndings, []}, + {Credo.Check.Consistency.ParameterPatternMatching, []}, + {Credo.Check.Consistency.SpaceAroundOperators, []}, + {Credo.Check.Consistency.SpaceInParentheses, []}, + {Credo.Check.Consistency.TabsOrSpaces, []}, + + # + ## Design Checks + # + # You can customize the priority of any check + # Priority values are: `low, normal, high, higher` + # + {Credo.Check.Design.AliasUsage, + [priority: :low, if_nested_deeper_than: 2, if_called_more_often_than: 0]}, + # You can also customize the exit_status of each check. + # If you don't want TODO comments to cause `mix credo` to fail, just + # set this value to 0 (zero). + # + {Credo.Check.Design.TagTODO, [exit_status: 2]}, + {Credo.Check.Design.TagFIXME, []}, + + # + ## Readability Checks + # + {Credo.Check.Readability.AliasOrder, []}, + {Credo.Check.Readability.FunctionNames, []}, + {Credo.Check.Readability.LargeNumbers, []}, + {Credo.Check.Readability.MaxLineLength, [priority: :low, max_length: 120]}, + {Credo.Check.Readability.ModuleAttributeNames, []}, + {Credo.Check.Readability.ModuleDoc, []}, + {Credo.Check.Readability.ModuleNames, []}, + {Credo.Check.Readability.ParenthesesInCondition, []}, + {Credo.Check.Readability.ParenthesesOnZeroArityDefs, []}, + {Credo.Check.Readability.PipeIntoAnonymousFunctions, []}, + {Credo.Check.Readability.PredicateFunctionNames, []}, + {Credo.Check.Readability.PreferImplicitTry, []}, + {Credo.Check.Readability.RedundantBlankLines, []}, + {Credo.Check.Readability.Semicolons, []}, + {Credo.Check.Readability.SpaceAfterCommas, []}, + {Credo.Check.Readability.StringSigils, []}, + {Credo.Check.Readability.TrailingBlankLine, []}, + {Credo.Check.Readability.TrailingWhiteSpace, []}, + {Credo.Check.Readability.UnnecessaryAliasExpansion, []}, + {Credo.Check.Readability.VariableNames, []}, + {Credo.Check.Readability.WithSingleClause, []}, + + # + ## Refactoring Opportunities + # + {Credo.Check.Refactor.Apply, []}, + {Credo.Check.Refactor.CondStatements, []}, + {Credo.Check.Refactor.CyclomaticComplexity, []}, + {Credo.Check.Refactor.FunctionArity, []}, + {Credo.Check.Refactor.LongQuoteBlocks, []}, + {Credo.Check.Refactor.MatchInCondition, []}, + {Credo.Check.Refactor.MapJoin, []}, + {Credo.Check.Refactor.NegatedConditionsInUnless, []}, + {Credo.Check.Refactor.NegatedConditionsWithElse, []}, + {Credo.Check.Refactor.Nesting, []}, + {Credo.Check.Refactor.UnlessWithElse, []}, + {Credo.Check.Refactor.WithClauses, []}, + {Credo.Check.Refactor.FilterFilter, []}, + {Credo.Check.Refactor.RejectReject, []}, + {Credo.Check.Refactor.RedundantWithClauseResult, []}, + + # + ## Warnings + # + {Credo.Check.Warning.ApplicationConfigInModuleAttribute, []}, + {Credo.Check.Warning.BoolOperationOnSameValues, []}, + {Credo.Check.Warning.ExpensiveEmptyEnumCheck, []}, + {Credo.Check.Warning.IExPry, []}, + {Credo.Check.Warning.IoInspect, []}, + {Credo.Check.Warning.OperationOnSameValues, []}, + {Credo.Check.Warning.OperationWithConstantResult, []}, + {Credo.Check.Warning.RaiseInsideRescue, []}, + {Credo.Check.Warning.SpecWithStruct, []}, + {Credo.Check.Warning.WrongTestFileExtension, []}, + {Credo.Check.Warning.UnusedEnumOperation, []}, + {Credo.Check.Warning.UnusedFileOperation, []}, + {Credo.Check.Warning.UnusedKeywordOperation, []}, + {Credo.Check.Warning.UnusedListOperation, []}, + {Credo.Check.Warning.UnusedPathOperation, []}, + {Credo.Check.Warning.UnusedRegexOperation, []}, + {Credo.Check.Warning.UnusedStringOperation, []}, + {Credo.Check.Warning.UnusedTupleOperation, []}, + {Credo.Check.Warning.UnsafeExec, []} + ], + disabled: [ + # + # Checks scheduled for next check update (opt-in for now, just replace `false` with `[]`) + + # + # Controversial and experimental checks (opt-in, just move the check to `:enabled` + # and be sure to use `mix credo --strict` to see low priority checks) + # + {Credo.Check.Consistency.MultiAliasImportRequireUse, []}, + {Credo.Check.Consistency.UnusedVariableNames, []}, + {Credo.Check.Design.DuplicatedCode, []}, + {Credo.Check.Design.SkipTestWithoutComment, []}, + {Credo.Check.Readability.AliasAs, []}, + {Credo.Check.Readability.BlockPipe, []}, + {Credo.Check.Readability.ImplTrue, []}, + {Credo.Check.Readability.MultiAlias, []}, + {Credo.Check.Readability.NestedFunctionCalls, []}, + {Credo.Check.Readability.SeparateAliasRequire, []}, + {Credo.Check.Readability.SingleFunctionToBlockPipe, []}, + {Credo.Check.Readability.SinglePipe, []}, + {Credo.Check.Readability.Specs, []}, + {Credo.Check.Readability.StrictModuleLayout, []}, + {Credo.Check.Readability.WithCustomTaggedTuple, []}, + {Credo.Check.Refactor.ABCSize, []}, + {Credo.Check.Refactor.AppendSingleItem, []}, + {Credo.Check.Refactor.DoubleBooleanNegation, []}, + {Credo.Check.Refactor.FilterReject, []}, + {Credo.Check.Refactor.IoPuts, []}, + {Credo.Check.Refactor.MapMap, []}, + {Credo.Check.Refactor.ModuleDependencies, []}, + {Credo.Check.Refactor.NegatedIsNil, []}, + {Credo.Check.Refactor.PipeChainStart, []}, + {Credo.Check.Refactor.RejectFilter, []}, + {Credo.Check.Refactor.VariableRebinding, []}, + {Credo.Check.Warning.LazyLogging, []}, + {Credo.Check.Warning.LeakyEnvironment, []}, + {Credo.Check.Warning.MapGetUnsafePass, []}, + {Credo.Check.Warning.MixEnv, []}, + {Credo.Check.Warning.UnsafeToAtom, []} + + # {Credo.Check.Refactor.MapInto, []}, + + # + # Custom checks can be created using `mix credo.gen.check`. + # + ] + } + } + ] +} From da17555e0fd2df0b15b17424cb0e374def8ba0f6 Mon Sep 17 00:00:00 2001 From: Conrad Taylor Date: Tue, 26 Apr 2022 14:25:59 -0700 Subject: [PATCH 3/4] Fix Ecto reset. (#123) --- lib/flix/catalogs.ex | 4 ++-- lib/flix_web/controllers/movie_controller.ex | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/flix/catalogs.ex b/lib/flix/catalogs.ex index 56def3e..50aeb18 100644 --- a/lib/flix/catalogs.ex +++ b/lib/flix/catalogs.ex @@ -72,7 +72,7 @@ defmodule Flix.Catalogs do """ def create_movie(attrs \\ %{}) do Ecto.Multi.new() - |> Ecto.Multi.insert(:movie_info, Movie.changeset(%Movie{}, attrs)) + |> Ecto.Multi.insert(:movie, Movie.changeset(%Movie{}, attrs)) |> Ecto.Multi.update(:movie_poster, &Movie.poster_changeset(&1.movie, attrs)) |> Repo.transaction() end @@ -95,7 +95,7 @@ defmodule Flix.Catalogs do # |> Repo.insert!() Ecto.Multi.new() - |> Ecto.Multi.insert(:movie_info, Movie.changeset(%Movie{}, attrs)) + |> Ecto.Multi.insert(:movie, Movie.changeset(%Movie{}, attrs)) |> Ecto.Multi.update(:movie_poster, &Movie.poster_changeset(&1.movie, attrs)) |> Repo.transaction() end diff --git a/lib/flix_web/controllers/movie_controller.ex b/lib/flix_web/controllers/movie_controller.ex index bbe6682..e9fcd2a 100644 --- a/lib/flix_web/controllers/movie_controller.ex +++ b/lib/flix_web/controllers/movie_controller.ex @@ -31,12 +31,12 @@ defmodule FlixWeb.MovieController do def create(conn, %{"movie" => movie_params}) do case Catalogs.create_movie(movie_params) do - {:ok, %{movie_info: movie_info, movie_poster: _movie_poster}} -> + {:ok, %{movie: movie_info, movie_poster: _movie_poster}} -> conn |> put_flash(:notice, "Movie created successfully.") |> redirect(to: Routes.movie_path(conn, :show, movie_info)) - {:error, :movie_info, changeset, _changes_so_far} -> + {:error, :movie, changeset, _changes_so_far} -> conn |> put_flash(:error, "There was a problem creating the movie. Please try again.") |> render("new.html", From a817b309fbd80db531a415e1be55717dd7a15437 Mon Sep 17 00:00:00 2001 From: Conrad Taylor Date: Tue, 26 Apr 2022 14:36:26 -0700 Subject: [PATCH 4/4] Udate copyright. --- lib/flix_web/templates/layout/_footer.html.heex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/flix_web/templates/layout/_footer.html.heex b/lib/flix_web/templates/layout/_footer.html.heex index c4ce238..e7707f1 100644 --- a/lib/flix_web/templates/layout/_footer.html.heex +++ b/lib/flix_web/templates/layout/_footer.html.heex @@ -1,6 +1,6 @@