andand 1.1.1 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +2 -0
- data/lib/andand.rb +10 -0
- data/lib/andand/version.rb +2 -2
- data/website/index.html +33 -5
- data/website/index.txt +29 -4
- metadata +2 -2
data/History.txt
CHANGED
data/lib/andand.rb
CHANGED
data/lib/andand/version.rb
CHANGED
data/website/index.html
CHANGED
@@ -33,7 +33,7 @@
|
|
33
33
|
<h1>Object#andand</h1>
|
34
34
|
<div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/andand"; return false'>
|
35
35
|
<p>Get Version</p>
|
36
|
-
<a href="http://rubyforge.org/projects/andand" class="numbers">1.
|
36
|
+
<a href="http://rubyforge.org/projects/andand" class="numbers">1.2.0</a>
|
37
37
|
</div>
|
38
38
|
<h1>→ ‘andand’</h1>
|
39
39
|
|
@@ -105,16 +105,38 @@ list_of_lists.detect { ...elided... }.andand.inject(42) { ...elided ... }
|
|
105
105
|
=> [2, 4, 6, 8]
|
106
106
|
</pre>
|
107
107
|
|
108
|
-
<
|
108
|
+
<h3>Doctor, it hurts when I do that</h3>
|
109
109
|
|
110
110
|
|
111
|
-
<p>
|
111
|
+
<p><strong>Don’t do that!</strong></p>
|
112
112
|
|
113
113
|
|
114
|
+
<p>The popular use case for Object#tap is poor man’s debugging:</p>
|
115
|
+
|
116
|
+
|
117
|
+
<pre>
|
118
|
+
blah.sort.grep( /foo/ ).tap { |xs| p xs }.map { |x| x.blah }
|
119
|
+
</pre>Perhaps you want to remove the tap, you can delete it:
|
120
|
+
|
121
|
+
<pre>
|
122
|
+
blah.sort.grep( /foo/ ).tap { |xs| p xs }.map { |x| x.blah }
|
123
|
+
</pre>Or, you can change it to <code>.dont</code>:
|
124
|
+
|
125
|
+
<pre>
|
126
|
+
blah.sort.grep( /foo/ ).dont { |xs| p xs }.map { |x| x.blah }
|
127
|
+
</pre>Like <code>.andand</code> and <code>.tap</code>, <code>.dont</code> works with arbitrary methods, not just blocks:
|
128
|
+
|
129
|
+
<pre>
|
130
|
+
(1..10).to_a.reverse!
|
131
|
+
=> [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
|
132
|
+
(1..10).dont.to_a.reverse!
|
133
|
+
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
134
|
+
</pre>
|
135
|
+
|
114
136
|
<h2>A little more background</h2>
|
115
137
|
|
116
138
|
|
117
|
-
<p><a href="http://weblog.raganwald.com/2008/01/objectandand-objectme-in-ruby.html">Object#andand & Object#me in Ruby</a
|
139
|
+
<p><a href="http://weblog.raganwald.com/2008/01/objectandand-objectme-in-ruby.html">Object#andand & Object#me in Ruby</a> explains the original motivations, as well as providing links to similar implementations you may want to consider. A few people have pointed out that Object#andand is similar to Haskell’s <code>Maybe</code> monad. <a href="http://blog.pretheory.com/arch/2008/02/the_maybe_monad_in_ruby.php">The Maybe Monad in Ruby</a> is a good introduction for Ruby programmers.</p>
|
118
140
|
|
119
141
|
|
120
142
|
<h2>How to submit patches</h2>
|
@@ -132,12 +154,18 @@ list_of_lists.detect { ...elided... }.andand.inject(42) { ...elided ... }
|
|
132
154
|
<p>This code is free to use under the terms of the <a href="http://en.wikipedia.org/wiki/MIT_License"><span class="caps">MIT</span> license</a>.</p>
|
133
155
|
|
134
156
|
|
157
|
+
<h2>Shout Out</h2>
|
158
|
+
|
159
|
+
|
160
|
+
<p><a href="http://mcommons.com/">Mobile Commons</a>. Huge.</p>
|
161
|
+
|
162
|
+
|
135
163
|
<h2>Contact</h2>
|
136
164
|
|
137
165
|
|
138
166
|
<p>Comments are welcome. Send an email to <a href="mailto:raganwald+rubyforge@gmail.com">Reginald Braithwaite</a>.</p>
|
139
167
|
<p class="coda">
|
140
|
-
<a href="http://weblog.raganwald.com">Reginald Braithwaite</a>,
|
168
|
+
<a href="http://weblog.raganwald.com">Reginald Braithwaite</a>, 15th February 2008<br>
|
141
169
|
Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
|
142
170
|
</p>
|
143
171
|
</div>
|
data/website/index.txt
CHANGED
@@ -57,14 +57,35 @@ Ruby 1.9 introduces "Object#tap":http://moonbase.rydia.net/mental/blog/programmi
|
|
57
57
|
[1, 2, 3, 4, 5].tap.pop.map { |n| n * 2 }
|
58
58
|
=> [2, 4, 6, 8]
|
59
59
|
</pre>
|
60
|
-
|
61
|
-
h2. Demonstration of usage
|
62
60
|
|
63
|
-
|
61
|
+
h3. Doctor, it hurts when I do that
|
62
|
+
|
63
|
+
*Don't do that!*
|
64
|
+
|
65
|
+
The popular use case for Object#tap is poor man's debugging:
|
66
|
+
|
67
|
+
<pre>
|
68
|
+
blah.sort.grep( /foo/ ).tap { |xs| p xs }.map { |x| x.blah }
|
69
|
+
</pre>Perhaps you want to remove the tap, you can delete it:
|
70
|
+
|
71
|
+
<pre>
|
72
|
+
blah.sort.grep( /foo/ ).tap { |xs| p xs }.map { |x| x.blah }
|
73
|
+
</pre>Or, you can change it to @.dont@:
|
74
|
+
|
75
|
+
<pre>
|
76
|
+
blah.sort.grep( /foo/ ).dont { |xs| p xs }.map { |x| x.blah }
|
77
|
+
</pre>Like @.andand@ and @.tap@, @.dont@ works with arbitrary methods, not just blocks:
|
78
|
+
|
79
|
+
<pre>
|
80
|
+
(1..10).to_a.reverse!
|
81
|
+
=> [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
|
82
|
+
(1..10).dont.to_a.reverse!
|
83
|
+
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
84
|
+
</pre>
|
64
85
|
|
65
86
|
h2. A little more background
|
66
87
|
|
67
|
-
"Object#andand & Object#me in Ruby":http://weblog.raganwald.com/2008/01/objectandand-objectme-in-ruby.html
|
88
|
+
"Object#andand & Object#me in Ruby":http://weblog.raganwald.com/2008/01/objectandand-objectme-in-ruby.html explains the original motivations, as well as providing links to similar implementations you may want to consider. A few people have pointed out that Object#andand is similar to Haskell's @Maybe@ monad. "The Maybe Monad in Ruby":http://blog.pretheory.com/arch/2008/02/the_maybe_monad_in_ruby.php is a good introduction for Ruby programmers.
|
68
89
|
|
69
90
|
h2. How to submit patches
|
70
91
|
|
@@ -76,6 +97,10 @@ h2. License
|
|
76
97
|
|
77
98
|
This code is free to use under the terms of the "MIT license":http://en.wikipedia.org/wiki/MIT_License.
|
78
99
|
|
100
|
+
h2. Shout Out
|
101
|
+
|
102
|
+
"Mobile Commons":http://mcommons.com/. Huge.
|
103
|
+
|
79
104
|
h2. Contact
|
80
105
|
|
81
106
|
Comments are welcome. Send an email to "Reginald Braithwaite":mailto:raganwald+rubyforge@gmail.com.
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
|
|
3
3
|
specification_version: 1
|
4
4
|
name: andand
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.
|
7
|
-
date: 2008-02-
|
6
|
+
version: 1.2.0
|
7
|
+
date: 2008-02-15 00:00:00 -05:00
|
8
8
|
summary: adds guarded method invocation to Ruby
|
9
9
|
require_paths:
|
10
10
|
- lib
|