Sha256: 3b524d98435f0b2a77541e49019740b5143906b69fe7d834942542c943be92db

Contents?: true

Size: 1.79 KB

Versions: 4

Compression:

Stored size: 1.79 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}")
                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
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
avro-builder-0.16.1 lib/avro/builder/rake/avro_generate_task.rb
avro-builder-0.16.0 lib/avro/builder/rake/avro_generate_task.rb
avro-builder-0.15.0 lib/avro/builder/rake/avro_generate_task.rb
avro-builder-0.15.0.rc0 lib/avro/builder/rake/avro_generate_task.rb