feature_pack 0.0.7 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +66 -0
- data/lib/feature_pack.rb +4 -6
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 55973cae577c2295ae4baffaef95d5416d969c8ab76afa261cdf5c38897d977c
|
4
|
+
data.tar.gz: b77ab0ea523c05867e533eae860bc7227166329438c2bd96eba98f77aa08d93b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: be2356f348450d5eadbb8e554253904d1ef6388744eee2c1055c07c3cbfea0bbe6ffa1d59566a64b30f9c4b71bc45d657765446f0c6e8cf7aad5d4d68e84439c
|
7
|
+
data.tar.gz: a0af2ec40af2851ebc0e88366525440096257a8027570621c353682d3000fd777555d243d805e29c6b2f11e1bfcd52657fe5d61ba03288dd0b1d1c855a65de24
|
data/README.md
CHANGED
@@ -1,2 +1,68 @@
|
|
1
1
|
# Feature Pack
|
2
2
|
Organizes and sets up the architecture of micro-applications within a Rails application, enabling the segregation of code, management, and isolation of functionalities, which can be developed, tested, and maintained independently of each other.
|
3
|
+
|
4
|
+
## Installation
|
5
|
+
Meanwhile installer isn't done, follow the steps below to install FeaturePack GEM:
|
6
|
+
|
7
|
+
```ruby
|
8
|
+
# Add feature_pack to Gemfile
|
9
|
+
gem 'feature_pack'
|
10
|
+
```
|
11
|
+
|
12
|
+
```bash
|
13
|
+
bundle install
|
14
|
+
```
|
15
|
+
|
16
|
+
Setup loading
|
17
|
+
```ruby
|
18
|
+
# config/application.rb
|
19
|
+
|
20
|
+
feature_packs_path = Rails.root.join('app/feature_packs')
|
21
|
+
FeaturePack.setup(features_path: feature_packs_path)
|
22
|
+
|
23
|
+
FeaturePack.ignored_paths.each { |path| Rails.autoloaders.main.ignore(Rails.root.join(path)) }
|
24
|
+
|
25
|
+
config.eager_load_paths << FeaturePack.features_path
|
26
|
+
config.paths['app/views'] << FeaturePack.features_path
|
27
|
+
|
28
|
+
config.paths['config/routes'] << (FeaturePack.path.to_s << '/feature_pack')
|
29
|
+
config.paths['config/routes'] << FeaturePack.features_path
|
30
|
+
config.assets.paths << FeaturePack.features_path.to_s
|
31
|
+
|
32
|
+
Zeitwerk::Loader.eager_load_all
|
33
|
+
|
34
|
+
config.after_initialize do
|
35
|
+
load FeaturePack.path.join('feature_pack/group_controller.rb')
|
36
|
+
load FeaturePack.path.join('feature_pack/controller.rb')
|
37
|
+
|
38
|
+
FeaturePack.groups_controllers_paths.each { |group_controller_path| load group_controller_path }
|
39
|
+
FeaturePack.features_controllers_paths.each { |controller_path| load controller_path }
|
40
|
+
end
|
41
|
+
```
|
42
|
+
|
43
|
+
```ruby
|
44
|
+
# initializers/feature_pack.rb
|
45
|
+
|
46
|
+
FeaturePack.groups.each do |group|
|
47
|
+
group_module = FeaturePack.const_set(group.name.name.camelize, Module.new)
|
48
|
+
|
49
|
+
%w[Lib AI Jobs].each do |submodule_name|
|
50
|
+
submodule_path = File.join(group.relative_path, '_group_metadata', submodule_name.downcase)
|
51
|
+
if Dir.exist?(submodule_path)
|
52
|
+
submodule = group_module.const_set(submodule_name, Module.new)
|
53
|
+
Rails.autoloaders.main.push_dir(submodule_path, namespace: submodule)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
group.features.each do |feature|
|
58
|
+
feature_module = group_module.const_set(feature.name.name.camelize, Module.new)
|
59
|
+
Rails.autoloaders.main.push_dir(feature.relative_path, namespace: feature_module)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
```
|
63
|
+
|
64
|
+
```ruby
|
65
|
+
# app/helpers/application_helper.rb
|
66
|
+
def feature_pack_group_path(group, *params) = send("feature_pack_#{group.name}_path".to_sym, *params)
|
67
|
+
def feature_pack_path(group, feature, *params) = send("feature_pack_#{group.name}_#{feature.name}_path".to_sym, *params)
|
68
|
+
```
|
data/lib/feature_pack.rb
CHANGED
@@ -35,9 +35,6 @@ module FeaturePack
|
|
35
35
|
@@javascript_files_paths = Dir.glob("#{@@features_path}/[!_]*/**/*.js")
|
36
36
|
.map { |js_path| js_path.sub(/^#{Regexp.escape(@@features_path.to_s)}\//, '') }.to_a
|
37
37
|
|
38
|
-
# @@layouts_paths = Dir.glob("#{@@features_path}/[!_]*/**/views/layouts")
|
39
|
-
# .map { |layout_path| layout_path.delete_suffix '/layouts' }
|
40
|
-
|
41
38
|
ATTR_READERS.each { |attr| define_singleton_method(attr) { class_variable_get("@@#{attr}") } }
|
42
39
|
|
43
40
|
@@ignored_paths << @@path.join('feature_pack/feature_pack_routes.rb')
|
@@ -80,7 +77,8 @@ module FeaturePack
|
|
80
77
|
|
81
78
|
feature_name = base_path.gsub(FEATURE_ID_PATTERN, '').to_sym
|
82
79
|
feature_class_name = "#{group.name.name.camelize}::#{feature_name.name.camelize}"
|
83
|
-
|
80
|
+
|
81
|
+
# FIX-ME (decouple Params class)
|
84
82
|
# params_class_name = "#{feature_pack_class_name}::Params"
|
85
83
|
|
86
84
|
routes_file_path = relative_path.join('routes.rb')
|
@@ -110,12 +108,12 @@ module FeaturePack
|
|
110
108
|
views_absolute_path: absolute_path.join('views'),
|
111
109
|
views_relative_path: relative_path.sub(/^#{Regexp.escape(@@features_path.to_s)}\//, '').join('views'),
|
112
110
|
class_name: feature_class_name,
|
113
|
-
# FIX-ME
|
111
|
+
# FIX-ME (decouple Params class)
|
114
112
|
#params_class_name: params_class_name,
|
115
113
|
manifest: YAML.load_file(File.join(feature_path, MANIFEST_FILE_NAME)).deep_symbolize_keys
|
116
114
|
)
|
117
115
|
|
118
|
-
# FIX-ME
|
116
|
+
# FIX-ME (decouple Params class)
|
119
117
|
# def feature.params_class = params_class_name.constantize
|
120
118
|
def feature.view(view_name) = "#{views_relative_path}/#{view_name}"
|
121
119
|
|