122 lines
3.2 KiB
Ruby
122 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
|