class RSpec::Apib::Writer

Public Class Methods

new(doc) click to toggle source
# File lib/rspec/apib/writer.rb, line 4
def initialize(doc)
  @apib = doc
end

Public Instance Methods

write() click to toggle source
# File lib/rspec/apib/writer.rb, line 8
def write
  data = []
  data << pre_docs
  data << build
  data << post_docs
  write_to_file data.join("\n\n")
end

Private Instance Methods

build() click to toggle source
# File lib/rspec/apib/writer.rb, line 36
def build
  apib = ""

  sorted_apib.each do |group_name, group|
    apib += "# Group #{group_name}\n\n"
    group.each do |action, data|
      apib += "## #{action}\n\n"

      if data[:request][:params] && data[:request][:params].length > 0
        apib += "+ Parameters\n\n"
        data[:request][:params].each do |name, param|
          required = param[:required] ? 'required' : 'optional'
          value    = param[:value]
          apib += "    + #{name} (#{required}, string, `#{value}`) ...\n"
        end
        apib += "\n"
      end

      apib += "+ Request\n\n"
      apib += "#{data[:request][:description].indent(2, '  ')}\n\n" if data[:request][:description]
      apib += "    + Headers\n\n"
      data[:request][:headers].each do |header, value|
        apib += "            #{header}: #{value}\n"
      end
      apib += "\n"
      unless data[:request][:body].blank?
        apib += "    + Body\n\n"
        apib += data[:request][:body].to_s.indent(12)
        apib += "\n\n"
      end
      data[:response].sort { |a, b| a[:status] - b[:status] }.each do |response|
        apib += "+ Response #{response[:status]}\n\n"
        apib += "#{response[:description].indent(2, '  ')}\n\n" if response[:description]
        apib += "    + Headers\n\n"
        response[:headers].each do |header, value|
          apib += "            #{header}: #{value}\n"
        end
        apib += "\n"
        unless response[:body].blank?
          apib += "    + Body\n\n"
          apib += response[:body].to_s.indent(12)
          apib += "\n\n"
        end
      end
    end
  end

  apib
end
post_docs() click to toggle source
# File lib/rspec/apib/writer.rb, line 28
def post_docs
  RSpec::Apib.config.post_docs.map { |f| File.read(f) }.join("\n\n")
end
pre_docs() click to toggle source
# File lib/rspec/apib/writer.rb, line 24
def pre_docs
  RSpec::Apib.config.pre_docs.map { |f| File.read(f) }.join("\n\n")
end
sorted_apib() click to toggle source
# File lib/rspec/apib/writer.rb, line 32
def sorted_apib
  @apib.to_a.sort { |a, b| a[0] <=> b[0] }
end
write_to_file(data) click to toggle source
# File lib/rspec/apib/writer.rb, line 18
def write_to_file(data)
  File.open(RSpec::Apib.config.dest_file, 'w') do |file|
    file.write(data)
  end
end