class Avro::Builder::Rake::AvroGenerateTask
Attributes
dependencies[RW]
filetype[RW]
load_paths[RW]
name[RW]
root[RW]
task_desc[RW]
task_namespace[RW]
Public Class Methods
new(name: :generate, dependencies: []) { |self| ... }
click to toggle source
Calls superclass method
# File lib/avro/builder/rake/avro_generate_task.rb, line 14 def initialize(name: :generate, dependencies: []) super() @name = name @task_namespace = :avro @task_desc = 'Generate Avro schema files from Avro::Builder DSL' @load_paths = [] @root = "#{Rails.root}/avro/dsl" if defined?(Rails) @dependencies = dependencies @filetype = 'avsc' yield self if block_given? define end
Private Instance Methods
define()
click to toggle source
Define the rake task
# File lib/avro/builder/rake/avro_generate_task.rb, line 32 def define namespace task_namespace do desc task_desc task(name.to_sym => dependencies) do raise '"root" must be specified for Avro DSL files' unless root Avro::Builder.add_load_path(*[root, load_paths].flatten) Dir["#{root}/**/*.rb"].each do |dsl_file| puts "Generating Avro schema from #{dsl_file}" output_file = dsl_file.sub('/dsl/', '/schema/').sub(/\.rb$/, ".#{filetype}") dsl = Avro::Builder.build_dsl(filename: dsl_file) if dsl.abstract? if File.exist?(output_file) puts "... Removing #{output_file} for abstract type" FileUtils.rm(output_file) end else schema = dsl.to_json FileUtils.mkdir_p(File.dirname(output_file)) File.write(output_file, schema.end_with?("\n") ? schema : schema << "\n") end end end end end