Sha256: 07ad58e8529e6ff7958e4a16655ffca3bd50e0802d0cfef8bc029fa8d4014e8b

Contents?: true

Size: 1.75 KB

Versions: 3

Compression:

Stored size: 1.75 KB

Contents

## Template Factory

To render the frame events sent by the application, the application requires a template factory. This factory will be called for each frame event, with the frame name and the arguments supplied by the application. A template factory can be an instance of ruby class and thus can maintain state. Whirled Peas provides a few basic building blocks to make simple, yet elegant terminal-based UIs.

To build a template in a template factory, use `WhirledPeas.template(theme)`, which takes an optional [theme](themes.md) and yields a composer (used to add [elements](elements.md) to the template) and [settings](settings.md) (used to configure the element).

### Full example

```ruby
class TemplateFactory
  def build(frame, args)
    set_state(frame, args)
    WhirledPeas.template do |composer, settings|
      settings.flow = :l2r
      settings.align = :center

      composer.add_box('Title', &method(:title))
      composer.add_box('Sum', &method(:sum))
      composer.add_grid('NumberGrid', &method(:number_grid))
    end
  end

  private

  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(_composer, settings)
    settings.underline = true
    "Pair Finder"
  end

  def sum(_composer, settings)
    settings.color = @frame == 'found-pair' ? :green : :red
    @sum ? "Sum: #{@sum}" : 'N/A'
  end

  def number_grid(composer, settings)
    settings.full_border
    @numbers.each.with_index do |num, index|
      composer.add_text do |_, settings|
        settings.bg_color = (@low == index || @high == index) ? :cyan : :white
        num
      end
    end
  end
end
```

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
whirled_peas-0.13.0 doc/template_factory.md
whirled_peas-0.12.0 doc/template_factory.md
whirled_peas-0.11.1 doc/template_factory.md