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