Module: FeaturePack

Defined in:
lib/feature_pack.rb,
lib/generators/feature_pack/add_group/add_group_generator.rb,
lib/generators/feature_pack/add_feature/add_feature_generator.rb

Overview

FeaturePack module provides a way to organize Rails applications into groups and features, enabling better code organization and isolation

Defined Under Namespace

Modules: Error Classes: AddFeatureGenerator, AddGroupGenerator, Controller, GroupController

Constant Summary collapse

GROUP_ID_PATTERN =

Pattern constants for identifying groups and features

/^group_.*?_/.freeze
FEATURE_ID_PATTERN =
/^feature_.*?_/.freeze
GROUP_SPACE_DIRECTORY =

Directory and file name constants

'_group_space'.freeze
MANIFEST_FILE_NAME =
'manifest.yaml'.freeze
CONTROLLER_FILE_NAME =
'controller.rb'.freeze
AFTER_INITIALIZE_FILE_NAME =
'__after_initialize.rb'.freeze
ATTR_READERS =

Attribute readers that will be dynamically defined

i[
  path
  features_path
  ignored_paths
  groups
  groups_controllers_paths
  features_controllers_paths
  javascript_files_paths
].freeze

Class Method Summary collapse

Class Method Details

.feature(group_name, feature_name) ⇒ OpenStruct?

Finds a feature within a group

Parameters:

  • group_name (Symbol)

    The name of the group

  • feature_name (Symbol)

    The name of the feature

Returns:

  • (OpenStruct, nil)

    The feature object or nil if not found



49
50
51
52
53
54
# File 'lib/feature_pack.rb', line 49

def feature(group_name, feature_name)
  requested_group = group(group_name)
  return nil if requested_group.nil?
  
  requested_group.feature(feature_name)
end

.group(group_name) ⇒ OpenStruct?

Finds a group by name

Parameters:

  • group_name (Symbol)

    The name of the group

Returns:

  • (OpenStruct, nil)

    The group object or nil if not found



43
# File 'lib/feature_pack.rb', line 43

def group(group_name) = @@groups.find { it.name.eql?(group_name) }

.setupObject

Sets up the FeaturePack system This method should be called once during Rails initialization



30
31
32
33
34
35
36
37
38
# File 'lib/feature_pack.rb', line 30

def setup
  raise 'FeaturePack already setup!' if defined?(@@setup_executed_flag)

  initialize_paths
  load_dependencies
  discover_groups
  discover_features
  finalize_setup
end