diff --git a/lib/git_ops/version_replace.ex b/lib/git_ops/version_replace.ex index 0d94d87..9a9dd16 100644 --- a/lib/git_ops/version_replace.ex +++ b/lib/git_ops/version_replace.ex @@ -10,8 +10,20 @@ defmodule GitOps.VersionReplace do update_file(file, "@version \"#{current_version}\"", "@version \"#{new_version}\"", opts) end - @spec update_readme(String.t(), String.t(), String.t()) :: String.t() | {:error, :bad_replace} - def update_readme(readme, current_version, new_version, opts \\ []) do + @spec update_readme( + String.t() + | {String.t(), fun :: (String.t() -> String.t()), fun :: (String.t() -> String.t())}, + String.t(), + String.t() + ) :: String.t() | {:error, :bad_replace} + def update_readme(readme, current_version, new_version, opts \\ []) + + def update_readme({readme, replace, pattern}, current_version, new_version, opts) + when is_function(replace, 1) and is_function(pattern, 1) do + update_file(readme, replace.(current_version), pattern.(new_version), opts) + end + + def update_readme(readme, current_version, new_version, opts) do update_file(readme, ", \"~> #{current_version}\"", ", \"~> #{new_version}\"", opts) end diff --git a/test/version_replace_test.exs b/test/version_replace_test.exs index 24d85ee..96fb015 100644 --- a/test/version_replace_test.exs +++ b/test/version_replace_test.exs @@ -22,6 +22,14 @@ defmodule GitOps.Test.VersionReplaceTest do """ end + def package_json_contents(version) do + """ + { + "version": "#{version}" + } + """ + end + setup do readme = "TEST_README.md" version = "0.1.1" @@ -30,9 +38,15 @@ defmodule GitOps.Test.VersionReplaceTest do File.write!(readme, readme_contents) - on_exit(fn -> File.rm!(readme) end) + package_json = "package.json" + File.write!(package_json, package_json_contents(version)) + + on_exit(fn -> + File.rm!(readme) + File.rm!(package_json) + end) - %{readme: readme, version: version} + %{readme: readme, package_json: package_json, version: version} end test "that README gets written to properly", context do @@ -54,4 +68,18 @@ defmodule GitOps.Test.VersionReplaceTest do assert File.read!(readme) == readme_contents(version) end + + test "custom replace/pattern", context do + readme = context.package_json + version = context.version + new_version = "1.0.0" + + VersionReplace.update_readme( + {readme, fn v -> "\"version\": \"#{v}\"" end, fn v -> "\"version\": \"#{v}\"" end}, + version, + new_version + ) + + assert File.read!(readme) == package_json_contents(new_version) + end end