diff --git a/lib/redistat/event.rb b/lib/redistat/event.rb index 5313b31..dedd696 100644 --- a/lib/redistat/event.rb +++ b/lib/redistat/event.rb @@ -91,7 +91,7 @@ module Redistat event = db.hgetall "#{scope}#{KEY_EVENT}#{id}" return nil if event.size == 0 self.new( event["scope"], event["label"], event["date"], JSON.parse(event["stats"]), - JSON.parse(event["meta"]), JSON.parse(event["options"]), false ) + JSON.parse(event["options"]), JSON.parse(event["meta"]), false ) end end diff --git a/lib/redistat/finder.rb b/lib/redistat/finder.rb index 08fe381..765e194 100644 --- a/lib/redistat/finder.rb +++ b/lib/redistat/finder.rb @@ -81,49 +81,56 @@ module Redistat } end - def connection_ref(ref) + def connection_ref(ref = nil) + return options[:connection_ref] if ref.nil? reset! if options[:connection_ref] != ref options[:connection_ref] = ref self end - def scope(scope) - reset! if !options[:scope].nil? && options[:scope].to_s != scope - options[:scope] = Scope.new(scope) + def scope(input = nil) + return options[:scope] if input.nil? + reset! if !options[:scope].nil? && options[:scope].to_s != input.to_s + options[:scope] = Scope.new(input) self end - def label(label) - reset! if options.has_key?(:label) && options[:label].to_s != label.to_s - options[:label] = (!label.nil?) ? Label.new(label) : nil + def label(input = nil) + return options[:label] if input.nil? + reset! if options.has_key?(:label) && options[:label].to_s != input.to_s + options[:label] = (!input.nil?) ? Label.new(input) : nil self end - def dates(from, till) - from(from).till(till) + def dates(start, finish) + from(start).till(finish) end alias :date :dates - def from(date) + def from(date = nil) + return options[:from] if date.nil? reset! if options[:from] != date options[:from] = date self end - def till(date) + def till(date = nil) + return options[:till] if date.nil? reset! if options[:till] != date options[:till] = date self end alias :until :till - def depth(unit) + def depth(unit = nil) + return options[:depth] if unit.nil? reset! if options[:depth] != unit options[:depth] = unit self end - def interval(unit) + def interval(unit = nil) + return options[:interval] if unit.nil? reset! if options[:interval] != unit options[:interval] = unit self diff --git a/lib/redistat/finder/date_set.rb b/lib/redistat/finder/date_set.rb index 0bb805b..43bf961 100644 --- a/lib/redistat/finder/date_set.rb +++ b/lib/redistat/finder/date_set.rb @@ -9,6 +9,10 @@ module Redistat end def find_date_sets(start_date, end_date, depth = nil, interval = false) + if depth.nil? && interval.is_a?(Symbol) + depth = interval + interval = true + end start_date = start_date.to_time if start_date.is_a?(::Date) end_date = end_date.to_time if end_date.is_a?(::Date) if !interval diff --git a/lib/redistat/key.rb b/lib/redistat/key.rb index 5d89572..4246e29 100644 --- a/lib/redistat/key.rb +++ b/lib/redistat/key.rb @@ -30,13 +30,14 @@ module Redistat options[:depth] end - def scope - @scope.to_s - end + # def scope + # @scope.to_s + # end def scope=(input) @scope = (input.instance_of?(Redistat::Scope)) ? input : Scope.new(input) end + attr_reader :scope def label=(input) @label = (input.instance_of?(Redistat::Label)) ? input : Label.create(input, @options) diff --git a/lib/redistat/model.rb b/lib/redistat/model.rb index e64bb87..049c784 100644 --- a/lib/redistat/model.rb +++ b/lib/redistat/model.rb @@ -13,7 +13,7 @@ module Redistat # def store(label, stats = {}, date = nil, opts = {}, meta = {}) - Event.new(name, label, date, stats, options.merge(opts), meta).save + Event.new(self.name, label, date, stats, options.merge(opts), meta).save end alias :event :store @@ -29,6 +29,10 @@ module Redistat :till => till }.merge(options.merge(opts)) ) end + def find_event(event_id) + Event.find(self.name, event_id) + end + # # options methods diff --git a/lib/redistat/version.rb b/lib/redistat/version.rb index 06e8660..906bd5e 100644 --- a/lib/redistat/version.rb +++ b/lib/redistat/version.rb @@ -1,3 +1,3 @@ module Redistat - VERSION = "0.2.2" + VERSION = "0.2.3" end diff --git a/spec/event_spec.rb b/spec/event_spec.rb index e586894..39add3b 100644 --- a/spec/event_spec.rb +++ b/spec/event_spec.rb @@ -8,8 +8,8 @@ describe Redistat::Event do @scope = "PageViews" @label = "about_us" @label_hash = Digest::SHA1.hexdigest(@label) - @stats = {:views => 1} - @meta = {:user_id => 239} + @stats = {'views' => 1} + @meta = {'user_id' => 239} @options = {:depth => :hour} @date = Time.now @event = Redistat::Event.new(@scope, @label, @date, @stats, @options, @meta) @@ -17,7 +17,7 @@ describe Redistat::Event do it "should initialize properly" do @event.id.should be_nil - @event.scope.should == @scope + @event.scope.to_s.should == @scope @event.label.to_s.should == @label @event.label_hash.should == @label_hash @event.date.to_time.to_s.should == @date.to_s @@ -63,9 +63,11 @@ describe Redistat::Event do it "should find event by id" do @event = Redistat::Event.new(@scope, @label, @date, @stats, @options.merge({:store_event => true}), @meta).save fetched = Redistat::Event.find(@scope, @event.id) - @event.scope.should == fetched.scope + @event.scope.to_s.should == fetched.scope.to_s @event.label.to_s.should == fetched.label.to_s @event.date.to_s.should == fetched.date.to_s + @event.stats.should == fetched.stats + @event.meta.should == fetched.meta end it "should store summarized statistics" do diff --git a/spec/finder/date_set_spec.rb b/spec/finder/date_set_spec.rb index 0c1585c..2439e6b 100644 --- a/spec/finder/date_set_spec.rb +++ b/spec/finder/date_set_spec.rb @@ -28,11 +28,13 @@ describe Redistat::Finder::DateSet do result = Redistat::Finder::DateSet.new.find_date_sets(t_start, t_end, :hour, true) result[0][:add].should == ["2010082818", "2010082819", "2010082820", "2010082821", "2010082822"] result[0][:rem].should == [] + result.should == Redistat::Finder::DateSet.new(t_start, t_end, nil, :hour) t_end = t_start + 4.days result = Redistat::Finder::DateSet.new.find_date_sets(t_start, t_end, :day, true) result[0][:add].should == ["20100828", "20100829", "20100830", "20100831", "20100901"] result[0][:rem].should == [] + result.should == Redistat::Finder::DateSet.new(t_start, t_end, nil, :day) end it "should find start keys properly" do diff --git a/spec/finder_spec.rb b/spec/finder_spec.rb index 14e9f5c..0af91a6 100644 --- a/spec/finder_spec.rb +++ b/spec/finder_spec.rb @@ -25,31 +25,36 @@ describe Redistat::Finder do finder.options[:label].to_s.should == options[:label] finder.options.should == options.merge(:scope => finder.options[:scope], :label => finder.options[:label]) + finder = Redistat::Finder.scope("hello") + finder.options[:scope].to_s.should == "hello" + finder.scope.to_s.should == "hello" + + finder = Redistat::Finder.label("hello") + finder.options[:label].to_s.should == "hello" + finder.label.to_s.should == "hello" + finder = Redistat::Finder.dates(@two_hours_ago, @one_hour_ago) finder.options[:from].should == @two_hours_ago finder.options[:till].should == @one_hour_ago - finder = Redistat::Finder.scope("hello") - finder.options[:scope].to_s.should == "hello" - - finder = Redistat::Finder.label("hello") - finder.options[:label].to_s.should == "hello" - finder = Redistat::Finder.from(@two_hours_ago) finder.options[:from].should == @two_hours_ago + finder.from.should == @two_hours_ago finder = Redistat::Finder.till(@one_hour_ago) finder.options[:till].should == @one_hour_ago + finder.till.should == @one_hour_ago finder = Redistat::Finder.depth(:hour) finder.options[:depth].should == :hour + finder.depth.should == :hour finder = Redistat::Finder.interval(true) finder.options[:interval].should be_true - + finder.interval.should be_true finder = Redistat::Finder.interval(false) finder.options[:interval].should be_false - + finder.interval.should be_false end it "should fetch stats properly" do diff --git a/spec/key_spec.rb b/spec/key_spec.rb index 56eb126..eac99c5 100644 --- a/spec/key_spec.rb +++ b/spec/key_spec.rb @@ -13,7 +13,7 @@ describe Redistat::Key do end it "should initialize properly" do - @key.scope.should == @scope + @key.scope.to_s.should == @scope @key.label.to_s.should == @label @key.label_hash.should == @label_hash @key.groups.map { |k| k.instance_variable_get("@label") }.should == @key.instance_variable_get("@label").groups @@ -44,10 +44,10 @@ describe Redistat::Key do it "should allow changing attributes" do # scope - @key.scope.should == @scope + @key.scope.to_s.should == @scope @scope = "VisitorCount" @key.scope = @scope - @key.scope.should == @scope + @key.scope.to_s.should == @scope # date @key.date.to_time.to_s.should == @date.to_s @date = Time.now diff --git a/spec/model_spec.rb b/spec/model_spec.rb index de585e2..6c607e6 100644 --- a/spec/model_spec.rb +++ b/spec/model_spec.rb @@ -28,6 +28,11 @@ describe Redistat::Model do finder.options[:till].should == one_hour_ago end + it "should #find_event" do + Redistat::Event.should_receive(:find).with('ModelHelper1', 1) + ModelHelper1.find_event(1) + end + it "should listen to model-defined options" do ModelHelper2.depth.should == :day ModelHelper2.store_event.should == true