sun-sword 0.0.12 → 0.0.13

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e7f2301ad37844f511cef0f9439948ee35b7e74411e7a28989fcac4ff0ed3bb4
4
- data.tar.gz: e37e5d005d3cb2fc82ce039570f9f6f5117c7347d4b1cc1c662df60b62fc85d3
3
+ metadata.gz: 2eefd4a0b6dca262f359265aa4cdae141b33e7305f8c945935dfc9c2b5fab8df
4
+ data.tar.gz: 5eefa90794d726cda2e144abfcb9b1d368fbdc4db04a6b1d7a6d99063f6550ae
5
5
  SHA512:
6
- metadata.gz: cbc03f139610daf61f3c260efac697aa0229aba1bccd608a1d207fccdf74254e43f639870a09d0f6b8ae80b6c21f3436e1ec935368934c65accf25a5d5fd2646
7
- data.tar.gz: 88ea0d19496ba67f716f7d1479b99e03efb8191c4609bc3c08c5d7131cac98204e4a9f634a2572e548873f1fca0cc612b4db9a0780f82fa355418c5ac76c9d5e
6
+ metadata.gz: 1442f3d391b08b44242c447a2fc522a5bb94b537dc1c22e131343ac83789ff06d161448e6a6191c724a2d06ec735b1117e788726843bbf2ec2262377221db4fd
7
+ data.tar.gz: b8e4e72e81238060bfc29751d1ebd6a48c9f14f4bb13a33891915e78613ad48c529203eb3972ad8bd18cf5d0e1fecda2a79b07d607b0be0f860a415099280a0b
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sun-sword (0.0.12)
4
+ sun-sword (0.0.13)
5
5
  activesupport (>= 7.0, < 9.0)
6
6
  hashie (>= 5.0, < 6.0)
7
7
  thor (>= 1.2, < 2.0)
@@ -15,6 +15,7 @@ module SunSword
15
15
 
16
16
  class_option :engine, type: :string, default: nil, desc: 'Specify target engine name (e.g., admin, api)'
17
17
  class_option :engine_structure, type: :string, default: nil, desc: 'Specify engine where structure file is located'
18
+ class_option :domain, type: :string, default: nil, desc: 'Specify domain prefix for UseCases (e.g., core)'
18
19
 
19
20
  def validate_engine
20
21
  return unless options[:engine]
@@ -83,6 +84,9 @@ module SunSword
83
84
  # Engine mount path for view rendering
84
85
  @engine_mount_path = options[:engine] ? options[:engine].to_s.downcase : ''
85
86
 
87
+ # UseCase domain prefix
88
+ @usecase_domain = options[:domain] ? options[:domain].to_s.camelize : @engine_structure_class
89
+
86
90
  @mapping_fields = {
87
91
  string: :text_field,
88
92
  text: :text_area,
@@ -1,17 +1,17 @@
1
1
  # Template for the controller (controllers/controller.rb.tt)
2
- class <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.join("::") %>Controller < <%= [@engine_scope_class].reject(&:empty?).join("::").sub(/(.+)/, '\1::') %>ApplicationController
2
+ class <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.join("::") %>Controller < ApplicationController
3
3
  before_action :set_<%= @variable_subject %>, only: %i[edit update]
4
4
  layout :set_layouts
5
5
 
6
6
  # GET /<engine_mount_path>/<%=[@scope_path].reject { |c| c.empty? }.join("/") %>
7
7
  def index
8
- use_case = <%= [@engine_structure_class].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@scope_class, build_usecase_filename('list')].reject { |c| c.empty? }.join("::") %>
8
+ use_case = <%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %><%= [@scope_class, build_usecase_filename('list')].reject { |c| c.empty? }.join("::") %>
9
9
  contract = use_case.contract!(build_contract({}))
10
10
  result = use_case.new(contract).result
11
11
  Dry::Matcher::ResultMatcher.call(result) do |matcher|
12
12
  matcher.success do |response|
13
13
  @<%= @variable_subject.pluralize %> = response
