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