Class: RailsAutodoc::Generator

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_autodoc/generator.rb

Instance Method Summary collapse

Constructor Details

#initialize(config: RailsAutodoc.config) ⇒ Generator

Returns a new instance of Generator.



8
9
10
# File 'lib/rails_autodoc/generator.rb', line 8

def initialize(config: RailsAutodoc.config)
  @config = config
end

Instance Method Details

#generateObject



12
13
14
15
# File 'lib/rails_autodoc/generator.rb', line 12

def generate
  operations = RouteInspector.new(config: @config).operations
  OpenapiSpecBuilder.new(operations: operations, config: @config).build
end

#generate!Object



17
18
19
20
21
# File 'lib/rails_autodoc/generator.rb', line 17

def generate!
  spec = generate
  write_spec(spec)
  spec
end

#to_json(*_args) ⇒ Object



30
31
32
# File 'lib/rails_autodoc/generator.rb', line 30

def to_json(*_args)
  JSON.pretty_generate(generate)
end

#verify!Object



34
35
36
37
38
39
40
41
42
43
44
# File 'lib/rails_autodoc/generator.rb', line 34

def verify!
  output_path = @config.resolved_output_path
  current = output_path.exist? ? YAML.safe_load(output_path.read, permitted_classes: [Date, Time]) : {}
  fresh = generate

  unless normalize_spec(current) == normalize_spec(fresh)
    raise SpecDriftError, "OpenAPI spec drift detected at #{output_path}. Run `rake autodoc:generate`."
  end

  true
end

#write_spec(spec) ⇒ Object



23
24
25
26
27
28
# File 'lib/rails_autodoc/generator.rb', line 23

def write_spec(spec)
  output_path = @config.resolved_output_path
  output_path.dirname.mkpath
  output_path.write(YAML.dump(spec))
  spec
end