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.
- checksums.yaml +4 -4
- data/README.md +125 -69
- data/lib/generators/rage_arch/controller_generator.rb +53 -0
- data/lib/generators/rage_arch/dep_generator.rb +2 -0
- data/lib/generators/rage_arch/job_generator.rb +28 -0
- data/lib/generators/rage_arch/mailer_generator.rb +42 -0
- data/lib/generators/rage_arch/resource_generator.rb +110 -0
- data/lib/generators/rage_arch/scaffold_generator.rb +0 -12
- data/lib/generators/rage_arch/templates/controller/action_use_case.rb.tt +12 -0
- data/lib/generators/rage_arch/templates/controller/controller.rb.tt +12 -0
- data/lib/generators/rage_arch/templates/dep.rb.tt +1 -1
- data/lib/generators/rage_arch/templates/job/job.rb.tt +15 -0
- data/lib/generators/rage_arch/templates/mailer/mailer_dep.rb.tt +17 -0
- data/lib/generators/rage_arch/templates/rage_arch.rb.tt +5 -8
- data/lib/generators/rage_arch/templates/scaffold/controller.rb.tt +8 -3
- data/lib/generators/rage_arch/templates/scaffold/create.rb.tt +0 -1
- data/lib/generators/rage_arch/templates/scaffold/destroy.rb.tt +0 -1
- data/lib/generators/rage_arch/templates/scaffold/list.rb.tt +0 -1
- data/lib/generators/rage_arch/templates/scaffold/new.rb.tt +0 -1
- data/lib/generators/rage_arch/templates/scaffold/post_repo.rb.tt +1 -1
- data/lib/generators/rage_arch/templates/scaffold/show.rb.tt +0 -1
- data/lib/generators/rage_arch/templates/scaffold/update.rb.tt +0 -1
- data/lib/generators/rage_arch/templates/use_case.rb.tt +2 -4
- data/lib/rage_arch/auto_registry.rb +95 -0
- data/lib/rage_arch/container.rb +36 -3
- data/lib/rage_arch/railtie.rb +6 -10
- data/lib/rage_arch/rspec_helpers.rb +19 -0
- data/lib/rage_arch/subscriber_job.rb +13 -0
- data/lib/rage_arch/use_case.rb +102 -35
- data/lib/rage_arch/version.rb +1 -1
- data/lib/rage_arch.rb +37 -3
- metadata +18 -8
- data/lib/generators/rage_arch/ar_dep_generator.rb +0 -74
- 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
|
+
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:
|
|
69
|
-
|
|
70
|
-
and
|
|
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/
|
|
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/
|
|
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:
|
|
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
|