deterministic 0.5.1 → 0.5.2

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
2
  SHA1:
3
- metadata.gz: ea5e727767335fce5640ac6da26e37de677d0ff6
4
- data.tar.gz: e69e233703fd7118973dbd53b616ddd880e2a234
3
+ metadata.gz: 9b0f292bd43ef9a647f89e10a27d7ee6c03f9c86
4
+ data.tar.gz: 353997a1fa950788805f34a170b6fb83f4e84829
5
5
  SHA512:
6
- metadata.gz: 412b77216e1ff73b95fef9c78d5707f9a37a1208700a6b3e388f2dcd37ba0c48347d1290920b43d1317b8629bcdc7b7dc9dea91adb5f7383cbfce72920ef9fb0
7
- data.tar.gz: 22105ff82ce5d2a0e1c767853fb97fcb8669e5d2e4042721e6633f6cabf08296b3e36efedf4de6cad08d7d662dd734cfef4d6aa4346aa261d4a3cb24fc4f21bd
6
+ metadata.gz: 943ebb00ce456140da6bf042681b53383fa19fa84ca529f7852d0f0671d089d203b64152a42dd897ec7a1f2a2fca9a646e4aff0bb945bf1fe07ee5963835d73a
7
+ data.tar.gz: 2f9e20201ac9c8d9fd19672eb7abe5f27a12d156dce4b7b49d6244a1a4363fef7e0344564f0b876a330bf4cd7064c9d40b9d79de940f310a156e30357bbea021
data/either.rb CHANGED
@@ -6,39 +6,39 @@ class Either
6
6
  @value = value
7
7
  return self
8
8
  end
9
-
9
+
10
10
  def self.success(value)
11
11
  Success.new(value)
12
12
  end
13
-
13
+
14
14
  def self.failure(value)
15
15
  Failure.new(value)
16
16
  end
17
-
17
+
18
18
  class Abstract
19
19
  def initialize(value)
20
20
  @value = value
21
21
  end
22
22
  end
23
-
23
+
24
24
  class Success < Abstract
25
25
  def <<(value)
26
26
  @value = value
27
27
  end
28
-
28
+
29
29
  def or(*args)
30
30
  self
31
31
  end
32
-
32
+
33
33
  def success?
34
34
  true
35
35
  end
36
-
36
+
37
37
  def failure?
38
38
  false
39
39
  end
40
40
  end
41
-
41
+
42
42
  class Failure < Abstract
43
43
  def <<(value)
44
44
  @value = value
@@ -51,7 +51,7 @@ class Either
51
51
  def success?
52
52
  false
53
53
  end
54
-
54
+
55
55
  def failure?
56
56
  true
57
57
  end
@@ -63,7 +63,7 @@ class Builder
63
63
  def initialize(deps)
64
64
  @settings_adapter = deps.fetch(:settings)
65
65
  end
66
-
66
+
67
67
  def build
68
68
  Either.new do
69
69
  on_failure do |result|
@@ -73,7 +73,7 @@ class Builder
73
73
  chain { @settings = @settings_adapter.call(a, b) }
74
74
  end
75
75
  end
76
-
76
+
77
77
  end
78
78
 
79
79
  module SettingsAdapter
@@ -94,4 +94,4 @@ module SettingsAdapter
94
94
  api_token: ENV['SETTINGS_TOKEN']
95
95
  }
96
96
  end
97
- end
97
+ end
@@ -28,6 +28,11 @@ module Deterministic
28
28
  def to_s
29
29
  value.to_s
30
30
  end
31
+
32
+ def inspect
33
+ name = self.class.name.split("::")[-1]
34
+ "#{name}(#{value})"
35
+ end
31
36
  end
32
37
 
33
38
  module_function
@@ -1,3 +1,3 @@
1
1
  module Deterministic
2
- VERSION = "0.5.1"
2
+ VERSION = "0.5.2"
3
3
  end
@@ -0,0 +1,27 @@
1
+ shared_examples 'Either' do
2
+ let(:either_name) { described_class.name.split("::")[-1]}
3
+ specify { expect(subject.value).to eq 1 }
4
+ specify { expect(either.new(subject)).to eq either.new(1) }
5
+
6
+ it "#map" do
7
+ expect(either.new(1).map { |e| e + 1 }).to eq either.new(2)
8
+ end
9
+
10
+ it "#bind" do
11
+ expect(either.new(1).bind { |v| either.new(v + 1)}).to eq either.new(2)
12
+ end
13
+
14
+ it "#to_json" do
15
+ expect(either.new({a: 1}).to_json).to eq "{\"#{either_name}\":{\"a\":1}}"
16
+ end
17
+
18
+ it "#to_s" do
19
+ expect(either.new(1).to_s).to eq "1"
20
+ expect(either.new({a: 1}).to_s).to eq "{:a=>1}"
21
+ end
22
+
23
+ it "#inspect" do
24
+ expect(either.new(1).inspect).to eq "#{either_name}(1)"
25
+ expect(either.new(:a=>1).inspect).to eq "#{either_name}({:a=>1})"
26
+ end
27
+ end
@@ -1,5 +1,6 @@
1
1
  require 'spec_helper'
