servi-craft 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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 11b3b87f23926925d24de7402e3665750fa60e919bd4aa2a9b2d2163640f13c8
4
+ data.tar.gz: 94a447219d1e31ef1677ce96b2652afe8fedc49cf3109c8068480ed1ea01bc9f
5
+ SHA512:
6
+ metadata.gz: 1e8254570f0a11e169a5053c0929bef944fab2df65fc741a476849647207a3cf9d65b53fc4c6f84c2a52890c1f00cde552833a8db4a15b37070ba15661b66806
7
+ data.tar.gz: eead6fbfa54f16d590bb9d8a6387e3cdb8972c4777b014b4cad3600eba7d3591e7e9eca19719844eda4193bddc1f27bb62228475192b3671e104e7b2f03c1767
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ServiCraft
4
+ # CreateRecordService
5
+ class Create
6
+ require 'echo_craft/service_objects/create'
7
+
8
+ attr_reader :model, :record, :params, :response
9
+
10
+ def initialize(model, params)
11
+ @model = model
12
+ @params = params
13
+ @response = ::EchoCraft::ServiceObjects::Create.new(@params)
14
+ end
15
+
16
+ def call(before_assign_attributes: proc {},
17
+ before_create: proc {},
18
+ after_successful_create: proc {},
19
+ after_failed_create: proc {},
20
+ finally: proc {})
21
+ begin
22
+ before_assign_attributes.call
23
+ @record = @model.new(@params)
24
+ before_create.call
25
+ process_record_create @record.save, after_successful_create:, after_failed_create:
26
+ rescue StandardError
27
+ fail_create(after_failed_create:)
28
+ end
29
+ finally.call
30
+ @response
31
+ end
32
+
33
+ private
34
+
35
+ def process_record_create(result, after_successful_create: proc {}, after_failed_create: proc {})
36
+ if result
37
+ after_successful_create.call
38
+ @response.created(@record)
39
+ else
40
+ fail_create(after_failed_create:)
41
+ end
42
+ end
43
+
44
+ def fail_create(after_failed_create: proc {})
45
+ after_failed_create.call
46
+ @response.unprocessabled(@record)
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ServiCraft
4
+ # Destroy Record Service
5
+ class Destroy
6
+ require 'echo_craft/service_objects/destroy'
7
+
8
+ def initialize(record)
9
+ @record = record
10
+ @response = ::EchoCraft::ServiceObjects::Destroy.new(@record)
11
+ end
12
+
13
+ def call(before_destroy: proc {},
14
+ after_successful_destroy: proc {},
15
+ after_failed_destroy: proc {},
16
+ finally: proc {})
17
+
18
+ before_destroy.call
19
+ process_record_destroy(after_successful_destroy:, after_failed_destroy:)
20
+ finally.call
21
+
22
+ @response
23
+ end
24
+
25
+ private
26
+
27
+ def process_record_destroy(after_successful_destroy: proc {},
28
+ after_failed_destroy: proc {})
29
+
30
+ @record.destroy
31
+ after_successful_destroy.call
32
+
33
+ @response.destroyed
34
+ rescue ActiveRecord::InvalidForeignKey => e
35
+ @record.errors.add(:base, :fk_constraint, message: e.cause.message)
36
+ unprocessabled_destroy(after_failed_destroy:)
37
+ rescue StandardError
38
+ unprocessabled_destroy(after_failed_destroy:)
39
+ end
40
+
41
+ def unprocessabled_destroy(after_failed_destroy: proc {})
42
+ after_failed_destroy.call
43
+ @response.unprocessabled
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ServiCraft
4
+ # Query Record Service
5
+ class Query
6
+ def initialize(base, page: 1, rows: nil)
7
+ @base = base
8
+ @page = page.to_i
9
+ @rows = rows
10
+ end
11
+
12
+ def call
13
+ paginate @base
14
+ end
15
+
16
+ private
17
+
18
+ def paginate(query)
19
+ return query if @rows.nil?
20
+
21
+ rows = @rows.to_i
22
+ page = @page.to_i
23
+ query.limit(rows).offset(rows * (page - 1))
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ServiCraft
4
+ # UpdateRecordService
5
+ class Update
6
+ require 'echo_craft/service_objects/update'
7
+
8
+ attr_reader :model, :record, :params, :response
9
+
10
+ def initialize(record, params)
11
+ @record = record
12
+ @model = @record.class
13
+ @params = params
14
+ @response = ::EchoCraft::ServiceObjects::Update.new(@record, @params)
15
+ end
16
+
17
+ def call(before_assign_attributes: proc {},
18
+ before_update: proc {},
19
+ after_successful_update: proc {},
20
+ after_failed_update: proc {},
21
+ finally: proc {})
22
+
23
+ begin
24
+ before_assign_attributes.call
25
+
26
+ @record.assign_attributes(@params)
27
+
28
+ before_update.call
29
+
30
+ process_record_update @record.save, after_successful_update:, after_failed_update:
31
+ rescue StandardError
32
+ fail_update(after_failed_update:)
33
+ end
34
+ finally.call
35
+ @response
36
+ end
37
+
38
+ private
39
+
40
+ def process_record_update(result, after_successful_update: proc {},
41
+ after_failed_update: proc {})
42
+ if result
43
+ after_successful_update.call
44
+ @response.updated
45
+ else
46
+ fail_update(after_failed_update:)
47
+ end
48
+ result
49
+ end
50
+
51
+ def fail_update(after_failed_update: proc {})
52
+ after_failed_update.call
53
+ @response.unprocessabled
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ServiCraft
4
+ VERSION = "0.1.0"
5
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "servi_craft/version"
4
+
5
+ module ServiCraft
6
+ class Error < StandardError; end
7
+ # Your code goes here...
8
+ end
metadata ADDED
@@ -0,0 +1,64 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: servi-craft
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Marcos Chuquicondor
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-01-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: echo-craft
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 0.1.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 0.1.0
27
+ description: Manage Ruby Service Objects.
28
+ email:
29
+ - marcos@chuquicondor.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - lib/servi_craft.rb
35
+ - lib/servi_craft/create.rb
36
+ - lib/servi_craft/destroy.rb
37
+ - lib/servi_craft/query.rb
38
+ - lib/servi_craft/update.rb
39
+ - lib/servi_craft/version.rb
40
+ homepage: https://github.com/chuquimm/servi-craft.
41
+ licenses:
42
+ - MIT
43
+ metadata:
44
+ homepage_uri: https://github.com/chuquimm/servi-craft.
45
+ post_install_message:
46
+ rdoc_options: []
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 2.6.0
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ requirements: []
60
+ rubygems_version: 3.3.3
61
+ signing_key:
62
+ specification_version: 4
63
+ summary: Manage Service Objects.
64
+ test_files: []