14
- render '<%= [@engine_mount_path, @scope_path, "index"].reject { |c| c.empty? }.join("/") %>'
14
+ render '<%= [@route_scope_path.singularize].reject { |c| c.empty? }.join("_") + "/" %><%= [@engine_mount_path, @scope_path, "index"].reject { |c| c.empty? }.join("/") %>'
15
15
  end
16
16
  matcher.failure do |errors|
17
17
  redirect_to root_path, success: errors
@@ -21,7 +21,7 @@ class <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.join("::")
21
21
 
22
22
  # GET /<engine_mount_path>/<%=[@scope_path, ":uuid"].reject { |c| c.empty? }.join("/") %>
23
23
  def show
24
- use_case = <%= [@engine_structure_class].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@scope_class, build_usecase_filename('fetch', '_by_id')].reject { |c| c.empty? }.join("::") %>
24
+ use_case = <%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %><%= [@scope_class, build_usecase_filename('fetch', '_by_id')].reject { |c| c.empty? }.join("::") %>
25
25
  contract = use_case.contract!(build_contract({ id: params[:id] }))
26
26
  result = use_case.new(contract).result
27
27
  Dry::Matcher::ResultMatcher.call(result) do |matcher|
@@ -45,47 +45,47 @@ class <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.join("::")
45
45
 
46
46
  # POST /<%= @engine_scope_path %>/<%= @scope_path %>
47
47
  def create
48
- use_case = <%= [@engine_structure_class].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@scope_class, build_usecase_filename('create')].reject { |c| c.empty? }.join("::") %>
48
+ use_case = <%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %><%= [@scope_class, build_usecase_filename('create')].reject { |c| c.empty? }.join("::") %>
49
49
  contract = use_case.contract!(build_contract(<%= @variable_subject %>_params))
50
50
  result = use_case.new(contract).result
51
51
  Dry::Matcher::ResultMatcher.call(result) do |matcher|
52
52
  matcher.success do |response|
53
- redirect_to <%= [@scope_path.singularize].reject { |c| c.empty? }.join("_") %>_url(id: response.id), success: '<%= @subject_class %> was successfully created.'
53
+ redirect_to <%= [@route_scope_path.singularize].reject { |c| c.empty? }.join("_") + "_" %><%= [@scope_path.singularize].reject { |c| c.empty? }.join("_") %>_url(id: response.id), success: '<%= @subject_class %> was successfully created.'
54
54
  end
55
55
  matcher.failure do |errors|
56
56
  @<%= @variable_subject %> = build_form_errors(<%= @variable_subject %>_params, <%= @model_class %>.new, errors)
57
- render '<%= [@engine_mount_path, @scope_path, "new"].reject { |c| c.empty? }.join("/") %>', status: :unprocessable_entity
57
+ render '<%= [@route_scope_path.singularize].reject { |c| c.empty? }.join("_") + "/" %><%= [@engine_mount_path, @scope_path, "new"].reject { |c| c.empty? }.join("/") %>', status: :unprocessable_entity
58
58
  end
59
59
  end
60
60
  end
61
61
 
62
62
  # PATCH/PUT /<engine_mount_path>/<%=[@scope_path, ":uuid"].reject { |c| c.empty? }.join("/") %>
63
63
  def update
64
- use_case = <%= [@engine_structure_class].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@scope_class, build_usecase_filename('update')].reject { |c| c.empty? }.join("::") %>
64
+ use_case = <%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %><%= [@scope_class, build_usecase_filename('update')].reject { |c| c.empty? }.join("::") %>
65
65
  contract = use_case.contract!(build_contract(<%= @variable_subject %>_params).merge({ id: params[:id] }))
66
66
  result = use_case.new(contract).result
67
67
  Dry::Matcher::ResultMatcher.call(result) do |matcher|
68
68
  matcher.success do |response|
69
- redirect_to <%= [@scope_path.singularize].reject { |c| c.empty? }.join("_") %>_url(id: response.id), success: '<%= @subject_class %> was successfully updated.'
69
+ redirect_to <%= [@route_scope_path.singularize].reject { |c| c.empty? }.join("_") + "_" %><%= [@scope_path.singularize].reject { |c| c.empty? }.join("_") %>_url(id: response.id), success: '<%= @subject_class %> was successfully updated.'
70
70
  end
