class AppMap::Swagger::RakeTask
Constants
- DEFAULT_APPMAP_DIR
- DEFAULT_OUTPUT_DIR
- DEFAULT_SWAGGERGEN
Attributes
appmap_dir[RW]
name[RW]
output_dir[RW]
project_name[RW]
project_version[RW]
swaggergen[RW]
Public Class Methods
new(*args, &task_block)
click to toggle source
# File lib/appmap/swagger/rake_task.rb, line 17 def initialize(*args, &task_block) @name = args.shift || :swagger @swaggergen = DEFAULT_SWAGGERGEN @appmap_dir = DEFAULT_APPMAP_DIR @output_dir = DEFAULT_OUTPUT_DIR # https://www.rubydoc.info/docs/rails/Module#module_parent_name-instance_method module_parent_name = ->(cls) { cls.name =~ /::[^:]+\Z/ ? $`.freeze : nil } @project_name = \ if defined?(::Rails) [ module_parent_name.(::Rails.application.class).humanize.titleize, 'API' ].join(' ') else 'MyProject API' end @project_version = 'v1.0' define(args, &task_block) end
Public Instance Methods
run_task()
click to toggle source
# File lib/appmap/swagger/rake_task.rb, line 42 def run_task FileUtils.mkdir_p output_dir do_fail = lambda do |msg| warn msg exit $?.exitstatus || 1 end return do_fail.(%Q('node' not found; please install NodeJS)) unless system('node --version 2>&1 > /dev/null') return do_fail.(%Q('#{swaggergen}' not found; please install @appland/appmap-swagger from NPM)) unless File.exists?(swaggergen) warn swagger_command.join(' ') if verbose swagger_raw = `#{swagger_command.join(' ')}`.strip return do_fail.(%Q(Swagger generation failed: #{swagger_raw})) if $?.exitstatus != 0 gen_swagger = YAML.load(swagger_raw) gen_swagger_full = AppMap::Swagger::MarkdownDescriptions.new(gen_swagger).perform gen_swagger_stable = AppMap::Swagger::Stable.new(gen_swagger).perform swagger = swagger_template.merge(gen_swagger_full) File.write File.join(output_dir, 'openapi.yaml'), YAML.dump(swagger) swagger = swagger_template.merge(gen_swagger_stable) File.write File.join(output_dir, 'openapi_stable.yaml'), YAML.dump(swagger) end
swagger_command()
click to toggle source
# File lib/appmap/swagger/rake_task.rb, line 85 def swagger_command [ 'node', swaggergen, 'generate', '--directory', appmap_dir ] end
swagger_template()
click to toggle source
# File lib/appmap/swagger/rake_task.rb, line 69 def swagger_template YAML.load <<~TEMPLATE openapi: 3.0.1 info: title: #{project_name} version: #{project_version} paths: components: servers: - url: http://{defaultHost} variables: defaultHost: default: localhost:3000 TEMPLATE end
verbose()
click to toggle source
# File lib/appmap/swagger/rake_task.rb, line 38 def verbose Rake.verbose == true end
Private Instance Methods
define(args, &task_block)
click to toggle source
This bit of black magic - github.com/rspec/rspec-core/blob/main/lib/rspec/core/rake_task.rb#L110
# File lib/appmap/swagger/rake_task.rb, line 92 def define(args, &task_block) desc "Generate Swagger from AppMaps" unless ::Rake.application.last_description task(name, *args) do |_, task_args| RakeFileUtils.__send__(:verbose, Rake.verbose == true) do task_block.call(*[self, task_args].slice(0, task_block.arity)) if task_block run_task end end end