monad-maybe 0.9.9 → 0.9.11

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: 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