rage_arch 0.1.0
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 +7 -0
- data/LICENSE +21 -0
- data/README.md +190 -0
- data/lib/generators/rage_arch/ar_dep_generator.rb +74 -0
- data/lib/generators/rage_arch/dep_generator.rb +120 -0
- data/lib/generators/rage_arch/dep_switch_generator.rb +224 -0
- data/lib/generators/rage_arch/install_generator.rb +64 -0
- data/lib/generators/rage_arch/scaffold_generator.rb +133 -0
- data/lib/generators/rage_arch/templates/ar_dep.rb.tt +46 -0
- data/lib/generators/rage_arch/templates/dep.rb.tt +16 -0
- data/lib/generators/rage_arch/templates/rage_arch.rb.tt +15 -0
- data/lib/generators/rage_arch/templates/scaffold/api_controller.rb.tt +39 -0
- data/lib/generators/rage_arch/templates/scaffold/controller.rb.tt +56 -0
- data/lib/generators/rage_arch/templates/scaffold/create.rb.tt +14 -0
- data/lib/generators/rage_arch/templates/scaffold/destroy.rb.tt +15 -0
- data/lib/generators/rage_arch/templates/scaffold/list.rb.tt +13 -0
- data/lib/generators/rage_arch/templates/scaffold/new.rb.tt +13 -0
- data/lib/generators/rage_arch/templates/scaffold/post_repo.rb.tt +35 -0
- data/lib/generators/rage_arch/templates/scaffold/show.rb.tt +14 -0
- data/lib/generators/rage_arch/templates/scaffold/update.rb.tt +15 -0
- data/lib/generators/rage_arch/templates/use_case.rb.tt +18 -0
- data/lib/generators/rage_arch/use_case_generator.rb +33 -0
- data/lib/rage_arch/container.rb +38 -0
- data/lib/rage_arch/controller.rb +22 -0
- data/lib/rage_arch/dep.rb +9 -0
- data/lib/rage_arch/dep_scanner.rb +95 -0
- data/lib/rage_arch/deps/active_record.rb +45 -0
- data/lib/rage_arch/event_publisher.rb +59 -0
- data/lib/rage_arch/fake_event_publisher.rb +37 -0
- data/lib/rage_arch/railtie.rb +23 -0
- data/lib/rage_arch/result.rb +31 -0
- data/lib/rage_arch/rspec_matchers.rb +94 -0
- data/lib/rage_arch/use_case.rb +252 -0
- data/lib/rage_arch/version.rb +5 -0
- data/lib/rage_arch.rb +97 -0
- metadata +133 -0
data/lib/rage_arch.rb
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "rage_arch/version"
|
|
4
|
+
require_relative "rage_arch/result"
|
|
5
|
+
require_relative "rage_arch/container"
|
|
6
|
+
require_relative "rage_arch/dep"
|
|
7
|
+
require_relative "rage_arch/event_publisher"
|
|
8
|
+
require_relative "rage_arch/use_case"
|
|
9
|
+
require_relative "rage_arch/deps/active_record"
|
|
10
|
+
require_relative "rage_arch/dep_scanner"
|
|
11
|
+
|
|
12
|
+
module RageArch
|
|
13
|
+
class << self
|
|
14
|
+
def register(symbol, implementation = nil, &block)
|
|
15
|
+
Container.register(symbol, implementation, &block)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Registers a dep that uses Active Record for the given model.
|
|
19
|
+
# Example: Rage.register_ar(:user_store, User)
|
|
20
|
+
def register_ar(symbol, model_class)
|
|
21
|
+
register(symbol, Deps::ActiveRecord.for(model_class))
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def resolve(symbol)
|
|
25
|
+
Container.resolve(symbol)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def registered?(symbol)
|
|
29
|
+
Container.registered?(symbol)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Verifies that all deps and use_cases declared by registered use cases are
|
|
33
|
+
# available before the app handles any request. Call after all initializers run
|
|
34
|
+
# (done automatically by the Railtie unless config.rage.verify_deps = false).
|
|
35
|
+
#
|
|
36
|
+
# Raises RuntimeError listing every missing dep/use_case if any are absent.
|
|
37
|
+
# Returns true when everything is wired correctly.
|
|
38
|
+
def verify_deps!
|
|
39
|
+
errors = []
|
|
40
|
+
scanned_methods = DepScanner.new.scan
|
|
41
|
+
|
|
42
|
+
UseCase::Base.registry.each do |uc_symbol, klass|
|
|
43
|
+
klass.declared_deps.uniq.each do |dep_sym|
|
|
44
|
+
next if klass.ar_deps.key?(dep_sym) # ar_deps fall back to ActiveRecord, optional
|
|
45
|
+
|
|
46
|
+
unless Container.registered?(dep_sym)
|
|
47
|
+
errors << " UseCase :#{uc_symbol} (#{klass}) declares dep :#{dep_sym} — not registered in container"
|
|
48
|
+
next
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
required_methods = scanned_methods[dep_sym]
|
|
52
|
+
next if required_methods.nil? || required_methods.empty?
|
|
53
|
+
|
|
54
|
+
entry = Container.registry[dep_sym]
|
|
55
|
+
impl =
|
|
56
|
+
if entry.is_a?(Class)
|
|
57
|
+
entry
|
|
58
|
+
elsif entry.is_a?(Proc)
|
|
59
|
+
nil # skip: calling a Proc may have side effects
|
|
60
|
+
else
|
|
61
|
+
entry
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
next if impl.nil?
|
|
65
|
+
|
|
66
|
+
impl_name = impl.is_a?(Class) ? impl.name : impl.class.name
|
|
67
|
+
|
|
68
|
+
required_methods.each do |method_name|
|
|
69
|
+
has_method =
|
|
70
|
+
if impl.is_a?(Class)
|
|
71
|
+
impl.method_defined?(method_name) || impl.respond_to?(method_name)
|
|
72
|
+
else
|
|
73
|
+
impl.respond_to?(method_name)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
unless has_method
|
|
77
|
+
errors << " UseCase :#{uc_symbol} (#{klass}) calls dep :#{dep_sym}##{method_name} — #{impl_name} does not implement ##{method_name}"
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
klass.declared_use_cases.uniq.each do |ref_sym|
|
|
83
|
+
next if UseCase::Base.registry.key?(ref_sym)
|
|
84
|
+
|
|
85
|
+
errors << " UseCase :#{uc_symbol} (#{klass}) declares use_cases :#{ref_sym} — not registered in use case registry"
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
raise "RageArch boot verification failed:\n#{errors.join("\n")}" if errors.any?
|
|
90
|
+
|
|
91
|
+
true
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
require_relative "rage_arch/controller" if defined?(Rails)
|
|
97
|
+
require "rage_arch/railtie" if defined?(Rails)
|
metadata
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: rage_arch
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Rage Corp
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: activesupport
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '5.2'
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '5.2'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: railties
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '5.2'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '5.2'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: rake
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - "~>"
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '13.0'
|
|
47
|
+
type: :development
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - "~>"
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '13.0'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: rspec
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - "~>"
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '3.0'
|
|
61
|
+
type: :development
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - "~>"
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
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.
|
|
71
|
+
email:
|
|
72
|
+
- ''
|
|
73
|
+
executables: []
|
|
74
|
+
extensions: []
|
|
75
|
+
extra_rdoc_files: []
|
|
76
|
+
files:
|
|
77
|
+
- LICENSE
|
|
78
|
+
- README.md
|
|
79
|
+
- lib/generators/rage_arch/ar_dep_generator.rb
|
|
80
|
+
- lib/generators/rage_arch/dep_generator.rb
|
|
81
|
+
- lib/generators/rage_arch/dep_switch_generator.rb
|
|
82
|
+
- lib/generators/rage_arch/install_generator.rb
|
|
83
|
+
- lib/generators/rage_arch/scaffold_generator.rb
|
|
84
|
+
- lib/generators/rage_arch/templates/ar_dep.rb.tt
|
|
85
|
+
- lib/generators/rage_arch/templates/dep.rb.tt
|
|
86
|
+
- lib/generators/rage_arch/templates/rage_arch.rb.tt
|
|
87
|
+
- lib/generators/rage_arch/templates/scaffold/api_controller.rb.tt
|
|
88
|
+
- lib/generators/rage_arch/templates/scaffold/controller.rb.tt
|
|
89
|
+
- lib/generators/rage_arch/templates/scaffold/create.rb.tt
|
|
90
|
+
- lib/generators/rage_arch/templates/scaffold/destroy.rb.tt
|
|
91
|
+
- lib/generators/rage_arch/templates/scaffold/list.rb.tt
|
|
92
|
+
- lib/generators/rage_arch/templates/scaffold/new.rb.tt
|
|
93
|
+
- lib/generators/rage_arch/templates/scaffold/post_repo.rb.tt
|
|
94
|
+
- lib/generators/rage_arch/templates/scaffold/show.rb.tt
|
|
95
|
+
- lib/generators/rage_arch/templates/scaffold/update.rb.tt
|
|
96
|
+
- lib/generators/rage_arch/templates/use_case.rb.tt
|
|
97
|
+
- lib/generators/rage_arch/use_case_generator.rb
|
|
98
|
+
- lib/rage_arch.rb
|
|
99
|
+
- lib/rage_arch/container.rb
|
|
100
|
+
- lib/rage_arch/controller.rb
|
|
101
|
+
- lib/rage_arch/dep.rb
|
|
102
|
+
- lib/rage_arch/dep_scanner.rb
|
|
103
|
+
- lib/rage_arch/deps/active_record.rb
|
|
104
|
+
- lib/rage_arch/event_publisher.rb
|
|
105
|
+
- lib/rage_arch/fake_event_publisher.rb
|
|
106
|
+
- lib/rage_arch/railtie.rb
|
|
107
|
+
- lib/rage_arch/result.rb
|
|
108
|
+
- lib/rage_arch/rspec_matchers.rb
|
|
109
|
+
- lib/rage_arch/use_case.rb
|
|
110
|
+
- lib/rage_arch/version.rb
|
|
111
|
+
homepage: https://github.com/rage-corp/rage_arch
|
|
112
|
+
licenses:
|
|
113
|
+
- MIT
|
|
114
|
+
metadata:
|
|
115
|
+
homepage_uri: https://github.com/rage-corp/rage_arch
|
|
116
|
+
rdoc_options: []
|
|
117
|
+
require_paths:
|
|
118
|
+
- lib
|
|
119
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
120
|
+
requirements:
|
|
121
|
+
- - ">="
|
|
122
|
+
- !ruby/object:Gem::Version
|
|
123
|
+
version: 2.7.0
|
|
124
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
125
|
+
requirements:
|
|
126
|
+
- - ">="
|
|
127
|
+
- !ruby/object:Gem::Version
|
|
128
|
+
version: '0'
|
|
129
|
+
requirements: []
|
|
130
|
+
rubygems_version: 4.0.3
|
|
131
|
+
specification_version: 4
|
|
132
|
+
summary: 'Clean Architecture Light for Rails: use cases, injectable deps, Result.'
|
|
133
|
+
test_files: []
|