service_packer 0.0.2 → 0.0.3
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 +4 -4
- data/.travis.yml +9 -0
- data/README.md +3 -2
- data/lib/service_packer/base.rb +26 -2
- data/lib/service_packer/service.rb +10 -2
- data/lib/service_packer/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a48cadb9c06121cad55e7defce079a7eb8faabb5
|
4
|
+
data.tar.gz: 256bb20740c5c0bc3cfc4d81cb9925f6bd90f9fa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8f86457756e5ad34df821b97b68484d9206a2e576aff7b7b3bc2cfff1a411317783aa92c5882911e21653af00f988378b2c9046c27cb526676afc0d7b8e893ac
|
7
|
+
data.tar.gz: 3a15027ac465272fded1ff879e6f32971c133e331b26738ea3fb8ebc5b2b7edffc08477ff5f322dd90528b846f533c74fc60038672db016ef5999cb5ec4e8957
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# ServicePacker
|
2
2
|
|
3
3
|
[](https://travis-ci.org/FX-HAO/service_packer)
|
4
|
+
[](https://badge.fury.io/rb/service_packer)
|
4
5
|
|
5
6
|
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).
|
6
7
|
Service packer provides a series of methods to standardize the process of many common behaviors.
|
@@ -41,14 +42,14 @@ class Service < ServicePacker::Base
|
|
41
42
|
end
|
42
43
|
|
43
44
|
setup :send, :params => [:driver] do
|
44
|
-
validation_define do
|
45
|
+
validation_define do
|
45
46
|
unless ride.may_send?
|
46
47
|
ride.errors.add(:base, :cannot_be_assigned)
|
47
48
|
end
|
48
49
|
ride
|
49
50
|
end
|
50
51
|
|
51
|
-
action_define do
|
52
|
+
action_define do
|
52
53
|
ride.send(driver)
|
53
54
|
end
|
54
55
|
|
data/lib/service_packer/base.rb
CHANGED
@@ -2,9 +2,33 @@ require 'logger'
|
|
2
2
|
|
3
3
|
module ServicePacker
|
4
4
|
class Base
|
5
|
+
module InstanceMethods
|
6
|
+
def initialize(*args)
|
7
|
+
@_pass_in_arguments = {}
|
8
|
+
|
9
|
+
super(*args)
|
10
|
+
end
|
11
|
+
|
12
|
+
def method_missing(name, *args, &block)
|
13
|
+
super(name, *args, &block) unless @_pass_in_arguments.include? name
|
14
|
+
@_pass_in_arguments[name.to_sym]
|
15
|
+
end
|
16
|
+
|
17
|
+
# DO NOT CALL THIS METHODS UNLESS IF YOU ARE DEFINITELY KNOWN WHAT YOU DID
|
18
|
+
# This method is for pass-in-arguments temporarily
|
19
|
+
def __set_arguments(kwargs)
|
20
|
+
@_pass_in_arguments.merge!(kwargs)
|
21
|
+
end
|
22
|
+
|
23
|
+
def __clear_arguments
|
24
|
+
@_pass_in_arguments = {}
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
5
28
|
module ClassMethods
|
6
29
|
def inherited(base)
|
7
30
|
ServicePackerStore.register(base)
|
31
|
+
base.prepend InstanceMethods
|
8
32
|
|
9
33
|
super
|
10
34
|
end
|
@@ -17,10 +41,10 @@ module ServicePacker
|
|
17
41
|
kwargs = args[-1].is_a?(Hash) ? args[-1] : {}
|
18
42
|
params = kwargs[:params] || []
|
19
43
|
service = service_packer
|
20
|
-
service.
|
44
|
+
service.setup_method(method_name) { service.instance_exec(&block) }
|
21
45
|
define_method(method_name) do |*args|
|
22
46
|
raise ArgumentError, "wrong number of arguments (given #{args.size}, expected #{params.size})" if args.size != params.size
|
23
|
-
service.invoke(self, method_name, *args)
|
47
|
+
service.invoke(self, method_name, params, *args)
|
24
48
|
end
|
25
49
|
end
|
26
50
|
end
|
@@ -9,7 +9,7 @@ module ServicePacker
|
|
9
9
|
@method_name = nil
|
10
10
|
end
|
11
11
|
|
12
|
-
def
|
12
|
+
def setup_method(name, &block)
|
13
13
|
@method_name = name
|
14
14
|
validation_define { true }
|
15
15
|
action_define { true }
|
@@ -30,7 +30,15 @@ module ServicePacker
|
|
30
30
|
add_callback(@method_name, *args, &block)
|
31
31
|
end
|
32
32
|
|
33
|
-
def invoke(record, name, *args)
|
33
|
+
def invoke(record, name, params, *args)
|
34
|
+
record.__set_arguments(params.zip(args).to_h)
|
35
|
+
result = process(record, name, *args)
|
36
|
+
record.__clear_arguments
|
37
|
+
|
38
|
+
result
|
39
|
+
end
|
40
|
+
|
41
|
+
def process(record, name, *args)
|
34
42
|
validation_result = @validations[name].invoke(record, *args)
|
35
43
|
|
36
44
|
if (validation_result.respond_to?(:errors) && validation_result.errors.empty?) || validation_result == true
|
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.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- fuxin
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-03-
|
11
|
+
date: 2017-03-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -76,6 +76,7 @@ extra_rdoc_files: []
|
|
76
76
|
files:
|
77
77
|
- ".gitignore"
|
78
78
|
- ".rspec"
|
79
|
+
- ".travis.yml"
|
79
80
|
- CODE_OF_CONDUCT.md
|
80
81
|
- Gemfile
|
81
82
|
- LICENSE.txt
|