class RgGen::Core::Builder::Layer

Public Class Methods

new(name) click to toggle source
# File lib/rggen/core/builder/layer.rb, line 35
def initialize(name)
  @name = name
  @feature_registries = {}
end

Public Instance Methods

add_feature_registry(name, registry) click to toggle source
# File lib/rggen/core/builder/layer.rb, line 40
def add_feature_registry(name, registry)
  @feature_registries[name] = registry
  define_proxy_call(name)
end
define_list_feature(list_names, &body) click to toggle source
# File lib/rggen/core/builder/layer.rb, line 66
def define_list_feature(list_names, &body)
  Array(list_names).each do |list_name|
    do_proxy_call do |proxy|
      proxy.body(body)
      proxy.method_name(__method__)
      proxy.list_name(list_name)
    end
  end
end
define_list_item_feature(list_name, feature_names, &body) click to toggle source
# File lib/rggen/core/builder/layer.rb, line 76
def define_list_item_feature(list_name, feature_names, &body)
  Array(feature_names).each do |feature_name|
    do_proxy_call do |proxy|
      proxy.body(body)
      proxy.method_name(__method__)
      proxy.list_name(list_name)
      proxy.feature_name(feature_name)
    end
  end
end
define_simple_feature(feature_names, &body) click to toggle source
# File lib/rggen/core/builder/layer.rb, line 56
def define_simple_feature(feature_names, &body)
  Array(feature_names).each do |feature_name|
    do_proxy_call do |proxy|
      proxy.body(body)
      proxy.method_name(__method__)
      proxy.feature_name(feature_name)
    end
  end
end
delete(feature_or_list_names = nil, feature_names = nil) click to toggle source
# File lib/rggen/core/builder/layer.rb, line 99
def delete(feature_or_list_names = nil, feature_names = nil)
  @feature_registries.each_value do |registry|
    registry.delete(*[feature_or_list_names, feature_names].compact)
  end
end
disable(feature_or_list_names = nil, feature_names = nil) click to toggle source
# File lib/rggen/core/builder/layer.rb, line 93
def disable(feature_or_list_names = nil, feature_names = nil)
  @feature_registries.each_value do |registry|
    registry.disable(*[feature_or_list_names, feature_names].compact)
  end
end
enable(feature_or_list_names, feature_names = nil) click to toggle source
# File lib/rggen/core/builder/layer.rb, line 87
def enable(feature_or_list_names, feature_names = nil)
  @feature_registries.each_value do |registry|
    registry.enable(feature_or_list_names, feature_names)
  end
end
shared_context(&body) click to toggle source
# File lib/rggen/core/builder/layer.rb, line 45
def shared_context(&body)
  return unless @proxy

  if block_given?
    context = current_shared_context(true)
    context.singleton_exec(&body)
  end

  current_shared_context(false)
end

Private Instance Methods

current_shared_context(allocate) click to toggle source
# File lib/rggen/core/builder/layer.rb, line 119
def current_shared_context(allocate)
  list_name = @proxy.list_name || @proxy.feature_name
  feature_name = @proxy.feature_name
  allocate && (shared_contexts[list_name][feature_name] ||= Object.new)
  shared_contexts[list_name][feature_name]
end
define_proxy_call(name) click to toggle source
# File lib/rggen/core/builder/layer.rb, line 107
def define_proxy_call(name)
  define_singleton_method(name) do |&body|
    @proxy.register_execution(@feature_registries[__method__], &body)
  end
end
do_proxy_call(&block) click to toggle source
# File lib/rggen/core/builder/layer.rb, line 113
def do_proxy_call(&block)
  @proxy = Proxy.new(&block)
  @proxy.execute(self)
  remove_instance_variable(:@proxy)
end
shared_contexts() click to toggle source
# File lib/rggen/core/builder/layer.rb, line 126
def shared_contexts
  @shared_contexts ||= Hash.new { |h, k| h[k] = {} }
end