Sha256: 011c484a515caf9f4b2a77d32a13963a8cf316b7182230967e1c44229970d191

Contents?: true

Size: 1.22 KB

Versions: 1

Compression:

Stored size: 1.22 KB

Contents

require "mediator/processor"

class Mediator
  class Renderer < Processor
    attr_reader :data
    attr_reader :mediator

    def initialize mediator, data = nil
      @data     = data || {}
      @mediator = mediator
    end

    def get name, options = nil
      selector = (options && options[:from]) || name
      (options && options[:value]) || mediator.get(selector)
    end

    def id name, options = {}
      key name, options.merge(from: "#{name}_id")
    end

    def key name, options = nil, &block
      if name[-1] == "?"
        (options ||= {})[:from] = name
        name = name[0..-2].intern
      end

      value = get name, options
      return if empty? value, options

      data[name] = block ? block[value] : value
    end

    def obj name, options = nil, &block
      value = get name, options
      return if empty? value, options

      if value
        rendered = Mediator[value, mediator].render
        munged   = block ? block[rendered] : rendered
        merge    = options && options[:merge]

        merge ? data.merge!(munged) : data[name] = munged
        munged
      end
    end

    def union name, options = nil, &block
      (options ||= {}).merge! merge: true
      obj name, options, &block
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mediator-0.0.1 lib/mediator/renderer.rb