71
71
  matcher.failure do |errors|
72
72
  @<%= @variable_subject %> = build_form_errors(<%= @variable_subject %>_params, <%= @model_class %>.find(params[:id]), errors)
73
- render '<%= [@engine_mount_path, @scope_path, "edit"].reject { |c| c.empty? }.join("/") %>', status: :unprocessable_entity
73
+ render '<%= [@route_scope_path.singularize].reject { |c| c.empty? }.join("_") + "/" %><%= [@engine_mount_path, @scope_path, "edit"].reject { |c| c.empty? }.join("/") %>', status: :unprocessable_entity
74
74
  end
75
75
  end
76
76
  end
77
77
 
78
78
  # DELETE /<engine_mount_path>/<%=[@scope_path, ":uuid"].reject { |c| c.empty? }.join("/") %>
79
79
  def destroy
80
- use_case = <%= [@engine_structure_class].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@scope_class, build_usecase_filename('destroy')].reject { |c| c.empty? }.join("::") %>
80
+ use_case = <%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %><%= [@scope_class, build_usecase_filename('destroy')].reject { |c| c.empty? }.join("::") %>
81
81
  contract = use_case.contract!(build_contract({ id: params[:id] }))
82
82
  result = use_case.new(contract).result
83
83
  Dry::Matcher::ResultMatcher.call(result) do |matcher|
84
84
  matcher.success do |response|
85
- redirect_to <%= [@scope_path].reject { |c| c.empty? }.join("_") %>_url, notice: '<%= @subject_class %> was successfully destroyed.'
85
+ redirect_to <%= [@route_scope_path.singularize].reject { |c| c.empty? }.join("_") + "_" %><%= [@scope_path].reject { |c| c.empty? }.join("_") %>_url, notice: '<%= @subject_class %> was successfully destroyed.'
86
86
  end
87
87
  matcher.failure do |errors|
88
- redirect_to <%= [@scope_path].reject { |c| c.empty? }.join("_") %>_url, error: '<%= @subject_class %> could not be destroyed.'
88
+ redirect_to <%= [@route_scope_path.singularize].reject { |c| c.empty? }.join("_") + "_" %><%= [@scope_path].reject { |c| c.empty? }.join("_") %>_url, error: '<%= @subject_class %> could not be destroyed.'
89
89
  end
90
90
  end
91
91
  end
@@ -107,7 +107,7 @@ class <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.join("::")
107
107
  <%else -%>
108
108
  @<%= @variable_subject %> = <%= @model_class %>.find_by(id: params[:id])
109
109
  <%end -%>
110
- redirect_to <%= [@scope_path].reject { |c| c.empty? }.join("_") %>_url, error: '<%= @subject_class %> not found.' if @<%= @variable_subject %>.nil?
110
+ redirect_to <%= [@route_scope_path.singularize].reject { |c| c.empty? }.join("_") + "_" %><%= [@scope_path].reject { |c| c.empty? }.join("_") %>_url, error: '<%= @subject_class %> not found.' if @<%= @variable_subject %>.nil?
111
111
  end
112
112
 
113
113
  # Only allow a list of trusted parameters through.
@@ -5,7 +5,7 @@ require 'rails_helper'
5
5
  RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.join("::") %>Controller, type: :controller do
6
6
  <% if @resource_owner_id.present? -%>
7
7
  let(:owner) { create(:<%= @resource_owner %>) }
8
- let(:actor) { create(:actor) }
8
+ let(:actor) { create(:actor, <%= @resource_owner_id%>: owner.id) }
9
9
  <% end -%>
10
10
 
11
11
  let(:valid_attributes) do
@@ -43,14 +43,10 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
43
43
  <% end -%>
44
44
  describe 'GET #index' do
45
45
  context 'when use case succeeds' do
