diff --git a/lib/redistat/label.rb b/lib/redistat/label.rb index a6ce099..f3385ba 100644 --- a/lib/redistat/label.rb +++ b/lib/redistat/label.rb @@ -11,6 +11,11 @@ module Redistat self.new(name, opts).save end + def self.join(*args) + args = args.map {|i| i.to_s} + self.new(args.reject {|i| i.blank? }.join(GROUP_SEPARATOR)) + end + def initialize(str, opts = {}) parse_options(opts) @raw = str.to_s diff --git a/spec/label_spec.rb b/spec/label_spec.rb index 6e34004..7ef6f2d 100644 --- a/spec/label_spec.rb +++ b/spec/label_spec.rb @@ -25,6 +25,19 @@ describe Redistat::Label do db.hget(Redistat::KEY_LABELS, label.hash).should == name end + it "should join labels" do + include Redistat + label = Label.join('email', 'message', 'public') + label.should be_a(Label) + label.to_s.should == 'email/message/public' + label = Label.join(Label.new('email'), Label.new('message'), Label.new('public')) + label.should be_a(Label) + label.to_s.should == 'email/message/public' + label = Label.join('email', '', 'message', nil, 'public') + label.should be_a(Label) + label.to_s.should == 'email/message/public' + end + describe "Grouping" do before(:each) do @name = "message/public/offensive"