servi-craft 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []