rage_arch 0.1.4 → 0.2.1

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.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +125 -69
  3. data/lib/generators/rage_arch/controller_generator.rb +53 -0
  4. data/lib/generators/rage_arch/dep_generator.rb +2 -0
  5. data/lib/generators/rage_arch/job_generator.rb +28 -0
  6. data/lib/generators/rage_arch/mailer_generator.rb +42 -0
  7. data/lib/generators/rage_arch/resource_generator.rb +110 -0
  8. data/lib/generators/rage_arch/scaffold_generator.rb +0 -12
  9. data/lib/generators/rage_arch/templates/controller/action_use_case.rb.tt +12 -0
  10. data/lib/generators/rage_arch/templates/controller/controller.rb.tt +12 -0
  11. data/lib/generators/rage_arch/templates/dep.rb.tt +1 -1
  12. data/lib/generators/rage_arch/templates/job/job.rb.tt +15 -0
  13. data/lib/generators/rage_arch/templates/mailer/mailer_dep.rb.tt +17 -0
  14. data/lib/generators/rage_arch/templates/rage_arch.rb.tt +5 -8
  15. data/lib/generators/rage_arch/templates/scaffold/controller.rb.tt +8 -3
  16. data/lib/generators/rage_arch/templates/scaffold/create.rb.tt +0 -1
  17. data/lib/generators/rage_arch/templates/scaffold/destroy.rb.tt +0 -1
  18. data/lib/generators/rage_arch/templates/scaffold/list.rb.tt +0 -1
  19. data/lib/generators/rage_arch/templates/scaffold/new.rb.tt +0 -1
  20. data/lib/generators/rage_arch/templates/scaffold/post_repo.rb.tt +1 -1
  21. data/lib/generators/rage_arch/templates/scaffold/show.rb.tt +0 -1
  22. data/lib/generators/rage_arch/templates/scaffold/update.rb.tt +0 -1
  23. data/lib/generators/rage_arch/templates/use_case.rb.tt +2 -4
  24. data/lib/rage_arch/auto_registry.rb +95 -0
  25. data/lib/rage_arch/container.rb +36 -3
  26. data/lib/rage_arch/railtie.rb +6 -10
  27. data/lib/rage_arch/rspec_helpers.rb +19 -0
  28. data/lib/rage_arch/subscriber_job.rb +13 -0
  29. data/lib/rage_arch/use_case.rb +102 -35
  30. data/lib/rage_arch/version.rb +1 -1
  31. data/lib/rage_arch.rb +37 -3
  32. metadata +18 -8
  33. data/lib/generators/rage_arch/ar_dep_generator.rb +0 -74
  34. data/lib/generators/rage_arch/templates/ar_dep.rb.tt +0 -46
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rage_arch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rage Corp
@@ -65,24 +65,31 @@ dependencies:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
67
  version: '3.0'
68
- description: Gem to structure Rails apps with use cases, dependencies injectable by
69
- symbol, and Result object (success/failure). Includes container, use case base,
70
- and rails g rage_arch:use_case generator.
68
+ description: Structure Rails apps with use cases, auto-registered dependencies, and
69
+ Result objects. Features convention-based wiring, domain events with async subscribers,
70
+ undo/rollback, ActiveRecord integration, and generators for scaffolds, use cases,
71
+ and deps.
71
72
  email:
72
- - ''
73
+ - antonio.facundo1794@gmail.com
73
74
  executables: []
74
75
  extensions: []
75
76
  extra_rdoc_files: []
76
77
  files:
77
78
  - LICENSE
78
79
  - README.md
79
- - lib/generators/rage_arch/ar_dep_generator.rb
80
+ - lib/generators/rage_arch/controller_generator.rb
80
81
  - lib/generators/rage_arch/dep_generator.rb
81
82
  - lib/generators/rage_arch/dep_switch_generator.rb
82
83
  - lib/generators/rage_arch/install_generator.rb
84
+ - lib/generators/rage_arch/job_generator.rb
85
+ - lib/generators/rage_arch/mailer_generator.rb
86
+ - lib/generators/rage_arch/resource_generator.rb
83
87
  - lib/generators/rage_arch/scaffold_generator.rb
84
- - lib/generators/rage_arch/templates/ar_dep.rb.tt
88
+ - lib/generators/rage_arch/templates/controller/action_use_case.rb.tt
89
+ - lib/generators/rage_arch/templates/controller/controller.rb.tt
85
90
  - lib/generators/rage_arch/templates/dep.rb.tt
91
+ - lib/generators/rage_arch/templates/job/job.rb.tt
92
+ - lib/generators/rage_arch/templates/mailer/mailer_dep.rb.tt
86
93
  - lib/generators/rage_arch/templates/rage_arch.rb.tt
87
94
  - lib/generators/rage_arch/templates/scaffold/api_controller.rb.tt
88
95
  - lib/generators/rage_arch/templates/scaffold/controller.rb.tt
@@ -96,6 +103,7 @@ files:
96
103
  - lib/generators/rage_arch/templates/use_case.rb.tt
