homebrew-core/Formula/generate-json-schema.rb

123 lines
3.2 KiB
Ruby

class GenerateJsonSchema < Formula
desc "Generate a JSON Schema from Sample JSON"
homepage "https://github.com/Nijikokun/generate-schema"
url "https://github.com/Nijikokun/generate-schema/archive/v2.1.1.tar.gz"
sha256 "bf43a7e616419876293e7de738dece27b3deb719cf5e8cc99bb309a5fb179af0"
head "https://github.com/Nijikokun/generate-schema.git"
bottle do
cellar :any_skip_relocation
sha256 "04ed1478348610996f3def3a546d6a99b844100bb85f9b74d246f85f2f424b4c" => :el_capitan
sha256 "54ddac9d0e01ef646f541ecbd5c8adfd734aec0f2e623ed97b504c79fa228fea" => :yosemite
sha256 "de5e23cd917d04cdd74642c905b67a65515b846138e48bb34e7a6b7eb8774a79" => :mavericks
end
depends_on "node"
def install
ENV.prepend_path "PATH", "#{Formula["node"].opt_libexec}/npm/bin"
system "npm", "install"
libexec.install Dir["*"]
bin.install_symlink Dir["#{libexec}/bin/*"]
end
test do
require "open3"
input = <<-EOS.undent
{
"id": 2,
"name": "An ice sculpture",
"price": 12.50,
"tags": ["cold", "ice"],
"dimensions": {
"length": 7.0,
"width": 12.0,
"height": 9.5
},
"warehouseLocation": {
"latitude": -78.75,
"longitude": 20.4
}
}
EOS
output = <<-EOS.undent.chomp
Welcome to Generate Schema 2.1.1
Mode: json
* Example Usage:
> {a:'b'}
{ a: { type: 'string' } }
To quit type: exit
> {
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"price": {
"type": "number"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"dimensions": {
"type": "object",
"properties": {
"length": {
"type": "number"
},
"width": {
"type": "number"
},
"height": {
"type": "number"
}
}
},
"warehouseLocation": {
"type": "object",
"properties": {
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
}
}
}
}
>
EOS
# As of v2.1.1, there is a bug when passing in a filename as an argument
# The following commented out test will fail until this bug is fixed.
# ("#{testpath}/test.json").write(input)
# system "#{bin}/generate-schema", "#{testpath}/test.json"
# Until it is fixed, STDIN can be used as a workaround
Open3.popen3("#{bin}/generate-schema") do |stdin, stdout, _|
stdin.write(input)
stdin.close
# Program leaks spaces at the end of lines. This line cleans them up
# so they don't cause the assert below to erroneously fail.
result = stdout.map(&:rstrip).join("\n")
assert_equal output, result
end
end
end