Module: Kril::SchemaExtractor

Defined in:
lib/kril/schema_extractor.rb

Overview

Extracts schemas from avro generated java files.

Class Method Summary collapse

Class Method Details

.dejavafy(java_string) ⇒ Object



33
34
35
# File 'lib/kril/schema_extractor.rb', line 33

def dejavafy(java_string)
  java_string.split('","').join.gsub(/\\?\\"/, '"')
end

.extract(source_dir:, output_dir:) ⇒ Object

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]



12
13
14
15
16
17
18
# 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

.find_java_files(root_dir) ⇒ Object



22
23
24
25
26
27
28
29
30
31
# 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) ⇒ Object



37
38
39
40
41
42
43
# 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