46
- let(:<%= @variable_subject.pluralize %>) { create_list(:<%= @variable_subject %>) }
47
- let(:use_case_instance) { instance_double(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('list')].reject { |c| c.empty? }.join("::") %>) }
48
- let(:success_result) { Dry::Monads::Success(<%= @variable_subject.pluralize %>) }
46
+ let(:<%= @variable_subject.pluralize %>) { create_list(:<%= @variable_subject %>, 3) }
49
47
 
50
48
  before do
51
- allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('list')].reject { |c| c.empty? }.join("::") %>).to receive(:contract!).and_return(true)
52
- allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('list')].reject { |c| c.empty? }.join("::") %>).to receive(:new).and_return(use_case_instance)
53
- allow(use_case_instance).to receive(:result).and_return(success_result)
49
+ stub_use_case(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('list')].reject { |c| c.empty? }.join("::") %>, <%= @variable_subject.pluralize %>, response: :success)
54
50
  end
55
51
 
56
52
  it 'returns success response and assigns @<%= @variable_subject.pluralize %>' do
@@ -62,20 +58,18 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
62
58
  end
63
59
 
64
60
  it 'calls use case with correct contract' do
65
- expect(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('list')].reject { |c| c.empty? }.join("::") %>).to receive(:contract!)<%= @resource_owner_id.present? ? "\n .with(hash_including(#{@resource_owner_id}: owner.id))" : '' %>
61
+ expect(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('list')].reject { |c| c.empty? }.join("::") %>).to receive(:contract!)<%= @resource_owner_id.present? ? "\n .with(hash_including(#{@resource_owner_id}: owner.id))" : '' %>
66
62
 
67
63
  get :index
68
64
  end
69
65
  end
70
66
 
71
67
  context 'when use case fails' do
72
- let(:use_case_instance) { instance_double(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('list')].reject { |c| c.empty? }.join("::") %>) }
73
- let(:failure_result) { Dry::Monads::Failure('Error loading <%= @variable_subject.pluralize %>') }
68
+ let(:use_case_instance) { instance_double(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('list')].reject { |c| c.empty? }.join("::") %>) }
69
+ let(:failure_result) { 'Error loading <%= @variable_subject.pluralize %>' }
74
70
 
75
71
  before do
76
- allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('list')].reject { |c| c.empty? }.join("::") %>).to receive(:contract!).and_return(true)
77
- allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('list')].reject { |c| c.empty? }.join("::") %>).to receive(:new).and_return(use_case_instance)
78
- allow(use_case_instance).to receive(:result).and_return(failure_result)
72
+ stub_use_case(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('list')].reject { |c| c.empty? }.join("::") %>, failure_result, response: :failure)
79
73
  end
80
74
 
81
75
  it 'redirects to root path with error' do
@@ -91,13 +85,11 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
91
85
  let(:<%= @variable_subject %>) { create(:<%= @variable_subject %><%= @resource_owner_id.present? ? ", #{@resource_owner_id}: owner.id" : '' %>) }
92
86
 
93
87
  context 'when use case succeeds' do
94
- let(:use_case_instance) { instance_double(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('fetch', '_by_id')].reject { |c| c.empty? }.join("::") %>) }
95
- let(:success_result) { Dry::Monads::Success(<%= @variable_subject %>) }
88
+ let(:use_case_instance) { instance_double(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('fetch', '_by_id')].reject { |c| c.empty? }.join("::") %>) }
89
+ let(:success_result) { <%= @variable_subject %> }
96
90
 
97
91
  before do
98
- allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('fetch', '_by_id')].reject { |c| c.empty? }.join("::") %>).to receive(:contract!).and_return(true)
99
- allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('fetch', '_by_id')].reject { |c| c.empty? }.join("::") %>).to receive(:new).and_return(use_case_instance)
100
- allow(use_case_instance).to receive(:result).and_return(success_result)
92
+ stub_use_case(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('fetch', '_by_id')].reject { |c| c.empty? }.join("::") %>, success_result, response: :success)
101
93
  end
102
94
 
103
95
  it 'returns success response and assigns @<%= @variable_subject %>' do
@@ -108,7 +100,7 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
108
100
  end
109
101
 
110
102
  it 'calls use case with correct contract' do
