Class: RgGen::Builder::ListItemEntry

Inherits:
Object
  • Object
show all
Defined in:
lib/rggen/builder/list_item_entry.rb

Instance Method Summary collapse

Constructor Details

#initialize(item_base, factory_base, context, &body) ⇒ ListItemEntry

Returns a new instance of ListItemEntry.



4
5
6
7
8
9
10
11
12
13
14
15
# File 'lib/rggen/builder/list_item_entry.rb', line 4

def initialize(item_base, factory_base, context, &body)
  @item_base      = Class.new(item_base)
  @factory        = Class.new(factory_base)
  @items          = {}
  @enabled_items  = []
  unless context.nil?
    set_context(@item_base     , context)
    set_context(@factory       , context)
    set_context(singleton_class, context)
  end
  instance_exec(&body) if block_given?
end

Instance Method Details

#build_factoryObject



55
56
57
58
59
60
# File 'lib/rggen/builder/list_item_entry.rb', line 55

def build_factory
  @factory.new.tap do |f|
    f.target_items  = target_items
    f.target_item   = @item_class unless @item_class.nil?
  end
end

#define_list_item(item_name, context, &body) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
# File 'lib/rggen/builder/list_item_entry.rb', line 35

def define_list_item(item_name, context, &body)
  klass = Class.new(item_base)
  unless context.nil?
    if item_base.private_method_defined?(:shared_context)
      fail BuilderError, 'base class already has #shared_context'
    end
    set_context(klass, context)
  end
  klass.class_exec(&body)
  @items[item_name] = klass
end

#enable(item_or_items) ⇒ Object



47
48
49
50
51
52
53
# File 'lib/rggen/builder/list_item_entry.rb', line 47

def enable(item_or_items)
  Array(item_or_items).each do |item|
    next unless @items.key?(item)
    next if @enabled_items.include?(item)
    @enabled_items  << item
  end
end

#factory(&body) ⇒ Object



30
31
32
33
# File 'lib/rggen/builder/list_item_entry.rb', line 30

def factory(&body)
  @factory.class_exec(&body) if block_given?
  @factory
end

#item_base(&body) ⇒ Object



17
18
19
20
# File 'lib/rggen/builder/list_item_entry.rb', line 17

def item_base(&body)
  @item_base.class_exec(&body) if block_given?
  @item_base
end

#item_class(&body) ⇒ Object Also known as: default_item



22
23
24
25
26
# File 'lib/rggen/builder/list_item_entry.rb', line 22

def item_class(&body)
  @item_class ||= Class.new(@item_base)
  @item_class.class_exec(&body) if block_given?
  @item_class
end