97
104
  - lib/generators/rage_arch/use_case_generator.rb
98
105
  - lib/rage_arch.rb
106
+ - lib/rage_arch/auto_registry.rb
99
107
  - lib/rage_arch/container.rb
100
108
  - lib/rage_arch/controller.rb
101
109
  - lib/rage_arch/dep.rb
@@ -105,7 +113,9 @@ files:
105
113
  - lib/rage_arch/fake_event_publisher.rb
106
114
  - lib/rage_arch/railtie.rb
107
115
  - lib/rage_arch/result.rb
116
+ - lib/rage_arch/rspec_helpers.rb
108
117
  - lib/rage_arch/rspec_matchers.rb
118
+ - lib/rage_arch/subscriber_job.rb
109
119
  - lib/rage_arch/use_case.rb
110
120
  - lib/rage_arch/version.rb
111
121
  homepage: https://github.com/AntonioFacundo/rage_arch
@@ -129,5 +139,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
129
139
  requirements: []
130
140
  rubygems_version: 4.0.3
131
141
  specification_version: 4
132
- summary: 'Clean Architecture Light for Rails: use cases, injectable deps, Result.'
142
+ summary: Convention-over-configuration Clean Architecture for Rails.
133
143
  test_files: []
@@ -1,74 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "rails/generators/base"
4
- require "rage_arch/dep_scanner"
5
-
6
- module RageArch
7
- module Generators
8
- class ArDepGenerator < ::Rails::Generators::Base
9
- source_root File.expand_path("templates", __dir__)
10
-
11
- argument :symbol_arg, type: :string, required: true, banner: "SYMBOL"
12
- argument :model_arg, type: :string, required: true, banner: "MODEL"
13
-
14
- desc "Create a dep class that wraps an Active Record model (build, find, save, update, destroy, list). Scans use cases for extra method calls and adds stubs for them. Example: rails g rage_arch:ar_dep post_store Post"
15
- def create_ar_dep
16
- @extra_methods = extra_methods
17
- template "ar_dep.rb.tt", File.join("app/deps", module_dir, "#{dep_file_name}.rb")
18
- say "Register in config/initializers/rage_arch.rb: RageArch.register(:#{symbol_name}, #{full_class_name}.new)", :green
19
- end
20
-
21
- STANDARD_AR_METHODS = %i[build find save update destroy list].freeze
22
-
23
- # Methods that use cases call on this dep but are not in the standard AR adapter
24
- def extra_methods
25
- detected = scanner.methods_for(symbol_name).to_a
26
- (detected - STANDARD_AR_METHODS).sort
27
- end
28
-
29
- def symbol_name
30
- symbol_arg.to_s.underscore
31
- end
32
-
33
- def model_name
34
- model_arg.camelize
35
- end
36
-
37
- def module_dir
38
- inferred_module_dir || use_case_folder
39
- end
40
-
41
- def module_name
42
- module_dir.camelize
43
- end
44
-
45
- def use_case_folder
46
- scanner.folder_for(symbol_name)
47
- end
48
-
49
- def inferred_module_dir
50
- entity = symbol_name.split("_").first
51
- entity.pluralize
52
- end
53
-
54
- def dep_file_name
55
- symbol_name
56
- end
57
-
58
- def class_name
59
- symbol_name.camelize
60
- end
61
-
62
- def full_class_name
63
- "#{module_name}::#{class_name}"
64
- end
65
-
66
- def scanner
67
- @scanner ||= begin
68
- root = destination_root
69
- RageArch::DepScanner.new(File.join(root, "app", "use_cases")).tap(&:scan)
70
- end
71
- end
72
- end
73
- end
74
- end
@@ -1,46 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Dep for :<%= symbol_name %>. Wraps the <%= model_name %> Active Record model.
4
- # Register in config/initializers/rage_arch.rb: RageArch.register(:<%= symbol_name %>, <%= full_class_name %>.new)
5
- module <%= module_name %>
6
- class <%= class_name %>
7
- def initialize
8
- @adapter = RageArch::Deps::ActiveRecord.for(<%= model_name %>)
9
- end
10
-
11
- def build(attrs = {})
12
- @adapter.build(attrs)
13
- end
14
-
15
- def find(id)
16
- @adapter.find(id)
17
- end
18
-
19
- def save(record)
20
- @adapter.save(record)
21
- end
22
-
23
- def update(record, attrs)
24
- @adapter.update(record, attrs)
25
- end
26
-
27
- def destroy(record)
28
- @adapter.destroy(record)
29
- end
30
-
31
- def list(filters: {})
32
- @adapter.list(filters: filters)
33
- end
34
- <% if @extra_methods.any? -%>
35
-
36
- # Extra methods detected from use cases — implement as needed
37
- <% @extra_methods.each do |method_name| -%>
38
-
39
- def <%= method_name %>(*args, **kwargs)
40
- # TODO: implement (e.g. delegate to @adapter or custom logic)
41
- raise NotImplementedError, "<%= full_class_name %>#<%= method_name %>"
42
- end
43
- <% end -%>
44
- <% end -%>
45
- end
46
- end