optiomist 0.0.2
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 +7 -0
- data/README.md +27 -0
- data/lib/optiomist.rb +69 -0
- metadata +47 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 92591eacce063dae48757d001e0e17accc035e2b68e39225861f79d806841b61
|
4
|
+
data.tar.gz: 4eabdd213206dcc2d50dc91a283bef7ecc86d4e670905b6a9604d4a1e8a46864
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: af6e43b6ef52f8dad6605956a822cb34be88c4c44c6038e920581dffafb2790df2386589095d2a417f40c5bf68caba23a50d24e0f151429f613a86c016df1859
|
7
|
+
data.tar.gz: 1d5f7298797532d8dacf35d80786f90abb43e47f6deffdda6765a09a66523ca08c7d5e1f57ebd1a8cbde3e49d6915f7669e339fb5f33103b148d89e8af5ac4f5
|
data/README.md
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# optiomist
|
2
|
+
A simple implementation of an optional value pattern.
|
3
|
+
|
4
|
+
Let's be optimistic. The glass will never be half nil.
|
5
|
+
# Usage
|
6
|
+
|
7
|
+
```
|
8
|
+
require 'optiomist'
|
9
|
+
|
10
|
+
result = Optiomist.some('value')
|
11
|
+
result.some? # => true
|
12
|
+
result.none? # => false
|
13
|
+
result.value # => 'value'
|
14
|
+
|
15
|
+
result = Optiomist.some(nil)
|
16
|
+
result.some? # => true
|
17
|
+
result.value # => nil
|
18
|
+
|
19
|
+
result = Optiomist.none
|
20
|
+
result.none? # => true
|
21
|
+
result.some? # => false
|
22
|
+
```
|
23
|
+
|
24
|
+
# Running tests
|
25
|
+
```
|
26
|
+
./run_tests
|
27
|
+
```
|
data/lib/optiomist.rb
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'singleton'
|
4
|
+
|
5
|
+
# Defines optional values.
|
6
|
+
module Optiomist
|
7
|
+
# There is some value.
|
8
|
+
# Warning: +nil+ is also treated as a correct value.
|
9
|
+
#
|
10
|
+
# Example:
|
11
|
+
# >> result = Optiomist.some('x')
|
12
|
+
# >> result.some?
|
13
|
+
# => true
|
14
|
+
# >> result.value
|
15
|
+
# => 'x'
|
16
|
+
class Some
|
17
|
+
# This is the value.
|
18
|
+
attr_reader :value
|
19
|
+
|
20
|
+
def initialize(value)
|
21
|
+
@value = value
|
22
|
+
end
|
23
|
+
|
24
|
+
# It's +true+.
|
25
|
+
def some?
|
26
|
+
true
|
27
|
+
end
|
28
|
+
|
29
|
+
# It's +false+.
|
30
|
+
def none?
|
31
|
+
false
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# There is no value.
|
36
|
+
#
|
37
|
+
# Example:
|
38
|
+
# >> result = Optiomist.none
|
39
|
+
# >> result.none?
|
40
|
+
# => true
|
41
|
+
class None
|
42
|
+
include Singleton
|
43
|
+
|
44
|
+
# Should it really respond to +nil?+
|
45
|
+
def nil?
|
46
|
+
true
|
47
|
+
end
|
48
|
+
|
49
|
+
# It's +false+.
|
50
|
+
def some?
|
51
|
+
false
|
52
|
+
end
|
53
|
+
|
54
|
+
# It's +true+.
|
55
|
+
def none?
|
56
|
+
true
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# A shortcut to create +Option::Some+ for given +value+.
|
61
|
+
def self.some(value)
|
62
|
+
Some.new(value)
|
63
|
+
end
|
64
|
+
|
65
|
+
# A shortcut to get +Option::None+.
|
66
|
+
def self.none
|
67
|
+
None.instance
|
68
|
+
end
|
69
|
+
end
|
metadata
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: optiomist
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Michał Radmacher
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-09-08 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Optiomist represents an optional value. Be an optimist. The glass will
|
14
|
+
never be half nil.
|
15
|
+
email: michal@radmacher.pl
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files:
|
19
|
+
- README.md
|
20
|
+
files:
|
21
|
+
- README.md
|
22
|
+
- lib/optiomist.rb
|
23
|
+
homepage: https://github.com/mradmacher/optiomist
|
24
|
+
licenses:
|
25
|
+
- MIT
|
26
|
+
metadata:
|
27
|
+
rubygems_mfa_required: 'true'
|
28
|
+
post_install_message:
|
29
|
+
rdoc_options: []
|
30
|
+
require_paths:
|
31
|
+
- lib
|
32
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 2.7.0
|
37
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
requirements: []
|
43
|
+
rubygems_version: 3.1.2
|
44
|
+
signing_key:
|
45
|
+
specification_version: 4
|
46
|
+
summary: A simple implementation of an optional value pattern
|
47
|
+
test_files: []
|