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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7e4b65f7a1646aa42ec88f164008ef326c277519
4
- data.tar.gz: d170e115a4a26853bbd07677bc9ad8b1d71bc57a
3
+ metadata.gz: b3e98a6a60f2736a9beb752b52e51d7ccee6f12e
4
+ data.tar.gz: 7574bb1bf6e6d7e5b385af1cb737fa8dbf95f935
5
5
  SHA512:
6
- metadata.gz: 75ea69fc2d0563bed981b4ab53f15817a440080a4e57d3995d5bc57438e4969885f8fc16a5ada575d95d68dc53f5e2c23880639316366071daca8dfd82faca01
7
- data.tar.gz: 845e2cd1f82e46432d4e339744e295693ad059da07e3fd80b0f053f511a93c1d84ccd53ade1f96e595c49f6544a6424b74cf422954268840b857bd288da75e9c
6
+ metadata.gz: 8567e1d164d484f9958e489ab6671ed02a9812c99dc3aebcb69ec204e06f3db7ee749a13233985d860334ae75b73edcf2f784f1287d702dcc4d5218acd551e1d
7
+ data.tar.gz: 7abbec2ef6d7abe19ed0ec63128c25d012058de5e3a132bf6330aca237b7a8e99d41833f9b4fb57ce59c5960b611f301a96923cc5f405d07660601d4736194a7
data/.gitignore CHANGED
@@ -7,3 +7,4 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ .ruby-gemset
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --require spec_helper
2
+ --format documentation
3
+ --color
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
@@ -0,0 +1,3 @@
1
+ machine:
2
+ ruby:
3
+ version: 2.4.1
@@ -1,7 +1,43 @@
1
- require "operators/service/version"
1
+ require 'dry-monads'
2
2
 
3
3
  module Operators
4
- module Service
5
- # Your code goes here...
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"
@@ -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 = "operators-service"
8
- spec.version = Operators::Service::VERSION
9
- spec.authors = ["Kirill Shevchenko"]
10
- spec.email = ["hello@kirillshevch.com"]
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 = %q{operators-service}
13
- spec.description = %q{operators-service}
14
- spec.homepage = "http://operators-rb.org"
15
- spec.license = "MIT"
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").reject do |f|
18
- f.match(%r{^(test|spec|features)/})
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 = ["lib"]
19
+ spec.require_paths = ['lib']
23
20
 
24
- spec.add_development_dependency "bundler", "~> 1.13"
25
- spec.add_development_dependency "rake", "~> 10.0"
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
@@ -0,0 +1,9 @@
1
+ require 'bundler/setup'
2
+ require 'byebug'
3
+ require 'operators/service'
4
+
5
+ RSpec.configure do |config|
6
+ config.order = :random
7
+ config.filter_run focus: true
8
+ config.run_all_when_everything_filtered = true
9
+ end
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.0
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-04-25 00:00:00.000000000 Z
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: '1.13'
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: '1.13'
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
- description: operators-service
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
- - bin/console
54
- - bin/setup
113
+ - circle.yml
55
114
  - lib/operators/service.rb
56
- - lib/operators/service/version.rb
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.5.1
139
+ rubygems_version: 2.6.11
79
140
  signing_key:
80
141
  specification_version: 4
81
- summary: operators-service
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
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here
@@ -1,5 +0,0 @@
1
- module Operators
2
- module Service
3
- VERSION = "0.1.0"
4
- end
5
- end