mirror of
https://github.com/jimeh/redistat.git
synced 2026-02-19 13:26:39 +00:00
created Options module to help organize the multiple options passed from one object to another
This commit is contained in:
@@ -9,9 +9,10 @@ require 'time_ext'
|
|||||||
require 'json'
|
require 'json'
|
||||||
require 'digest/sha1'
|
require 'digest/sha1'
|
||||||
|
|
||||||
require 'redistat/collection'
|
require 'redistat/options'
|
||||||
require 'redistat/connection'
|
require 'redistat/connection'
|
||||||
require 'redistat/database'
|
require 'redistat/database'
|
||||||
|
require 'redistat/collection'
|
||||||
require 'redistat/date'
|
require 'redistat/date'
|
||||||
require 'redistat/date_helper'
|
require 'redistat/date_helper'
|
||||||
require 'redistat/event'
|
require 'redistat/event'
|
||||||
|
|||||||
43
lib/redistat/options.rb
Normal file
43
lib/redistat/options.rb
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
module Redistat
|
||||||
|
module Options
|
||||||
|
|
||||||
|
def self.included(base)
|
||||||
|
base.extend(ClassMethods)
|
||||||
|
end
|
||||||
|
|
||||||
|
class InvalidDefaultOptions < ArgumentError; end
|
||||||
|
|
||||||
|
module ClassMethods
|
||||||
|
def option_accessor(*opts)
|
||||||
|
opts.each do |option|
|
||||||
|
define_method(option) do |*args|
|
||||||
|
if !args.first.nil?
|
||||||
|
options[option.to_sym] = args.first
|
||||||
|
else
|
||||||
|
options[option.to_sym] || nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def parse_options(opts)
|
||||||
|
opts ||= {}
|
||||||
|
@raw_options = opts
|
||||||
|
@options = default_options.merge(opts.reject { |k,v| v.nil? })
|
||||||
|
end
|
||||||
|
|
||||||
|
def default_options
|
||||||
|
{}
|
||||||
|
end
|
||||||
|
|
||||||
|
def options
|
||||||
|
@options ||= {}
|
||||||
|
end
|
||||||
|
|
||||||
|
def raw_options
|
||||||
|
@raw_options ||= {}
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
36
spec/options_spec.rb
Normal file
36
spec/options_spec.rb
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
require "spec_helper"
|
||||||
|
|
||||||
|
describe Redistat::Options do
|
||||||
|
|
||||||
|
before(:each) do
|
||||||
|
@helper = OptionsHelper.new
|
||||||
|
@helper.parse_options(:wtf => 'dude', :foo => 'booze')
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should #parse_options" do
|
||||||
|
@helper.options[:hello].should == 'world'
|
||||||
|
@helper.options[:foo].should == 'booze'
|
||||||
|
@helper.options[:wtf].should == 'dude'
|
||||||
|
@helper.raw_options.should_not have_key(:hello)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should create option_accessors" do
|
||||||
|
@helper.hello.should == 'world'
|
||||||
|
@helper.hello('woooo')
|
||||||
|
@helper.hello.should == 'woooo'
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
class OptionsHelper
|
||||||
|
include Redistat::Options
|
||||||
|
|
||||||
|
option_accessor :hello
|
||||||
|
|
||||||
|
def default_options
|
||||||
|
{ :hello => 'world',
|
||||||
|
:foo => 'bar' }
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user