Class: RgGen::Core::Builder::ListFeatureEntry

Inherits:
FeatureEntryBase show all
Includes:
RgGen::Core::Base::SharedContext
Defined in:
lib/rggen/core/builder/list_feature_entry.rb

Instance Attribute Summary

Attributes inherited from FeatureEntryBase

#name, #registry

Instance Method Summary collapse

Methods included from RgGen::Core::Base::SharedContext

#attach_context

Methods inherited from FeatureEntryBase

#build_factory, #eval_bodies, #match_entry_type?

Constructor Details

#initialize(registry, name) ⇒ ListFeatureEntry

Returns a new instance of ListFeatureEntry.



9
10
11
12
# File 'lib/rggen/core/builder/list_feature_entry.rb', line 9

def initialize(registry, name)
  super
  @features = {}
end

Instance Method Details

#define_base_feature(&body) ⇒ Object Also known as: base_feature



26
27
28
# File 'lib/rggen/core/builder/list_feature_entry.rb', line 26

def define_base_feature(&body)
  body && @base_feature.class_exec(&body)
end

#define_default_feature(&body) ⇒ Object Also known as: default_feature



50
51
52
53
# File 'lib/rggen/core/builder/list_feature_entry.rb', line 50

def define_default_feature(&body)
  @default_feature ||= Class.new(@base_feature)
  body && @default_feature.class_exec(&body)
end

#define_factoryObject Also known as: factory



20
21
22
# File 'lib/rggen/core/builder/list_feature_entry.rb', line 20

def define_factory(&)
  @factory.class_exec(&)
end

#define_feature(feature_name, context, bodies) ⇒ Object Also known as: feature



32
33
34
35
36
37
38
39
40
# File 'lib/rggen/core/builder/list_feature_entry.rb', line 32

def define_feature(feature_name, context, bodies)
  feature = @features[feature_name] = Class.new(@base_feature)
  if context
    feature.method_defined?(:shared_context) &&
      (raise BuilderError.new('shared context has already been set'))
    attach_shared_context(context, feature)
  end
  eval_feature_bodies(feature, feature_name, bodies)
end

#delete(features = nil) ⇒ Object



57
58
59
60
61
62
63
# File 'lib/rggen/core/builder/list_feature_entry.rb', line 57

def delete(features = nil)
  if features
    Array(features).each { |feature| @features.delete(feature) }
  else
    @features.clear
  end
end

#feature?(feature) ⇒ Boolean

Returns:

  • (Boolean)


65
66
67
# File 'lib/rggen/core/builder/list_feature_entry.rb', line 65

def feature?(feature)
  @features.key?(feature)
end

#featuresObject



69
70
71
# File 'lib/rggen/core/builder/list_feature_entry.rb', line 69

def features
  @features.keys
end

#modify_feature(feature_name, bodies) ⇒ Object



44
45
46
47
48
# File 'lib/rggen/core/builder/list_feature_entry.rb', line 44

def modify_feature(feature_name, bodies)
  @features.key?(feature_name) ||
    (raise BuilderError.new("unknown feature: #{feature_name}"))
  eval_feature_bodies(@features[feature_name], feature_name, bodies)
end

#setup(base_feature, base_factory, context) ⇒ Object



14
15
16
17
18
# File 'lib/rggen/core/builder/list_feature_entry.rb', line 14

def setup(base_feature, base_factory, context)
  @base_feature = Class.new(base_feature)
  @factory = Class.new(base_factory)
  attach_shared_context(context, @base_feature, @factory, self)
end