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 +7 -0
- data/lib/servi_craft/create.rb +49 -0
- data/lib/servi_craft/destroy.rb +46 -0
- data/lib/servi_craft/query.rb +26 -0
- data/lib/servi_craft/update.rb +56 -0
- data/lib/servi_craft/version.rb +5 -0
- data/lib/servi_craft.rb +8 -0
- metadata +64 -0
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
|
data/lib/servi_craft.rb
ADDED
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: []
|