README.md in whirled_peas-0.1.0 vs README.md in whirled_peas-0.1.1
- old
+ new
@@ -120,10 +120,40 @@
- `add_box` - yields a `ComposableElement` and a `BoxSettings`, which will be added to the parent's children
- `add_grid` - yields a `ComposableElement` and a `GridSettings`, which will be added to the parent's children
- `add_text` - yields `nil` and a `TextSettings`, which will be added to the parent's children
+E.g.
+
+```ruby
+WhirledPeas.template do |template, template_settings|
+ template_settings.bg_color = :blue
+ template.add_grid do |grid, grid_settings|
+ grid_settings.num_cols = 10
+ 100.times do |i|
+ grid.add_text { i.to_s }
+ end
+ end
+end
+```
+
+The above template can also be broken down into more manageable methods, e.g.
+
+```ruby
+def number_grid(grid, settings)
+ settings.num_cols = 10
+ 100.times do |i|
+ grid.add_text { i.to_s }
+ end
+end
+
+WhirledPeas.template do |template, settings|
+ settings.bg_color = :blue
+ template.add_grid(&method(:number_grid))
+end
+```
+
Additionally, if no child element is explicitly added to a `GridElement`, but the block returns an array of strings or numbers, those will be converted to `TextElements` and added as children to the `GridElement`. For example, these are identical ways to create a grid of strings
```ruby
template.add_grid do |g|
100.times do |i|
@@ -274,41 +304,53 @@
### Example
```ruby
class TemplateFactory
- def initialize
- @numbers = []
+ def build(frame, args)
+ set_state(frame, args)
+ WhirledPeas.template do |t|
+ t.add_box(&method(:body))
+ end
end
- def build(name, args)
- @numbers = args['numbers'] if args.key?('numbers')
+ private
- WhirledPeas.template do |t|
- t.add_box do |body, settings|
- settings.flow = :l2r
- settings.auto_margin = true
- body.add_box do |title, settings|
- settings.underline = true
- "Pair Finder"
- end
- body.add_box do |_, settings|
- settings.color = name == 'found-pair' ? :green : :red
- args.key?('sum') ? "Sum: #{args['sum']}" : 'N/A'
- end
- body.add_grid do |g, settings|
- settings.full_border
- @numbers.each.with_index do |num, index|
- is_low = args.key?('low') && args['low'] == index
- is_high = args.key?('high') && args['high'] == index
- g.add_text do |_, settings|
- settings.bg_color = (is_low || is_high) ? :cyan : :white
- num.to_s
- end
- end
- end
+ def set_state(frame, args)
+ @frame = frame
+ @numbers = args.key?('numbers') ? args['numbers'] || []
+ @sum = args['sum'] if args.key?('sum')
+ @low = args['low'] if args.key?('low')
+ @high = args['high'] if args.key?('high')
+ end
+
+ def title(_elem, settings)
+ settings.underline = true
+ "Pair Finder"
+ end
+
+ def sum(_elem, settings)
+ settings.color = @frame == 'found-pair' ? :green : :red
+ @sum ? "Sum: #{@sum}" : 'N/A'
+ end
+
+ def number_grid(elem, settings)
+ settings.full_border
+ @numbers.each.with_index do |num, index|
+ g.add_text do |_, settings|
+ settings.bg_color = (@low == index || @high == index) ? :cyan : :white
+ num.to_s
end
end
+ end
+
+ def body(elem, settings)
+ settings.flow = :l2r
+ settings.auto_margin = true
+
+ elem.add_box(&method(:title))
+ elem.add_box(&method(:sum))
+ elem.add_grid(&method(:number_grid))
end
end
```
## Development