From 4e365156d130e94a9c7937f498b438183efca954 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 17 Oct 2017 11:18:54 +0900 Subject: Add `Comparable#clamp`; CRuby2.4 --- mrbgems/mruby-compar-ext/mrbgem.rake | 5 +++++ mrbgems/mruby-compar-ext/mrblib/compar.rb | 31 +++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 mrbgems/mruby-compar-ext/mrbgem.rake create mode 100644 mrbgems/mruby-compar-ext/mrblib/compar.rb (limited to 'mrbgems/mruby-compar-ext') diff --git a/mrbgems/mruby-compar-ext/mrbgem.rake b/mrbgems/mruby-compar-ext/mrbgem.rake new file mode 100644 index 000000000..dcf584339 --- /dev/null +++ b/mrbgems/mruby-compar-ext/mrbgem.rake @@ -0,0 +1,5 @@ +MRuby::Gem::Specification.new('mruby-compar-ext') do |spec| + spec.license = 'MIT' + spec.author = 'mruby developers' + spec.summary = 'Enumerable module extension' +end diff --git a/mrbgems/mruby-compar-ext/mrblib/compar.rb b/mrbgems/mruby-compar-ext/mrblib/compar.rb new file mode 100644 index 000000000..d66f816ef --- /dev/null +++ b/mrbgems/mruby-compar-ext/mrblib/compar.rb @@ -0,0 +1,31 @@ +module Comparable + ## + # Returns min if obj <=> min is less + # than zero, max if obj <=> max is + # greater than zero and obj otherwise. + # + # 12.clamp(0, 100) #=> 12 + # 523.clamp(0, 100) #=> 100 + # -3.123.clamp(0, 100) #=> 0 + # + # 'd'.clamp('a', 'f') #=> 'd' + # 'z'.clamp('a', 'f') #=> 'f' + # + def clamp(min, max) + if (min <=> max) > 0 + raise ArgumentError, "min argument must be smaller than max argument" + end + c = self <=> min + if c == 0 + return self + elsif c < 0 + return min + end + c = self <=> max + if c > 0 + return max + else + return self + end + end +end -- cgit v1.2.3