Class: RgGen::Core::Builder::FeatureRegistry

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

Instance Method Summary collapse

Constructor Details

#initialize(base_feature, factory) ⇒ FeatureRegistry

Returns a new instance of FeatureRegistry.



7
8
9
10
11
12
# 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

Instance Method Details

#build_factoriesObject



105
106
107
108
109
# File 'lib/rggen/core/builder/feature_registry.rb', line 105

def build_factories
  @feature_entries
    .slice(*@enabled_features.keys)
    .transform_values(&method(:build_factory))
end

#define_feature(name, context, bodies) ⇒ Object



14
15
16
# File 'lib/rggen/core/builder/feature_registry.rb', line 14

def define_feature(name, context, bodies)
  create_new_entry(:general, name, context, bodies)
end

#define_list_feature(list_name, context, bodies) ⇒ Object



22
23
24
# File 'lib/rggen/core/builder/feature_registry.rb', line 22

def define_list_feature(list_name, context, bodies)
  create_new_entry(:list, list_name, context, bodies)
end

#define_list_item_feature(list_name, feature_name, context, bodies) ⇒ Object



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

def define_list_item_feature(list_name, feature_name, context, bodies)
  list_item_entry(list_name).define_feature(feature_name, context, bodies)
end

#define_simple_feature(name, context, bodies) ⇒ Object



18
19
20
# File 'lib/rggen/core/builder/feature_registry.rb', line 18

def define_simple_feature(name, context, bodies)
  create_new_entry(:simple, name, context, bodies)
end

#delete(list_name_or_feature_names, feature_names = nil) ⇒ Object



72
73
74
75
76
77
78
79
80
# File 'lib/rggen/core/builder/feature_registry.rb', line 72

def delete(list_name_or_feature_names, feature_names = nil)
  feature_names, list_name =
    [feature_names, list_name_or_feature_names].compact
  if list_name
    @feature_entries[list_name]&.delete(feature_names)
  else
    Array(feature_names).each(&@feature_entries.method(:delete))
  end
end

#delete_allObject



82
83
84
85
# File 'lib/rggen/core/builder/feature_registry.rb', line 82

def delete_all
  @feature_entries.clear
  @enabled_features.clear
end

#disable_allObject



68
69
70
# File 'lib/rggen/core/builder/feature_registry.rb', line 68

def disable_all
  @enabled_features.clear
end

#enable(list_name_or_feature_names, feature_names = nil) ⇒ Object



46
47
48
49
50
51
52
53
54
55
# File 'lib/rggen/core/builder/feature_registry.rb', line 46

def enable(list_name_or_feature_names, feature_names = nil)
  feature_names, list_name =
    [feature_names, list_name_or_feature_names].compact
  Array(list_name || feature_names)
    .each { |name| @enabled_features[name] ||= [] }

  return unless list_name

  @enabled_features[list_name].merge!(Array(feature_names))
end

#enable_allObject



57
58
59
60
61
62
63
64
65
66
# File 'lib/rggen/core/builder/feature_registry.rb', line 57

def enable_all
  disable_all
  @feature_entries.each do |name, entry|
    if entry.match_entry_type?(:list)
      enable(name, entry.features)
    else
      enable(name)
    end
  end
end

#enabled_features(list_name = nil) ⇒ Object



97
98
99
100
101
102
103
# File 'lib/rggen/core/builder/feature_registry.rb', line 97

def enabled_features(list_name = nil)
  if !list_name
    @enabled_features.keys.select { |name| feature?(name) }
  elsif enabled_list?(list_name)
    @enabled_features[list_name] & @feature_entries[list_name].features
  end
end

#feature?(list_name_or_feature_name, feature_name = nil) ⇒ Boolean

Returns:

  • (Boolean)


87
88
89
90
91
92
93
94
95
# File 'lib/rggen/core/builder/feature_registry.rb', line 87

def feature?(list_name_or_feature_name, feature_name = nil)
  feature_name, list_name =
    [feature_name, list_name_or_feature_name].compact
  if list_name
    list_feature?(list_name, feature_name)
  else
    @feature_entries.key?(feature_name)
  end
end

#modify_feature(name, bodies) ⇒ Object



30
31
32
# File 'lib/rggen/core/builder/feature_registry.rb', line 30

def modify_feature(name, bodies)
  modify_entry(:general, name, bodies)
end

#modify_list_feature(list_name, bodies) ⇒ Object



38
39
40
# File 'lib/rggen/core/builder/feature_registry.rb', line 38

def modify_list_feature(list_name, bodies)
  modify_entry(:list, list_name, bodies)
end

#modify_list_item_feature(list_name, feature_name, bodies) ⇒ Object



42
43
44
# File 'lib/rggen/core/builder/feature_registry.rb', line 42

def modify_list_item_feature(list_name, feature_name, bodies)
  list_item_entry(list_name).modify_feature(feature_name, bodies)
end

#modify_simple_feature(name, bodies) ⇒ Object



34
35
36
# File 'lib/rggen/core/builder/feature_registry.rb', line 34

def modify_simple_feature(name, bodies)
  modify_entry(:simple, name, bodies)
end