class RgGen::Core::Builder::FeatureRegistry

Constants

FEATURE_ENTRIES

Public Class Methods

new(base_feature, factory) click to toggle source
# File lib/rggen/core/builder/feature_registry.rb, line 7
def initialize(base_feature, factory)
  @base_feature = base_feature
  @factory = factory
  @feature_entries = {}
  @enabled_features = {}
end

Public Instance Methods

build_factories() click to toggle source
# File lib/rggen/core/builder/feature_registry.rb, line 90
def build_factories
  @feature_entries
    .slice(*@enabled_features.keys)
    .transform_values(&method(:build_factory))
end
define_list_feature(list_name, context = nil, &body) click to toggle source
# File lib/rggen/core/builder/feature_registry.rb, line 18
def define_list_feature(list_name, context = nil, &body)
  create_new_entry(:list, list_name, context, &body)
end
define_list_item_feature(list_name, feature_name, context = nil, &body) click to toggle source
# File lib/rggen/core/builder/feature_registry.rb, line 22
def define_list_item_feature(list_name, feature_name, context = nil, &body)
  entry = @feature_entries[list_name]
  entry&.match_entry_type?(:list) ||
    (raise BuilderError.new("unknown list feature: #{list_name}"))
  entry.define_feature(feature_name, context, &body)
end
define_simple_feature(name, context = nil, &body) click to toggle source
# File lib/rggen/core/builder/feature_registry.rb, line 14
def define_simple_feature(name, context = nil, &body)
  create_new_entry(:simple, name, context, &body)
end
delete(feature_or_list_names = nil, feature_names = nil) click to toggle source
# File lib/rggen/core/builder/feature_registry.rb, line 60
def delete(feature_or_list_names = nil, feature_names = nil)
  if feature_names
    @feature_entries[feature_or_list_names]&.delete(feature_names)
  elsif feature_or_list_names
    Array(feature_or_list_names)
      .each(&@feature_entries.method(:delete))
  else
    @feature_entries.clear
  end
end
disable(feature_or_list_names = nil, feature_names = nil) click to toggle source
# File lib/rggen/core/builder/feature_registry.rb, line 48
def disable(feature_or_list_names = nil, feature_names = nil)
  if feature_names
    @enabled_features[feature_or_list_names]
      &.delete_if { |key, _| Array(feature_names).include?(key) }
  elsif feature_or_list_names
    Array(feature_or_list_names)
      .each(&@enabled_features.method(:delete))
  else
    @enabled_features.clear
  end
end
enable(feature_or_list_names, feature_names = nil) click to toggle source
# File lib/rggen/core/builder/feature_registry.rb, line 29
def enable(feature_or_list_names, feature_names = nil)
  if feature_names
    @enabled_features[feature_or_list_names]
      &.merge!(Array(feature_names))
  else
    Array(feature_or_list_names).each do |name|
      @enabled_features[name] ||= []
    end
  end
end
enabled_features(list_name = nil) click to toggle source
# File lib/rggen/core/builder/feature_registry.rb, line 40
def enabled_features(list_name = nil)
  if list_name
    @enabled_features[list_name] || []
  else
    @enabled_features.keys
  end
end
feature?(feature_or_list_name, feature_name = nil) click to toggle source
# File lib/rggen/core/builder/feature_registry.rb, line 81
def feature?(feature_or_list_name, feature_name = nil)
  if feature_name
    list_feature?(feature_or_list_name, feature_name)
  else
    simple_feature?(feature_or_list_name) ||
      list_feature?(feature_or_list_name)
  end
end
list_feature?(list_name, feature_name = nil) click to toggle source
# File lib/rggen/core/builder/feature_registry.rb, line 75
def list_feature?(list_name, feature_name = nil)
  return false unless enabled_feature?(list_name, :list)
  return true unless feature_name
  enabled_list_item_feature?(list_name, feature_name)
end
simple_feature?(feature_name) click to toggle source
# File lib/rggen/core/builder/feature_registry.rb, line 71
def simple_feature?(feature_name)
  enabled_feature?(feature_name, :simple)
end

Private Instance Methods

build_factory(entry) click to toggle source
# File lib/rggen/core/builder/feature_registry.rb, line 120
def build_factory(entry)
  entry.build_factory(@enabled_features[entry.name])
end
create_new_entry(type, name, context, &body) click to toggle source
# File lib/rggen/core/builder/feature_registry.rb, line 102
def create_new_entry(type, name, context, &body)
  entry = FEATURE_ENTRIES[type].new(self, name)
  entry.setup(@base_feature, @factory, context, &body)
  @feature_entries[name] = entry
end
enabled_feature?(name, entry_type) click to toggle source
# File lib/rggen/core/builder/feature_registry.rb, line 108
def enabled_feature?(name, entry_type)
  return false unless @feature_entries[name]
                        &.match_entry_type?(entry_type)
  @enabled_features.key?(name)
end
enabled_list_item_feature?(list_name, feature_name) click to toggle source
# File lib/rggen/core/builder/feature_registry.rb, line 114
def enabled_list_item_feature?(list_name, feature_name)
  return false unless @feature_entries[list_name]
                        .feature?(feature_name)
  @enabled_features[list_name].include?(feature_name)
end