packs-rails 0.0.3 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 86b24d9e3e2adf0c50759fd39ec774e7d2b9e15776856b2ec0da408cc23c2994
4
- data.tar.gz: 91271c3dd67896da4f43f402af7a487e26127724e8227af7984cd0a8c0471f6f
3
+ metadata.gz: c4b16ad1fd38eabdd5c57a587cf893991dc3d67a84bc0111f04e647d67878b63
4
+ data.tar.gz: bfaaaee8ef07fd9dbf5f7056133c18f294095a3db369cc56d10ffa0f8c0edd0d
5
5
  SHA512:
6
- metadata.gz: b61003f0dcb3b03c95fa58b5867937d663d09d7a6554a39a9f536a9b06b43fd1ef658fe1f02eafac25ae80e893ae9fa238af95f3c3962298536e7c1926701754
7
- data.tar.gz: be3f59f451118f069e4e697554b668a3b161b5686222ebd013b00f3359dbb798c2cb68a98fea01def41ceb1a743538d8c4963f9cd5cca5d9ba33d5bbcf46fc92
6
+ metadata.gz: 424e39b8c152ee19afb8b85ac5a393145bef1315a7a88acf3fd55bf18033503d4a817313543d397c3b2210013de9aa765a1831f63ee4ffa8a6e5c45e95653e03
7
+ data.tar.gz: f99f87275c735db75b54dac68001fb3dedef117906b7cd20e6b392df96d200348961e69591fb8979784e855f39526a3cabe372f5626f73d95e5bc8b7b823d4cf
data/README.md CHANGED
@@ -11,7 +11,7 @@ app/ # Unpackaged code
11
11
  packs/
12
12
  my_domain/
13
13
  package.yml # See the packwerk docs for more info
14
- deprecated_references.yml # See the packwerk docs for more info
14
+ package_todo.yml # See the packwerk docs for more info
15
15
  app/
16
16
  public/ # Recommended location for public API
17
17
  my_domain.rb # creates the primary namespaces
@@ -42,7 +42,7 @@ packs/
42
42
  some_other_non_namespaced_private_model_spec.rb
43
43
  my_domain/
44
44
  my_private_namespaced_model_spec.rb
45
- factories/ # packs-rails will automatically load pack factories into FactoryBot
45
+ factories/ # packs-rails will automatically load pack factories into FactoryBot, see Ecosystem and Integrations#factory_bot below
46
46
  my_domain/
47
47
  my_private_namespaced_model_factory.rb
48
48
  my_other_domain/
@@ -53,21 +53,23 @@ packs/
53
53
 
54
54
  ## Usage
55
55
 
56
- Setting up `packs-rails` is straightforward. Simply by including `packs-rails` in your `Gemfile` in all environments, `packs-rails` will automatically hook into and configure Rails.
56
+ Setting up `packs-rails` is straightforward. Simply by including `packs-rails` in your `Gemfile` in **all environments**, `packs-rails` will automatically hook into and configure Rails.
57
57
 
58
58
  From there, you can create a `./packs` folder and structure it using the conventions listed above.
59
59
 
