teckel 0.0.1 → 0.1.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.
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Teckel
4
+ # Wrapper for +output+ and +error+ return values of Operations
5
+ #
6
+ # @example asking for status
7
+ #
8
+ # Teckel::Result.new("some output", true).successful? #=> true
9
+ # Teckel::Result.new("some output", true).failure? #=> false
10
+ #
11
+ # Teckel::Result.new("some error", false).successful? #=> false
12
+ # Teckel::Result.new("some error", false).failure? #=> true
13
+ #
14
+ # @example Use +.value+ to get the wrapped value regardless of success state
15
+ #
16
+ # Teckel::Result.new("some output", true).value #=> "some output"
17
+ # Teckel::Result.new("some error", false).value #=> "some error"
18
+ #
19
+ # @example Use +.success+ to get the wrapped value of a successful result
20
+ #
21
+ # # Note: The +.failure+ method works just the same for successful results
22
+ # Teckel::Result.new("some output", true).success #=> "some output"
23
+ # Teckel::Result.new("some error", false).success #=> nil
24
+ # Teckel::Result.new("some error", false).success("other default") #=> "other default"
25
+ # Teckel::Result.new("some error", false).success { |value| "Failed: #{value}" } #=> "Failed: some error"
26
+ #
27
+ # @api public
28
+ class Result
29
+ # @param value [Mixed] the value/payload of the result.
30
+ # @param success [Bool] whether this is a successful result
31
+ def initialize(value, success)
32
+ @value = value
33
+ @success = success
34
+ end
35
+
36
+ # @!attribute [r] value
37
+ # @return [Mixed] the value/payload
38
+ attr_reader :value
39
+
40
+ def successful?
41
+ @success
42
+ end
43
+
44
+ def failure?
45
+ !@success
46
+ end
47
+
48
+ def failure(default = nil, &block)
49
+ return @value if !@success
50
+ return yield(@value) if block
51
+
52
+ default
53
+ end
54
+
55
+ def success(default = nil, &block)
56
+ return @value if @success
57
+
58
+ return yield(@value) if block
59
+
60
+ default
61
+ end
62
+ end
63
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Teckel
2
- VERSION = "0.0.1"
4
+ VERSION = "0.1.0"
3
5
  end
data/lib/teckel.rb CHANGED
@@ -1,6 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "teckel/version"
2
4
 
3
5
  module Teckel
4
6
  class Error < StandardError; end
5
- # Your code goes here...
6
7
  end
8
+
9
+ require_relative "teckel/config"
10
+ require_relative "teckel/operation"
11
+ require_relative "teckel/result"
12
+ require_relative "teckel/operation/results"
13
+ require_relative "teckel/chain"
data/teckel.gemspec CHANGED
@@ -1,5 +1,6 @@
1
+ # frozen_string_literal: true
1
2
 
2
- lib = File.expand_path("../lib", __FILE__)
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require "teckel/version"
5
6
 
@@ -8,21 +9,25 @@ Gem::Specification.new do |spec|
8
9
  spec.version = Teckel::VERSION
9
10
  spec.authors = ["Robert Schulze"]
10
11
  spec.email = ["robert@dotless.de"]
12
+ spec.licenses = ['Apache-2.0']
11
13
 
12
14
  spec.summary = 'Operations with enforced in/out/err data structures'
13
15
  spec.description = 'Wrap your business logic into a common interface with enforced input, output and error data structures'
14
- spec.homepage = "https://github.com/dotless-de/waldi"
16
+ spec.homepage = "https://github.com/dotless-de/teckel"
15
17
 
16
18
  # Specify which files should be added to the gem when it is released.
17
19
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
18
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
20
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
19
21
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
20
22
  end
21
23
  spec.bindir = "exe"
22
24
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
25
  spec.require_paths = ["lib"]
24
26
 
25
- spec.add_development_dependency "bundler", "~> 2.1"
27
+ spec.add_development_dependency "bundler", "~> 2.0"
28
+ spec.add_development_dependency "dry-struct", ">= 1.1.1", "< 2"
26
29
  spec.add_development_dependency "rake", ">= 10.0"
27
30
  spec.add_development_dependency "rspec", "~> 3.0"
31
+ spec.add_development_dependency "yard"
32
+ spec.add_development_dependency "yard-doctest"
28
33
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: teckel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Schulze
@@ -16,14 +16,34 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.1'
19
+ version: '2.0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2.1'
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: dry-struct
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.1.1
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '2'
37
+ type: :development
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 1.1.1
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: '2'
27
47
  - !ruby/object:Gem::Dependency
28
48
  name: rake
29
49
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +72,34 @@ dependencies:
52
72
  - - "~>"
53
73
  - !ruby/object:Gem::Version
54
74
  version: '3.0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: yard
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: yard-doctest
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
55
103
  description: Wrap your business logic into a common interface with enforced input,
56
104
  output and error data structures
57
105
  email:
@@ -60,19 +108,36 @@ executables: []
60
108
  extensions: []
61
109
  extra_rdoc_files: []
62
110
  files:
111
+ - ".github/workflows/ci.yml"
112
+ - ".github/workflows/pages.yml"
63
113
  - ".gitignore"
64
114
  - ".rspec"
65
- - ".travis.yml"
115
+ - ".rubocop.yml"
116
+ - ".ruby-version"
117
+ - ".yardopts"
118
+ - CHANGELOG.md
119
+ - DEVELOPMENT.md
66
120
  - Gemfile
121
+ - Gemfile.lock
122
+ - LICENSE
67
123
  - README.md
68
124
  - Rakefile
69
125
  - bin/console
126
+ - bin/rake
127
+ - bin/rspec
128
+ - bin/rubocop
70
129
  - bin/setup
71
130
  - lib/teckel.rb
131
+ - lib/teckel/chain.rb
132
+ - lib/teckel/config.rb
133
+ - lib/teckel/operation.rb
134
+ - lib/teckel/operation/results.rb
135
+ - lib/teckel/result.rb
72
136
  - lib/teckel/version.rb
73
137
  - teckel.gemspec
74
- homepage: https://github.com/dotless-de/waldi
75
- licenses: []
138
+ homepage: https://github.com/dotless-de/teckel
139
+ licenses:
140
+ - Apache-2.0
76
141
  metadata: {}
77
142
  post_install_message:
78
143
  rdoc_options: []
@@ -89,7 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
89
154
  - !ruby/object:Gem::Version
90
155
  version: '0'
91
156
  requirements: []
92
- rubygems_version: 3.1.2
157
+ rubygems_version: 3.0.3
93
158
  signing_key:
94
159
  specification_version: 4
95
160
  summary: Operations with enforced in/out/err data structures
data/.travis.yml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- sudo: false
3
- language: ruby
4
- cache: bundler
5
- rvm:
6
- - 2.6.3
7
- before_install: gem install bundler -v 1.17.2