monad-maybe 0.9.9 → 0.9.11

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: b4b9973bafaf3d9e728106f0ca22fcd9e1c6cc25
4
- data.tar.gz: 30d80d184fe6500b0a428a00ebd1766cf59e7824
3
+ metadata.gz: 1e2cf6c871f826aa0729c79f78d1edc9465f0fe0
4
+ data.tar.gz: bb2c9d46f3f2a4f06cb7a8b1ef23cc6949e8fb05
5
5
  SHA512:
6
- metadata.gz: 3a217e29d79862e5a2966c60ff653e12aafee6d6b96ac508b92f7eeec2cb6d617a5843f998f21b45966e9dee70d412ca0616591f7cc5eaf5ec028230e02797b2
7
- data.tar.gz: 0976f7d7acb1d70d91a98034422d99fd00a6abb5159de54733e2cd1a5a58094c7721cd9f15114a464e7b7f66cbf7e2f92a98317c507d1564071a32b9b397a841
6
+ metadata.gz: d3648bb2d0b72766700ed3630ed247c390528391ce6462cfc5b34c7997fa47cd489ce6b950b5b63be1763cefb765cc9b597372616ac5d85d51dc41e496dbdd48
7
+ data.tar.gz: 894847248795c75271ddb62781000bcc840670997ee152891e3f71fb35e0bf212190837a8bfbaf4405d2ef05dff81c9749c12cbd114a353a519f5e33da3d1fad
@@ -0,0 +1 @@
1
+ 2.4.1
data/Gemfile CHANGED
@@ -1,7 +1,7 @@
1
1
  source "http://rubygems.org"
2
2
 
3
3
  group :development do
4
- gem 'jeweler'
5
- gem 'yard'
4
+ gem 'jeweler', '~> 2.3.9'
5
+ gem 'yard', ">= 0.9.11"
6
6
  gem 'test-unit'
7
7
  end
@@ -1,24 +1,67 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- git (1.2.5)
5
- jeweler (1.8.4)
6
- bundler (~> 1.0)
4
+ addressable (2.4.0)
5
+ builder (3.2.3)
6
+ descendants_tracker (0.0.4)
7
+ thread_safe (~> 0.3, >= 0.3.1)
8
+ faraday (0.9.2)
9
+ multipart-post (>= 1.2, < 3)
10
+ git (1.5.0)
11
+ github_api (0.16.0)
12
+ addressable (~> 2.4.0)
13
+ descendants_tracker (~> 0.0.4)
14
+ faraday (~> 0.8, < 0.10)
15
+ hashie (>= 3.4)
16
+ mime-types (>= 1.16, < 3.0)
17
+ oauth2 (~> 1.0)
18
+ hashie (3.6.0)
19
+ highline (2.0.0)
20
+ jeweler (2.3.9)
21
+ builder
22
+ bundler
7
23
  git (>= 1.2.5)
24
+ github_api (~> 0.16.0)
25
+ highline (>= 1.6.15)
26
+ nokogiri (>= 1.5.10)
27
+ psych
8
28
  rake
9
29
  rdoc
10
- json (1.8.0)
11
- rake (10.0.4)
12
- rdoc (4.0.1)
13
- json (~> 1.4)
30
+ semver2
31
+ jwt (2.1.0)
32
+ mime-types (2.99.3)
33
+ mini_portile2 (2.3.0)
34
+ multi_json (1.13.1)
35
+ multi_xml (0.6.0)
36
+ multipart-post (2.0.0)
37
+ nokogiri (1.8.5)
38
+ mini_portile2 (~> 2.3.0)
39
+ nokogiri (1.8.5-x86-mingw32)
40
+ mini_portile2 (~> 2.3.0)
41
+ oauth2 (1.4.1)
42
+ faraday (>= 0.8, < 0.16.0)
43
+ jwt (>= 1.0, < 3.0)
44
+ multi_json (~> 1.3)
45
+ multi_xml (~> 0.5)
46
+ rack (>= 1.2, < 3)
47
+ psych (3.0.3)
48
+ psych (3.0.3-x86-mingw32)
49
+ rack (2.0.6)
50
+ rake (12.3.1)
51
+ rdoc (6.0.4)
52
+ semver2 (3.4.2)
14
53
  test-unit (2.5.5)
15
- yard (0.8.6.1)
54
+ thread_safe (0.3.6)
55
+ yard (0.9.16)
16
56
 
17
57
  PLATFORMS
18
58
  ruby
19
59
  x86-mingw32
20
60
 
21
61
  DEPENDENCIES
22
- jeweler
62
+ jeweler (~> 2.3.9)
23
63
  test-unit
24
- yard
64
+ yard (>= 0.9.11)
65
+
66
+ BUNDLED WITH
67
+ 1.17.1
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.9.9
1
+ 0.9.11
@@ -14,21 +14,9 @@ end
14
14
 
