shenanigans 1.0.5 → 1.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/doc/Fixnum.html +1 -1
- data/doc/Hash.html +41 -0
- data/doc/created.rid +4 -3
- data/doc/js/search_index.js +1 -1
- data/doc/table_of_contents.html +2 -0
- data/lib/shenanigans/hash.rb +1 -0
- data/lib/shenanigans/hash/extract.rb +12 -0
- data/test/hash/test_extract.rb +11 -0
- metadata +4 -2
data/doc/Fixnum.html
CHANGED
@@ -145,7 +145,7 @@
|
|
145
145
|
|
146
146
|
<div class="method-description">
|
147
147
|
|
148
|
-
<p>Returns the
|
148
|
+
<p>Returns the length of the number’s string representation.</p>
|
149
149
|
|
150
150
|
<pre class="ruby"><span class="ruby-value">0</span>.<span class="ruby-identifier">string_length</span>
|
151
151
|
<span class="ruby-comment">#=> 1</span>
|
data/doc/Hash.html
CHANGED
@@ -47,6 +47,7 @@
|
|
47
47
|
<nav id="file-list-section" class="section">
|
48
48
|
<h3 class="section-header">Defined In</h3>
|
49
49
|
<ul>
|
50
|
+
<li>lib/shenanigans/hash/extract.rb
|
50
51
|
<li>lib/shenanigans/hash/has_shape_pred.rb
|
51
52
|
<li>lib/shenanigans/hash/to_ostruct.rb
|
52
53
|
</ul>
|
@@ -71,6 +72,8 @@
|
|
71
72
|
|
72
73
|
<ul class="link-list">
|
73
74
|
|
75
|
+
<li><a href="#method-i-extract">#extract</a>
|
76
|
+
|
74
77
|
<li><a href="#method-i-has_shape-3F">#has_shape?</a>
|
75
78
|
|
76
79
|
<li><a href="#method-i-to_ostruct">#to_ostruct</a>
|
@@ -137,6 +140,44 @@
|
|
137
140
|
<h3 class="section-header">Public Instance Methods</h3>
|
138
141
|
|
139
142
|
|
143
|
+
<div id="method-i-extract" class="method-detail ">
|
144
|
+
|
145
|
+
<div class="method-heading">
|
146
|
+
<span class="method-name">extract</span><span
|
147
|
+
class="method-args">(*ks)</span>
|
148
|
+
<span class="method-click-advice">click to toggle source</span>
|
149
|
+
</div>
|
150
|
+
|
151
|
+
|
152
|
+
<div class="method-description">
|
153
|
+
|
154
|
+
<p>Returns a new hash only with the specified keys (if present).</p>
|
155
|
+
|
156
|
+
<pre class="ruby"><span class="ruby-identifier">hash</span> = { <span class="ruby-identifier">a</span><span class="ruby-operator">:</span> <span class="ruby-value">1</span>, <span class="ruby-identifier">b</span><span class="ruby-operator">:</span> <span class="ruby-value">2</span>, <span class="ruby-identifier">c</span><span class="ruby-operator">:</span> <span class="ruby-value">3</span> }
|
157
|
+
<span class="ruby-identifier">hash</span>.<span class="ruby-identifier">extract</span>(:<span class="ruby-identifier">b</span>, :<span class="ruby-identifier">a</span>)
|
158
|
+
<span class="ruby-comment">#=> { a: 1, b: 2 }</span>
|
159
|
+
<span class="ruby-identifier">hash</span>.<span class="ruby-identifier">extract</span>(:<span class="ruby-identifier">a</span>, :<span class="ruby-identifier">d</span>)
|
160
|
+
<span class="ruby-comment">#=> { a: 1}</span>
|
161
|
+
</pre>
|
162
|
+
|
163
|
+
|
164
|
+
|
165
|
+
<div class="method-source-code" id="extract-source">
|
166
|
+
<pre><span class="ruby-comment"># File lib/shenanigans/hash/extract.rb, line 8</span>
|
167
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier">extract</span>(*<span class="ruby-identifier">ks</span>)
|
168
|
+
<span class="ruby-identifier">existing</span> = <span class="ruby-identifier">keys</span> & <span class="ruby-identifier">ks</span>
|
169
|
+
<span class="ruby-constant">Hash</span>[<span class="ruby-identifier">existing</span>.<span class="ruby-identifier">zip</span>(<span class="ruby-identifier">values_at</span>(*<span class="ruby-identifier">existing</span>))]
|
170
|
+
<span class="ruby-keyword">end</span></pre>
|
171
|
+
</div><!-- extract-source -->
|
172
|
+
|
173
|
+
</div>
|
174
|
+
|
175
|
+
|
176
|
+
|
177
|
+
|
178
|
+
</div><!-- extract-method -->
|
179
|
+
|
180
|
+
|
140
181
|
<div id="method-i-has_shape-3F" class="method-detail ">
|
141
182
|
|
142
183
|
<div class="method-heading">
|
data/doc/created.rid
CHANGED
@@ -1,14 +1,15 @@
|
|
1
|
-
|
1
|
+
Thu, 09 Aug 2012 18:48:00 +0200
|
2
2
|
README.rdoc Thu, 17 May 2012 11:45:08 +0200
|
3
3
|
lib/shenanigans/array/caret.rb Thu, 28 Jun 2012 09:15:50 +0200
|
4
4
|
lib/shenanigans/array/random_subarray.rb Thu, 17 May 2012 00:03:23 +0200
|
5
5
|
lib/shenanigans/array/zip_with.rb Tue, 19 Jun 2012 21:23:27 +0200
|
6
6
|
lib/shenanigans/array.rb Thu, 28 Jun 2012 09:00:29 +0200
|
7
|
-
lib/shenanigans/fixnum/string_length.rb Sun, 15 Jul 2012 00:00:
|
7
|
+
lib/shenanigans/fixnum/string_length.rb Sun, 15 Jul 2012 00:00:21 +0200
|
8
8
|
lib/shenanigans/fixnum.rb Sat, 14 Jul 2012 23:49:59 +0200
|
9
|
+
lib/shenanigans/hash/extract.rb Thu, 09 Aug 2012 18:47:48 +0200
|
9
10
|
lib/shenanigans/hash/has_shape_pred.rb Tue, 19 Jun 2012 21:25:03 +0200
|
10
11
|
lib/shenanigans/hash/to_ostruct.rb Tue, 26 Jun 2012 21:24:42 +0200
|
11
|
-
lib/shenanigans/hash.rb Thu,
|
12
|
+
lib/shenanigans/hash.rb Thu, 09 Aug 2012 18:32:30 +0200
|
12
13
|
lib/shenanigans/kernel/fn.rb Wed, 16 May 2012 23:57:36 +0200
|
13
14
|
lib/shenanigans/kernel/prompt.rb Thu, 17 May 2012 00:10:42 +0200
|
14
15
|
lib/shenanigans/kernel/with.rb Thu, 17 May 2012 00:00:08 +0200
|
data/doc/js/search_index.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
var search_data = {"index":{"searchIndex":["array","fixnum","hash","kernel","object","^()","d()","display()","fn()","has_shape?()","it()","prompt()","random_subarray()","string_length()","to_ostruct()","with()","zip_with()","readme"],"longSearchIndex":["array","fixnum","hash","kernel","object","array#^()","object#d()","object#display()","kernel#fn()","hash#has_shape?()","object#it()","kernel#prompt()","array#random_subarray()","fixnum#string_length()","hash#to_ostruct()","kernel#with()","array#zip_with()",""],"info":[["Array","","Array.html","",""],["Fixnum","","Fixnum.html","",""],["Hash","","Hash.html","",""],["Kernel","","Kernel.html","",""],["Object","","Object.html","",""],["^","Array","Array.html#method-i-5E","(other)","<p>Returns an array containing elements exclusive between two arrays.\n\n<pre class=\"ruby\">[<span class=\"ruby-value\">1</span>, <span class=\"ruby-value\">2</span>, <span class=\"ruby-value\">3</span>] <span class=\"ruby-operator\">^</span> [<span class=\"ruby-value\">1</span>, <span class=\"ruby-value\">2</span>, <span class=\"ruby-value\">4</span>]\n<span class=\"ruby-comment\">#=> [3, 4]</span>\n</pre>\n"],["d","Object","Object.html#method-i-d","(new_line = true)",""],["display","Object","Object.html#method-i-display","(new_line = true)","<p>Outputs the object and also returns it. Will use <code>puts</code> if\n<code>new_line</code> is <code>true</code> and <code>print</code>\notherwise.\n\n<pre>"foo".display ...</pre>\n"],["fn","Kernel","Kernel.html#method-i-fn","(*funs)","<p>Composes a list of functions. Functions can be specified as symbols or\nlambdas.\n\n<pre>["foo bar", "baz qux"].map ...</pre>\n"],["has_shape?","Hash","Hash.html#method-i-has_shape-3F","(shape)","<p>Checks if a hash has a certain structure.\n\n<pre>h = { k1: 1, k2: "1" }\nh.has_shape?(k1: Fixnum, k2: String) ...</pre>\n"],["it","Object","Object.html#method-i-it","()","<p>An identity method that provides access to an object’s <code>self</code>.\n\n<pre class=\"ruby\">[<span class=\"ruby-value\">1</span>,<span class=\"ruby-value\">2</span>,<span class=\"ruby-value\">3</span>,<span class=\"ruby-value\">4</span>,<span class=\"ruby-value\">5</span>,<span class=\"ruby-value\">1</span>,<span class=\"ruby-value\">2</span>,<span class=\"ruby-value\">2</span>,<span class=\"ruby-value\">3</span>].<span class=\"ruby-identifier\">group_by</span>(&:<span class=\"ruby-identifier\">it</span>)\n<span class=\"ruby-comment\">#=> {1=>[1, ...</span>\n</pre>\n"],["prompt","Kernel","Kernel.html#method-i-prompt","(text='', conversion=nil)","<p>Displays a prompt and returns chomped input. Modelled after the Python\nmethod <code>raw_input</code>, but also can …\n"],["random_subarray","Array","Array.html#method-i-random_subarray","(n=1)","<p>Generates random subarrays. Uses random numbers and bit-fiddling to assure\nperformant uniform distributions …\n"],["string_length","Fixnum","Fixnum.html#method-i-string_length","()","<p>Returns the
|
1
|
+
var search_data = {"index":{"searchIndex":["array","fixnum","hash","kernel","object","^()","d()","display()","extract()","fn()","has_shape?()","it()","prompt()","random_subarray()","string_length()","to_ostruct()","with()","zip_with()","readme"],"longSearchIndex":["array","fixnum","hash","kernel","object","array#^()","object#d()","object#display()","hash#extract()","kernel#fn()","hash#has_shape?()","object#it()","kernel#prompt()","array#random_subarray()","fixnum#string_length()","hash#to_ostruct()","kernel#with()","array#zip_with()",""],"info":[["Array","","Array.html","",""],["Fixnum","","Fixnum.html","",""],["Hash","","Hash.html","",""],["Kernel","","Kernel.html","",""],["Object","","Object.html","",""],["^","Array","Array.html#method-i-5E","(other)","<p>Returns an array containing elements exclusive between two arrays.\n\n<pre class=\"ruby\">[<span class=\"ruby-value\">1</span>, <span class=\"ruby-value\">2</span>, <span class=\"ruby-value\">3</span>] <span class=\"ruby-operator\">^</span> [<span class=\"ruby-value\">1</span>, <span class=\"ruby-value\">2</span>, <span class=\"ruby-value\">4</span>]\n<span class=\"ruby-comment\">#=> [3, 4]</span>\n</pre>\n"],["d","Object","Object.html#method-i-d","(new_line = true)",""],["display","Object","Object.html#method-i-display","(new_line = true)","<p>Outputs the object and also returns it. Will use <code>puts</code> if\n<code>new_line</code> is <code>true</code> and <code>print</code>\notherwise.\n\n<pre>"foo".display ...</pre>\n"],["extract","Hash","Hash.html#method-i-extract","(*ks)","<p>Returns a new hash only with the specified keys (if present).\n\n<pre>hash = { a: 1, b: 2, c: 3 }\nhash.extract(:b, ...</pre>\n"],["fn","Kernel","Kernel.html#method-i-fn","(*funs)","<p>Composes a list of functions. Functions can be specified as symbols or\nlambdas.\n\n<pre>["foo bar", "baz qux"].map ...</pre>\n"],["has_shape?","Hash","Hash.html#method-i-has_shape-3F","(shape)","<p>Checks if a hash has a certain structure.\n\n<pre>h = { k1: 1, k2: "1" }\nh.has_shape?(k1: Fixnum, k2: String) ...</pre>\n"],["it","Object","Object.html#method-i-it","()","<p>An identity method that provides access to an object’s <code>self</code>.\n\n<pre class=\"ruby\">[<span class=\"ruby-value\">1</span>,<span class=\"ruby-value\">2</span>,<span class=\"ruby-value\">3</span>,<span class=\"ruby-value\">4</span>,<span class=\"ruby-value\">5</span>,<span class=\"ruby-value\">1</span>,<span class=\"ruby-value\">2</span>,<span class=\"ruby-value\">2</span>,<span class=\"ruby-value\">3</span>].<span class=\"ruby-identifier\">group_by</span>(&:<span class=\"ruby-identifier\">it</span>)\n<span class=\"ruby-comment\">#=> {1=>[1, ...</span>\n</pre>\n"],["prompt","Kernel","Kernel.html#method-i-prompt","(text='', conversion=nil)","<p>Displays a prompt and returns chomped input. Modelled after the Python\nmethod <code>raw_input</code>, but also can …\n"],["random_subarray","Array","Array.html#method-i-random_subarray","(n=1)","<p>Generates random subarrays. Uses random numbers and bit-fiddling to assure\nperformant uniform distributions …\n"],["string_length","Fixnum","Fixnum.html#method-i-string_length","()","<p>Returns the length of the number’s string representation.\n\n<pre class=\"ruby\"><span class=\"ruby-value\">0</span>.<span class=\"ruby-identifier\">string_length</span>\n<span class=\"ruby-comment\">#=> 1</span>\n<span class=\"ruby-value\">123</span>.<span class=\"ruby-identifier\">string_length</span>\n<span class=\"ruby-comment\">#=> ...</span>\n</pre>\n"],["to_ostruct","Hash","Hash.html#method-i-to_ostruct","()","<p>Recursively converts a <code>Hash</code> and all nested <code>Hash</code>es\nto <code>OpenStruct</code>s. Especially useful for parsing YAML …\n"],["with","Kernel","Kernel.html#method-i-with","(o, &blk)","<p>A Pascal/ActionScript like <code>with</code> method. Yields its argument to\nthe provided block and then returns it. …\n"],["zip_with","Array","Array.html#method-i-zip_with","(other, op=nil)","<p>Zip <code>self</code> with <code>other</code>, combining the elements with\nthe provided block or symbol. The resulting array will …\n"],["README","","README_rdoc.html","","<p>Shenanigans\n<p><strong>shenanigan</strong> (plural shenanigans):\n<p>Trickery, games; skulduggery. To “call”, “claim” …\n"]]}}
|
data/doc/table_of_contents.html
CHANGED
@@ -71,6 +71,8 @@
|
|
71
71
|
|
72
72
|
<li class="method"><a href="Object.html#method-i-display">#display — Object</a>
|
73
73
|
|
74
|
+
<li class="method"><a href="Hash.html#method-i-extract">#extract — Hash</a>
|
75
|
+
|
74
76
|
<li class="method"><a href="Kernel.html#method-i-fn">#fn — Kernel</a>
|
75
77
|
|
76
78
|
<li class="method"><a href="Hash.html#method-i-has_shape-3F">#has_shape? — Hash</a>
|
data/lib/shenanigans/hash.rb
CHANGED
@@ -0,0 +1,12 @@
|
|
1
|
+
class Hash
|
2
|
+
# Returns a new hash only with the specified keys (if present).
|
3
|
+
# hash = { a: 1, b: 2, c: 3 }
|
4
|
+
# hash.extract(:b, :a)
|
5
|
+
# #=> { a: 1, b: 2 }
|
6
|
+
# hash.extract(:a, :d)
|
7
|
+
# #=> { a: 1}
|
8
|
+
def extract(*ks)
|
9
|
+
existing = keys & ks
|
10
|
+
Hash[existing.zip(values_at(*existing))]
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'shenanigans/hash/extract'
|
3
|
+
|
4
|
+
class Extract < MiniTest::Unit::TestCase
|
5
|
+
def test_extract
|
6
|
+
hash = { a: 1, b: 2, c: 3 }
|
7
|
+
assert_equal hash.extract(:b, :a), { a: 1, b: 2 }
|
8
|
+
assert_equal hash.extract(:a, :d), { a: 1}
|
9
|
+
assert_equal Hash.new.extract(:a, :c), Hash.new
|
10
|
+
end
|
11
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shenanigans
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-08-09 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description:
|
15
15
|
email: citizen428@gmail.com
|
@@ -66,6 +66,7 @@ files:
|
|
66
66
|
- lib/shenanigans/array.rb
|
67
67
|
- lib/shenanigans/fixnum/string_length.rb
|
68
68
|
- lib/shenanigans/fixnum.rb
|
69
|
+
- lib/shenanigans/hash/extract.rb
|
69
70
|
- lib/shenanigans/hash/has_shape_pred.rb
|
70
71
|
- lib/shenanigans/hash/to_ostruct.rb
|
71
72
|
- lib/shenanigans/hash.rb
|
@@ -82,6 +83,7 @@ files:
|
|
82
83
|
- test/array/test_random_subarray.rb
|
83
84
|
- test/array/test_zip_with.rb
|
84
85
|
- test/fixnum/test_string_length.rb
|
86
|
+
- test/hash/test_extract.rb
|
85
87
|
- test/hash/test_has_shape_pred.rb
|
86
88
|
- test/hash/test_to_ostruct.rb
|
87
89
|
- test/kernel/test_fn.rb
|