Module: ArchSpec::Presets

Defined in:
lib/archspec/presets.rb

Constant Summary collapse

VANILLA_RAILS_EMPTY =
{
  services: ['app/services/**/*.rb', 'behavior belongs on models, not service objects'],
  forms: ['app/forms/**/*.rb', 'use strong parameters and model validations'],
  policies: ['app/policies/**/*.rb', 'authorization is predicate methods on models'],
  decorators: ['app/decorators/**/*.rb', 'use helpers and partials'],
  presenters: ['app/presenters/**/*.rb', 'presentation objects are POROs in app/models'],
  view_components: ['app/components/**/*.rb', 'use helpers and ERB partials']
}.freeze

Class Method Summary collapse

Class Method Details

.apply(name, dsl, **options) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/archspec/presets.rb', line 7

def apply(name, dsl, **options)
  case name.to_sym
  when :rails_way, :rails_mvc
    rails_way(dsl, **options)
  when :rails_strict
    rails_strict(dsl, **options)
  when :vanilla_rails
    vanilla_rails(dsl, **options)
  when :rails_layered
    rails_layered(dsl, **options)
  when :rails_hexagonal
    rails_hexagonal(dsl, **options)
  when :rails_clean
    rails_clean(dsl, **options)
  when :rails_cqrs
    rails_cqrs(dsl, **options)
  when :rails_event_driven
    rails_event_driven(dsl, **options)
  else
    raise Error, "Unknown ArchSpec preset: #{name.inspect}"
  end
end

.rails_clean(dsl, **options) ⇒ Object



65
66
67
# File 'lib/archspec/presets.rb', line 65

def rails_clean(dsl, **options)
  Architectures.apply(:clean, dsl, **options)
end

.rails_cqrs(dsl, **options) ⇒ Object



69
70
71
# File 'lib/archspec/presets.rb', line 69

def rails_cqrs(dsl, **options)
  Architectures.apply(:cqrs, dsl, **options)
end

.rails_event_driven(dsl, **options) ⇒ Object



73
74
75
# File 'lib/archspec/presets.rb', line 73

def rails_event_driven(dsl, **options)
  Architectures.apply(:event_driven, dsl, **options)
end

.rails_hexagonal(dsl, **options) ⇒ Object



61
62
63
# File 'lib/archspec/presets.rb', line 61

def rails_hexagonal(dsl, **options)
  Architectures.apply(:hexagonal, dsl, **options)
end

.rails_layered(dsl, **options) ⇒ Object



57
58
59
# File 'lib/archspec/presets.rb', line 57

def rails_layered(dsl, **options)
  Architectures.apply(:layered, dsl, **options)
end

.rails_strict(dsl, **options) ⇒ Object



34
35
36
37
38
# File 'lib/archspec/presets.rb', line 34

def rails_strict(dsl, **options)
  rails_way(dsl, **options)
  dsl.verify_zeitwerk_names!
  dsl.no_cycles!(among: %i[controllers models helpers mailers jobs services])
end

.rails_way(dsl, **options) ⇒ Object



30
31
32
# File 'lib/archspec/presets.rb', line 30

def rails_way(dsl, **options)
  Architectures.apply(:rails_mvc, dsl, **options)
end

.vanilla_rails(dsl, **options) ⇒ Object



49
50
51
52
53
54
55
# File 'lib/archspec/presets.rb', line 49

def vanilla_rails(dsl, **options)
  rails_way(dsl, **options)

  VANILLA_RAILS_EMPTY.each do |name, (pattern, reason)|
    dsl.component(name, in: pattern).must_be_empty(because: reason)
  end
end