class Rubypack::RubypackFile

Constants

DEFAULT_FILENAME

Attributes

filename[RW]
path[RW]

Public Class Methods

new(filename:, output:) click to toggle source
# File lib/rubypack/rubypack_file.rb, line 8
def initialize(filename:, output:)
  fail("File not found: #{filename}") unless File.exists?(filename)
  @filename = File.basename(filename)
  @path = File.dirname(filename)
  @output = output
  read!
end

Public Instance Methods

all() click to toggle source
# File lib/rubypack/rubypack_file.rb, line 46
def all
  '**/**'
end
exclude(*args) click to toggle source
# File lib/rubypack/rubypack_file.rb, line 40
def exclude(*args)
  args.flatten!
  @rules = [] unless defined?(@rules)
  args.each { |entry| @rules << { action: :exclude, filter: entry } }
end
format_rule(rule, files) click to toggle source
# File lib/rubypack/rubypack_file.rb, line 56
def format_rule(rule, files)
  @output.status(" Action: #{rule[:action]}, Filter: #{rule[:filter]}")
  icon = (rule[:action] == :include) ? '  +' : '  -'
  files.each { |file| @output.verbose(icon, file) }
end
git() click to toggle source
# File lib/rubypack/rubypack_file.rb, line 50
def git
  Dir.chdir(@path) do
    `git ls-files -z`.split("\x0")
  end
end
include(*args) click to toggle source
# File lib/rubypack/rubypack_file.rb, line 34
def include(*args)
  args.flatten!
  @rules = [] unless defined?(@rules)
  args.each { |entry| @rules << { action: :include, filter: entry } }
end
list_files() click to toggle source
# File lib/rubypack/rubypack_file.rb, line 62
def list_files
  Dir.chdir(@path) do

    # If not rules were defined, include all by default
    unless defined?(@rules)
      files = Dir['**/**']        
      format_rule({ action: :include, filter: '**/**' }, files)
      return ffiles
    end

    # Determinate if the package must start with all files or with none
    action = @rules.first[:action]
    if action == :include
      files = []
    elsif action == :exclude
      files = Dir['**/**']
      format_rule({ action: :include, filter: '**/**' }, files)
    else
      fail("Action not implemented: #{action}")
    end

    # Include/exclude based on the rules
    @rules.each do |rule|
      if rule[:action] == :include
        filtered_files = Dir[rule[:filter]]
        files |= filtered_files
        format_rule(rule, filtered_files)
      elsif rule[:action] == :exclude
        filtered_files = Dir[rule[:filter]]
        files -= filtered_files
        format_rule(rule, filtered_files)
      else
        fail("Action not implemented: #{rule[:action]}")
      end
    end

    # Remove directories
    files.reject! { |file| File.directory?(file) }

    # Sort the file names
    files.sort
  end
end
name(name) click to toggle source
# File lib/rubypack/rubypack_file.rb, line 20
def name(name)
  @output.status(' Name:', name)
  @name = name
end
output_filename() click to toggle source
# File lib/rubypack/rubypack_file.rb, line 30
def output_filename
  "#{@name}-#{@version}"
end
read!() click to toggle source
# File lib/rubypack/rubypack_file.rb, line 16
def read!
  instance_exec { eval(File.read(File.join(@path, @filename))) }
end
version(version) click to toggle source
# File lib/rubypack/rubypack_file.rb, line 25
def version(version)
  @output.status(' Version:', version)
  @version = version
end