Class: AutoC::Module

Inherits:
Object
  • Object
show all
Defined in:
lib/autoc/code.rb

Defined Under Namespace

Classes: File, Header, Source

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ Module

Returns a new instance of Module.



66
67
68
69
70
# File 'lib/autoc/code.rb', line 66

def initialize(name)
  @entities = Set.new
  @source_size_threshold = 0
  @name = name.to_s # TODO validate
end

Instance Attribute Details

#headerObject (readonly)

Returns the value of attribute header.



64
65
66
# File 'lib/autoc/code.rb', line 64

def header
  @header
end

#main_sourceObject (readonly)

Returns the value of attribute main_source.



64
65
66
# File 'lib/autoc/code.rb', line 64

def main_source
  @main_source
end

#nameObject (readonly)

Returns the value of attribute name.



64
65
66
# File 'lib/autoc/code.rb', line 64

def name
  @name
end

#smallest_sourceObject (readonly)

Returns the value of attribute smallest_source.



64
65
66
# File 'lib/autoc/code.rb', line 64

def smallest_source
  @smallest_source
end

Class Method Details

.generate!(name, &block) ⇒ Object



58
59
60
61
62
# File 'lib/autoc/code.rb', line 58

def self.generate!(name, &block)
  m = self.new(name)
  block.call(m)
  m.generate!
end

Instance Method Details

#<<(obj) ⇒ Object



72
73
74
75
76
77
78
# File 'lib/autoc/code.rb', line 72

def <<(obj)
  unless @entities.include?(obj)
    @entities << obj
    obj.entities.each {|e| self << e}
  end
  self
end

#generate!Object



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/autoc/code.rb', line 92

def generate!
  @header = new_header
  @sources = []
  (1..source_count).each {|i| @sources << new_source(i)}
  @main_source = @sources.first
  @smallest_source = @main_source
  # It appears that computing the size of a source might be a fairly expensive operation so do it only when neccessary
  refresh_smallest_source = source_count > 1
  @entities.each do |e|
    @header << e
    @smallest_source = @sources.sort_by {|s| s.size}.first if refresh_smallest_source
    @sources.each {|s| e.attach(s)}
  end
  @header.generate
  @sources.each {|s| s.generate}
end

#new_headerObject



80
81
82
# File 'lib/autoc/code.rb', line 80

def new_header
  Header.new(self)
end

#new_source(index) ⇒ Object



84
85
86
# File 'lib/autoc/code.rb', line 84

def new_source(index)
  Source.new(self, index)
end

#source_countObject



109
110
111
112
113
114
115
116
117
118
# File 'lib/autoc/code.rb', line 109

def source_count
  if @source_count.nil?
    total = 0
    @entities.each {|e| total += e.source_size}
    count = @source_size_threshold > 0 ? (total/@source_size_threshold + 1) : 1
    @source_count = count > 0 ? count : 1
  else
    @source_count
  end
end

#source_count=(count) ⇒ Object



88
89
90
# File 'lib/autoc/code.rb', line 88

def source_count=(count)
  @source_count = count
end