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.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +27 -0
  3. data/lib/optiomist.rb +69 -0
  4. 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: []