polist 1.1.1 → 1.2.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 +4 -4
- data/CHANGELOG.md +10 -1
- data/README.md +39 -2
- data/lib/polist/service.rb +6 -6
- data/lib/polist/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d41a9ea7c84cd858fc92d79160ea448ed78fd36cfcf164195a7afe9cc5dbd59e
|
4
|
+
data.tar.gz: 2d2e676fd05d9b57f3b3159955a473933e95500de4f4e80f63b708a1cdc04f83
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f447ab40d832e15136acbf2b312f2941d2d18b0c8a046f40a4a3e26a76aa4e8be4df313e30962c665e3cc0f755ed1989f3ea8c6df050d0a4c28555fffd457558
|
7
|
+
data.tar.gz: 7e02ad12d1e8a13669a9e657c8ed7a181d19707c85c754c227c2fb006ba84e2b411ed4fe226001e8aeb2a3fa2a0aaee198eba1ef04d0432752f2353a8ce0f9fa
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,12 @@
|
|
2
2
|
|
3
3
|
## [Unreleased]
|
4
4
|
|
5
|
+
## [1.2.0] - 2019-03-15
|
6
|
+
|
7
|
+
### Added
|
8
|
+
|
9
|
+
- Block support for `#call` and `#run` ([@VanyaZ158]) [#5]
|
10
|
+
|
5
11
|
## [1.1.1] - 2019-02-09
|
6
12
|
|
7
13
|
### Fixed
|
@@ -28,11 +34,14 @@
|
|
28
34
|
[1.0.0]: https://github.com/umbrellio/polist/compare/v0.4.0...v1.0.0
|
29
35
|
[1.1.0]: https://github.com/umbrellio/polist/compare/v1.0.0...v1.1.0
|
30
36
|
[1.1.1]: https://github.com/umbrellio/polist/compare/v1.1.0...v1.1.1
|
31
|
-
[
|
37
|
+
[1.2.0]: https://github.com/umbrellio/polist/compare/v1.1.1...v1.2.0
|
38
|
+
[Unreleased]: https://github.com/umbrellio/polist/compare/v1.2.0...HEAD
|
32
39
|
|
33
40
|
[@nesaulov]: https://github.com/nesaulov
|
41
|
+
[@VanyaZ158]: https://github.com/VanyaZ158
|
34
42
|
[@tycooon]: https://github.com/tycooon
|
35
43
|
|
36
44
|
[#2]: https://github.com/umbrellio/polist/pull/2
|
37
45
|
[#3]: https://github.com/umbrellio/polist/pull/3
|
38
46
|
[#4]: https://github.com/umbrellio/polist/pull/4
|
47
|
+
[#5]: https://github.com/umbrellio/polist/pull/5
|
data/README.md
CHANGED
@@ -56,6 +56,43 @@ end
|
|
56
56
|
|
57
57
|
Note that `.run` and `.call` are just shortcuts for `MyService.new(...).run` and `MyService.new(...).call` with the only difference that they always return the service instance instead of the result of `#run` or `#call`. Unlike `#call` though, `#run` is not intended to be overwritten in subclasses.
|
58
58
|
|
59
|
+
### Using blocks in #call and #run methods.
|
60
|
+
|
61
|
+
You can use yield in `#call`. And then call `::run` or `::call` class methods with block. For example, we have the class:
|
62
|
+
```ruby
|
63
|
+
class BlockFun < Polist::Service
|
64
|
+
def call
|
65
|
+
success!(yield(1, 2))
|
66
|
+
end
|
67
|
+
end
|
68
|
+
```
|
69
|
+
|
70
|
+
Then we can use it like this:
|
71
|
+
```ruby
|
72
|
+
service = BlockFun.call { |a, b| a + b }
|
73
|
+
|
74
|
+
p service.response # => 3
|
75
|
+
```
|
76
|
+
|
77
|
+
Behind the scenes it just catches passed block in class methods `::run` and `::call`, converts it to proc and then passes proc to instance method `#call` and `#run` by converting it back to block. So, for example, if you want to pass this block to private methods, you can write code like this:
|
78
|
+
```ruby
|
79
|
+
class AnotherBlockFun < Polist::Service
|
80
|
+
def call(&block)
|
81
|
+
success!(block_caller(&block))
|
82
|
+
end
|
83
|
+
|
84
|
+
private
|
85
|
+
|
86
|
+
def block_caller
|
87
|
+
yield 1, 2
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
service = AnotherBlockFun.call { |a, b| a + b }
|
92
|
+
|
93
|
+
p service.response # => 3
|
94
|
+
```
|
95
|
+
|
59
96
|
### Using Form objects
|
60
97
|
|
61
98
|
Sometimes you want to use some kind of params parsing and/or validation, and you can do that with the help of `Polist::Service::Form` class. It uses [tainbox](https://github.com/enthrops/tainbox) gem under the hood.
|
@@ -192,10 +229,10 @@ class MyService < Polist::Service
|
|
192
229
|
def call
|
193
230
|
success!(code: :cool)
|
194
231
|
end
|
195
|
-
|
232
|
+
|
196
233
|
def fail_on_middleware?
|
197
234
|
true
|
198
|
-
end
|
235
|
+
end
|
199
236
|
end
|
200
237
|
|
201
238
|
service = MyService.run
|
data/lib/polist/service.rb
CHANGED
@@ -45,12 +45,12 @@ module Polist
|
|
45
45
|
new(*args)
|
46
46
|
end
|
47
47
|
|
48
|
-
def self.call(*args)
|
49
|
-
build(*args).tap(
|
48
|
+
def self.call(*args, &block)
|
49
|
+
build(*args).tap { |service| service.call(&block) }
|
50
50
|
end
|
51
51
|
|
52
|
-
def self.run(*args)
|
53
|
-
build(*args).tap(
|
52
|
+
def self.run(*args, &block)
|
53
|
+
build(*args).tap { |service| service.run(&block) }
|
54
54
|
end
|
55
55
|
|
56
56
|
def self.param(*names)
|
@@ -83,8 +83,8 @@ module Polist
|
|
83
83
|
# Should be implemented in subclasses
|
84
84
|
def call; end
|
85
85
|
|
86
|
-
def run
|
87
|
-
call
|
86
|
+
def run(&block)
|
87
|
+
call(&block)
|
88
88
|
rescue self.class::Failure => error
|
89
89
|
@response = error.response
|
90
90
|
@failure = true
|
data/lib/polist/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: polist
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yuri Smirnov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-03-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -192,7 +192,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
192
192
|
- !ruby/object:Gem::Version
|
193
193
|
version: '0'
|
194
194
|
requirements: []
|
195
|
-
rubygems_version: 3.0.
|
195
|
+
rubygems_version: 3.0.3
|
196
196
|
signing_key:
|
197
197
|
specification_version: 4
|
198
198
|
summary: A gem for creating simple service classes and more.
|