Sha256: 40960723dc386265f2e0517d32b76a91d8697b5c93e9870dbac00f64e0a2ca3c

Contents?: true

Size: 1.72 KB

Versions: 42

Compression:

Stored size: 1.72 KB

Contents

# This source code is borrowed from:
# https://github.com/oneclick/rubyinstaller2/blob/b3dcbf69f131e44c78ea3a1c5e0041c223f266ce/lib/ruby_installer/build/utils.rb#L104-L144

module TaskExtension
  # Extend rake's file task to be defined only once and to check the expected file is indeed generated
  #
  # The same as #task, but for #file.
  # In addition this file task raises an error, if the file that is expected to be generated is not present after the block was executed.
  def file(name, *args, &block)
    task_once(name, block) do
      super(name, *args) do |ta|
        block.call(ta).tap do
          raise "file #{ta.name} is missing after task executed" unless File.exist?(ta.name)
        end
      end
    end
  end

  # Extend rake's task definition to be defined only once, even if called several times
  #
  # This allows to define common tasks next to specific tasks.
  # It is expected that any variation of the task's block is reflected in the task name or namespace.
  # If the task name is identical, the task block is executed only once, even if the file task definition is executed twice.
  def task(name, *args, &block)
    task_once(name, block) do
      super
    end
  end

  private def task_once(name, block)
    name = name.keys.first if name.is_a?(Hash)
    if block &&
        Rake::Task.task_defined?(name) &&
        Rake::Task[name].instance_variable_get('@task_block_location') == block.source_location
      # task is already defined for this target and the same block
      # So skip double definition of the same action
      Rake::Task[name]
    elsif block
      yield.tap do
        Rake::Task[name].instance_variable_set('@task_block_location', block.source_location)
      end
    else
      yield
    end
  end
end

Version data entries

42 entries across 42 versions & 3 rubygems

Version Path
rubypitaya-3.12.5 ./lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/pg-1.4.5/rakelib/task_extension.rb
rubypitaya-3.12.4 ./lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/pg-1.4.5/rakelib/task_extension.rb
rubypitaya-3.12.3 ./lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/pg-1.4.5/rakelib/task_extension.rb
rubypitaya-3.12.2 ./lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/pg-1.4.5/rakelib/task_extension.rb
pg-1.4.5-x86-mingw32 rakelib/task_extension.rb
pg-1.4.5-x64-mingw-ucrt rakelib/task_extension.rb
pg-1.4.5-x64-mingw32 rakelib/task_extension.rb
pg-1.4.5 rakelib/task_extension.rb
pg-1.4.4-x86-mingw32 rakelib/task_extension.rb
pg-1.4.4-x64-mingw32 rakelib/task_extension.rb
pg-1.4.4-x64-mingw-ucrt rakelib/task_extension.rb
pg-1.4.4 rakelib/task_extension.rb
pg-1.4.3-x64-mingw32 rakelib/task_extension.rb
pg-1.4.3-x64-mingw-ucrt rakelib/task_extension.rb
pg-1.4.3-x86-mingw32 rakelib/task_extension.rb
pg-1.4.3 rakelib/task_extension.rb
pg-1.4.2-x64-mingw32 rakelib/task_extension.rb
pg-1.4.2-x64-mingw-ucrt rakelib/task_extension.rb
pg-1.4.2-x86-mingw32 rakelib/task_extension.rb
pg-1.4.2 rakelib/task_extension.rb