summaryrefslogtreecommitdiff
path: root/ruby_2_2/golf_prelude.rb
diff options
context:
space:
mode:
Diffstat (limited to 'ruby_2_2/golf_prelude.rb')
-rw-r--r--ruby_2_2/golf_prelude.rb123
1 files changed, 0 insertions, 123 deletions
diff --git a/ruby_2_2/golf_prelude.rb b/ruby_2_2/golf_prelude.rb
deleted file mode 100644
index 8034601287..0000000000
--- a/ruby_2_2/golf_prelude.rb
+++ /dev/null
@@ -1,123 +0,0 @@
-class Object
- @@golf_hash = {}
-
- def method_missing m, *a, &b
- t = @@golf_hash[ [m, self.class] ] ||= matching_methods(m)[0]
- if t && b
- __send__(t, *a) {|*args|
- b.binding.eval("proc{|golf_matchdata| $~ = golf_matchdata }").call($~) if $~
- b.call(*args)
- }
- else
- t ? __send__(t, *a, &b) : super
- end
- end
-
- def matching_methods(s = '', m = callable_methods)
- r = /^#{s.to_s.gsub(/./){"(.*?)" + Regexp.escape($&)}}/
- m.grep(r).sort_by do |i|
- i.to_s.match(r).captures.map(&:size) << i
- end
- end
-
- def self.const_missing c
- t = @@golf_hash[ [c,self.class] ] ||= matching_methods(c, constants)[0]
- t and return const_get(t)
- raise NameError, "uninitialized constant #{c}", caller(1)
- end
-
- def shortest_abbreviation(s = '', m = callable_methods)
- s = s.to_s
- our_case = (?A..?Z) === s[0]
- if m.index(s.to_sym)
- 1.upto(s.size){|z| s.scan(/./).combination(z).map{|trial|
- next unless ((?A..?Z) === trial[0]) == our_case
- trial *= ''
- return trial if matching_methods(trial, m)[0].to_s == s
- }}
- else
- nil
- end
- end
-
- def callable_methods
- self.class == Object ? methods + private_methods : methods
- end
-
- private
-
- def h(a = 'H', b = 'w', c = '!')
- puts "#{a}ello, #{b}orld#{c}"
- end
-
- alias say puts
-
- def do_while
- 0 while yield
- end
-
- def do_until
- 0 until yield
- end
-end
-
-class Array
- alias old_to_s to_s
- alias to_s join
-end
-
-class FalseClass
- alias old_to_s to_s
- def to_s
- ""
- end
-end
-
-class Integer
- alias each times
- include Enumerable
-end
-
-class String
- alias / split
-
- def to_a
- split('')
- end
-
- (Array.instance_methods - instance_methods - [:to_ary, :transpose, :flatten, :flatten!, :compact, :compact!, :assoc, :rassoc]).each{|meth|
- eval "
- def #{meth}(*args, &block)
- a = to_a
- result = a.#{meth}(*args, &block)
- replace(a.join)
- if result.class == Array
- Integer === result[0] ? result.pack('c*') : result.join
- elsif result.class == Enumerator
- result.map(&:join).to_enum
- else
- result
- end
- end"
- }
-end
-
-class Enumerator
- alias old_to_s to_s
- (Array.instance_methods - instance_methods - [:replace] + [:to_s]).each{|meth|
- eval "
- def #{meth}(*args, &block)
- to_a.#{meth}(*args, &block)
- end"
- }
- alias old_inspect inspect
- alias inspect old_to_s
-end
-
-class Symbol
- def call(*args, &block)
- proc do |recv|
- recv.__send__(self, *args, &block)
- end
- end
-end