Sha256: 964ee70dbf12c6704fd965ec9fe063b10d55369dbf71996aca5c71c72141a792

Contents?: true

Size: 836 Bytes

Versions: 3

Compression:

Stored size: 836 Bytes

Contents

# frozen_string_literal: true

require "json"
require "bq_coaster"
require "bq_coaster/generators/base"

module BqCoaster
  module Generators
    class Schema < Base
      def generate
        JSON.pretty_generate(
          definitions.map { |n, d| parse(n, d) }.flatten
        )
      end

      private

      def nested?(definition)
        !(
          definition.nil? || BqCoaster.edge_properties.any? { |c| definition.key?(c) }
        )
      end

      def parse(name, definition, prefix = "")
        if nested?(definition)
          definition.map { |n, d| parse(n, d, "#{prefix}#{name}_") }
        else
          {
            name: "#{prefix}#{name}",
            type: (definition&._type || "string").upcase,
            mode: (definition&._mode || "nullable").upcase
          }
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
bq_coaster-0.2.2 lib/bq_coaster/generators/schema.rb
bq_coaster-0.2.1 lib/bq_coaster/generators/schema.rb
bq_coaster-0.2.0 lib/bq_coaster/generators/schema.rb