Sha256: d5cae09fb514188fe79fc14628382acbaabd75a48635e5c870da49513a86ba78

Contents?: true

Size: 1.83 KB

Versions: 29

Compression:

Stored size: 1.83 KB

Contents

require 'fileutils'

namespace :protobuf do

  desc 'Clean & Compile the protobuf source to ruby classes. Pass PB_NO_CLEAN=1 if you do not want to force-clean first.'
  task :compile, [:package, :source, :destination, :plugin, :file_extension] do |_tasks, args|
    args.with_defaults(:destination => 'lib')
    args.with_defaults(:source => 'definitions')
    args.with_defaults(:plugin => 'ruby')
    args.with_defaults(:file_extension => '.pb.rb')

    unless do_not_clean?
      force_clean!
      ::Rake::Task[:clean].invoke(args[:package], args[:destination], args[:file_extension])
    end

    command = []
    command << "protoc"
    command << "--#{args[:plugin]}_out=#{args[:destination]}"
    command << "-I #{args[:source]}"
    command << Dir["#{args[:source]}/#{args[:package]}/**/*.proto"].join(" ")
    full_command = command.join(' ')

    puts full_command
    exec(full_command)
  end

  desc 'Clean the generated *.pb.rb files from the destination package. Pass PB_FORCE_CLEAN=1 to skip confirmation step.'
  task :clean, [:package, :destination, :file_extension] do |_task, args|
    args.with_defaults(:destination => 'lib')
    args.with_defaults(:file_extension => '.pb.rb')

    file_extension = args[:file_extension].sub(/\*?\.+/, '')
    files_to_clean = ::File.join(args[:destination], args[:package], '**', "*.#{file_extension}")

    if force_clean? || permission_to_clean?(files_to_clean)
      ::Dir.glob(files_to_clean).each do |file|
        ::FileUtils.rm(file)
      end
    end
  end

  def do_not_clean?
    ! ::ENV.key?('PB_NO_CLEAN')
  end

  def force_clean?
    ::ENV.key?('PB_FORCE_CLEAN')
  end

  def force_clean!
    ::ENV['PB_FORCE_CLEAN'] = '1'
  end

  def permission_to_clean?(files_to_clean)
    puts "Do you really want to remove files matching pattern #{files_to_clean}? (y/n)"
    ::STDIN.gets.chomp =~ /y(es)?/i
  end

end

Version data entries

29 entries across 29 versions & 2 rubygems

Version Path
protobuf-3.8.0 lib/protobuf/tasks/compile.rake
protobuf-3.8.0.pre1 lib/protobuf/tasks/compile.rake
protobuf-3.7.5 lib/protobuf/tasks/compile.rake
protobuf-3.7.4 lib/protobuf/tasks/compile.rake
protobuf-3.7.3 lib/protobuf/tasks/compile.rake
protobuf-3.7.2 lib/protobuf/tasks/compile.rake
protobuf-3.7.2.pre1 lib/protobuf/tasks/compile.rake
protobuffy-4.0.1 lib/protobuf/tasks/compile.rake
protobuf-3.7.1 lib/protobuf/tasks/compile.rake
protobuf-3.7.0 lib/protobuf/tasks/compile.rake
protobuf-3.7.0.pre3 lib/protobuf/tasks/compile.rake
protobuffy-4.0.0 lib/protobuf/tasks/compile.rake
protobuf-3.6.12 lib/protobuf/tasks/compile.rake
protobuf-3.6.11 lib/protobuf/tasks/compile.rake
protobuf-3.6.10 lib/protobuf/tasks/compile.rake
protobuf-3.7.0.pre2 lib/protobuf/tasks/compile.rake
protobuf-3.6.9 lib/protobuf/tasks/compile.rake
protobuf-3.7.0.pre1 lib/protobuf/tasks/compile.rake
protobuf-3.7.0.pre0 lib/protobuf/tasks/compile.rake
protobuf-3.6.7 lib/protobuf/tasks/compile.rake