class Pineapples::Actions::CreateFile

Attributes

content[R]

Public Class Methods

new(generator, target, content, options = {}) click to toggle source
Calls superclass method
# File lib/pineapples/actions/create_file.rb, line 63
def initialize(generator, target, content, options = {})
  super(generator, target, options)
  @content = content
end

Public Instance Methods

identical?() click to toggle source
# File lib/pineapples/actions/create_file.rb, line 68
def identical?
  exists? && File.binread(target.fullpath) == render
end
invoke!() click to toggle source
# File lib/pineapples/actions/create_file.rb, line 76
def invoke!
  invoke_with_conflict_check do
    FileUtils.mkdir_p(File.dirname(target.fullpath))
    File.open(target.fullpath, 'wb') { |file| file.write render }
  end
  target.given
end
render() click to toggle source
# File lib/pineapples/actions/create_file.rb, line 72
def render
  @render ||= content.is_a?(Proc) ? content.call : content.to_s
end

Protected Instance Methods

force_on_collision?() click to toggle source

Shows the file collision menu to the user and gets the result.

# File lib/pineapples/actions/create_file.rb, line 108
def force_on_collision?
  generator.ask_file_collision(target)
end
force_or_skip_or_conflict(force, skip, &block) click to toggle source
# File lib/pineapples/actions/create_file.rb, line 94
def force_or_skip_or_conflict(force, skip, &block)
  if force
    say_status :force
    block.call if execute?
  elsif skip
    say_status :skip
  else
    say_status :conflict
    force_or_skip_or_conflict(force_on_collision?, true, &block)
  end
end
on_conflict_behaviour(&block) click to toggle source
# File lib/pineapples/actions/create_file.rb, line 86
def on_conflict_behaviour(&block)
  if identical?
    say_status :identical
  else
    force_or_skip_or_conflict(options[:force], options[:skip], &block)
  end
end