111
- expect(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('fetch', '_by_id')].reject { |c| c.empty? }.join("::") %>).to receive(:contract!)
103
+ expect(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('fetch', '_by_id')].reject { |c| c.empty? }.join("::") %>).to receive(:contract!)
112
104
  .with(hash_including(<%= @resource_owner_id.present? ? "#{@resource_owner_id}: owner.id, " : '' %>id: <%= @variable_subject %>.id))
113
105
 
114
106
  get :show, params: { id: <%= @variable_subject %>.id }
@@ -116,13 +108,11 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
116
108
  end
117
109
 
118
110
  context 'when use case fails' do
119
- let(:use_case_instance) { instance_double(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('fetch', '_by_id')].reject { |c| c.empty? }.join("::") %>) }
120
- let(:failure_result) { Dry::Monads::Failure('<%= @subject_class %> not found') }
111
+ let(:use_case_instance) { instance_double(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('fetch', '_by_id')].reject { |c| c.empty? }.join("::") %>) }
112
+ let(:failure_result) { '<%= @subject_class %> not found' }
121
113
 
122
114
  before do
123
- allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('fetch', '_by_id')].reject { |c| c.empty? }.join("::") %>).to receive(:contract!).and_return(true)
124
- allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('fetch', '_by_id')].reject { |c| c.empty? }.join("::") %>).to receive(:new).and_return(use_case_instance)
125
- allow(use_case_instance).to receive(:result).and_return(failure_result)
115
+ stub_use_case(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('fetch', '_by_id')].reject { |c| c.empty? }.join("::") %>, failure_result, response: :failure)
126
116
  end
127
117
 
128
118
  it 'redirects to root path with error' do
@@ -178,27 +168,24 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
178
168
  end
179
169
 
180
170
  describe 'POST #create' do
181
- let(:use_case_instance) { instance_double(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('create')].reject { |c| c.empty? }.join("::") %>) }
171
+ let(:use_case_instance) { instance_double(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('create')].reject { |c| c.empty? }.join("::") %>) }
182
172
 
183
173
  context 'with valid params' do
184
- let(:created_<%= @variable_subject %>) { build(:<%= @variable_subject %>, id: 'uuid-123', **valid_attributes) }
185
- let(:success_result) { Dry::Monads::Success(created_<%= @variable_subject %>) }
174
+ let(:success_result) { Hashie::Mash.new({ id: SecureRandom.uuid }) }
186
175
 
187
176
  before do
188
- allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('create')].reject { |c| c.empty? }.join("::") %>).to receive(:contract!).and_return(true)
189
- allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('create')].reject { |c| c.empty? }.join("::") %>).to receive(:new).and_return(use_case_instance)
190
- allow(use_case_instance).to receive(:result).and_return(success_result)
177
+ stub_use_case(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('create')].reject { |c| c.empty? }.join("::") %>, success_result, response: :success)
191
178
  end
192
179
 
193
180
  it 'creates and redirects with success message' do
194
181
  post :create, params: { models_<%= @subject_class.underscore %>: valid_attributes }
195
182
 
196
- expect(response).to redirect_to(<%= [@route_scope_path, @scope_path.singularize].reject { |c| c.empty? }.join("_") %>_url(id: created_<%= @variable_subject %>.id))
183
+ expect(response).to redirect_to(<%= [@route_scope_path, @scope_path.singularize].reject { |c| c.empty? }.join("_") %>_url(id: success_result.id))
197
184
  expect(flash[:success]).to eq('<%= @subject_class %> was successfully created.')
198
185
  end
199
186
 
200
187
  it 'calls use case with correct contract' do
201
- expect(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('create')].reject { |c| c.empty? }.join("::") %>).to receive(:contract!)
188
+ expect(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('create')].reject { |c| c.empty? }.join("::") %>).to receive(:contract!)
202
189
  .with(hash_including(<%= @resource_owner_id.present? ? "#{@resource_owner_id}: owner.id, " : '' %>**valid_attributes.stringify_keys))
203
190
 
204
191
  post :create, params: { models_<%= @subject_class.underscore %>: valid_attributes }