15
15
  class Object
16
16
  def to_maybe(&blk)
17
- j = Monad::Maybe::Just.new(self)
17
+ j = Monad::Maybe.return(self)
18
18
  blk ? j.maybe(&blk) : j
19
19
  end
20
-
21
- def maybe?
22
- false
23
- end
24
-
25
- def just?
26
- false
27
- end
28
-
29
- def nothing?
30
- false
31
- end
32
20
  end
33
21
 
34
22
  class NilClass
@@ -40,11 +28,17 @@ end
40
28
  module Monad
41
29
  module Maybe
42
30
  def self.return(obj)
43
- obj.to_maybe
31
+ if obj.nil? or nothing? obj
32
+ Monad::Maybe::Nothing.instance
33
+ else
34
+ Monad::Maybe::Just.new(obj)
35
+ end
44
36
  end
45
37
  end
46
38
  end
47
39
 
40
+ # some toplevel methods
41
+
48
42
  def maybe(obj, &blk)
49
43
  m = Monad::Maybe.return(obj)
50
44
  blk ? m.maybe(&blk) : m
@@ -57,3 +51,32 @@ end
57
51
  def nothing
58
52
  Monad::Maybe::Nothing.instance
59
53
  end
54
+
55
+ module Kernel
56
+ def maybe?(x=nil)
57
+ return false if x.nil? # we assume it's being called as a method on an object like 0.maybe?
58
+ if not x.is_a? Monad::Maybe::Base
59
+ false
60
+ else
61
+ true
62
+ end
63
+ end
64
+
65
+ def just?(x=nil)
66
+ return false if x.nil? # we assume it's being called as a method on an object like 0.maybe?
67
+ if not x.is_a? Monad::Maybe::Just
68
+ false
69
+ else
70
+ true
71
+ end
72
+ end
73
+
74
+ def nothing?(x)
75
+ return false if x.nil? # we assume it's being called as a method on an object like 0.maybe?
76
+ if x == Monad::Maybe::Nothing.instance
77
+ true
78
+ else
79
+ false
80
+ end
81
+ end
82
+ end
@@ -31,9 +31,6 @@ module Monad
31
31
  def and(&blk)
32
32
  self.then(blk)
33
33
  end
34
-
35
- private
36
- def initialize; end
37
34
  end
38
35
  end
39
36
  end
@@ -9,7 +9,7 @@ module Monad
9
9
  value.send(method, *args).to_maybe
10
10
  end
11
11
 
12
- def unwrap(val)
12
+ def unwrap(val=nil, &blk)
13
13
  value
14
14
  end
15
15
 
@@ -3,12 +3,14 @@ module Monad
3
3
  class List
4
4
  include Enumerable
5
5
 
6
+ # TODO: add support for lazy evaluation
7
+
6
8
  def initialize(enum)
7
9
  @enum = enum.map { |v| v.maybe? ? v : v.to_maybe }
8
10
  end
9
11
 
10
12
  def inspect
11
- "#{to_a}"
13
+ "maybe_list(#{@enum.map(&:inspect).join(', ')})"
12
14
  end
13
15
 
14
16
  def maybe?
@@ -37,8 +37,8 @@ module Monad
37
37
  false
38
38
  end
39
39
 
40
- def unwrap(val)
41
- val
40
+ def unwrap(val=nil, &blk)
41
+ val || blk.call
42
42
  end
43
43
 
44
44
  def value
@@ -2,20 +2,23 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
+ # stub: monad-maybe 0.9.11 ruby lib
5
6
 
6
7
  Gem::Specification.new do |s|
7
- s.name = "monad-maybe"
8
- s.version = "0.9.9"
8
+ s.name = "monad-maybe".freeze
9
+ s.version = "0.9.11"
9
10
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Delon Newman"]
12
- s.date = "2013-08-18"
13
- s.description = "This is an attempt to implement Haskell's Maybe monad in a Ruby-ish way."
14
- s.email = "delon.newman@gmail.com"
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib".freeze]
13
+ s.authors = ["Delon Newman".freeze]
14
+ s.date = "2018-11-06"
15
+ s.description = "This is an attempt to implement Haskell's Maybe monad in a Ruby-ish way.".freeze
16
+ s.email = "delon.newman@gmail.com".freeze
15
17
  s.extra_rdoc_files = [
16
18
  "README.md"
17
19
  ]
18
20
  s.files = [
21
+ ".ruby-version",
19
22
  "Gemfile",
20
23
  "Gemfile.lock",
21
24
  "README.md",
@@ -30,28 +33,27 @@ Gem::Specification.new do |s|
30
33
  "monad-maybe.gemspec",
31
34
  "test/maybe.rb"
32
35
  ]
