operators-service 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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