class Expo2

Public Class Methods

new(prototype=nil, &block) click to toggle source
# File lib/expo2.rb, line 7
def initialize(prototype=nil, &block)
  @block = block
  @prototype = prototype || NullExpo.new
  @presenters ||= []
  self.instance_exec &@block if @block
end

Public Instance Methods

expo(object=nil, context={}, index=nil) click to toggle source
# File lib/expo2.rb, line 19
def expo(object=nil, context={}, index=nil)
  preso = @prototype.expo(object, context, index)
  @presenters.each do |pres|
    #TODO: warn on key collision
    preso = HashHelper.new.deep_merge(preso, pres.go(object, context, index))
  end
  preso
end
expo_collection(objects, context={}) click to toggle source
# File lib/expo2.rb, line 28
def expo_collection(objects, context={})
  objects.map.with_index{|o, i| expo(o, context, i) }
end
inspect() click to toggle source
# File lib/expo2.rb, line 14
def inspect
  "<Expo2:#{self.object_id}, @prototype=#{@prototype.inspect}, @presenters=#{@presenters.map(&:inspect)}>"
end

Private Instance Methods

aside(presenter, *keys) click to toggle source
# File lib/expo2.rb, line 40
def aside(presenter, *keys)
  array, hash = ArgumentParser.new.parse_arguments(keys)
  key_map = HashHelper.new.hasherize(array).merge(hash)
  @presenters << Asider.new(presenter, key_map)
end
augment(presenter, *keys) click to toggle source
# File lib/expo2.rb, line 46
def augment(presenter, *keys)
  array, hash = ArgumentParser.new.parse_arguments(keys)
  key_map = HashHelper.new.hasherize(array).merge(hash)
  @presenters << Pres.new(presenter, key_map)
end
collection(associator, key, expo=nil, &block) click to toggle source
# File lib/expo2.rb, line 68
def collection(associator, key, expo=nil, &block)
  @presenters << SubCollection.new(associator, key, expo, block)
end
expose(*keys) click to toggle source
# File lib/expo2.rb, line 34
def expose(*keys)
  array, hash = ArgumentParser.new.parse_arguments(keys)
  key_map = HashHelper.new.hasherize(array).merge(hash)
  @presenters << Exposer.new(key_map)
end
inline(&block) click to toggle source
# File lib/expo2.rb, line 72
def inline(&block)
  @presenters << InlineExpo.new(block)
end
merge(&block) click to toggle source
# File lib/expo2.rb, line 52
def merge(&block)
  @presenters << Merger.new(block)
end
merge_expo(pres, sub_expo=nil, &block) click to toggle source
# File lib/expo2.rb, line 56
def merge_expo(pres, sub_expo=nil, &block)
  @presenters << MergeExpo.new(pres, sub_expo, block)
end
recurse(pres, key) click to toggle source
# File lib/expo2.rb, line 64
def recurse(pres, key)
  @presenters << Recurser.new(pres, key, self)
end
sub_expo(pres, key, sub_expo=nil, &block) click to toggle source
# File lib/expo2.rb, line 60
def sub_expo(pres, key, sub_expo=nil, &block)
  @presenters << SubExpo.new(pres, key, sub_expo, block)
end