shenanigans 1.0.13 → 1.0.14
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -1
- data/doc/Array.html +104 -74
- data/doc/Hash.html +77 -56
- data/doc/{Fixnum.html → Integer.html} +31 -27
- data/doc/Kernel.html +114 -74
- data/doc/Module.html +11 -15
- data/doc/Object.html +24 -95
- data/doc/String.html +31 -30
- data/doc/_index.html +13 -13
- data/doc/class_list.html +3 -3
- data/doc/css/style.css +6 -9
- data/doc/file.README.html +19 -48
- data/doc/file_list.html +2 -2
- data/doc/frames.html +2 -2
- data/doc/index.html +19 -48
- data/doc/js/app.js +69 -3
- data/doc/method_list.html +12 -20
- data/doc/top-level-namespace.html +7 -7
- data/lib/shenanigans.rb +7 -7
- data/lib/shenanigans/array.rb +3 -3
- data/lib/shenanigans/array/caret.rb +3 -2
- data/lib/shenanigans/array/random_subarray.rb +7 -5
- data/lib/shenanigans/array/reductions.rb +13 -10
- data/lib/shenanigans/array/zip_with.rb +9 -12
- data/lib/shenanigans/hash.rb +3 -3
- data/lib/shenanigans/hash/extract.rb +5 -4
- data/lib/shenanigans/hash/has_shape_pred.rb +6 -7
- data/lib/shenanigans/hash/to_ostruct.rb +8 -9
- data/lib/shenanigans/integer.rb +1 -0
- data/lib/shenanigans/integer/string_length.rb +13 -0
- data/lib/shenanigans/kernel.rb +4 -4
- data/lib/shenanigans/kernel/fn.rb +7 -6
- data/lib/shenanigans/kernel/prompt.rb +6 -7
- data/lib/shenanigans/kernel/require_optional.rb +8 -8
- data/lib/shenanigans/kernel/with.rb +4 -3
- data/lib/shenanigans/module.rb +1 -1
- data/lib/shenanigans/module/private_accessor.rb +6 -6
- data/lib/shenanigans/object.rb +1 -2
- data/lib/shenanigans/object/display.rb +5 -4
- data/lib/shenanigans/string.rb +2 -2
- data/lib/shenanigans/string/cmpi.rb +4 -3
- data/lib/shenanigans/string/in_groups_of.rb +4 -6
- data/test/array/caret_test.rb +9 -0
- data/test/array/{test_random_subarray.rb → random_subarray_test.rb} +3 -3
- data/test/array/reductions_test.rb +27 -0
- data/test/array/zip_with_test.rb +14 -0
- data/test/hash/extract_test.rb +11 -0
- data/test/hash/{test_has_shape_pred.rb → has_shape_pred_test.rb} +3 -3
- data/test/hash/{test_to_ostruct.rb → to_ostruct_test.rb} +3 -3
- data/test/integer/string_length_test.rb +16 -0
- data/test/kernel/fn_test.rb +14 -0
- data/test/kernel/{test_prompt.rb → prompt_test.rb} +4 -4
- data/test/kernel/require_optional_test.rb +15 -0
- data/test/kernel/with_test.rb +12 -0
- data/test/module/{test_private_accessor.rb → private_accessor_test.rb} +3 -3
- data/test/object/{test_display.rb → display_test.rb} +4 -5
- data/test/string/{test_cmpi.rb → cmpi_test.rb} +3 -3
- data/test/string/in_groups_of_test.rb +11 -0
- metadata +22 -25
- data/lib/shenanigans/fixnum.rb +0 -1
- data/lib/shenanigans/fixnum/string_length.rb +0 -14
- data/lib/shenanigans/object/it.rb +0 -9
- data/test/array/test_caret.rb +0 -9
- data/test/array/test_reductions.rb +0 -27
- data/test/array/test_zip_with.rb +0 -14
- data/test/fixnum/test_string_length.rb +0 -16
- data/test/hash/test_extract.rb +0 -11
- data/test/kernel/test_fn.rb +0 -14
- data/test/kernel/test_require_optional.rb +0 -17
- data/test/kernel/test_with.rb +0 -12
- data/test/object/test_it.rb +0 -10
- data/test/string/test_in_groups_of.rb +0 -11
@@ -1,14 +1,12 @@
|
|
1
1
|
class String
|
2
2
|
# Returns an array of the string broken down into groups of
|
3
3
|
# <tt>size</tt> characters.
|
4
|
-
# "aabbcc".in_groups_of(2)
|
5
|
-
# #=> [
|
6
|
-
# "".in_groups_of(
|
7
|
-
# #=> []
|
8
|
-
# "".in_groups_of(0)
|
9
|
-
# #=> ArgumentError
|
4
|
+
# "aabbcc".in_groups_of(2) #=> ['aa', 'bb', 'cc']
|
5
|
+
# "".in_groups_of(2) #=> []
|
6
|
+
# "".in_groups_of(0) #=> ArgumentError
|
10
7
|
def in_groups_of(size)
|
11
8
|
raise ArgumentError, "Size of group must be >= 1" if size < 1
|
9
|
+
|
12
10
|
scan(/.{1,#{size}}/)
|
13
11
|
end
|
14
12
|
end
|
@@ -1,7 +1,7 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "minitest/autorun"
|
2
|
+
require "shenanigans/array/random_subarray"
|
3
3
|
|
4
|
-
class RandomSubarray <
|
4
|
+
class RandomSubarray < Minitest::Test
|
5
5
|
def test_random_subarray
|
6
6
|
result = [*1..5].random_subarray(3)
|
7
7
|
assert result.size == 3
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "minitest/autorun"
|
2
|
+
require "shenanigans/array/reductions"
|
3
|
+
|
4
|
+
class ArrayReductions < Minitest::Test
|
5
|
+
TEST_ARRAY = [*1..4]
|
6
|
+
|
7
|
+
def test_reductions_without_params_or_block
|
8
|
+
assert_raises(ArgumentError) { TEST_ARRAY.reductions }
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_reductions_operator_only
|
12
|
+
assert TEST_ARRAY.reductions(:+) == [1, 3, 6, 10]
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_reductions_initial_only
|
16
|
+
assert TEST_ARRAY.reductions(50) { |acc, b| acc + b } == [50, 51, 53, 56, 60]
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_reductions_inital_and_operator
|
20
|
+
assert TEST_ARRAY.reductions(50, :+) == [50, 51, 53, 56, 60]
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_reductions_without_params
|
24
|
+
assert TEST_ARRAY.reductions { |acc, b| acc + b } == [1, 3, 6, 10]
|
25
|
+
assert %w[a b c].reductions { |s1, s2| s1 + s2 } == %w[a ab abc]
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require "minitest/autorun"
|
2
|
+
require "shenanigans/array/zip_with"
|
3
|
+
|
4
|
+
class ZipWith < Minitest::Test
|
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,11 @@
|
|
1
|
+
require "minitest/autorun"
|
2
|
+
require "shenanigans/hash/extract"
|
3
|
+
|
4
|
+
class Extract < Minitest::Test
|
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({}.extract(:a, :c), {})
|
10
|
+
end
|
11
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "minitest/autorun"
|
2
|
+
require "shenanigans/hash/to_ostruct"
|
3
3
|
|
4
|
-
class ToOstruct <
|
4
|
+
class ToOstruct < Minitest::Test
|
5
5
|
def test_simple_hash
|
6
6
|
struct = {a: 1, b: 2}.to_ostruct
|
7
7
|
assert struct.a == 1
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require "minitest/autorun"
|
2
|
+
require "shenanigans/integer/string_length"
|
3
|
+
|
4
|
+
class StringLength < Minitest::Test
|
5
|
+
def test_zero
|
6
|
+
assert 0.string_length == 1
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_positive
|
10
|
+
assert 123.string_length == 3
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_negative
|
14
|
+
assert(-1.string_length) == 2
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require "minitest/autorun"
|
2
|
+
require "shenanigans/kernel/fn"
|
3
|
+
|
4
|
+
class Fn < Minitest::Test
|
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
|
@@ -1,8 +1,8 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require "minitest/autorun"
|
2
|
+
require "shenanigans/kernel/prompt"
|
3
|
+
require "stringio"
|
4
4
|
|
5
|
-
class Prompt <
|
5
|
+
class Prompt < Minitest::Test
|
6
6
|
def setup
|
7
7
|
@orig_stdin = $stderr
|
8
8
|
@orig_stdout = $stdout
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require "minitest/autorun"
|
2
|
+
require "shenanigans/kernel/require_optional"
|
3
|
+
require "stringio"
|
4
|
+
|
5
|
+
class RequireOptional < Minitest::Test
|
6
|
+
def test_require_optional
|
7
|
+
assert_nil require_optional("non_existent")
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_require_optional_with_block
|
11
|
+
res = require_optional("non_existent") { 42 }
|
12
|
+
|
13
|
+
assert_equal res, 42
|
14
|
+
end
|
15
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "minitest/autorun"
|
2
|
+
require "shenanigans/module/private_accessor"
|
3
3
|
|
4
|
-
class PrivateAccessor <
|
4
|
+
class PrivateAccessor < Minitest::Test
|
5
5
|
class Foo
|
6
6
|
private_accessor :bar, :baz
|
7
7
|
|
@@ -1,8 +1,8 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require "minitest/autorun"
|
2
|
+
require "shenanigans/object/display"
|
3
|
+
require "stringio"
|
4
4
|
|
5
|
-
class Display <
|
5
|
+
class Display < Minitest::Test
|
6
6
|
def setup
|
7
7
|
@orig_stdout = $stdout
|
8
8
|
$stdout = StringIO.new("", "r+")
|
@@ -32,5 +32,4 @@ class Display < MiniTest::Unit::TestCase
|
|
32
32
|
$stdout.rewind
|
33
33
|
assert $stdout.gets == str
|
34
34
|
end
|
35
|
-
|
36
35
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require "minitest/autorun"
|
2
|
+
require "shenanigans/string/in_groups_of"
|
3
|
+
|
4
|
+
class InGroupsOf < Minitest::Test
|
5
|
+
def test_in_groups_of
|
6
|
+
str = "aabbcc"
|
7
|
+
assert str.in_groups_of(2) == ["aa", "bb", "cc"]
|
8
|
+
assert "".in_groups_of(2) == []
|
9
|
+
assert_raises(ArgumentError) { "".in_groups_of(0) }
|
10
|
+
end
|
11
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
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.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Kohl
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-05-05 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A collection of extensions for various Ruby core classes.
|
14
14
|
email: citizen428@gmail.com
|
@@ -20,8 +20,8 @@ files:
|
|
20
20
|
- LICENSE
|
21
21
|
- README.rdoc
|
22
22
|
- doc/Array.html
|
23
|
-
- doc/Fixnum.html
|
24
23
|
- doc/Hash.html
|
24
|
+
- doc/Integer.html
|
25
25
|
- doc/Kernel.html
|
26
26
|
- doc/Module.html
|
27
27
|
- doc/Object.html
|
@@ -46,12 +46,12 @@ files:
|
|
46
46
|
- lib/shenanigans/array/random_subarray.rb
|
47
47
|
- lib/shenanigans/array/reductions.rb
|
48
48
|
- lib/shenanigans/array/zip_with.rb
|
49
|
-
- lib/shenanigans/fixnum.rb
|
50
|
-
- lib/shenanigans/fixnum/string_length.rb
|
51
49
|
- lib/shenanigans/hash.rb
|
52
50
|
- lib/shenanigans/hash/extract.rb
|
53
51
|
- lib/shenanigans/hash/has_shape_pred.rb
|
54
52
|
- lib/shenanigans/hash/to_ostruct.rb
|
53
|
+
- lib/shenanigans/integer.rb
|
54
|
+
- lib/shenanigans/integer/string_length.rb
|
55
55
|
- lib/shenanigans/kernel.rb
|
56
56
|
- lib/shenanigans/kernel/fn.rb
|
57
57
|
- lib/shenanigans/kernel/prompt.rb
|
@@ -61,27 +61,25 @@ files:
|
|
61
61
|
- lib/shenanigans/module/private_accessor.rb
|
62
62
|
- lib/shenanigans/object.rb
|
63
63
|
- lib/shenanigans/object/display.rb
|
64
|
-
- lib/shenanigans/object/it.rb
|
65
64
|
- lib/shenanigans/string.rb
|
66
65
|
- lib/shenanigans/string/cmpi.rb
|
67
66
|
- lib/shenanigans/string/in_groups_of.rb
|
68
|
-
- test/array/
|
69
|
-
- test/array/
|
70
|
-
- test/array/
|
71
|
-
- test/array/
|
72
|
-
- test/
|
73
|
-
- test/hash/
|
74
|
-
- test/hash/
|
75
|
-
- test/
|
76
|
-
- test/kernel/
|
77
|
-
- test/kernel/
|
78
|
-
- test/kernel/
|
79
|
-
- test/kernel/
|
80
|
-
- test/module/
|
81
|
-
- test/object/
|
82
|
-
- test/
|
83
|
-
- test/string/
|
84
|
-
- test/string/test_in_groups_of.rb
|
67
|
+
- test/array/caret_test.rb
|
68
|
+
- test/array/random_subarray_test.rb
|
69
|
+
- test/array/reductions_test.rb
|
70
|
+
- test/array/zip_with_test.rb
|
71
|
+
- test/hash/extract_test.rb
|
72
|
+
- test/hash/has_shape_pred_test.rb
|
73
|
+
- test/hash/to_ostruct_test.rb
|
74
|
+
- test/integer/string_length_test.rb
|
75
|
+
- test/kernel/fn_test.rb
|
76
|
+
- test/kernel/prompt_test.rb
|
77
|
+
- test/kernel/require_optional_test.rb
|
78
|
+
- test/kernel/with_test.rb
|
79
|
+
- test/module/private_accessor_test.rb
|
80
|
+
- test/object/display_test.rb
|
81
|
+
- test/string/cmpi_test.rb
|
82
|
+
- test/string/in_groups_of_test.rb
|
85
83
|
homepage: http://rubydoc.info/gems/shenanigans/frames
|
86
84
|
licenses:
|
87
85
|
- MIT
|
@@ -101,8 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
101
99
|
- !ruby/object:Gem::Version
|
102
100
|
version: '0'
|
103
101
|
requirements: []
|
104
|
-
|
105
|
-
rubygems_version: 2.7.3
|
102
|
+
rubygems_version: 3.1.2
|
106
103
|
signing_key:
|
107
104
|
specification_version: 4
|
108
105
|
summary: Think Facets, just less useful
|
data/lib/shenanigans/fixnum.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require_relative 'fixnum/string_length'
|
@@ -1,14 +0,0 @@
|
|
1
|
-
class Fixnum
|
2
|
-
# Returns the length of the number's string representation.
|
3
|
-
# 0.string_length
|
4
|
-
# #=> 1
|
5
|
-
# 123.string_length
|
6
|
-
# #=> 3
|
7
|
-
# -1.string_length
|
8
|
-
# #=> 2
|
9
|
-
def string_length
|
10
|
-
return 1 if self.zero?
|
11
|
-
len = Math.log10(self.abs).floor.next
|
12
|
-
self > 0 ? len : len.next
|
13
|
-
end
|
14
|
-
end
|
data/test/array/test_caret.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'minitest/autorun'
|
2
|
-
require 'shenanigans/array/reductions'
|
3
|
-
|
4
|
-
class ArrayReductions < MiniTest::Unit::TestCase
|
5
|
-
TEST_ARRAY = [*1..4]
|
6
|
-
|
7
|
-
def test_reductions_without_params_or_block
|
8
|
-
assert_raises(ArgumentError) { TEST_ARRAY.reductions }
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_reductions_operator_only
|
12
|
-
assert TEST_ARRAY.reductions(:+) == [1,3,6,10]
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_reductions_initial_only
|
16
|
-
assert TEST_ARRAY.reductions(50) { |acc,b| acc+b} == [50,51,53,56,60]
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_reductions_inital_and_operator
|
20
|
-
assert TEST_ARRAY.reductions(50, :+) == [50,51,53,56,60]
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_reductions_without_params
|
24
|
-
assert TEST_ARRAY.reductions { |acc,b| acc+b} == [1,3,6,10]
|
25
|
-
assert %w(a b c).reductions { |s1, s2| s1+s2 } == %w(a ab abc)
|
26
|
-
end
|
27
|
-
end
|
data/test/array/test_zip_with.rb
DELETED
@@ -1,14 +0,0 @@
|
|
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
|
@@ -1,16 +0,0 @@
|
|
1
|
-
require 'minitest/autorun'
|
2
|
-
require 'shenanigans/fixnum/string_length'
|
3
|
-
|
4
|
-
class StringLength < MiniTest::Unit::TestCase
|
5
|
-
def test_zero
|
6
|
-
assert 0.string_length == 1
|
7
|
-
end
|
8
|
-
|
9
|
-
def test_positive
|
10
|
-
assert 123.string_length == 3
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_negative
|
14
|
-
assert -1.string_length == 2
|
15
|
-
end
|
16
|
-
end
|