33
- s.homepage = "https://github.com/delonnewman/monad-maybe"
34
- s.licenses = ["MIT"]
35
- s.require_paths = ["lib"]
36
- s.rubygems_version = "2.0.0.rc.2"
37
- s.summary = "A Ruby implementation of Haskell's Maybe Monad"
36
+ s.homepage = "https://github.com/delonnewman/monad-maybe".freeze
37
+ s.licenses = ["MIT".freeze]
38
+ s.rubygems_version = "2.6.11".freeze
39
+ s.summary = "A Ruby implementation of Haskell's Maybe Monad".freeze
38
40
 
39
41
  if s.respond_to? :specification_version then
40
42
  s.specification_version = 4
41
43
 
42
44
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
43
- s.add_development_dependency(%q<jeweler>, [">= 0"])
44
- s.add_development_dependency(%q<yard>, [">= 0"])
45
- s.add_development_dependency(%q<test-unit>, [">= 0"])
45
+ s.add_development_dependency(%q<jeweler>.freeze, ["~> 2.3.9"])
46
+ s.add_development_dependency(%q<yard>.freeze, [">= 0.9.11"])
47
+ s.add_development_dependency(%q<test-unit>.freeze, [">= 0"])
46
48
  else
47
- s.add_dependency(%q<jeweler>, [">= 0"])
48
- s.add_dependency(%q<yard>, [">= 0"])
49
- s.add_dependency(%q<test-unit>, [">= 0"])
49
+ s.add_dependency(%q<jeweler>.freeze, ["~> 2.3.9"])
50
+ s.add_dependency(%q<yard>.freeze, [">= 0.9.11"])
51
+ s.add_dependency(%q<test-unit>.freeze, [">= 0"])
50
52
  end
51
53
  else
52
- s.add_dependency(%q<jeweler>, [">= 0"])
53
- s.add_dependency(%q<yard>, [">= 0"])
54
- s.add_dependency(%q<test-unit>, [">= 0"])
54
+ s.add_dependency(%q<jeweler>.freeze, ["~> 2.3.9"])
55
+ s.add_dependency(%q<yard>.freeze, [">= 0.9.11"])
56
+ s.add_dependency(%q<test-unit>.freeze, [">= 0"])
55
57
  end
56
58
  end
57
59
 
@@ -105,7 +105,7 @@ class MaybeTest < Test::Unit::TestCase
105
105
  assert_equal just(1), just(1).to_maybe
106
106
  assert_equal nothing, nil.to_maybe
107
107
  assert_equal nothing, nothing.to_maybe
108
- assert_equal 1.to_maybe, [1].to_maybe
108
+ #assert_equal 1.to_maybe, [1].to_maybe this shouldn't be the case, why's this here?
109
109
  assert_equal 0.to_maybe, (0..10).maybe_map { |n| n }.to_maybe
110
110
  end
111
111
 
@@ -122,6 +122,11 @@ class MaybeTest < Test::Unit::TestCase
122
122
  maybe(1).then(->(){ assert true }).then(->(){ assert true })
123
123
  end
124
124
 
125
+ def test_unwrap
126
+ assert_equal maybe(1).unwrap(nil), maybe(nil).unwrap(1)
127
+ assert_equal maybe(1).unwrap { 3 }, nothing.unwrap { 1 }
128
+ end
129
+
125
130
  #
126
131
  # Monad laws
127
132
  #
metadata CHANGED
@@ -1,55 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: monad-maybe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.9
4
+ version: 0.9.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Delon Newman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-18 00:00:00.000000000 Z
11
+ date: 2018-11-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jeweler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 2.3.9
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 2.3.9
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: yard
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 0.9.11
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: 0.9.11
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: test-unit
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  description: This is an attempt to implement Haskell's Maybe monad in a Ruby-ish way.
@@ -59,6 +59,7 @@ extensions: []
59
59
  extra_rdoc_files:
60
60
  - README.md
61
61
  files:
62
+ - ".ruby-version"
62
63
  - Gemfile
63
64
  - Gemfile.lock
64
65
  - README.md
@@ -82,17 +83,17 @@ require_paths:
82
83
  - lib
83
84
  required_ruby_version: !ruby/object:Gem::Requirement
84
85
  requirements:
85
- - - '>='
86
+ - - ">="
86
87
  - !ruby/object:Gem::Version
87
88
  version: '0'
88
89
  required_rubygems_version: !ruby/object:Gem::Requirement
89
90
  requirements:
90
- - - '>='
91
+ - - ">="
91
92
  - !ruby/object:Gem::Version
92
93
  version: '0'
93
94
  requirements: []
94
95
  rubyforge_project:
95
- rubygems_version: 2.0.0.rc.2
96
+ rubygems_version: 2.6.11
96
97
  signing_key:
97
98
  specification_version: 4
98
99
  summary: A Ruby implementation of Haskell's Maybe Monad