60
60
  If you wish to use a different directory name, eg `components` instead of `packs`, you can customize this by configuring `packs.yml`. See [`packs`](https://github.com/rubyatscale/packs) for more information.
61
61
 
62
62
  ### Splitting routes
63
- `packs-rails` allows you to split your application routes for every pack. You just have to create a file describing your routes and then `draw` them in your root `config/routes.rb` file.
63
+ `packs-rails` allows you to split your application routes for every pack. You just have to create a file describing your routes and then `draw` them in your root `config/routes.rb` file (NOTE: the `draw` function is only in Rails 6.1+).
64
64
 
65
65
  ```ruby
66
66
  # packs/my_domain/config/routes/my_domain.rb
67
67
  resources :my_resource
68
68
 
69
69
  # config/routes.rb
70
- draw(:my_domain)
70
+ Rails.application.routes.draw do
71
+ draw(:my_domain)
72
+ end
71
73
  ```
72
74
 
73
75
  ### Making your Package an Engine
@@ -80,6 +82,18 @@ metadata:
80
82
  engine: true
81
83
  ```
82
84
 
85
+ Add `engine_name: ` to your `package.yml` to use a specific, maybe namespaced, engine name instead of the last package folder name.
86
+ ```yml
87
+ # packs/my_pack/package.yml
88
+ enforce_dependencies: true
89
+ enforce_privacy: true
90
+ metadata:
91
+ engine: true
92
+ engine_name: namespaced/my_pack
93
+ ```
94
+
95
+ The engine is created as `Namespaced::MyPack::Engine` instead of `MyPack::Engine`.
96
+
83
97
  ## Ecosystem and Integrations
84
98
 
85
99
  ### RSpec Integration
@@ -111,6 +125,31 @@ rspec packs/foobar/spec
111
125
  rspec packs/foobar/nested_pack
112
126
  ```
113
127
 
128
+ #### factory_bot and factory_bot_rails
129
+
130
+ Ensure you have the gem in your Gemfile, and that `require: false` is not present, otherwise the `packs-rails` FactoryBot integration will not be run upon application/environment load.
131
+ This integration will automatically add the `[spec|test]/factories` directory from each pack to the application's `config.factory_bot.definition_file_paths`.
132
+
133
+ Using the example application above:
134
+ ```
135
+ ...
136
+ packs/
137
+ my_domain/
138
+ ...
139
+ spec/ # OR test/
140
+ ...
141
+ factories/
142
+ my_domain/
143
+ my_private_namespaced_model_factory.rb
144
+ my_other_domain/
145
+ ...
146
+ spec/ # OR test/
147
+ ...
148
+ factories/
149
+ my_other_domain/
150
+ my_private_namespaced_model_factory.rb
151
+ ```
152
+
114
153
  #### parallel_tests
115
154
 
116
155
  `parallel_tests` has it its own spec discovery mechanism, so packs-rails's RSpec integration doesn't do anything when you use them together.
@@ -9,6 +9,7 @@ module Packs
9
9
 
10
10
  Packs.all.reject(&:is_gem?).each do |pack|
11
11
  app.config.factory_bot.definition_file_paths << pack.relative_path.join("spec/factories").to_s
12
+ app.config.factory_bot.definition_file_paths << pack.relative_path.join("test/factories").to_s
12
13
  end
13
14
  end
14
15
  end
@@ -7,6 +7,8 @@ module Packs
7
7
  module Rails
8
8
  module Integrations
9
9
  class Rails
10
+ CONFIG_ROUTES_PATH = "config/routes".freeze
11
+
10
12
  def initialize(app)
11
13
  @app = app
12
14
 
@@ -27,6 +29,10 @@ module Packs
27
29
  def inject_paths
28
30
  Packs.all.reject(&:is_gem?).each do |pack|
29
31
  Packs::Rails.config.paths.each do |path|
32
+ # Prior to Rails 6.1, the "config/routes" app path is nil and was not added until drawable routes feature was implemented
33
+ # https://github.com/rails/rails/pull/37892/files#diff-a785e41df3f87063a8fcffcac726856a25d8eae6d1f9bca2b36989fe88613f8eR62
34
+ next if pre_rails_6_1? && path == CONFIG_ROUTES_PATH
35
+
30
36
  @app.paths[path] << pack.relative_path.join(path)
31
37
  end
32
38
  end
@@ -34,6 +40,11 @@ module Packs
34
40
 
35
41
  private
36
42
 
43
+ def pre_rails_6_1?
44
+ return @_pre_rails_6_1 if defined?(@_pre_rails_6_1)
45
+ @_pre_rails_6_1 = ::Rails.gem_version < Gem::Version.new("6.1")
46
+ end
47
+
37
48
  def create_namespace(name)
38
49
  namespace = ActiveSupport::Inflector.camelize(name)
39
50
  namespace.split("::").reduce(Object) do |base, mod|
@@ -46,7 +57,7 @@ module Packs
46
57
  end
47
58
 
48
59
  def create_engine(pack)
49
- name = pack.last_name
60
+ name = pack.metadata.fetch("engine_name", pack.last_name)
50
61
  namespace = create_namespace(name)
51
62
  stim = Stim.new(pack, namespace)
52
63
  namespace.const_set("Engine", Class.new(::Rails::Engine)).include(stim)
@@ -11,6 +11,7 @@ module Packs
11
11
  # hook into packs-rails via ActiveSupport hooks.
12
12
  ActiveSupport.run_load_hooks(:packs_rails, Packs)
13
13
  end
14
+
14
15
  end
15
16
  end
16
17
  end
@@ -1,5 +1,5 @@
1
1
  module Packs
2
2
  module Rails
3
- VERSION = "0.0.3".freeze
3
+ VERSION = "0.0.5".freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: packs-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ngan Pham
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-02-27 00:00:00.000000000 Z
11
+ date: 2023-12-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties