mirror of
https://github.com/jimeh/redistat.git
synced 2026-02-19 05:16:39 +00:00
extend ::Hash with #set_or_incr and #merge_and_incr methods
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
5
lib/redistat/core_ext.rb
Normal file
5
lib/redistat/core_ext.rb
Normal file
@@ -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'
|
||||
21
lib/redistat/core_ext/hash.rb
Normal file
21
lib/redistat/core_ext/hash.rb
Normal file
@@ -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
|
||||
@@ -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
|
||||
end
|
||||
|
||||
20
spec/core_ext/hash_spec.rb
Normal file
20
spec/core_ext/hash_spec.rb
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user