Class: Rubypack::RubypackFile

Inherits:
Object
  • Object
show all
Defined in:
lib/rubypack/rubypack_file.rb

Constant Summary collapse

DEFAULT_FILENAME =
'.rubypack'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(filename:, output:) ⇒ RubypackFile

Returns a new instance of RubypackFile.



8
9
10
11
12
13
14
# 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

Instance Attribute Details

#filenameObject

Returns the value of attribute filename.



6
7
8
# File 'lib/rubypack/rubypack_file.rb', line 6

def filename
  @filename
end

#pathObject

Returns the value of attribute path.



6
7
8
# File 'lib/rubypack/rubypack_file.rb', line 6

def path
  @path
end

Instance Method Details

#allObject



46
47
48
# File 'lib/rubypack/rubypack_file.rb', line 46

def all
  '**/**'
end

#exclude(*args) ⇒ Object



40
41
42
43
44
# 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) ⇒ Object



56
57
58
59
60
# 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

#gitObject



50
51
52
53
54
# File 'lib/rubypack/rubypack_file.rb', line 50

def git
  Dir.chdir(@path) do
    `git ls-files -z`.split("\x0")
  end
end

#include(*args) ⇒ Object



34
35
36
37
38
# 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_filesObject



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# 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) ⇒ Object



20
21
22
23
# File 'lib/rubypack/rubypack_file.rb', line 20

def name(name)
  @output.status(' Name:', name)
  @name = name
end

#output_filenameObject



30
31
32
# File 'lib/rubypack/rubypack_file.rb', line 30

def output_filename
  "#{@name}-#{@version}"
end

#read!Object



16
17
18
# File 'lib/rubypack/rubypack_file.rb', line 16

def read!
  instance_exec { eval(File.read(File.join(@path, @filename))) }
end

#version(version) ⇒ Object



25
26
27
28
# File 'lib/rubypack/rubypack_file.rb', line 25

def version(version)
  @output.status(' Version:', version)
  @version = version
end