@@ -207,12 +194,10 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
207
194
 
208
195
  context 'with invalid params' do
209
196
  let(:errors) { { <%= @fields.first.first %>: ['cannot be blank'] } }
210
- let(:failure_result) { Dry::Monads::Failure(errors) }
197
+ let(:failure_result) { errors}
211
198
 
212
199
  before do
213
- allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('create')].reject { |c| c.empty? }.join("::") %>).to receive(:contract!).and_return(true)
214
- allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('create')].reject { |c| c.empty? }.join("::") %>).to receive(:new).and_return(use_case_instance)
215
- allow(use_case_instance).to receive(:result).and_return(failure_result)
200
+ stub_use_case(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('create')].reject { |c| c.empty? }.join("::") %>, failure_result, response: :failure)
216
201
  allow(controller).to receive(:build_form_errors).and_return(<%= @model_class %>.new)
217
202
  end
218
203
 
@@ -235,7 +220,6 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
235
220
 
236
221
  describe 'PATCH #update' do
237
222
  let(:<%= @variable_subject %>) { create(:<%= @variable_subject %><%= @resource_owner_id.present? ? ", #{@resource_owner_id}: owner.id" : '' %>) }
238
- let(:use_case_instance) { instance_double(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('update')].reject { |c| c.empty? }.join("::") %>) }
239
223
  let(:updated_attributes) { { <%= @fields.first.first %>: 'Updated Value' } }
240
224
 
241
225
  before do
@@ -246,12 +230,9 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
246
230
 
247
231
  context 'with valid params' do
248
232
  let(:updated_<%= @variable_subject %>) { <%= @variable_subject %>.tap { |obj| obj.<%= @fields.first.first %> = 'Updated Value' } }
249
- let(:success_result) { Dry::Monads::Success(updated_<%= @variable_subject %>) }
250
233
 
251
234
  before do
252
- allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('update')].reject { |c| c.empty? }.join("::") %>).to receive(:contract!).and_return(true)
253
- allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('update')].reject { |c| c.empty? }.join("::") %>).to receive(:new).and_return(use_case_instance)
254
- allow(use_case_instance).to receive(:result).and_return(success_result)
235
+ stub_use_case(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('update')].reject { |c| c.empty? }.join("::") %>, updated_campaign, response: :success)
255
236
  end
256
237
 
257
238
  it 'updates and redirects with success message' do
@@ -262,7 +243,7 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
262
243
  end
263
244
 
264
245
  it 'calls use case with correct contract' do
265
- expect(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('update')].reject { |c| c.empty? }.join("::") %>).to receive(:contract!)
246
+ expect(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('update')].reject { |c| c.empty? }.join("::") %>).to receive(:contract!)
266
247
  .with(hash_including(<%= @resource_owner_id.present? ? "#{@resource_owner_id}: owner.id, " : '' %>id: <%= @variable_subject %>.id, **updated_attributes.stringify_keys))
267
248
 
268
249
  patch :update, params: { id: <%= @variable_subject %>.id, models_<%= @subject_class.underscore %>: updated_attributes }
@@ -271,12 +252,10 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
271
252
 
272
253
  context 'with invalid params' do
273
254
  let(:errors) { { <%= @fields.first.first %>: ['cannot be blank'] } }
274
- let(:failure_result) { Dry::Monads::Failure(errors) }
255
+ let(:failure_result) { errors }
275
256
 
276
257
  before do
277
- allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('update')].reject { |c| c.empty? }.join("::") %>).to receive(:contract!).and_return(true)
278
- allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('update')].reject { |c| c.empty? }.join("::") %>).to receive(:new).and_return(use_case_instance)
279
- allow(use_case_instance).to receive(:result).and_return(failure_result)
258
+ stub_use_case(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('update')].reject { |c| c.empty? }.join("::") %>, failure_result, response: :failure)
280
259
  allow(<%= @model_class %>).to receive(:find).with(<%= @variable_subject %>.id).and_return(<%= @variable_subject %>)