2
2
  require_relative '../monad_axioms'
3
+ require_relative 'either_shared'
3
4
 
4
5
  include Deterministic
5
6
 
@@ -12,7 +13,6 @@ describe Deterministic::Failure do
12
13
  subject { described_class.new(1) }
13
14
 
14
15
  specify { expect(subject).to be_an_instance_of described_class }
15
- specify { expect(subject.value).to eq 1 }
16
16
  specify { expect(subject).to be_failure }
17
17
  specify { expect(subject).not_to be_success }
18
18
 
@@ -20,15 +20,9 @@ describe Deterministic::Failure do
20
20
  specify { expect(subject).to eq(described_class.new(1)) }
21
21
  specify { expect(subject << Success(2)).to eq(Failure(1)) }
22
22
  specify { expect(subject << Failure(2)).to eq(Failure(1)) }
23
- specify { expect(Failure(subject)).to eq Failure(1) }
24
23
  specify { expect(subject.map { |v| v + 1} ).to eq Failure(2) }
25
24
 
26
- it "#to_json" do
27
- expect(Failure({a: 1}).to_json).to eq '{"Failure":{"a":1}}'
28
- end
29
-
30
- it "#to_s" do
31
- expect(Failure(1).to_s).to eq "1"
32
- expect(Failure({a: 1}).to_s).to eq "{:a=>1}"
25
+ it_behaves_like 'Either' do
26
+ let(:either) { described_class }
33
27
  end
34
28
  end
@@ -1,5 +1,6 @@
1
1
  require 'spec_helper'
2
2
  require_relative '../monad_axioms'
3
+ require_relative 'either_shared'
3
4
 
4
5
  include Deterministic
5
6
 
@@ -12,7 +13,6 @@ describe Deterministic::Success do
12
13
  subject { described_class.new(1) }
13
14
 
14
15
  specify { expect(subject).to be_an_instance_of described_class }
15
- specify { expect(subject.value).to eq 1 }
16
16
  specify { expect(subject).to be_success }
17
17
  specify { expect(subject).not_to be_failure }
18
18
 
@@ -20,22 +20,9 @@ describe Deterministic::Success do
20
20
  specify { expect(subject).to eq(described_class.new(1)) }
21
21
  specify { expect(subject << Success(2)).to eq(Success(2)) }
22
22
  specify { expect(subject << Failure(2)).to eq(Failure(2)) }
23
- specify { expect(Success(subject)).to eq Success(1) }
24
23
  specify { expect(subject.map { |v| v + 1} ).to eq Success(2) }
25
24
 
26
- it "#bind" do
27
- expect(
28
- subject.bind { |v| true ? Success(v + 1) : Failure(v + 2)}
29
- ).to eq Success(2)
30
- end
31
-
32
- it "#to_json" do
33
- expect(Success({a: 1}).to_json).to eq '{"Success":{"a":1}}'
34
- expect([Success(1)].to_json).to eq '[{"Success":1}]'
35
- end
36
-
37
- it "#to_s" do
38
- expect(Success(1).to_s).to eq "1"
39
- expect(Success({a: 1}).to_s).to eq "{:a=>1}"
25
+ it_behaves_like 'Either' do
26
+ let(:either) { described_class }
40
27
  end
41
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deterministic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Zolnierek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-28 00:00:00.000000000 Z
11
+ date: 2014-03-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -140,6 +140,7 @@ files:
140
140
  - spec/lib/deterministic/attempt_all_spec.rb
141
141
  - spec/lib/deterministic/core_ext/either_spec.rb
142
142
  - spec/lib/deterministic/core_ext/object/either_spec.rb
143
+ - spec/lib/deterministic/either/either_shared.rb
143
144
  - spec/lib/deterministic/either/failure_spec.rb
144
145
  - spec/lib/deterministic/either/match_spec.rb
145
146
  - spec/lib/deterministic/either/success_spec.rb
@@ -178,6 +179,7 @@ test_files:
178
179
  - spec/lib/deterministic/attempt_all_spec.rb
179
180
  - spec/lib/deterministic/core_ext/either_spec.rb
180
181
  - spec/lib/deterministic/core_ext/object/either_spec.rb
182
+ - spec/lib/deterministic/either/either_shared.rb
181
183
  - spec/lib/deterministic/either/failure_spec.rb
182
184
  - spec/lib/deterministic/either/match_spec.rb
183
185
  - spec/lib/deterministic/either/success_spec.rb