Class: MultiMovingsign::LineSegment
- Inherits:
-
Object
- Object
- MultiMovingsign::LineSegment
- Defined in:
- lib/multi_movingsign/page_renderer.rb
Instance Attribute Summary collapse
-
#prefix ⇒ Object
Returns the value of attribute prefix.
-
#segment ⇒ Object
Returns the value of attribute segment.
Instance Method Summary collapse
-
#initialize(prefix, segment) ⇒ LineSegment
constructor
A new instance of LineSegment.
- #inspect ⇒ Object
- #prefix? ⇒ Boolean
-
#split_if_necessary(max_width) ⇒ Object
If necessary, splits this LineSegment into multiple appropriate for displaying at once on the screen.
- #to_s ⇒ Object
Constructor Details
#initialize(prefix, segment) ⇒ LineSegment
Returns a new instance of LineSegment.
119 120 121 122 |
# File 'lib/multi_movingsign/page_renderer.rb', line 119 def initialize(prefix, segment) self.prefix = prefix self.segment = segment end |
Instance Attribute Details
#prefix ⇒ Object
Returns the value of attribute prefix.
116 117 118 |
# File 'lib/multi_movingsign/page_renderer.rb', line 116 def prefix @prefix end |
#segment ⇒ Object
Returns the value of attribute segment.
117 118 119 |
# File 'lib/multi_movingsign/page_renderer.rb', line 117 def segment @segment end |
Instance Method Details
#inspect ⇒ Object
159 160 161 |
# File 'lib/multi_movingsign/page_renderer.rb', line 159 def inspect to_s.inspect end |
#prefix? ⇒ Boolean
124 125 126 |
# File 'lib/multi_movingsign/page_renderer.rb', line 124 def prefix? !!self.prefix end |
#split_if_necessary(max_width) ⇒ Object
If necessary, splits this LineSegment into multiple appropriate for displaying at once on the screen
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'lib/multi_movingsign/page_renderer.rb', line 129 def split_if_necessary(max_width) raise InvalidInputError, "Prefix '' is too wide!" if (prefix? && PageRenderer.calculate_width(prefix) > max_width) if PageRenderer.calculate_width(self.to_s) <= max_width # segment isn't too long with prefix, return it as is [self] else # segment is too long, split it up into word segments finding the largest with the prefix appended that fits segments = [] # calculated segments prefix_width = prefix? ? PageRenderer.calculate_width(prefix) : 0 words = segment.split(/ /) while !words.empty? index = words.length while index > 0 && PageRenderer.calculate_width(candidate = (candidate_words = words[0, index]).join(' ')) + prefix_width > max_width index -= 1 end segments << self.class.new(prefix, candidate) words = words.drop index end segments end end |
#to_s ⇒ Object
155 156 157 |
# File 'lib/multi_movingsign/page_renderer.rb', line 155 def to_s prefix? ? prefix + segment : segment end |