zucker 1 → 2

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.
Files changed (131) hide show
  1. data/CHANGELOG +14 -0
  2. data/Rakefile +14 -4
  3. data/lib/zucker.rb +0 -4
  4. data/lib/zucker/2/D.rb +19 -0
  5. data/lib/zucker/2/aliases.rb +28 -0
  6. data/lib/zucker/2/all.rb +6 -0
  7. data/lib/zucker/2/array.rb +17 -0
  8. data/lib/zucker/2/array2proc.rb +16 -0
  9. data/lib/zucker/2/binding.rb +25 -0
  10. data/lib/zucker/2/blank.rb +26 -0
  11. data/lib/zucker/2/class2proc.rb +10 -0
  12. data/lib/zucker/2/debug.rb +4 -0
  13. data/lib/zucker/2/default.rb +25 -0
  14. data/lib/zucker/2/desc/D.yaml +23 -0
  15. data/lib/zucker/2/desc/aliases.yaml +16 -0
  16. data/lib/zucker/2/desc/array.yaml +14 -0
  17. data/lib/zucker/2/desc/array2proc.yaml +17 -0
  18. data/lib/zucker/2/desc/binding.yaml +10 -0
  19. data/lib/zucker/2/desc/blank.yaml +10 -0
  20. data/lib/zucker/2/desc/class2proc.yaml +12 -0
  21. data/lib/zucker/2/desc/egonil.yaml +17 -0
  22. data/lib/zucker/2/desc/enumerable.yaml +11 -0
  23. data/lib/zucker/2/desc/hash.yaml +14 -0
  24. data/lib/zucker/2/desc/hash2proc.yaml +11 -0
  25. data/lib/zucker/2/desc/info.yaml +12 -0
  26. data/lib/zucker/2/desc/iterate.yaml +17 -0
  27. data/lib/zucker/2/desc/ivars.yaml +20 -0
  28. data/lib/zucker/2/desc/kernel.yaml +13 -0
  29. data/lib/zucker/2/desc/mcopy.yaml +12 -0
  30. data/lib/zucker/2/desc/mm.yaml +12 -0
  31. data/lib/zucker/2/desc/regexp2proc.yaml +13 -0
  32. data/lib/zucker/2/desc/sandbox.yaml +19 -0
  33. data/lib/zucker/2/desc/square_brackets_for.yaml +23 -0
  34. data/lib/zucker/2/desc/string.yaml +13 -0
  35. data/lib/zucker/2/desc/unary.yaml +15 -0
  36. data/lib/zucker/2/desc/union.yaml +11 -0
  37. data/lib/zucker/2/doc/zucker_doc.html +1494 -0
  38. data/lib/zucker/2/doc/zucker_doc.rb +498 -0
  39. data/lib/zucker/2/egonil.rb +14 -0
  40. data/lib/zucker/2/enumerable.rb +12 -0
  41. data/lib/zucker/2/hash.rb +19 -0
  42. data/lib/zucker/2/hash2proc.rb +14 -0
  43. data/lib/zucker/2/info.rb +164 -0
  44. data/lib/zucker/2/iterate.rb +23 -0
  45. data/lib/zucker/2/ivars.rb +26 -0
  46. data/lib/zucker/2/kernel.rb +18 -0
  47. data/lib/zucker/2/mcopy.rb +9 -0
  48. data/lib/zucker/2/mm.rb +31 -0
  49. data/lib/zucker/2/regexp2proc.rb +10 -0
  50. data/lib/zucker/2/sandbox.rb +19 -0
  51. data/lib/zucker/2/spec/D_spec.rb +35 -0
  52. data/lib/zucker/2/spec/aliases_spec.rb +13 -0
  53. data/lib/zucker/2/spec/array2proc_spec.rb +12 -0
  54. data/lib/zucker/2/spec/array_spec.rb +23 -0
  55. data/lib/zucker/2/spec/binding_spec.rb +8 -0
  56. data/lib/zucker/2/spec/blank_spec.rb +20 -0
  57. data/lib/zucker/2/spec/class2proc_spec.rb +9 -0
  58. data/lib/zucker/2/spec/egonil_spec.rb +30 -0
  59. data/lib/zucker/2/spec/enumerable_spec.rb +8 -0
  60. data/lib/zucker/2/spec/hash2proc_spec.rb +12 -0
  61. data/lib/zucker/2/spec/hash_spec.rb +17 -0
  62. data/lib/zucker/2/spec/info_spec.rb +8 -0
  63. data/lib/zucker/2/spec/iterate_spec.rb +54 -0
  64. data/lib/zucker/2/spec/ivars_spec.rb +20 -0
  65. data/lib/zucker/2/spec/kernel_spec.rb +28 -0
  66. data/lib/zucker/2/spec/mcopy_spec.rb +13 -0
  67. data/lib/zucker/2/spec/mm_spec.rb +8 -0
  68. data/lib/zucker/2/spec/regexp2proc_spec.rb +9 -0
  69. data/lib/zucker/2/spec/sandbox_spec.rb +26 -0
  70. data/lib/zucker/2/spec/spec_helper.rb +18 -0
  71. data/lib/zucker/2/spec/square_brackets_for_spec.rb +59 -0
  72. data/lib/zucker/2/spec/string_spec.rb +29 -0
  73. data/lib/zucker/2/spec/unary_spec.rb +26 -0
  74. data/lib/zucker/2/spec/union_spec.rb +15 -0
  75. data/lib/zucker/2/square_brackets_for.rb +20 -0
  76. data/lib/zucker/2/string.rb +25 -0
  77. data/lib/zucker/2/unary.rb +22 -0
  78. data/lib/zucker/2/union.rb +14 -0
  79. data/lib/zucker/all.rb +2 -2
  80. data/lib/zucker/array2proc.rb +7 -1
  81. data/lib/zucker/debug.rb +3 -3
  82. data/lib/zucker/default.rb +1 -1
  83. data/lib/zucker/desc/D.yaml +1 -1
  84. data/lib/zucker/desc/array.yaml +1 -1
  85. data/lib/zucker/desc/array2proc.yaml +5 -1
  86. data/lib/zucker/desc/binding.yaml +2 -2
  87. data/lib/zucker/desc/blank.yaml +1 -3
  88. data/lib/zucker/desc/egonil.yaml +1 -1
  89. data/lib/zucker/desc/enumerable.yaml +1 -1
  90. data/lib/zucker/desc/hash.yaml +4 -2
  91. data/lib/zucker/desc/info.yaml +12 -0
  92. data/lib/zucker/desc/kernel.yaml +2 -2
  93. data/lib/zucker/desc/mm.yaml +3 -3
  94. data/lib/zucker/desc/regexp2proc.yaml +1 -1
  95. data/lib/zucker/desc/sandbox.yaml +6 -1
  96. data/lib/zucker/desc/string.yaml +1 -1
  97. data/lib/zucker/desc/unary.yaml +2 -2
  98. data/lib/zucker/desc/union.yaml +1 -1
  99. data/lib/zucker/doc/zucker_doc.html +441 -233
  100. data/lib/zucker/doc/zucker_doc.rb +32 -27
  101. data/lib/zucker/hash.rb +3 -3
  102. data/lib/zucker/info.rb +164 -0
  103. data/lib/zucker/ivars.rb +1 -1
  104. data/lib/zucker/kernel.rb +2 -4
  105. data/lib/zucker/sandbox.rb +7 -3
  106. data/lib/zucker/spec/D_spec.rb +15 -7
  107. data/lib/zucker/spec/aliases_spec.rb +3 -24
  108. data/lib/zucker/spec/array2proc_spec.rb +5 -1
  109. data/lib/zucker/spec/array_spec.rb +1 -1
  110. data/lib/zucker/spec/binding_spec.rb +4 -2
  111. data/lib/zucker/spec/blank_spec.rb +1 -1
  112. data/lib/zucker/spec/class2proc_spec.rb +1 -1
  113. data/lib/zucker/spec/egonil_spec.rb +1 -1
  114. data/lib/zucker/spec/enumerable_spec.rb +1 -1
  115. data/lib/zucker/spec/hash2proc_spec.rb +1 -1
  116. data/lib/zucker/spec/hash_spec.rb +10 -3
  117. data/lib/zucker/spec/info_spec.rb +8 -0
  118. data/lib/zucker/spec/iterate_spec.rb +1 -1
  119. data/lib/zucker/spec/ivars_spec.rb +1 -1
  120. data/lib/zucker/spec/kernel_spec.rb +1 -7
  121. data/lib/zucker/spec/mcopy_spec.rb +1 -1
  122. data/lib/zucker/spec/mm_spec.rb +4 -2
  123. data/lib/zucker/spec/regexp2proc_spec.rb +1 -1
  124. data/lib/zucker/spec/sandbox_spec.rb +22 -3
  125. data/lib/zucker/spec/spec_helper.rb +18 -0
  126. data/lib/zucker/spec/square_brackets_for_spec.rb +1 -1
  127. data/lib/zucker/spec/string_spec.rb +7 -7
  128. data/lib/zucker/spec/unary_spec.rb +1 -1
  129. data/lib/zucker/spec/union_spec.rb +8 -6
  130. metadata +207 -131
  131. data/lib/zucker/doc/meta.yaml +0 -4
