operators-service 0.1.0 → 0.1.1
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/.gitignore +1 -0
- data/.rspec +3 -0
- data/.rubocop.yml +21 -0
- data/circle.yml +3 -0
- data/lib/operators/service.rb +39 -3
- data/lib/operators_service.rb +1 -0
- data/operators-service.gemspec +18 -16
- data/spec/operators/service_spec.rb +46 -0
- data/spec/spec_helper.rb +9 -0
- metadata +71 -10
- data/bin/console +0 -14
- data/bin/setup +0 -8
- data/lib/operators/service/version.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b3e98a6a60f2736a9beb752b52e51d7ccee6f12e
|
4
|
+
data.tar.gz: 7574bb1bf6e6d7e5b385af1cb737fa8dbf95f935
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8567e1d164d484f9958e489ab6671ed02a9812c99dc3aebcb69ec204e06f3db7ee749a13233985d860334ae75b73edcf2f784f1287d702dcc4d5218acd551e1d
|
7
|
+
data.tar.gz: 7abbec2ef6d7abe19ed0ec63128c25d012058de5e3a132bf6330aca237b7a8e99d41833f9b4fb57ce59c5960b611f301a96923cc5f405d07660601d4736194a7
|
data/.gitignore
CHANGED
data/.rspec
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
AllCops:
|
2
|
+
DisplayCopNames: true
|
3
|
+
DisplayStyleGuide: true
|
4
|
+
StyleGuideCopsOnly: true
|
5
|
+
TargetRubyVersion: 2.4.1
|
6
|
+
|
7
|
+
Metrics/LineLength:
|
8
|
+
Max: 120
|
9
|
+
|
10
|
+
Documentation:
|
11
|
+
Enabled: false
|
12
|
+
|
13
|
+
FrozenStringLiteralComment:
|
14
|
+
Enabled: false
|
15
|
+
|
16
|
+
Style/FileName:
|
17
|
+
Enabled: false
|
18
|
+
|
19
|
+
Metrics/ModuleLength:
|
20
|
+
Exclude:
|
21
|
+
- spec/**/*_spec.rb
|
data/circle.yml
ADDED
data/lib/operators/service.rb
CHANGED
@@ -1,7 +1,43 @@
|
|
1
|
-
require
|
1
|
+
require 'dry-monads'
|
2
2
|
|
3
3
|
module Operators
|
4
|
-
|
5
|
-
|
4
|
+
class Service
|
5
|
+
def self.rescue_callbacks(*exceptions)
|
6
|
+
define_method :call do
|
7
|
+
begin
|
8
|
+
calling
|
9
|
+
rescue *exceptions => error
|
10
|
+
failure(error.message)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
rescue_callbacks
|
16
|
+
|
17
|
+
def self.call(*args)
|
18
|
+
new(*args).call
|
19
|
+
end
|
20
|
+
|
21
|
+
def success(result = nil)
|
22
|
+
Dry::Monads.Right(success_wrap(result))
|
23
|
+
end
|
24
|
+
|
25
|
+
def failure(result = nil)
|
26
|
+
Dry::Monads.Left(error_wrap(result))
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def error_wrap(result)
|
32
|
+
result
|
33
|
+
end
|
34
|
+
|
35
|
+
def success_wrap(result)
|
36
|
+
result
|
37
|
+
end
|
38
|
+
|
39
|
+
def calling
|
40
|
+
raise 'Must be redefined'
|
41
|
+
end
|
6
42
|
end
|
7
43
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require "operators/service"
|
data/operators-service.gemspec
CHANGED
@@ -1,26 +1,28 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
lib = File.expand_path('../lib', __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'operators/service/version'
|
5
4
|
|
6
5
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
8
|
-
spec.version =
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
6
|
+
spec.name = 'operators-service'
|
7
|
+
spec.version = '0.1.1'
|
8
|
+
spec.authors = ['Yaroslav Bezrukavyi', 'Kirill Shevchenko']
|
9
|
+
spec.email = ['yaroslav.bezrukavyi@gmail.com', 'hello@kirillshevch.com']
|
11
10
|
|
12
|
-
spec.summary =
|
13
|
-
spec.description =
|
14
|
-
spec.homepage =
|
15
|
-
spec.license =
|
11
|
+
spec.summary = 'You will always know the type of the result'
|
12
|
+
spec.description = 'Service is based on Dry::Monads'
|
13
|
+
spec.homepage = 'http://operators-rb.org'
|
14
|
+
spec.license = 'MIT'
|
16
15
|
|
17
|
-
spec.files = `git ls-files -z`.split("\x0")
|
18
|
-
|
19
|
-
end
|
20
|
-
spec.bindir = "exe"
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.bindir = 'exe'
|
21
18
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
|
-
spec.require_paths = [
|
19
|
+
spec.require_paths = ['lib']
|
23
20
|
|
24
|
-
spec.
|
25
|
-
|
21
|
+
spec.add_dependency 'dry-monads', '~> 0.3.1'
|
22
|
+
|
23
|
+
spec.add_development_dependency 'bundler', '~> 1.15.4'
|
24
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
25
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
26
|
+
spec.add_development_dependency 'byebug', '~> 3.5.0'
|
27
|
+
spec.add_development_dependency 'rubocop', '~> 0.48.0'
|
26
28
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
RSpec.describe Operators::Service do
|
2
|
+
before do
|
3
|
+
class TestSerivce < Operators::Service
|
4
|
+
rescue_callbacks SyntaxError
|
5
|
+
|
6
|
+
def initialize(data, result)
|
7
|
+
@data = data
|
8
|
+
@result = result
|
9
|
+
end
|
10
|
+
|
11
|
+
def calling
|
12
|
+
@result ? success(@data) : failure(@data)
|
13
|
+
end
|
14
|
+
|
15
|
+
def except_error(error)
|
16
|
+
raise error
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'success result' do
|
22
|
+
result = TestSerivce.call('data', true)
|
23
|
+
expect(result.success?).to be_truthy
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'failure result' do
|
27
|
+
result = TestSerivce.call('data', false)
|
28
|
+
expect(result.success?).to be_falsey
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'catch error' do
|
32
|
+
subject { TestSerivce.new('error', true) }
|
33
|
+
|
34
|
+
it 'catch' do
|
35
|
+
allow(subject).to receive(:calling).and_raise(SyntaxError)
|
36
|
+
|
37
|
+
expect(subject.call.failure?).to be_truthy
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'not catch' do
|
41
|
+
allow(subject).to receive(:calling).and_raise(LoadError)
|
42
|
+
|
43
|
+
expect { subject.call }.to raise_exception(LoadError)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,29 +1,44 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: operators-service
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
+
- Yaroslav Bezrukavyi
|
7
8
|
- Kirill Shevchenko
|
8
9
|
autorequire:
|
9
10
|
bindir: exe
|
10
11
|
cert_chain: []
|
11
|
-
date: 2017-
|
12
|
+
date: 2017-09-05 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: dry-monads
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: 0.3.1
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - "~>"
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: 0.3.1
|
13
28
|
- !ruby/object:Gem::Dependency
|
14
29
|
name: bundler
|
15
30
|
requirement: !ruby/object:Gem::Requirement
|
16
31
|
requirements:
|
17
32
|
- - "~>"
|
18
33
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
34
|
+
version: 1.15.4
|
20
35
|
type: :development
|
21
36
|
prerelease: false
|
22
37
|
version_requirements: !ruby/object:Gem::Requirement
|
23
38
|
requirements:
|
24
39
|
- - "~>"
|
25
40
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
41
|
+
version: 1.15.4
|
27
42
|
- !ruby/object:Gem::Dependency
|
28
43
|
name: rake
|
29
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,23 +53,69 @@ dependencies:
|
|
38
53
|
- - "~>"
|
39
54
|
- !ruby/object:Gem::Version
|
40
55
|
version: '10.0'
|
41
|
-
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: rspec
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - "~>"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '3.0'
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '3.0'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: byebug
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - "~>"
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 3.5.0
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - "~>"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 3.5.0
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: rubocop
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - "~>"
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: 0.48.0
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - "~>"
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: 0.48.0
|
98
|
+
description: Service is based on Dry::Monads
|
42
99
|
email:
|
100
|
+
- yaroslav.bezrukavyi@gmail.com
|
43
101
|
- hello@kirillshevch.com
|
44
102
|
executables: []
|
45
103
|
extensions: []
|
46
104
|
extra_rdoc_files: []
|
47
105
|
files:
|
48
106
|
- ".gitignore"
|
107
|
+
- ".rspec"
|
108
|
+
- ".rubocop.yml"
|
49
109
|
- Gemfile
|
50
110
|
- LICENSE.txt
|
51
111
|
- README.md
|
52
112
|
- Rakefile
|
53
|
-
-
|
54
|
-
- bin/setup
|
113
|
+
- circle.yml
|
55
114
|
- lib/operators/service.rb
|
56
|
-
- lib/
|
115
|
+
- lib/operators_service.rb
|
57
116
|
- operators-service.gemspec
|
117
|
+
- spec/operators/service_spec.rb
|
118
|
+
- spec/spec_helper.rb
|
58
119
|
homepage: http://operators-rb.org
|
59
120
|
licenses:
|
60
121
|
- MIT
|
@@ -75,8 +136,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
75
136
|
version: '0'
|
76
137
|
requirements: []
|
77
138
|
rubyforge_project:
|
78
|
-
rubygems_version: 2.
|
139
|
+
rubygems_version: 2.6.11
|
79
140
|
signing_key:
|
80
141
|
specification_version: 4
|
81
|
-
summary:
|
142
|
+
summary: You will always know the type of the result
|
82
143
|
test_files: []
|
data/bin/console
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require "bundler/setup"
|
4
|
-
require "operators/service"
|
5
|
-
|
6
|
-
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
-
# with your gem easier. You can also use a different console, if you like.
|
8
|
-
|
9
|
-
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
-
# require "pry"
|
11
|
-
# Pry.start
|
12
|
-
|
13
|
-
require "irb"
|
14
|
-
IRB.start
|
data/bin/setup
DELETED