service_packer 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +26 -2
- data/lib/service_packer/base.rb +10 -0
- data/lib/service_packer/core/validation.rb +7 -2
- data/lib/service_packer/service.rb +14 -2
- data/lib/service_packer/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b5310639a234a333d6cd85d7b07b40a7ecf462df
|
4
|
+
data.tar.gz: 26b01d245ecaf5d445bbf57a9eafb98deec1a32f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 67e612e99136ea39627cd22ff7e724b4468de3f72f03d199b85be434d4277f260159539ee10c0af6e8a8896f09131d9ccebc2c09e9c0733e8c5597fd2b48e7b3
|
7
|
+
data.tar.gz: 89cb27a4a4847daa55dd2ecdcdcda52d1d505c038138b68cf5f87abca722ea657a63f1d642255632c1277af3f67a3b7d068d242ee906b47f6711099426750e24
|
data/README.md
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
[![Build Status](https://travis-ci.org/FX-HAO/service_packer.svg?branch=master)](https://travis-ci.org/FX-HAO/service_packer)
|
4
4
|
[![Gem Version](https://badge.fury.io/rb/service_packer.svg)](https://badge.fury.io/rb/service_packer)
|
5
|
+
[![Dependency Status](https://gemnasium.com/badges/github.com/FX-HAO/service_packer.svg)](https://gemnasium.com/github.com/FX-HAO/service_packer)
|
5
6
|
|
6
7
|
This gem is for decoupling your logic from models, some actions in a system warrant a Service Object to encapsulate their operation(e.g. notifications, emails, feedbacks, etc).
|
7
8
|
Service packer provides a series of methods to standardize the process of many common behaviors.
|
@@ -27,10 +28,12 @@ Or install it yourself as:
|
|
27
28
|
Here is a list with all the available behaviors, listed in the same order in which they will get called during the respective operations.
|
28
29
|
|
29
30
|
**The operation life cycle**
|
30
|
-
|
31
|
+
|
32
|
+
- common_validation
|
31
33
|
- validation
|
32
34
|
- action
|
33
35
|
- callback
|
36
|
+
- common_callback
|
34
37
|
|
35
38
|
A simple example:
|
36
39
|
|
@@ -40,7 +43,15 @@ class Service < ServicePacker::Base
|
|
40
43
|
def initialize(ride)
|
41
44
|
@ride = ride
|
42
45
|
end
|
43
|
-
|
46
|
+
|
47
|
+
def setup_common_validation
|
48
|
+
ride.valid?
|
49
|
+
end
|
50
|
+
|
51
|
+
def setup_common_callback
|
52
|
+
logger.info ride.to_json
|
53
|
+
end
|
54
|
+
|
44
55
|
setup :send, :params => [:driver] do
|
45
56
|
validation_define do
|
46
57
|
unless ride.may_send?
|
@@ -57,6 +68,19 @@ class Service < ServicePacker::Base
|
|
57
68
|
Notifier.send_to(driver, "New ride")
|
58
69
|
end
|
59
70
|
end
|
71
|
+
|
72
|
+
setup :cancel do
|
73
|
+
validation_define do
|
74
|
+
unless ride.may_cancel?
|
75
|
+
ride.errors.add(:base, :cannot_cancel)
|
76
|
+
end
|
77
|
+
ride
|
78
|
+
end
|
79
|
+
|
80
|
+
action_define do
|
81
|
+
ride.cancel!
|
82
|
+
end
|
83
|
+
end
|
60
84
|
|
61
85
|
attr_reader :ride
|
62
86
|
|
data/lib/service_packer/base.rb
CHANGED
@@ -47,6 +47,16 @@ module ServicePacker
|
|
47
47
|
service.invoke(self, method_name, params, *args)
|
48
48
|
end
|
49
49
|
end
|
50
|
+
|
51
|
+
def setup_common_validation(&block)
|
52
|
+
service = service_packer
|
53
|
+
service.common_validation_define(&block)
|
54
|
+
end
|
55
|
+
|
56
|
+
def setup_common_callback(&block)
|
57
|
+
service = service_packer
|
58
|
+
service.common_callback_define(&block)
|
59
|
+
end
|
50
60
|
end
|
51
61
|
|
52
62
|
extend ClassMethods
|
@@ -4,13 +4,18 @@ module ServicePacker::Core
|
|
4
4
|
@name = name
|
5
5
|
@args = args
|
6
6
|
@block = block
|
7
|
+
@result = false
|
7
8
|
end
|
8
9
|
|
9
10
|
def invoke(record, *args)
|
10
|
-
record.instance_exec(*args, &block)
|
11
|
+
result = record.instance_exec(*args, &block)
|
12
|
+
if (result.respond_to?(:errors) && result.errors.empty?) || result == true
|
13
|
+
@result = result
|
14
|
+
end
|
15
|
+
return result
|
11
16
|
end
|
12
17
|
|
13
|
-
attr_reader :name, :args, :block
|
18
|
+
attr_reader :name, :args, :block, :result
|
14
19
|
|
15
20
|
end
|
16
21
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
module ServicePacker
|
2
2
|
class Service
|
3
3
|
def initialize
|
4
|
+
common_validation_define { true }
|
5
|
+
common_callback_define { true }
|
4
6
|
@validations = {}
|
5
7
|
@actions = {}
|
6
8
|
@callbacks = {}
|
@@ -18,6 +20,14 @@ module ServicePacker
|
|
18
20
|
@method_name = nil
|
19
21
|
end
|
20
22
|
|
23
|
+
def common_validation_define(*args, &block)
|
24
|
+
@common_validation = ServicePacker::Core::Validation.new("common_validation", *args, &block)
|
25
|
+
end
|
26
|
+
|
27
|
+
def common_callback_define(*args, &block)
|
28
|
+
@common_callback = ServicePacker::Core::Callback.new("common_callback", *args, &block)
|
29
|
+
end
|
30
|
+
|
21
31
|
def validation_define(*args, &block)
|
22
32
|
add_validation(@method_name, *args, &block)
|
23
33
|
end
|
@@ -39,11 +49,13 @@ module ServicePacker
|
|
39
49
|
end
|
40
50
|
|
41
51
|
def process(record, name, *args)
|
42
|
-
validation_result = @
|
52
|
+
validation_result = @common_validation.invoke(record, *args) && @common_validation.result &&
|
53
|
+
@validations[name].invoke(record, *args) && @validations[name].result
|
43
54
|
|
44
|
-
if
|
55
|
+
if validation_result
|
45
56
|
action_result = @actions[name].invoke(record, *args)
|
46
57
|
if (action_result.respond_to?(:errors) && action_result.errors.empty?) || action_result == true
|
58
|
+
@common_callback.invoke(record, *args)
|
47
59
|
@callbacks[name].invoke(record, *args)
|
48
60
|
true
|
49
61
|
else
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: service_packer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- fuxin
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-04-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|