class Lurker::Json::Writer

Public Class Methods

new(path) click to toggle source
# File lib/lurker/json/writer.rb, line 10
def initialize(path)
  @path = path
  @dirname = File.dirname(path)
end
write(schema, path) click to toggle source
# File lib/lurker/json/writer.rb, line 5
def write(schema, path)
  new(path).write(schema)
end

Public Instance Methods

write(schema) click to toggle source
# File lib/lurker/json/writer.rb, line 15
def write(schema)
  write_to_file(schema)

  extract_references(schema).each do |reference|
    Lurker::Json::Writer.write(reference, reference.original_uri.path)
  end
end

Private Instance Methods

extract_references(schema, memo = []) click to toggle source
# File lib/lurker/json/writer.rb, line 33
def extract_references(schema, memo = [])
  case schema
  when Array
    schema.each { |payload| extract_references(payload, memo) }
  when Hash, Lurker::Json::Schema
    schema.each do |_, payload|
      memo << payload if payload.is_a?(Lurker::Json::Reference)
      extract_references(payload, memo)
    end
  else
    # no-op
  end

  memo
end
present_by_extension(schema) click to toggle source
# File lib/lurker/json/writer.rb, line 49
def present_by_extension(schema)
  case File.extname(@path)
  when '.yml' then schema.to_yaml(reference: :original)
  when '.json' then JSON.pretty_generate(schema.to_hash reference: :original)
  else raise TypeError, "Unknown schema file extension '#{File.extname(@path)}'"
  end
end
write_to_file(schema) click to toggle source

TODO : Separate schema dumping for JSON & YAML files

# File lib/lurker/json/writer.rb, line 26
def write_to_file(schema)
  FileUtils.mkdir_p(@dirname) unless File.directory?(@dirname)
  File.open(@path, File::WRONLY | File::TRUNC | File::CREAT) do |file|
    file.write(present_by_extension schema)
  end
end