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.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +45 -8
  3. data/lib/generators/rider_kick/clean_arch_generator.rb +1 -0
  4. data/lib/generators/rider_kick/entity_type_mapping_spec.rb +52 -0
  5. data/lib/generators/rider_kick/repositories_contract_spec.rb +62 -0
  6. data/lib/generators/rider_kick/scaffold_generator_builder_uploaders_spec.rb +54 -0
  7. data/lib/generators/rider_kick/scaffold_generator_contracts_spec.rb +69 -0
  8. data/lib/generators/rider_kick/scaffold_generator_contracts_with_scope_spec.rb +54 -0
  9. data/lib/generators/rider_kick/scaffold_generator_idempotent_spec.rb +59 -0
  10. data/lib/generators/rider_kick/scaffold_generator_success_spec.rb +82 -0
  11. data/lib/generators/rider_kick/scaffold_generator_with_scope_spec.rb +55 -0
  12. data/lib/generators/rider_kick/structure_generator.rb +33 -0
  13. data/lib/generators/rider_kick/structure_generator_spec.rb +20 -0
  14. data/lib/generators/rider_kick/structure_generator_success_spec.rb +36 -0
  15. data/lib/generators/rider_kick/templates/db/structures/example.yaml.tt +114 -82
  16. data/lib/generators/rider_kick/templates/domains/core/repositories/abstract_repository.rb.tt +0 -12
  17. data/lib/generators/rider_kick/templates/domains/core/repositories/list.rb.tt +2 -2
  18. data/lib/generators/rider_kick/templates/domains/core/utils/abstract_utils.rb.tt +29 -0
  19. data/lib/generators/rider_kick/templates/domains/core/utils/request_methods.rb.tt +2 -1
  20. data/lib/rider-kick.rb +1 -0
  21. data/lib/rider_kick/entities/failure_details.rb +22 -14
  22. data/lib/rider_kick/entities/failure_details_spec.rb +22 -0
  23. data/lib/rider_kick/matchers/use_case_result_edge_spec.rb +28 -0
  24. data/lib/rider_kick/use_cases/abstract_use_case_spec.rb +57 -0
  25. data/lib/rider_kick/version.rb +1 -1
  26. metadata +223 -51
  27. data/.rspec +0 -3
  28. data/.rubocop.yml +0 -1141
  29. data/Rakefile +0 -12
  30. data/lib/rider_kick/builders/abstract_active_record_entity_builder_spec.rb +0 -116
  31. data/lib/rider_kick/matchers/use_case_result_spec.rb +0 -64
data/Rakefile DELETED
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "bundler/gem_tasks"
4
- require "rspec/core/rake_task"
5
-
6
- RSpec::Core::RakeTask.new(:spec)
7
-
8
- require "rubocop/rake_task"
9
-
10
- RuboCop::RakeTask.new
11
-
12
- task default: %i[spec rubocop]
@@ -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