rider-kick 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 +4 -4
- data/README.md +45 -8
- data/lib/generators/rider_kick/clean_arch_generator.rb +1 -0
- data/lib/generators/rider_kick/entity_type_mapping_spec.rb +52 -0
- data/lib/generators/rider_kick/repositories_contract_spec.rb +62 -0
- data/lib/generators/rider_kick/scaffold_generator_builder_uploaders_spec.rb +54 -0
- data/lib/generators/rider_kick/scaffold_generator_contracts_spec.rb +69 -0
- data/lib/generators/rider_kick/scaffold_generator_contracts_with_scope_spec.rb +54 -0
- data/lib/generators/rider_kick/scaffold_generator_idempotent_spec.rb +59 -0
- data/lib/generators/rider_kick/scaffold_generator_success_spec.rb +82 -0
- data/lib/generators/rider_kick/scaffold_generator_with_scope_spec.rb +55 -0
- data/lib/generators/rider_kick/structure_generator.rb +33 -0
- data/lib/generators/rider_kick/structure_generator_spec.rb +20 -0
- data/lib/generators/rider_kick/structure_generator_success_spec.rb +36 -0
- data/lib/generators/rider_kick/templates/db/structures/example.yaml.tt +114 -82
- data/lib/generators/rider_kick/templates/domains/core/repositories/abstract_repository.rb.tt +0 -12
- data/lib/generators/rider_kick/templates/domains/core/repositories/list.rb.tt +2 -2
- data/lib/generators/rider_kick/templates/domains/core/utils/abstract_utils.rb.tt +29 -0
- data/lib/generators/rider_kick/templates/domains/core/utils/request_methods.rb.tt +2 -1
- data/lib/rider-kick.rb +1 -0
- data/lib/rider_kick/entities/failure_details.rb +22 -14
- data/lib/rider_kick/entities/failure_details_spec.rb +22 -0
- data/lib/rider_kick/matchers/use_case_result_edge_spec.rb +28 -0
- data/lib/rider_kick/use_cases/abstract_use_case_spec.rb +57 -0
- data/lib/rider_kick/version.rb +1 -1
- metadata +223 -51
- data/.rspec +0 -3
- data/.rubocop.yml +0 -1141
- data/Rakefile +0 -12
- data/lib/rider_kick/builders/abstract_active_record_entity_builder_spec.rb +0 -116
- data/lib/rider_kick/matchers/use_case_result_spec.rb +0 -64
data/Rakefile
DELETED
@@ -1,116 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
RSpec.describe RiderKick::Builders::AbstractActiveRecordEntityBuilder do
|
6
|
-
let(:entity_class) do
|
7
|
-
Class.new(Dry::Struct) do
|
8
|
-
attribute :id, Types::String
|
9
|
-
attribute :name, Types::String
|
10
|
-
attribute :related_entities, Types::Array.of(Types::Hash).optional.default([].freeze)
|
11
|
-
attribute :other_entity, Types::Hash.optional.default(nil)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
let(:builder_class) do
|
16
|
-
entity = entity_class
|
17
|
-
Class.new(described_class) do
|
18
|
-
acts_as_builder_for_entity(entity)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
let(:params) { instance_double('ActiveRecord::Base', attributes: { 'id' => '123e4567-e89b-12d3-a456-426614174000', 'name' => 'Sample Name' }) }
|
23
|
-
let(:extra_param1) { 'extra1' }
|
24
|
-
let(:extra_param2) { 'extra2' }
|
25
|
-
|
26
|
-
subject(:builder) { builder_class.new(params, extra_param1, extra_param2) }
|
27
|
-
|
28
|
-
describe '#initialize' do
|
29
|
-
it 'initializes with params and extra arguments' do
|
30
|
-
expect { builder_class.new(params, extra_param1, extra_param2) }.not_to raise_error
|
31
|
-
expect(builder.instance_variable_get(:@params)).to eq(params)
|
32
|
-
expect(builder.instance_variable_get(:@args)).to eq([extra_param1, extra_param2])
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
describe '.acts_as_builder_for_entity' do
|
37
|
-
it 'sets entity class as a private method' do
|
38
|
-
expect(builder.send(:entity_class)).to eq(entity_class)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
describe '.has_many' do
|
43
|
-
let(:related_entity_class) { double('RelatedEntityClass') }
|
44
|
-
let(:relation_name) { :related_entities }
|
45
|
-
|
46
|
-
before do
|
47
|
-
builder_class.has_many relation_name, use: related_entity_class
|
48
|
-
allow(params).to receive(relation_name).and_return([double('Relation')])
|
49
|
-
allow(related_entity_class).to receive(:new).and_return(double(build: { id: 'abc123', name: 'Related' }))
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'adds to has_many_builders' do
|
53
|
-
expect(builder_class.has_many_builders).to include([relation_name, related_entity_class])
|
54
|
-
end
|
55
|
-
|
56
|
-
it 'builds has_many relations' do
|
57
|
-
result = builder.send(:attributes_for_has_many_relations)
|
58
|
-
expect(result[relation_name]).to eq([{ id: 'abc123', name: 'Related' }])
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
describe '.belongs_to' do
|
63
|
-
let(:other_entity_class) { double('OtherEntityClass') }
|
64
|
-
let(:relation_name) { :other_entity }
|
65
|
-
|
66
|
-
before do
|
67
|
-
builder_class.belongs_to relation_name, use: other_entity_class
|
68
|
-
allow(params).to receive(relation_name).and_return(double('Relation'))
|
69
|
-
allow(other_entity_class).to receive(:new).and_return(double(build: { id: 'xyz789', name: 'Other' }))
|
70
|
-
end
|
71
|
-
|
72
|
-
it 'adds to belongs_to_builders' do
|
73
|
-
expect(builder_class.belongs_to_builders).to include([relation_name, other_entity_class])
|
74
|
-
end
|
75
|
-
|
76
|
-
it 'builds belongs_to relation' do
|
77
|
-
result = builder.send(:attributes_for_belongs_to_relations)
|
78
|
-
expect(result[relation_name]).to eq({ id: 'xyz789', name: 'Other' })
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
describe '#build' do
|
83
|
-
let(:attributes) { { id: '123e4567-e89b-12d3-a456-426614174000', name: 'Sample Name' } }
|
84
|
-
|
85
|
-
it 'builds the entity with AR attributes' do
|
86
|
-
allow(builder).to receive(:ar_attributes_for_entity).and_return(attributes)
|
87
|
-
entity = builder.build
|
88
|
-
expect(entity.id).to eq('123e4567-e89b-12d3-a456-426614174000')
|
89
|
-
expect(entity.name).to eq('Sample Name')
|
90
|
-
end
|
91
|
-
|
92
|
-
context 'when has_many and belongs_to relations exist' do
|
93
|
-
let(:related_entity_class) { double('RelatedEntityClass') }
|
94
|
-
let(:other_entity_class) { double('OtherEntityClass') }
|
95
|
-
|
96
|
-
before do
|
97
|
-
builder_class.has_many :related_entities, use: related_entity_class
|
98
|
-
builder_class.belongs_to :other_entity, use: other_entity_class
|
99
|
-
|
100
|
-
allow(params).to receive(:related_entities).and_return([double('Relation')])
|
101
|
-
allow(params).to receive(:other_entity).and_return(double('Relation'))
|
102
|
-
|
103
|
-
allow(related_entity_class).to receive(:new).and_return(double(build: { id: 'abc123', name: 'Related' }))
|
104
|
-
allow(other_entity_class).to receive(:new).and_return(double(build: { id: 'xyz789', name: 'Other' }))
|
105
|
-
end
|
106
|
-
|
107
|
-
it 'builds the entity with all attributes' do
|
108
|
-
entity = builder.build
|
109
|
-
expect(entity.id).to eq('123e4567-e89b-12d3-a456-426614174000')
|
110
|
-
expect(entity.name).to eq('Sample Name')
|
111
|
-
expect(entity.related_entities).to eq([{ id: 'abc123', name: 'Related' }])
|
112
|
-
expect(entity.other_entity).to eq({ id: 'xyz789', name: 'Other' })
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
require 'rider_kick/matchers/use_case_result'
|
5
|
-
|
6
|
-
RSpec.describe RiderKick::Matchers::UseCaseResult do
|
7
|
-
describe '.call' do
|
8
|
-
subject(:call) do
|
9
|
-
described_class.call(result) do |matcher|
|
10
|
-
matcher.success(&:to_s)
|
11
|
-
matcher.failure { |failure_details| failure_details }
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
context do
|
16
|
-
let(:result) { Dry::Monads::Success('success!') }
|
17
|
-
|
18
|
-
it { is_expected.to eq 'success!' }
|
19
|
-
end
|
20
|
-
|
21
|
-
context do
|
22
|
-
let(:result) { Dry::Monads::Failure('failure!') }
|
23
|
-
|
24
|
-
specify do
|
25
|
-
expect(call).to eq RiderKick::Entities::FailureDetails.new(
|
26
|
-
message: 'failure!',
|
27
|
-
other_properties: {},
|
28
|
-
type: 'error'
|
29
|
-
)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
context do
|
34
|
-
let(:result) { Dry::Monads::Failure(['failure 1', 'failure 2']) }
|
35
|
-
|
36
|
-
specify do
|
37
|
-
expect(call).to eq RiderKick::Entities::FailureDetails.new(
|
38
|
-
message: 'failure 1, failure 2',
|
39
|
-
other_properties: {},
|
40
|
-
type: 'error'
|
41
|
-
)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
context do
|
46
|
-
let(:failure_details) do
|
47
|
-
RiderKick::Entities::FailureDetails.new(
|
48
|
-
message: 'failure!',
|
49
|
-
other_properties: { a: :b },
|
50
|
-
type: 'unauthorized'
|
51
|
-
)
|
52
|
-
end
|
53
|
-
let(:result) { Dry::Monads::Failure(failure_details) }
|
54
|
-
|
55
|
-
it { is_expected.to eq failure_details }
|
56
|
-
end
|
57
|
-
|
58
|
-
context do
|
59
|
-
let(:result) { Dry::Monads::Failure(:no) }
|
60
|
-
|
61
|
-
specify { expect { call }.to raise_error ArgumentError }
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|