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