Redistat::Model is working

This commit is contained in:
2010-11-22 12:10:47 +00:00
parent aaf98a8a62
commit 9c85041706
3 changed files with 116 additions and 4 deletions

View File

@@ -1,13 +1,50 @@
module Redistat
class Model
module Model
def self.create(*args)
Event.new(self.name, self.options, *args)
def self.included(base)
base.extend(self)
end
def self.options
def store(label, stats = {}, date = nil, meta = {}, opts = {})
Event.new(name, label, date, stats, options.merge(opts), meta).save
end
alias :event :store
def fetch(label, from, till, opts = {})
Finder.find({
:scope => name,
:label => label,
:from => from,
:till => till
}.merge(options.merge(opts)))
end
alias :find :fetch
def depth(depth = nil)
if !depth.nil?
options[:depth] = depth
else
options[:depth] || nil
end
end
def store_event(boolean = nil)
if !boolean.nil?
options[:store_event] = boolean
else
options[:store_event] || nil
end
end
def options
@options ||= {}
end
private
def name
@name ||= self.to_s
end
end
end

15
spec/model_helper.rb Normal file
View File

@@ -0,0 +1,15 @@
require "redistat"
class ModelHelper
include Redistat::Model
end
class ModelHelper2
include Redistat::Model
depth :day
store_event true
end

60
spec/model_spec.rb Normal file
View File

@@ -0,0 +1,60 @@
require "spec_helper"
require "model_helper"
describe Redistat::Model do
include Redistat::Database
before(:each) do
db.flushdb
end
it "should should name itself correctly" do
ModelHelper.send(:name).should == "ModelHelper"
ModelHelper2.send(:name).should == "ModelHelper2"
end
it "should listen to model-defined options" do
ModelHelper2.depth.should == :day
ModelHelper2.store_event.should == true
ModelHelper.depth.should == nil
ModelHelper.store_event.should == nil
ModelHelper.depth(:hour)
ModelHelper.depth.should == :hour
ModelHelper.store_event(true)
ModelHelper.store_event.should == true
ModelHelper.options[:depth] = nil
ModelHelper.options[:store_event] = nil
ModelHelper.depth.should == nil
ModelHelper.store_event.should == nil
end
it "should store and fetch stats" do
ModelHelper.store("sheep.black", {:count => 6, :weight => 461}, 4.hours.ago)
ModelHelper.store("sheep.black", {:count => 2, :weight => 156})
stats = ModelHelper.fetch("sheep.black", 2.hours.ago, 1.hour.from_now)
stats.total["count"].should == 2
stats.total["weight"].should == 156
stats.first.should == stats.total
stats = ModelHelper.fetch("sheep.black", 5.hours.ago, 1.hour.from_now)
stats.total["count"].should == 8
stats.total["weight"].should == 617
stats.first.should == stats.total
ModelHelper.store("sheep.white", {:count => 5, :weight => 393}, 4.hours.ago)
ModelHelper.store("sheep.white", {:count => 4, :weight => 316})
stats = ModelHelper.fetch("sheep.white", 2.hours.ago, 1.hour.from_now)
stats.total["count"].should == 4
stats.total["weight"].should == 316
stats.first.should == stats.total
stats = ModelHelper.fetch("sheep.white", 5.hours.ago, 1.hour.from_now)
stats.total["count"].should == 9
stats.total["weight"].should == 709
stats.first.should == stats.total
end
end