failure 0.1.0 → 1.0.0

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
- SHA256:
3
- metadata.gz: 222591a7509d0202f6c98d6ec6ed2158bbf225c8013f0b63bb325052233ee521
4
- data.tar.gz: 987d4f4c9999e723d40af1ddf18ec5b518df1f23206e91e8d36aa58970076da4
2
+ SHA1:
3
+ metadata.gz: dd5213fc559418bd6979a773ff8db47e61554d1d
4
+ data.tar.gz: b27b4b594b7effe50ac5347194881b994e4c39f4
5
5
  SHA512:
6
- metadata.gz: c831346698f2c59a15a5b919a845c8873693f5db793f576c27c43161ebaf386c99e7a1897c9ad7fb340b789986d828e6e3262c85627db26ebde31eb6f4e910f6
7
- data.tar.gz: bce4d0ddd8cb24d7ba242baf513825569d6491abe18062eee64ac0a664c9459e8c99e60d3afff7d0f565ec2a6a2c2f1a18e88de3436712b4f9cc7e1288d6ff5c
6
+ metadata.gz: ea805d8ae81851b661f691a6c2975806d3f6ceda6796a9bec377c5878579972a3f61406a9e362582ae86680f55d895026c1c23af02652c67d810126ff9ce2739
7
+ data.tar.gz: 999a28f7ca64476f19298d99db270889a5d24e6078c8c7549cb27c416ca880f70ecc420b7e7790d9ee448391777dd07533a73d9a79038a9ef108006b5cf9b3d7
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'failure'
3
- s.version = '0.1.0'
3
+ s.version = '1.0.0'
4
4
  s.date = '2018-04-18'
5
5
  s.summary = "Either and Option functor/applicative/monad"
6
6
  s.description = "Implements Either and Option a la Haskell"
@@ -0,0 +1,13 @@
1
+ require_relative "../either"
2
+
3
+ module Either
4
+ module ActiveModelHelpers
5
+ def to_either
6
+ if self.errors.present?
7
+ Either::Left.new(self.errors)
8
+ else
9
+ Either::Right.new(self)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,2 +1,3 @@
1
1
  require_relative "./either"
2
2
  require_relative "./maybe"
3
+ require_relative "./either/active_model_helpers"
@@ -0,0 +1,51 @@
1
+ require "spec_helper"
2
+
3
+ describe Either::ActiveModelHelpers do
4
+ class MockActiveModelErrors
5
+ def to_h
6
+ {}
7
+ end
8
+
9
+ def present?
10
+ !to_h.empty?
11
+ end
12
+ end
13
+
14
+ class MockActiveModelObject < OpenStruct
15
+ include Either::ActiveModelHelpers
16
+
17
+ def self.create(options)
18
+ new(options)
19
+ end
20
+
21
+ def errors
22
+ MockActiveModelErrors.new
23
+ end
24
+ end
25
+
26
+ describe "#to_either" do
27
+ it "wraps an object with no errors in Either::Right" do
28
+ object = MockActiveModelObject.create(a: :allosaurus, b: :brachiosaurus)
29
+ either = object.to_either
30
+
31
+ expect(either).to be_right
32
+ expect(either.send(:val)).to eq(object)
33
+ end
34
+
35
+ it "converts an object with errors into an errors object wrapped in Either::Left" do
36
+ object = MockActiveModelObject.create(c: :chrysanthemum, d: :dolomite_lime)
37
+
38
+ mock_errors = MockActiveModelErrors.new
39
+ allow(MockActiveModelErrors).to receive(:new).and_return(mock_errors)
40
+ allow(mock_errors).to receive(:to_h).and_return({ base: ["only accepts dinosaurs"] })
41
+
42
+ either = object.to_either
43
+
44
+ expect(either).to be_left
45
+ expect(either.send(:val)).to eq mock_errors
46
+ expect(either.send(:val).to_h).to eq(
47
+ { base: ["only accepts dinosaurs"] }
48
+ )
49
+ end
50
+ end
51
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: failure
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stuart Terrett
@@ -78,9 +78,11 @@ files:
78
78
  - Rakefile
79
79
  - failure.gemspec
80
80
  - lib/either.rb
81
+ - lib/either/active_model_helpers.rb
81
82
  - lib/failure.rb
82
83
  - lib/maybe.rb
83
84
  - lib/shared.rb
85
+ - spec/either/active_model_helpers_spec.rb
84
86
  - spec/either_spec.rb
85
87
  - spec/maybe_spec.rb
86
88
  - spec/spec_helper.rb
@@ -104,11 +106,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
106
  version: '0'
105
107
  requirements: []
106
108
  rubyforge_project:
107
- rubygems_version: 2.7.3
109
+ rubygems_version: 2.6.14
108
110
  signing_key:
109
111
  specification_version: 4
110
112
  summary: Either and Option functor/applicative/monad
111
113
  test_files:
114
+ - spec/either/active_model_helpers_spec.rb
112
115
  - spec/either_spec.rb
113
116
  - spec/maybe_spec.rb
114
117
  - spec/spec_helper.rb