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.



75
76
77
78
79
# File 'lib/autoc/code.rb', line 75

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.



73
74
75
# File 'lib/autoc/code.rb', line 73

def header
  @header
end

#main_sourceObject (readonly)

Returns the value of attribute main_source.



73
74
75
# File 'lib/autoc/code.rb', line 73

def main_source
  @main_source
end

#nameObject (readonly)

Returns the value of attribute name.



73
74
75
# File 'lib/autoc/code.rb', line 73

def name
  @name
end

#smallest_sourceObject (readonly)

Returns the value of attribute smallest_source.



73
74
75
# File 'lib/autoc/code.rb', line 73

def smallest_source
  @smallest_source
end

Class Method Details

.generate!(name, &block) ⇒ Object



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

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

Instance Method Details

#<<(obj) ⇒ Object



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

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

#generate!Object



98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/autoc/code.rb', line 98

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 necessary
  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



86
87
88
# File 'lib/autoc/code.rb', line 86

def new_header
  Header.new(self)
end

#new_source(index) ⇒ Object



90
91
92
# File 'lib/autoc/code.rb', line 90

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

#source_countObject



115
116
117
118
119
120
121
122
123
124
# File 'lib/autoc/code.rb', line 115

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



94
95
96
# File 'lib/autoc/code.rb', line 94

def source_count=(count)
  @source_count = count
end