module Katarina::TypeGenerator
Public Class Methods
generate(schema)
click to toggle source
# File lib/katarina/type_generator.rb, line 6 def generate(schema) [ "type #{schema.name} = ", members(schema.types), "\n", ].join end
Private Class Methods
indent(level)
click to toggle source
# File lib/katarina/type_generator.rb, line 54 def indent(level) ' ' * level end
key(name, level)
click to toggle source
# File lib/katarina/type_generator.rb, line 50 def key(name, level) "#{indent(level)}#{name}:" end
member(name, type, level)
click to toggle source
# File lib/katarina/type_generator.rb, line 33 def member(name, type, level) case type when Hash "#{key(name, level)} #{members(type, level)}" when Array "#{member(name, type.first, level)}[]" when String "#{key(name, level)} #{number?(type) ? 'number' : type}" else raise "unknown type => #{type.class}: #{type}" end end
members(types, level = 0)
click to toggle source
# File lib/katarina/type_generator.rb, line 16 def members(types, level = 0) case types when Hash [ "{", types.map { |name, type| member(name, type, level + 1) }, "#{indent(level)}}", ].join("\n") when Array "#{members(types.first, level)}[]" when String number?(types) ? 'number' : types else raise "unknown type => #{types.class}: #{types}" end end
number?(type)
click to toggle source
# File lib/katarina/type_generator.rb, line 46 def number?(type) %w[integer float].include?(type) end