Module: Card::Set::Basket

Included in:
Card::Set, Format::AbstractFormat
Defined in:
lib/card/set/basket.rb

Overview

The purpose of a basket it that you can throw something in from the same set in another mod. A basket can be defined on a format or directly on a set

@example: # mod/core/set/self/head.rb: basket :basket_on_set

format :html do basket :js_tags # only available in HtmlFormat view :core { output basket(:js_tags) } end

# mod/shell/set/self/head.rb: add_to_basket :basket_on_set, 'hello world'

format :html do add_to_basket :js_tags "

Define a basket in an abstract set



38
39
40
41
42
43
44
45
46
# File 'lib/card/set/basket.rb', line 38

def abstract_basket name
  # the basket has to be defined on the including set
  # (instead on the set itself)

  define_singleton_method :included do |host|
    super(host)
    host.basket name
  end
end

#add_to_basket(name, content = nil, &block) ⇒ Object



48
49
50
51
# File 'lib/card/set/basket.rb', line 48

def add_to_basket name, content=nil, &block
  content ||= block
  send("#{name}_content").send "<<", content
end

#basket(name) ⇒ Object

Define a basket in a set or format



27
28
29
30
31
32
33
34
35
# File 'lib/card/set/basket.rb', line 27

def basket name
  mattr_accessor "#{name}_content"
  send("#{name}_content=", [])
  define_method name do
    send("#{name}_content").map do |item|
      item.respond_to?(:call) ? item.call(self) : item
    end
  end
end

#unshift_basket(name, content = nil, &block) ⇒ Object



53
54
55
56
# File 'lib/card/set/basket.rb', line 53

def unshift_basket name, content=nil, &block
  content ||= block
  send("#{name}_content").unshift content
end