failure 0.1.0 → 1.0.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.
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