deterministic 0.5.1 → 0.5.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: 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