mirror of
https://github.com/jimeh/redistat.git
synced 2026-02-19 13:26:39 +00:00
Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a72ad31c51 | |||
| 008228660e | |||
| b8ddcdf71a | |||
| 94fcd5b4ae | |||
| e2a551d01c | |||
| 43fc8bc2dd | |||
| dcca3556ea | |||
| d5f79b82a9 | |||
| 0938781cd1 | |||
| 82119fcf69 | |||
| 746d0fea8f |
@@ -1,14 +1,20 @@
|
|||||||
|
|
||||||
require 'rubygems'
|
require 'rubygems'
|
||||||
require 'active_support'
|
|
||||||
require 'active_support/hash_with_indifferent_access' if !{}.respond_to?(:with_indifferent_access) # Active Support 2.x and 3.x
|
|
||||||
require 'redis'
|
|
||||||
require 'date'
|
require 'date'
|
||||||
require 'time'
|
require 'time'
|
||||||
require 'time_ext'
|
|
||||||
require 'json'
|
|
||||||
require 'digest/sha1'
|
require 'digest/sha1'
|
||||||
|
|
||||||
|
# Active Support 2.x or 3.x
|
||||||
|
require 'active_support'
|
||||||
|
if !{}.respond_to?(:with_indifferent_access)
|
||||||
|
require 'active_support/core_ext/hash/indifferent_access'
|
||||||
|
require 'active_support/core_ext/hash/reverse_merge'
|
||||||
|
end
|
||||||
|
|
||||||
|
require 'time_ext'
|
||||||
|
require 'redis'
|
||||||
|
require 'json'
|
||||||
|
|
||||||
require 'redistat/options'
|
require 'redistat/options'
|
||||||
require 'redistat/connection'
|
require 'redistat/connection'
|
||||||
require 'redistat/database'
|
require 'redistat/database'
|
||||||
@@ -17,7 +23,6 @@ require 'redistat/date'
|
|||||||
require 'redistat/date_helper'
|
require 'redistat/date_helper'
|
||||||
require 'redistat/event'
|
require 'redistat/event'
|
||||||
require 'redistat/finder'
|
require 'redistat/finder'
|
||||||
require 'redistat/finder/date_set'
|
|
||||||
require 'redistat/key'
|
require 'redistat/key'
|
||||||
require 'redistat/label'
|
require 'redistat/label'
|
||||||
require 'redistat/model'
|
require 'redistat/model'
|
||||||
@@ -26,10 +31,7 @@ require 'redistat/scope'
|
|||||||
require 'redistat/summary'
|
require 'redistat/summary'
|
||||||
require 'redistat/version'
|
require 'redistat/version'
|
||||||
|
|
||||||
require 'redistat/core_ext/date'
|
require 'redistat/core_ext'
|
||||||
require 'redistat/core_ext/time'
|
|
||||||
require 'redistat/core_ext/fixnum'
|
|
||||||
require 'redistat/core_ext/bignum'
|
|
||||||
|
|
||||||
module Redistat
|
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'
|
||||||
23
lib/redistat/core_ext/hash.rb
Normal file
23
lib/redistat/core_ext/hash.rb
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
class Hash
|
||||||
|
|
||||||
|
def merge_and_incr(hash)
|
||||||
|
self.clone.merge_and_incr!(hash)
|
||||||
|
end
|
||||||
|
|
||||||
|
def merge_and_incr!(hash)
|
||||||
|
raise ArgumentError unless hash.is_a?(Hash)
|
||||||
|
hash.each do |key, value|
|
||||||
|
self[key] = value unless self.set_or_incr(key, value)
|
||||||
|
end
|
||||||
|
self
|
||||||
|
end
|
||||||
|
|
||||||
|
def set_or_incr(key, value)
|
||||||
|
return false unless value.is_a?(Numeric)
|
||||||
|
self[key] = 0 unless self.has_key?(key)
|
||||||
|
return false unless self[key].is_a?(Numeric)
|
||||||
|
self[key] += value
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
require 'redistat/finder/date_set'
|
||||||
|
|
||||||
module Redistat
|
module Redistat
|
||||||
class Finder
|
class Finder
|
||||||
include Database
|
include Database
|
||||||
|
|||||||
@@ -5,8 +5,6 @@ module Redistat
|
|||||||
base.extend(ClassMethods)
|
base.extend(ClassMethods)
|
||||||
end
|
end
|
||||||
|
|
||||||
class InvalidDefaultOptions < ArgumentError; end
|
|
||||||
|
|
||||||
module ClassMethods
|
module ClassMethods
|
||||||
def option_accessor(*opts)
|
def option_accessor(*opts)
|
||||||
opts.each do |option|
|
opts.each do |option|
|
||||||
|
|||||||
@@ -12,12 +12,5 @@ module Redistat
|
|||||||
@till = options[:till] ||= nil
|
@till = options[:till] ||= nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
def set_or_incr(key, value)
|
|
||||||
self[key] = 0 if !self.has_key?(key)
|
|
||||||
self[key] += value
|
|
||||||
self
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -18,10 +18,10 @@ module Redistat
|
|||||||
|
|
||||||
if options[:enable_grouping]
|
if options[:enable_grouping]
|
||||||
stats = inject_group_summaries(stats)
|
stats = inject_group_summaries(stats)
|
||||||
key.groups.each { |k|
|
key.groups.each do |k|
|
||||||
update_key(k, stats, depth_limit, options[:connection_ref])
|
update_key(k, stats, depth_limit, options[:connection_ref])
|
||||||
k.update_index if options[:label_indexing]
|
k.update_index if options[:label_indexing]
|
||||||
}
|
end
|
||||||
else
|
else
|
||||||
update_key(key, stats, depth_limit, options[:connection_ref])
|
update_key(key, stats, depth_limit, options[:connection_ref])
|
||||||
end
|
end
|
||||||
@@ -43,6 +43,7 @@ module Redistat
|
|||||||
end
|
end
|
||||||
|
|
||||||
def self.inject_group_summaries!(stats)
|
def self.inject_group_summaries!(stats)
|
||||||
|
summaries = {}
|
||||||
stats.each do |key, value|
|
stats.each do |key, value|
|
||||||
parts = key.to_s.split(GROUP_SEPARATOR)
|
parts = key.to_s.split(GROUP_SEPARATOR)
|
||||||
parts.pop
|
parts.pop
|
||||||
@@ -51,11 +52,11 @@ module Redistat
|
|||||||
parts.each do |part|
|
parts.each do |part|
|
||||||
sum_parts << part
|
sum_parts << part
|
||||||
sum_key = sum_parts.join(GROUP_SEPARATOR)
|
sum_key = sum_parts.join(GROUP_SEPARATOR)
|
||||||
(stats.has_key?(sum_key)) ? stats[sum_key] += value : stats[sum_key] = value
|
(summaries.has_key?(sum_key)) ? summaries[sum_key] += value : summaries[sum_key] = value
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
stats
|
stats.merge_and_incr!(summaries)
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.inject_group_summaries(stats)
|
def self.inject_group_summaries(stats)
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
module Redistat
|
module Redistat
|
||||||
VERSION = "0.2.1"
|
VERSION = "0.2.2"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -27,5 +27,4 @@ Gem::Specification.new do |s|
|
|||||||
s.add_development_dependency 'rspec', '>= 2.1.0'
|
s.add_development_dependency 'rspec', '>= 2.1.0'
|
||||||
s.add_development_dependency 'rcov', '>= 0.9.9'
|
s.add_development_dependency 'rcov', '>= 0.9.9'
|
||||||
s.add_development_dependency 'yard', '>= 0.6.3'
|
s.add_development_dependency 'yard', '>= 0.6.3'
|
||||||
s.add_development_dependency 'ruby-debug'
|
|
||||||
end
|
end
|
||||||
|
|||||||
30
spec/core_ext/hash_spec.rb
Normal file
30
spec/core_ext/hash_spec.rb
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
require "spec_helper"
|
||||||
|
|
||||||
|
describe Hash do
|
||||||
|
|
||||||
|
it "should #set_or_incr values" do
|
||||||
|
hash = {:count => 1}
|
||||||
|
hash.set_or_incr(:sum, 3).should be_true
|
||||||
|
hash.should == {:count => 1, :sum => 3}
|
||||||
|
hash.set_or_incr(:count, 4).should be_true
|
||||||
|
hash.should == {:count => 5, :sum => 3}
|
||||||
|
hash.set_or_incr(:count, 'test').should be_false
|
||||||
|
hash.set_or_incr(:view, 'test').should be_false
|
||||||
|
hash.should == {:count => 5, :sum => 3}
|
||||||
|
hash[:view] = 'test'
|
||||||
|
hash.set_or_incr(:view, 3).should be_false
|
||||||
|
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.clone.merge_and_incr(new_hash).should == { :count => 4, :city => 'slum', :views => 2,
|
||||||
|
:sum => 3, :name => 'john' }
|
||||||
|
|
||||||
|
new_hash = { :count => 'six', :city => 'slum', :views => 2, :time => 'late' }
|
||||||
|
hash.clone.merge_and_incr(new_hash).should == { :count => 'six', :city => 'slum', :views => 2,
|
||||||
|
:sum => 3, :name => 'john', :time => 'late' }
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
@@ -44,8 +44,11 @@ describe Redistat::Finder do
|
|||||||
finder = Redistat::Finder.depth(:hour)
|
finder = Redistat::Finder.depth(:hour)
|
||||||
finder.options[:depth].should == :hour
|
finder.options[:depth].should == :hour
|
||||||
|
|
||||||
finder = Redistat::Finder.interval(:hour)
|
finder = Redistat::Finder.interval(true)
|
||||||
finder.options[:interval].should == :hour
|
finder.options[:interval].should be_true
|
||||||
|
|
||||||
|
finder = Redistat::Finder.interval(false)
|
||||||
|
finder.options[:interval].should be_false
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user