diff --git a/lib/redistat.rb b/lib/redistat.rb index 00b8e75..f89bd06 100644 --- a/lib/redistat.rb +++ b/lib/redistat.rb @@ -26,10 +26,7 @@ require 'redistat/scope' require 'redistat/summary' require 'redistat/version' -require 'redistat/core_ext/date' -require 'redistat/core_ext/time' -require 'redistat/core_ext/fixnum' -require 'redistat/core_ext/bignum' +require 'redistat/core_ext' module Redistat diff --git a/lib/redistat/core_ext.rb b/lib/redistat/core_ext.rb new file mode 100644 index 0000000..f794627 --- /dev/null +++ b/lib/redistat/core_ext.rb @@ -0,0 +1,5 @@ +require 'redistat/core_ext/bignum' +require 'redistat/core_ext/date' +require 'redistat/core_ext/fixnum' +require 'redistat/core_ext/hash' +require 'redistat/core_ext/time' \ No newline at end of file diff --git a/lib/redistat/core_ext/hash.rb b/lib/redistat/core_ext/hash.rb new file mode 100644 index 0000000..0cc5390 --- /dev/null +++ b/lib/redistat/core_ext/hash.rb @@ -0,0 +1,21 @@ +class Hash + + def merge_and_incr(hash) + raise ArgumentError unless hash.is_a?(Hash) + hash.each do |key, value| + if value.is_a?(Numeric) + self.set_or_incr(key, value) + else + self[key] = value + end + end + end + + def set_or_incr(key, value) + return self unless value.is_a?(Numeric) + self[key] = 0 unless self.has_key?(key) + self[key] += value if self[key].is_a?(Numeric) + self + end + +end diff --git a/lib/redistat/result.rb b/lib/redistat/result.rb index 777221b..7a91dff 100644 --- a/lib/redistat/result.rb +++ b/lib/redistat/result.rb @@ -12,12 +12,5 @@ module Redistat @till = options[:till] ||= nil end - - def set_or_incr(key, value) - self[key] = 0 if !self.has_key?(key) - self[key] += value - self - end - end -end \ No newline at end of file +end diff --git a/spec/core_ext/hash_spec.rb b/spec/core_ext/hash_spec.rb new file mode 100644 index 0000000..fad64cc --- /dev/null +++ b/spec/core_ext/hash_spec.rb @@ -0,0 +1,20 @@ +require "spec_helper" + +describe Hash do + + it "should #set_or_incr values" do + hash = {:count => 1} + hash.set_or_incr(:sum, 3) + hash.should == {:count => 1, :sum => 3} + hash.set_or_incr(:count, 4) + hash.should == {:count => 5, :sum => 3} + end + + it "should #merge_and_incr hashes" do + hash = {:count => 1, :city => 'hell', :sum => 3, :name => 'john'} + new_hash = {:count => 3, :city => 'slum', :views => 2} + hash.merge_and_incr(new_hash) + hash.should == {:count => 4, :sum => 3, :views => 2, :city => 'slum', :name => 'john'} + end + +end