shenanigans 1.0.0
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.
- data/Gemfile +5 -0
- data/LICENSE +7 -0
- data/README.rdoc +57 -0
- data/doc/Array.html +240 -0
- data/doc/Kernel.html +283 -0
- data/doc/Object.html +179 -0
- data/doc/README_rdoc.html +174 -0
- data/doc/created.rid +12 -0
- data/doc/images/add.png +0 -0
- data/doc/images/brick.png +0 -0
- data/doc/images/brick_link.png +0 -0
- data/doc/images/bug.png +0 -0
- data/doc/images/bullet_black.png +0 -0
- data/doc/images/bullet_toggle_minus.png +0 -0
- data/doc/images/bullet_toggle_plus.png +0 -0
- data/doc/images/date.png +0 -0
- data/doc/images/delete.png +0 -0
- data/doc/images/find.png +0 -0
- data/doc/images/loadingAnimation.gif +0 -0
- data/doc/images/macFFBgHack.png +0 -0
- data/doc/images/package.png +0 -0
- data/doc/images/page_green.png +0 -0
- data/doc/images/page_white_text.png +0 -0
- data/doc/images/page_white_width.png +0 -0
- data/doc/images/plugin.png +0 -0
- data/doc/images/ruby.png +0 -0
- data/doc/images/tag_blue.png +0 -0
- data/doc/images/tag_green.png +0 -0
- data/doc/images/transparent.png +0 -0
- data/doc/images/wrench.png +0 -0
- data/doc/images/wrench_orange.png +0 -0
- data/doc/images/zoom.png +0 -0
- data/doc/index.html +173 -0
- data/doc/js/darkfish.js +153 -0
- data/doc/js/jquery.js +18 -0
- data/doc/js/navigation.js +142 -0
- data/doc/js/search.js +94 -0
- data/doc/js/search_index.js +1 -0
- data/doc/js/searcher.js +228 -0
- data/doc/rdoc.css +543 -0
- data/doc/table_of_contents.html +82 -0
- data/lib/shenanigans/README.mdown +57 -0
- data/lib/shenanigans/array/random_subarray.rb +16 -0
- data/lib/shenanigans/array/zip_with.rb +27 -0
- data/lib/shenanigans/array.rb +2 -0
- data/lib/shenanigans/kernel/fn.rb +16 -0
- data/lib/shenanigans/kernel/prompt.rb +23 -0
- data/lib/shenanigans/kernel/with.rb +12 -0
- data/lib/shenanigans/kernel.rb +3 -0
- data/lib/shenanigans/object/identity.rb +9 -0
- data/lib/shenanigans/object.rb +1 -0
- data/lib/shenanigans/shenanigans-0.0.1.gem +0 -0
- data/lib/shenanigans.rb +3 -0
- data/test/array/test_random_subarray.rb +10 -0
- data/test/array/test_zip_with.rb +14 -0
- data/test/kernel/test_fn.rb +14 -0
- data/test/kernel/test_prompt.rb +27 -0
- data/test/kernel/test_with.rb +12 -0
- data/test/object/test_identity.rb +9 -0
- metadata +103 -0
@@ -0,0 +1,16 @@
|
|
1
|
+
module Kernel
|
2
|
+
# Composes a list of functions.
|
3
|
+
# Functions can be specified as symbols or lambdas.
|
4
|
+
# ["foo bar", "baz qux"].map &fn(:split, :last)
|
5
|
+
# #=> ["bar", "qux"]
|
6
|
+
#
|
7
|
+
# (1..3).map &fn(:next, -> x { x * x }, -> x { x.to_f / 2 } )
|
8
|
+
# #=> [2.0, 4.5, 8.0]
|
9
|
+
def fn(*funs)
|
10
|
+
-> x do
|
11
|
+
funs.inject(x) do |v,f|
|
12
|
+
Proc === f ? f.call(v) : v.send(f)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Kernel
|
2
|
+
|
3
|
+
# Currently only used by <tt>prompt</tt>:
|
4
|
+
# <tt>:to_i</tt>, <tt>:to_f</tt>, <tt>:to_r</tt>, <tt>:to_sym</tt>, <tt>:to_c</tt>
|
5
|
+
CONVERSIONS = [:to_i, :to_f, :to_r, :to_sym, :to_c]
|
6
|
+
|
7
|
+
# Displays a prompt and returns chomped input.
|
8
|
+
# Modelled after the Python method <tt>raw_input</tt>, but also can
|
9
|
+
# be supplied with an optional conversion method.
|
10
|
+
# prompt("Prompt> ")
|
11
|
+
# Prompt> 12
|
12
|
+
# #=> "12"
|
13
|
+
#
|
14
|
+
# prompt("Prompt> ", :to_f)
|
15
|
+
# Prompt> 12
|
16
|
+
# #=> 12.0
|
17
|
+
def prompt(text='', conversion=nil)
|
18
|
+
print text unless text.empty?
|
19
|
+
input = gets.chomp
|
20
|
+
CONVERSIONS.include?(conversion) ? input.send(conversion) : input
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require_relative "object/identity"
|
Binary file
|
data/lib/shenanigans.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'shenanigans/array/random_subarray'
|
3
|
+
|
4
|
+
class RandomSubarray < MiniTest::Unit::TestCase
|
5
|
+
def test_random_subarray
|
6
|
+
result = [*1..5].random_subarray(3)
|
7
|
+
assert result.size == 3
|
8
|
+
assert result.map { |a| a.all? { |x| x < 5 } }
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'shenanigans/array/zip_with'
|
3
|
+
|
4
|
+
class ZipWith < MiniTest::Unit::TestCase
|
5
|
+
def test_zip_with_with_symbol
|
6
|
+
result = [*1..3].zip_with([*1..3], :+)
|
7
|
+
assert result == [2, 4, 6]
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_zip_with_with_block
|
11
|
+
result = [*?a..?c].zip_with([*?a..?c]) { |a, b| a * 2 + b.upcase }
|
12
|
+
assert result == %w(aaA bbB ccC)
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'shenanigans/kernel/fn'
|
3
|
+
|
4
|
+
class Fn < MiniTest::Unit::TestCase
|
5
|
+
def test_with_symbols
|
6
|
+
result = ["foo bar", "baz qux"].map &fn(:split, :last)
|
7
|
+
assert result == ["bar", "qux"]
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_with_symbols_and_lambdas
|
11
|
+
result = (1..3).map &fn(:next, -> x { x * x }, -> x { x.to_f / 2 } )
|
12
|
+
assert result == [2.0, 4.5, 8.0]
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'shenanigans/kernel/prompt'
|
3
|
+
require 'stringio'
|
4
|
+
|
5
|
+
class Prompt < MiniTest::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
@orig_stdin = $stderr
|
8
|
+
@orig_stdout = $stdout
|
9
|
+
$stdin = StringIO.new("42\n")
|
10
|
+
$stdout = StringIO.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def teardown
|
14
|
+
$stdin = @orig_stdin
|
15
|
+
$stdout = @orig_stdout
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_prompt
|
19
|
+
result = prompt("Foo> ")
|
20
|
+
assert result == "42"
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_prompt_with_conversion
|
24
|
+
result = prompt("Foo> ", :to_f)
|
25
|
+
assert result == 42.0
|
26
|
+
end
|
27
|
+
end
|
metadata
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: shenanigans
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Michael Kohl
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-05-17 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description:
|
15
|
+
email: citizen428@gmail.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- Gemfile
|
21
|
+
- LICENSE
|
22
|
+
- README.rdoc
|
23
|
+
- doc/Array.html
|
24
|
+
- doc/created.rid
|
25
|
+
- doc/images/add.png
|
26
|
+
- doc/images/brick.png
|
27
|
+
- doc/images/brick_link.png
|
28
|
+
- doc/images/bug.png
|
29
|
+
- doc/images/bullet_black.png
|
30
|
+
- doc/images/bullet_toggle_minus.png
|
31
|
+
- doc/images/bullet_toggle_plus.png
|
32
|
+
- doc/images/date.png
|
33
|
+
- doc/images/delete.png
|
34
|
+
- doc/images/find.png
|
35
|
+
- doc/images/loadingAnimation.gif
|
36
|
+
- doc/images/macFFBgHack.png
|
37
|
+
- doc/images/package.png
|
38
|
+
- doc/images/page_green.png
|
39
|
+
- doc/images/page_white_text.png
|
40
|
+
- doc/images/page_white_width.png
|
41
|
+
- doc/images/plugin.png
|
42
|
+
- doc/images/ruby.png
|
43
|
+
- doc/images/tag_blue.png
|
44
|
+
- doc/images/tag_green.png
|
45
|
+
- doc/images/transparent.png
|
46
|
+
- doc/images/wrench.png
|
47
|
+
- doc/images/wrench_orange.png
|
48
|
+
- doc/images/zoom.png
|
49
|
+
- doc/index.html
|
50
|
+
- doc/js/darkfish.js
|
51
|
+
- doc/js/jquery.js
|
52
|
+
- doc/js/navigation.js
|
53
|
+
- doc/js/search.js
|
54
|
+
- doc/js/search_index.js
|
55
|
+
- doc/js/searcher.js
|
56
|
+
- doc/Kernel.html
|
57
|
+
- doc/Object.html
|
58
|
+
- doc/rdoc.css
|
59
|
+
- doc/README_rdoc.html
|
60
|
+
- doc/table_of_contents.html
|
61
|
+
- lib/shenanigans/array/random_subarray.rb
|
62
|
+
- lib/shenanigans/array/zip_with.rb
|
63
|
+
- lib/shenanigans/array.rb
|
64
|
+
- lib/shenanigans/kernel/fn.rb
|
65
|
+
- lib/shenanigans/kernel/prompt.rb
|
66
|
+
- lib/shenanigans/kernel/with.rb
|
67
|
+
- lib/shenanigans/kernel.rb
|
68
|
+
- lib/shenanigans/object/identity.rb
|
69
|
+
- lib/shenanigans/object.rb
|
70
|
+
- lib/shenanigans/README.mdown
|
71
|
+
- lib/shenanigans/shenanigans-0.0.1.gem
|
72
|
+
- lib/shenanigans.rb
|
73
|
+
- test/array/test_random_subarray.rb
|
74
|
+
- test/array/test_zip_with.rb
|
75
|
+
- test/kernel/test_fn.rb
|
76
|
+
- test/kernel/test_prompt.rb
|
77
|
+
- test/kernel/test_with.rb
|
78
|
+
- test/object/test_identity.rb
|
79
|
+
homepage: https://github.com/citizen428/shenanigans
|
80
|
+
licenses: []
|
81
|
+
post_install_message:
|
82
|
+
rdoc_options: []
|
83
|
+
require_paths:
|
84
|
+
- lib
|
85
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
86
|
+
none: false
|
87
|
+
requirements:
|
88
|
+
- - ! '>='
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
92
|
+
none: false
|
93
|
+
requirements:
|
94
|
+
- - ! '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
requirements: []
|
98
|
+
rubyforge_project:
|
99
|
+
rubygems_version: 1.8.23
|
100
|
+
signing_key:
|
101
|
+
specification_version: 3
|
102
|
+
summary: Think Facets, just less useful
|
103
|
+
test_files: []
|