Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions lib/mix/tasks/openapi.spec.json.ex
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ defmodule Mix.Tasks.Openapi.Spec.Json do
* `--vendor-extensions` - Whether to include open_api_spex OpenAPI vendor extensions
(defaults to true)

* `--quiet` - Whether to disable output printing (defaults to false)
"""
use Mix.Task
require Mix.Generator
Expand Down
1 change: 1 addition & 0 deletions lib/mix/tasks/openapi.spec.yaml.ex
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ defmodule Mix.Tasks.Openapi.Spec.Yaml do
* `--vendor-extensions` - Whether to include open_api_spex OpenAPI vendor extensions
(defaults to true)

* `--quiet` - Whether to disable output printing (defaults to false)
"""
use Mix.Task
require Mix.Generator
Expand Down
23 changes: 15 additions & 8 deletions lib/open_api_spex/export_spec.ex
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ defmodule OpenApiSpex.ExportSpec do
defmodule Options do
@moduledoc false

defstruct filename: nil, spec: nil, pretty: false, vendor_extensions: true
defstruct filename: nil, spec: nil, pretty: false, vendor_extensions: true, quiet: false
end

def call(argv, encode_spec, default_filename) do
Expand All @@ -16,7 +16,7 @@ defmodule OpenApiSpex.ExportSpec do
opts
|> generate_spec()
|> encode_spec.(opts)
|> write_spec(opts.filename)
|> write_spec(opts)
end

defp generate_spec(%{spec: spec, vendor_extensions: vendor_extensions}) do
Expand All @@ -41,7 +41,13 @@ defmodule OpenApiSpex.ExportSpec do

defp parse_options(argv, default_filename) do
parse_options = [
strict: [spec: :string, endpoint: :string, pretty: :boolean, vendor_extensions: :boolean]
strict: [
spec: :string,
endpoint: :string,
pretty: :boolean,
vendor_extensions: :boolean,
quiet: :boolean
]
]

{opts, args, _} = OptionParser.parse(argv, parse_options)
Expand All @@ -50,17 +56,18 @@ defmodule OpenApiSpex.ExportSpec do
filename: args |> List.first() || default_filename,
spec: find_spec(opts),
pretty: Keyword.get(opts, :pretty, false),
vendor_extensions: Keyword.get(opts, :vendor_extensions, true)
vendor_extensions: Keyword.get(opts, :vendor_extensions, true),
quiet: Keyword.get(opts, :quiet, false)
}
end

defp write_spec(content, filename) do
case Path.dirname(filename) do
defp write_spec(content, opts) do
case Path.dirname(opts.filename) do
"." -> true
dir -> Mix.Generator.create_directory(dir)
dir -> Mix.Generator.create_directory(dir, quiet: opts.quiet)
end

Mix.Generator.create_file(filename, content, force: true)
Mix.Generator.create_file(opts.filename, content, force: true, quiet: opts.quiet)
end

defp find_spec(opts) do
Expand Down
11 changes: 11 additions & 0 deletions test/mix/tasks/openapi.spec.json_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,15 @@ defmodule Mix.Tasks.Openapi.Spec.JsonTest do

assert File.read!(actual_schema_path) == File.read!(expected_schema_path)
end

test "generates openapi.json quietly" do
Mix.Tasks.Openapi.Spec.Json.run(~w(
--quiet=true
--spec OpenApiSpexTest.Tasks.SpecModule
"tmp/openapi.json"
))

refute_received {:mix_shell, :info, ["* creating tmp"]}
refute_received {:mix_shell, :info, ["* creating tmp/openapi.json"]}
end
end