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