Module: Lays

Defined in:
lib/lays.rb,
lib/lays/version.rb

Defined Under Namespace

Classes: Layer

Constant Summary collapse

VERSION =
"0.1.2"

Instance Method Summary collapse

Instance Method Details

#[](layer) ⇒ Object



21
22
23
24
# File 'lib/lays.rb', line 21

def [](layer)
  set_layer(layer)
  layers[layer]
end

#[]=(layer, content) ⇒ Object



15
16
17
18
19
# File 'lib/lays.rb', line 15

def []=(layer, content)
  set_layer(layer)
  layers[layer].content = content
  @result = nil
end

#heightObject



59
60
61
# File 'lib/lays.rb', line 59

def height
  layers.count
end

#layersObject



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

def layers
  @layers ||= {}
end

#renderObject



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/lays.rb', line 38

def render
  result = []
  lays = layers.sort {|a, b| a[0] <=> b[0] }
  lays.each do |key, layer|
    content = layer.content
    content.split("\n").each_with_index.map do |line, i|
      line.each_char.each_with_index do |c, j|
        result[i] ||= []
        if space_char_for(layer, c)
          result[i][j] = " "
        elsif !transparent_char_for(layer, c)
          result[i][j] = c
        elsif key == lays.first.first
          result[i][j] = " "
        end
      end
    end
  end
  result.map {|a|a.join}.join("\n")
end

#set_layer(id) ⇒ Object



26
27
28
# File 'lib/lays.rb', line 26

def set_layer(id)
  layers[id] ||= Layer.new
end

#space_charObject



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

def space_char
  @space_char
end

#space_char=(char) ⇒ Object



83
84
85
86
# File 'lib/lays.rb', line 83

def space_char=(char)
  @space_char = char
  @transparent_char = nil
end

#space_char_for(layer, char) ⇒ Object



92
93
94
# File 'lib/lays.rb', line 92

def space_char_for(layer, char)
  char == layer.space_char || char == space_char
end

#to_sObject



34
35
36
# File 'lib/lays.rb', line 34

def to_s
  @result ||= render
end

#transparent_charObject



74
75
76
# File 'lib/lays.rb', line 74

def transparent_char
  @transparent_char ||= " "
end

#transparent_char=(char) ⇒ Object



69
70
71
72
# File 'lib/lays.rb', line 69

def transparent_char=(char)
  @transparent_char = char
  @space_char = nil
end

#transparent_char_for(layer, char) ⇒ Object



78
79
80
81
# File 'lib/lays.rb', line 78

def transparent_char_for(layer, char)
  transparent = layer.transparent_char || transparent_char
  char == transparent
end

#widthObject



63
64
65
66
67
# File 'lib/lays.rb', line 63

def width
  layers.max { |a, b|
    a.last.content.size <=> b.last.content.size
  }.last.content.size
end