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
- #[](layer) ⇒ Object
- #[]=(layer, content) ⇒ Object
- #height ⇒ Object
- #layers ⇒ Object
- #render ⇒ Object
- #set_layer(id) ⇒ Object
- #space_char ⇒ Object
- #space_char=(char) ⇒ Object
- #space_char_for(layer, char) ⇒ Object
- #to_s ⇒ Object
- #transparent_char ⇒ Object
- #transparent_char=(char) ⇒ Object
- #transparent_char_for(layer, char) ⇒ Object
- #width ⇒ Object
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 |
#height ⇒ Object
59 60 61 |
# File 'lib/lays.rb', line 59 def height layers.count end |
#layers ⇒ Object
30 31 32 |
# File 'lib/lays.rb', line 30 def layers @layers ||= {} end |
#render ⇒ Object
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_char ⇒ Object
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_s ⇒ Object
34 35 36 |
# File 'lib/lays.rb', line 34 def to_s @result ||= render end |
#transparent_char ⇒ Object
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 |
#width ⇒ Object
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 |