dry-monads 0.0.1 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 88cbc378229c970ceaee7b5836e049e9802fa673
4
- data.tar.gz: 1bb1cb7d186fe287406f2be34a5f068a29d2edde
3
+ metadata.gz: 578a10e9ec2b0ca63809f588c68d14a643a43f4b
4
+ data.tar.gz: 8d69e82a8e58de7488aca590a7f321c978431734
5
5
  SHA512:
6
- metadata.gz: 15a531580dda1dd1ae4d2a18da1ef0bc9d15925001fecad504276aceedf27619635620646c8f003b24f7282d2825f4ec65619a6bc30c656fc508c7259ffbc501
7
- data.tar.gz: 9f71fc354106893b2b95f1f082014435cc3a74443b13812b8141f7c44b8007034ea2f77c5f7aa5e6c41b8214804af105cffcf8c559da6e98917a5633edb37b28
6
+ metadata.gz: f2d1786620c51d8ab53e8b59099143e8867f9ac2223b155a946bee1d6b23bc5740a4623250002e33df54562c371d802977b27553f2b70ab3270b906a51a75ead
7
+ data.tar.gz: 46bc1e583a5fbb1e597aad4ed157757aa960abe39bf3aab92af54110f17bebf09a10a1ce2d0d4f198f0dfc0174841fd3b360275a716d95e6c45f77f64e0e3175
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013-2014 Piotr Solnica
1
+ Copyright (c) 2016 Nikita Shilnikov
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -34,192 +34,9 @@ Or install it yourself as:
34
34
  $ gem install dry-monads
35
35
  ```
36
36
 
37
- ## Usage
37
+ ## Links
38
38
 
39
- ### Maybe monad
40
-
41
- The `Maybe` mondad is used when a series of computations that could return `nil`
42
- at any point.
43
-
44
- #### `bind`
45
-
46
- ```ruby
47
- require 'dry-monads'
48
-
49
- M = Dry::Monads
50
-
51
- maybe_user = M.Maybe(user).bind do |u|
52
- M.Maybe(user.address).bind do |a|
53
- M.Maybe(a.street)
54
- end
55
- end
56
-
57
- # If user with address exists
58
- # => Some("Street Address")
59
- # If user or address is nil
60
- # => None()
61
-
62
- # You also can pass a proc to #bind
63
-
64
- add_two = -> x { x + 2 }
65
-
66
- M.Maybe(5).bind(add_two).bind(add_two) # => Some(9)
67
-
68
- ```
69
-
70
- #### `fmap`
71
-
72
- Similar to `bind` but lifts the result for you.
73
-
74
- ```ruby
75
- require 'dry-monads'
76
-
77
- Dry::Monads::Maybe(user).fmap(&:address).fmap(&:street)
78
-
79
- # If user with address exists
80
- # => Some("Street Address")
81
- # If user or address is nil
82
- # => None()
83
- ```
84
-
85
- ### Either monad
86
-
87
- The `Either` mondad is useful to express a series of computations that might
88
- return an error object with additional information.
89
-
90
- The `Either` mixin has two type constructors: `Right` and `Left`. The `Right`
91
- can be thought of as "everything went right" and the `Left` is used when
92
- "something has gone wrong".
93
-
94
- #### `Either::Mixin`
95
-
96
- ```ruby
97
- require 'dry-monads'
98
-
99
- class EitherCalculator
100
- include Dry::Monads::Either::Mixin
101
-
102
- attr_accessor :input
103
-
104
- def calculate
105
- i = Integer(input)
106
-
107
- Right(i).bind do |value|
108
- if value > 1
109
- Right(value + 3)
110
- else
111
- Left("value was less than 1")
112
- end
113
- end.bind do |value|
114
- if value % 2 == 0
115
- Right(value * 2)
116
- else
117
- Left("value was not even")
118
- end
119
- end
120
- end
121
- end
122
-
123
- # EitherCalculator instance
124
- c = EitherCalculator.new
125
-
126
- # If everything went right
127
- c.input = 3
128
- result = c.calculate
129
- result # => Right(12)
130
- result.value # => 12
131
-
132
- # If if failed in the first block
133
- c.input = 0
134
- result = c.calculate
135
- result # => Left("value was less than 1")
136
- result.value # => "value was less than 1"
137
-
138
- # if it failed in the second block
139
- c.input = 2
140
- result = c.calculate
141
- result # => Left("value was not even")
142
- result.value # => "value was not even"
143
- ```
144
-
145
- #### `fmap`
146
-
147
- An example of using `fmap` with `Right` and `Left`.
148
-
149
- ```ruby
150
- require 'dry-monads'
151
-
152
- M = Dry::Monads
153
-
154
- result = if foo > bar
155
- M.Right(10)
156
- else
157
- M.Left("wrong")
158
- end.fmap { |x| x * 2 }
159
-
160
- # If everything went right
161
- result # => Right(20)
162
- # If it did not
163
- result # => Left("wrong")
164
-
165
- # #fmap accepts proc as well as #bind
166
-
167
- upcase = :upcase.to_proc
168
-
169
- M.Right('hello').fmap(upcase) # => Right("HELLO")
170
- ```
171
-
172
- #### `or`
173
-
174
- An example of using `or` with `Right` and `Left`.
175
-
176
- ```ruby
177
- M = Dry::Monads
178
-
179
- M.Right(10).or(M.Right(99)) # => Right(10)
180
- M.Left("error").or(M.Left("new error")) # => Left("new error")
181
- M.Left("error").or { |err| M.Left("new #{err}") } # => Left("new error")
182
- ```
183
-
184
- #### `to_maybe`
185
-
186
- Sometimes it's useful to turn an 'Either' into a 'Maybe'
187
-
188
- ```ruby
189
- require 'dry-monads'
190
-
191
- result = if foo > bar
192
- Dry::Monads.Right(10)
193
- else
194
- Dry::Monads.Left("wrong")
195
- end.to_maybe
196
-
197
- # If everything went right
198
- result # => Some(10)
199
- # If it did not
200
- result # => None()
201
- ```
202
-
203
- ### Try monad
204
-
205
- Examples of using the `Try` monad.
206
-
207
- ```ruby
208
- require 'dry-monads'
209
-
210
- extend Dry::Monads::Try::Mixin
211
-
212
- res = Try() { 10 / 2 }
213
- res.value if res.success?
214
- # => 5
215
-
216
- res = Try() { 10 / 0 }
217
- res.exception if res.failure?
218
- # => #<ZeroDivisionError: divided by 0>
219
-
220
- Try(NoMethodError, NotImplementedError) { 10 / 0 }
221
- # => raise ZeroDivisionError: divided by 0 exception
222
- ```
39
+ * [Documentation](http://dry-rb.org/gems/dry-monads)
223
40
 
224
41
  ## Development
225
42
 
@@ -17,6 +17,10 @@ module Dry
17
17
  end
18
18
  alias failure? left?
19
19
 
20
+ def to_either
21
+ self
22
+ end
23
+
20
24
  class Right < Either
21
25
  alias value right
22
26
 
@@ -21,6 +21,10 @@ module Dry
21
21
  is_a?(Some)
22
22
  end
23
23
 
24
+ def to_maybe
25
+ self
26
+ end
27
+
24
28
  class Some < Maybe
25
29
  attr_reader :value
26
30
 
@@ -1,5 +1,5 @@
1
1
  module Dry
2
2
  module Monads
3
- VERSION = '0.0.1'.freeze
3
+ VERSION = '0.0.2'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dry-monads
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nikita Shilnikov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-05-02 00:00:00.000000000 Z
11
+ date: 2016-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler