Looking for a sample project repository using packwerk and stimpack with multiple subdomains

This message was imported from the Ruby/Rails Modularity Slack server. Find more info in the import thread.

Message originally sent by slack user U7105DCJPN6

Can anyone please share a sample project repository link which uses both packwerk and stimpack with 2 or more subdomains in it ?

2nd on the request. @stephan has code with his new book, but I don’t think he’s using stimpack (just packwerk).

Hey some time ago we started working on an example app here https://github.com/rootstrap/rails-modular-monolith-with-ddd/tree/main-packwerk

We followed the approach as another DDD repo in .NET, so almost all the communication occurs through events (ActiveSupport::Notifications in that branch, in another branch we are using Kafka). There is only 1 example of having a public API (in the user_access component).

oh I just realized we don’t have Stimpack, we did the same but manually. I think it was because they call packs the subdomains folder and we named it components.

@gpassero great point. And timely. I haven’t been doing much for the book because - once again - I got stuck. This will be a great to get me to explore this code!

While I am still working the change into my book dev pipeline, here are the patch I get between c6s04-2b and the new stimpack code:

 ± diff -x log -x tmp -r c6s04-2b c7s01
diff -x log -x tmp -r c6s04-2b/sportsball/.rspec c7s01/sportsball/.rspec
2,4c2
< --default-path packages
< -I spec
<
---

> --require stimpack/rspec
\ No newline at end of file
diff -x log -x tmp -r c6s04-2b/sportsball/Gemfile c7s01/sportsball/Gemfile
5a6,7
> gem "stimpack"
>
diff -x log -x tmp -r c6s04-2b/sportsball/Gemfile.lock c7s01/sportsball/Gemfile.lock
165a166,167
>     nokogiri (1.13.1-x86_64-darwin)
>       racc (~> 1.4)
282a285
>     sorbet-static (0.5.9542-universal-darwin-20)
295a299,301
>     stimpack (0.7.1)
>       activesupport
>       railties
345a352
>   x86_64-darwin-20
368a376
>   stimpack
diff -x log -x tmp -r c6s04-2b/sportsball/config/application.rb c7s01/sportsball/config/application.rb
9a10,11
> Stimpack.config.root = "packages"
>
22d23
<     config.paths.add 'packages', glob: '*/app/{*,*/concerns}', eager_load: true
diff -x log -x tmp -r c6s04-2b/sportsball/packages/rails_shims/app/public/application_controller.rb c7s01/sportsball/packages/rails_shims/app/public/application_controller.rb
3d2
<   append_view_path(Dir.glob(Rails.root.join('packages/*/app/views')))
diff -x log -x tmp -r c6s04-2b/sportsball/spec/spec_helper.rb c7s01/sportsball/spec/spec_helper.rb
41,74d40
<
< # Adjust RSpec configuration for package folder structure
< RSpec.configure do |config|
<   config.define_derived_metadata(file_path: Regexp.new('/spec/packages/.*/controllers')) { |metadata| metadata[:type] = :controller }
<   config.define_derived_metadata(file_path: Regexp.new('/spec/packages/.*/models')) { |metadata| metadata[:type] = :model }
<   config.define_derived_metadata(file_path: Regexp.new('/spec/packages/.*/requests')) { |metadata| metadata[:type] = :request }
<   config.define_derived_metadata(file_path: Regexp.new('/spec/packages/.*/routing')) { |metadata| metadata[:type] = :routing }
<   config.define_derived_metadata(file_path: Regexp.new('/spec/packages/.*/system')) { |metadata| metadata[:type] = :system }
<   config.define_derived_metadata(file_path: Regexp.new('/spec/packages/.*/views')) { |metadata| metadata[:type] = :view }
<
<   config.before(:each, :type => lambda {|v| v == :view}) do
<     Dir.glob(Rails.root + ('app/packages/*/views')).each do |path|
<       view.lookup_context.view_paths.push path
<     end
<   end
< end
<
<
< # Adjust RSpec configuration for package folder structure
< RSpec.configure do |config|
<   config.define_derived_metadata(file_path: Regexp.new('/packages/.*/spec/controllers')) { |metadata| metadata[:type] = :controller }
<   config.define_derived_metadata(file_path: Regexp.new('/packages/.*/spec/models')) { |metadata| metadata[:type] = :model }
<   config.define_derived_metadata(file_path: Regexp.new('/packages/.*/spec/requests')) { |metadata| metadata[:type] = :request }
<   config.define_derived_metadata(file_path: Regexp.new('/packages/.*/spec/routing')) { |metadata| metadata[:type] = :routing }
<   config.define_derived_metadata(file_path: Regexp.new('/packages/.*/spec/system')) { |metadata| metadata[:type] = :system }
<   config.define_derived_metadata(file_path: Regexp.new('/packages/.*/spec/views')) { |metadata| metadata[:type] = :view }
<
<   config.before(:each, :type => lambda {|v| v == :view}) do
<     Dir.glob(Rails.root + ('packages/*/app/views')).each do |path|
<       view.lookup_context.view_paths.push path
<     end
<   end
< end
<
Only in c7s01/sportsball/vendor/cache: nokogiri-1.13.1-x86_64-darwin.gem
Only in c7s01/sportsball/vendor/cache: sorbet-static-0.5.9542-universal-darwin-20.gem
Only in c7s01/sportsball/vendor/cache: stimpack-0.7.1.gem

Basically, in my case, it is all deletions, except for in .rspec where there is a change, config/application.rb where there is an addition, and, of course, Gemfile where I am adding stimpack