@@ -0,0 +1,8 @@
1
+ require 'zucker/binding'
2
+
3
+ describe 'Binding#inspect' do
4
+ it 'should output the current environment' do
5
+ pending '#TODO: write spec'
6
+ end
7
+ end
8
+
@@ -0,0 +1,20 @@
1
+ require 'zucker/blank'
2
+
3
+ describe 'Object#blank?' do
4
+ it 'should be blank for blank values' do
5
+ blank_values = [ nil, false, '', ' ', " \n\t \r ", [], {}, // ]
6
+
7
+ blank_values.each{ |blank|
8
+ blank.blank?.should == true
9
+ }
10
+ end
11
+
12
+ it 'should not be blank for non blank values' do
13
+ present_values = [ Object.new, true, 0, 1, 'a', [nil], { nil => nil } ]
14
+
15
+ present_values.each{ |present|
16
+ present.blank?.should == false
17
+ }
18
+ end
19
+ end
20
+
@@ -0,0 +1,9 @@
1
+ require 'zucker/class2proc'
2
+ require 'set'
3
+
4
+ describe 'Class#to_proc' do
5
+ it 'should create new instances of the class' do
6
+ [ [1,2],[3,5,6,7,3] ].map(&Set).should == [ Set[1,2], Set[5,6,7,3] ]
7
+ end
8
+ end
9
+
@@ -0,0 +1,30 @@
1
+ require 'zucker/egonil'
2
+
3
+ describe 'egonil' do
4
+ it 'should not raise nil exceptions in the block' do
5
+ proc do
6
+ egonil{ nil.some_methods.that[:do].not.exist }
7
+ end.should_not raise_exception
8
+ end
9
+
10
+ it 'should return the nil_value if given' do
11
+ egonil(9){ nil.some_methods.that[:do].not.exist }.should == 9
12
+ end
13
+
14
+ it 'should restore default behaviour after the block' do
15
+ proc do
16
+ egonil{ nil.some_methods.that[:do].not.exist }
17
+ end.should_not raise_exception
18
+
19
+ proc do
20
+ nil.a_method
21
+ end.should raise_exception NoMethodError
22
+ end
23
+
24
+ it 'raise NoMethodError for non-nil objects' do
25
+ proc do
26
+ egonil{ 5.a_method }
27
+ end.should raise_exception NoMethodError
28
+ end
29
+ end
30
+
@@ -0,0 +1,8 @@
1
+ require 'zucker/enumerable'
2
+
3
+ describe 'Enumerable#mash' do
4
+ it 'should "map" a hash' do
5
+ [1,2,3].mash{|e| [e, e.to_s] }.should == {1=>'1',2=>'2',3=>'3',}
6
+ end
7
+ end
8
+
@@ -0,0 +1,12 @@
1
+ require 'zucker/hash2proc'
2
+
3
+ describe 'Hash#to_proc' do
4
+ it 'should run the proc given in the value for a key in the hash' do
5
+ [1,2,3,4].map(&{
6
+ 4 => :to_s,
7
+ # 3 => [:to_s, 2] # "11" => if array2proc is used
8
+ 2 => lambda {|e| e + 1000}
9
+ }).should == [1, 1002, 3, "4"]
10
+ end
11
+ end
12
+
@@ -0,0 +1,17 @@
1
+ require 'zucker/hash'
2
+
3
+ describe 'Hash.zip' do
4
+ it 'should zip together both given enumerables and take them as key=>values for a new hash' do
5
+ Hash.zip( [1,2,3], [4,5,6] ).should == { 1=>4, 2=>5, 3=>6 }
6
+ end
7
+ end
8
+
9
+ describe 'Hash#<<' do
10
+ it 'should append new elements to the hash' do
11
+ a = { 1=>4, 2=>5, 3=>6 }
12
+ a << { 4=>7 }
13
+ a << [5, 8]
14
+ a.should == { 1=>4, 2=>5, 3=>6, 4=>7, 5=>8 }
15
+ end
16
+ end
17
+
@@ -0,0 +1,8 @@
1
+ require 'zucker/info'
2
+
3
+ describe 'Info' do
4
+ it 'should define accessors for global variables, constants and some special methods/keywords' do
5
+ # see sourcefile for the list
6
+ end
7
+ end
8
+
@@ -0,0 +1,54 @@
1
+ require 'zucker/iterate'
2
+
3
+ describe 'Object#iterate' do
4
+ let :a do [1, 2, 3] end
5
+ let :b do %w|a b c d| end
6
+ let :res do Hash.new {[]} end
7
+
8
+ it 'should behave like Enumerable#each for a single argument' do
9
+ iterate a do |ele|
10
+ res[:iter] << ele
11
+ end
12
+
13
+ a.each do |ele|
14
+ res[:each] << ele
15
+ end
16
+
17
+ res[:iter].should == res[:each]
18
+ end
19
+
20
+ it 'should pass the right params to the block' do
21
+ res = Hash.new {[]} # TODO: why?
22
+ res[:iter_a_b] = [] # ....
23
+ res[:iter_b_a] = [] # ....
24
+
25
+
26
+ iterate a, b do |e,f|
27
+ res[:iter_a_b] << [e, f]
28
+ # p res[:iter_a_b], e, f
29
+ end
30
+
31
+ res[:iter_a_b].should == [
32
+ [1, 'a'],
33
+ [2, 'b'],
34
+ [3, 'c'],
35
+ [nil, 'd'],
36
+ ]
37
+
38
+ iterate b, a do |e,f|
39
+ res[:iter_b_a] << [e, f]
40
+ end
41
+
42
+ res[:iter_b_a].should == [
43
+ ['a', 1],
44
+ ['b', 2],
45
+ ['c', 3],
46
+ ['d', nil],
47
+ ]
48
+
49
+ end
50
+
51
+ it 'should return enumerators if no block is applied' do
52
+ end
53
+ end
54
+
@@ -0,0 +1,20 @@
1
+ require 'zucker/ivars'
2
+
3
+ describe 'instance_variables_from' do
4
+ it 'should tansform the given parameter to instance variables' do
5
+ def a_method(a = 1, b = 2)
6
+ instance_variables_from binding # assigns @a and @b
7
+
8
+ params = {:c => 3, :d => 4}
9
+ ivars params # # assigns @c and @d
10
+ end
11
+
12
+ a_method
13
+ @a.should == 1
14
+ @b.should == 2
15
+ @c.should == 3
16
+ @d.should == 4
17
+
18
+ end
19
+ end
20
+
@@ -0,0 +1,28 @@
1
+ require 'zucker/kernel'
2
+
3
+ describe 'activate_warnings!' do
4
+ it 'should set $VERBOSE to true' do
5
+ activate_warnings!
6
+ $VERBOSE.should == true
7
+ end
8
+ end
9
+
10
+ describe 'deactivate_warnings!' do
11
+ it 'should set $VERBOSE to false' do
12
+ deactivate_warnings!
13
+ $VERBOSE.should == false
14
+ end
15
+ end
16
+
17
+ describe 'library?' do
18
+ it 'should return false if the file is invoked directly' do
19
+ library?.should == ( __FILE__ != $PROGRAM_NAME )
20
+ end
21
+ end
22
+
23
+ describe 'ignore_sigint!' do
24
+ it 'should catch ctrl+c signals' do
25
+ # ...
26
+ end
27
+ end
28
+
@@ -0,0 +1,13 @@
1
+ require 'zucker/mcopy'
2
+
3
+ describe 'Object#mcopy' do
4
+ it 'create a (deep) copy via marshalling' do
5
+ a = %w[hello world]
6
+ b = a.mcopy
7
+ b.should == a
8
+
9
+ b[0][1,1] = ''
10
+ b.should_not == a
11
+ end
12
+ end
13
+
@@ -0,0 +1,8 @@
1
+ require 'zucker/mm'
2
+
3
+ describe 'Object#method_list' do
4
+ it 'should display an ordered method list' do
5
+ pending '#TODO: write spec'
6
+ end
7
+ end
8
+
@@ -0,0 +1,9 @@
1
+ require 'zucker/regexp2proc'
2
+
3
+ describe 'Regexp#to_proc' do
4
+ it 'should match the regex' do
5
+ %w|just another string array|.map( &/[jy]/).should == ["j", nil, nil, "y"]
6
+ %w|just another string array|.select( &/[jy]/).should == ["just", "array"]
7
+ end
8
+ end
9
+
@@ -0,0 +1,26 @@
1
+ require 'zucker/sandbox'
2
+
3
+ describe 'sandbox' do
4
+ it 'should throw a SecurityError if bad commands are issued' do
5
+ proc do
6
+ sandbox do
7
+ `ls`
8
+ end
9
+ end.should raise_exception SecurityError
10
+ end
11
+
12
+ it 'should not throw an exception for errors, if the given parameter is not nil' do
13
+ proc do
14
+ sandbox( true ) do
15
+ `ls`
16
+ end
17
+ end.should_not raise_exception
18
+ end
19
+
20
+ it 'should run the proc passed as parameter for errors, if it is given' do
21
+ sandbox( lambda{|e| e.class } ) do
22
+ `ls`
23
+ end.should == SecurityError
24
+ end
25
+ end
26
+
@@ -0,0 +1,18 @@
1
+ require 'stringio'
2
+
3
+ def capture_stdout
4
+ capture = StringIO.new
5
+ restore, $stdout = $stdout, capture
6
+ yield
7
+ $stdout = restore
8
+ capture.string
9
+ end
10
+
11
+ def capture_stderr
12
+ capture = StringIO.new
13
+ restore, $stderr = $stderr, capture
14
+ yield
15
+ $stderr = restore
16
+ capture.string
17
+ end
18
+
@@ -0,0 +1,59 @@
1
+ require 'zucker/square_brackets_for'
2
+
3
+ describe 'square_brackets_for' do
4
+
5
+ before do
6
+ class Klass
7
+ def initialize
8
+ @var = {
9
+ :a_key => 1,
10
+ :another_one => 2,
11
+ }
12
+ end
13
+
14
+ @eigenvar = {
15
+ :a_key => 99
16
+ }
17
+ end
18
+ end
19
+
20
+ it 'should define a [] getter (not a setter) for an instance var, if the second parameter is false' do
21
+
22
+ class Klass
23
+ square_brackets_for :var, nil
24
+ end
25
+
26
+ a = Klass.new
27
+ a[:a_key].should == 1
28
+
29
+ proc do
30
+ a[:this_is] = 'not possible'
31
+ end.should raise_exception NoMethodError
32
+ end
33
+
34
+ it 'should define [] and []= for accessing an instance variable' do
35
+
36
+ class Klass
37
+ square_brackets_for :var
38
+ end
39
+
40
+ a = Klass.new
41
+ a[:a_key].should == 1
42
+
43
+ a[:this_is] = 'useful'
44
+ a[:this_is].should == 'useful'
45
+ end
46
+
47
+ it 'should also work for class-instance variables' do
48
+
49
+ class Klass
50
+ class << Klass
51
+ square_brackets_for :eigenvar
52
+ end
53
+ end
54
+
55
+ Klass[:a_key].should == 99
56
+ end
57
+
58
+ end
59
+
@@ -0,0 +1,29 @@
1
+ require 'zucker/string'
2
+
3
+ describe 'String#^' do
4
+ it 'should give C-like substring access to strings' do
5
+ string = 'Theoretische Informatik ist voll geil!'
6
+
7
+ (string^0).should == 'Theoretische Informatik ist voll geil!'
8
+ (string^1).should == 'heoretische Informatik ist voll geil!'
9
+ (string^13).should == 'Informatik ist voll geil!'
10
+ (string^-1).should == 'Theoretische Informatik ist voll geil'
11
+ (string^38).should == ''
12
+ (string^99).should == nil
13
+ end
14
+ end
15
+
16
+ describe 'String#lchomp' do
17
+ it 'should chomp on the left side' do
18
+ string = 'Theoretische Informatik ist voll geil!'
19
+ string.lchomp('T').should == 'heoretische Informatik ist voll geil!'
20
+ end
21
+ end
22
+
23
+ describe 'String#ords' do
24
+ it 'should unpack characters' do
25
+ string = 'Theoretische Informatik ist voll geil!'
26
+ string.ords.should == [84, 104, 101, 111, 114, 101, 116, 105, 115, 99, 104, 101, 32, 73, 110, 102, 111, 114, 109, 97, 116, 105, 107, 32, 105, 115, 116, 32, 118, 111, 108, 108, 32, 103, 101, 105, 108, 33]
27
+ end
28
+ end
29
+
@@ -0,0 +1,26 @@
1
+ require 'zucker/unary'
2
+
3
+ describe Symbol, '#+@' do
4
+ it 'should convert to_s' do
5
+ +(:matz) == 'matz' # () 1.8 bug
6
+ end
7
+ end
8
+
9
+ describe Symbol, '#-@' do
10
+ it 'should do nothing' do
11
+ -:matz == :matz
12
+ end
13
+ end
14
+
15
+ describe String, '#+@' do
16
+ it 'should do nothing' do
17
+ +'matz' == 'matz'
18
+ end
19
+ end
20
+
21
+ describe String, '#-@' do
22
+ it 'should convert to_sym' do
23
+ -'matz' == :matz
24
+ end
25
+ end
26
+
@@ -0,0 +1,15 @@
1
+ require 'zucker/union'
2
+
3
+ shared_examples_for "Regexp.union operator" do
4
+ it "should create an Regexp.union of both operands" do
5
+ end
6
+ end
7
+
8
+ describe 'Regexp#|' do
9
+ it_should_behave_like 'Regexp.union operator'
10
+ end
11
+
12
+ describe 'String#|' do
13
+ it_should_behave_like 'Regexp.union operator'
14
+ end
15
+