Sha256: c0c2c482251336d09d3324ba1e255584a5e2c4f5b898148ccc2334ec69d711c0

Contents?: true

Size: 1.49 KB

Versions: 2

Compression:

Stored size: 1.49 KB

Contents

require 'rake/tasklib'
require 'avro/builder'

module Avro
  module Builder
    module Rake
      class AvroGenerateTask < ::Rake::TaskLib

        attr_accessor :name, :task_namespace, :task_desc, :root,
                      :load_paths, :dependencies, :filetype

        def initialize(name: :generate, dependencies: [])
          @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

        # Define the rake task
        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}")
                schema = Avro::Builder.build(filename: dsl_file)
                FileUtils.mkdir_p(File.dirname(output_file))
                File.write(output_file, schema.end_with?("\n") ? schema : schema << "\n")
              end
            end
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
avro-builder-0.14.1 lib/avro/builder/rake/avro_generate_task.rb
avro-builder-0.14.0 lib/avro/builder/rake/avro_generate_task.rb