module Kril::SchemaExtractor

Extracts schemas from avro generated java files.

Public Class Methods

extract(source_dir:, output_dir:) click to toggle source

Parse schemas from avro generated java files and load them into the schema repository.

source_dir - root directory of java files [String] output_dir - schema repository [String] returns - [nil]

# File lib/kril/schema_extractor.rb, line 12
def self.extract(source_dir:, output_dir:)
  find_java_files(source_dir) do |file|
    schema = parse_avro_java_class(file)
    SchemaHandler.new(schemas_path: output_dir).process(schema)
  end
  nil
end

Public Instance Methods

dejavafy(java_string) click to toggle source
# File lib/kril/schema_extractor.rb, line 33
def dejavafy(java_string)
  java_string.split('","').join.gsub(/\\?\\"/, '"')
end
find_java_files(root_dir) { |file| ... } click to toggle source
# File lib/kril/schema_extractor.rb, line 22
def find_java_files(root_dir)
  old_dir = Dir.pwd
  Dir.chdir(root_dir)
  java_files = File.join('**', '*.java')
  Dir.glob(java_files) do |file|
    yield File.new(file)
  end
ensure
  Dir.chdir(old_dir)
end
parse_avro_java_class(file) click to toggle source
# File lib/kril/schema_extractor.rb, line 37
def parse_avro_java_class(file)
  result = file.each_line do |line|
    extraction = line[/SCHEMA.*parse\("(.*)"\);/, 1]
    break dejavafy(extraction) if extraction
  end
  result.is_a?(File) ? nil : result
end