281
260
  allow(controller).to receive(:build_form_errors).and_return(<%= @variable_subject %>)
282
261
  end
@@ -293,15 +272,12 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
293
272
 
294
273
  describe 'DELETE #destroy' do
295
274
  let(:<%= @variable_subject %>) { create(:<%= @variable_subject %><%= @resource_owner_id.present? ? ", #{@resource_owner_id}: owner.id" : '' %>) }
296
- let(:use_case_instance) { instance_double(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('destroy')].reject { |c| c.empty? }.join("::") %>) }
297
275
 
298
276
  context 'when deletion succeeds' do
299
- let(:success_result) { Dry::Monads::Success(true) }
277
+ let(:success_result) { true }
300
278
 
301
279
  before do
302
- allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('destroy')].reject { |c| c.empty? }.join("::") %>).to receive(:contract!).and_return(true)
303
- allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('destroy')].reject { |c| c.empty? }.join("::") %>).to receive(:new).and_return(use_case_instance)
304
- allow(use_case_instance).to receive(:result).and_return(success_result)
280
+ stub_use_case(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('destroy')].reject { |c| c.empty? }.join("::") %>, success_result, response: :success)
305
281
  end
306
282
 
307
283
  it 'destroys and redirects with success notice' do
@@ -312,7 +288,7 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
312
288
  end
313
289
 
314
290
  it 'calls use case with correct contract' do
315
- expect(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('destroy')].reject { |c| c.empty? }.join("::") %>).to receive(:contract!)
291
+ expect(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('destroy')].reject { |c| c.empty? }.join("::") %>).to receive(:contract!)
316
292
  .with(hash_including(<%= @resource_owner_id.present? ? "#{@resource_owner_id}: owner.id, " : '' %>id: <%= @variable_subject %>.id))
317
293
 
318
294
  delete :destroy, params: { id: <%= @variable_subject %>.id }
@@ -320,12 +296,10 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
320
296
  end
321
297
 
322
298
  context 'when deletion fails' do
323
- let(:failure_result) { Dry::Monads::Failure('Cannot delete <%= @variable_subject %>') }
299
+ let(:failure_result) { 'Cannot delete <%= @variable_subject %>' }
324
300
 
325
301
  before do
326
- allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('destroy')].reject { |c| c.empty? }.join("::") %>).to receive(:contract!).and_return(true)
327
- allow(Core::UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('destroy')].reject { |c| c.empty? }.join("::") %>).to receive(:new).and_return(use_case_instance)
328
- allow(use_case_instance).to receive(:result).and_return(failure_result)
302
+ stub_use_case(<%= [@usecase_domain].reject { |c| c.empty? }.join("::").sub(/(.+)/, '\1::') %>UseCases::<%= [@route_scope_class, @scope_class, build_usecase_filename('destroy')].reject { |c| c.empty? }.join("::") %>, failure_result, response: :failure)
329
303
  end
330
304
 
331
305
  it 'redirects with error message' do
@@ -375,10 +349,12 @@ RSpec.describe <%= [@engine_scope_class, @scope_class].reject { |c| c.empty? }.j
375
349
 
376
350
  it 'redirects with error' do
377
351
  controller.params[:id] = 'non-existent'
352
+ allow(controller).to receive(:redirect_to)
353
+
378
354
  controller.send(:set_<%= @variable_subject %>)
379
355
 
380
- expect(response).to redirect_to(<%= [@route_scope_path, @scope_path].reject { |c| c.empty? }.join("_") %>_url)
381
- expect(flash[:error]).to eq('<%= @subject_class %> not found.')
356
+ expect(controller.instance_variable_get(:@<%= @variable_subject %>)).to be_nil
357
+ expect(controller).to have_received(:redirect_to).with(<%= [@route_scope_path, @scope_path].reject { |c| c.empty? }.join("_") %>_url, error: 'Campaign not found.')
382
358
  end
383
359
  end
384
360
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SunSword
4
- VERSION = '0.0.12'
4
+ VERSION = '0.0.13'
5
5
  public_constant :VERSION
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sun-sword
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
4
+ version: 0.0.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kotaro Minami