diff --git a/lib/flipper/adapter.rb b/lib/flipper/adapter.rb index 1eb8a82d8..1dbb91592 100644 --- a/lib/flipper/adapter.rb +++ b/lib/flipper/adapter.rb @@ -101,7 +101,7 @@ def read(key) # Public: Set a key to a value. def write(key, value) - perform_update(:write, key, value) + perform_update(:write, key, value.to_s) end # Public: Deletes a key. @@ -116,12 +116,12 @@ def set_members(key) # Public: Adds a value to a set. def set_add(key, value) - perform_update(:set_add, key, value) + perform_update(:set_add, key, value.to_s) end # Public: Deletes a value from a set. def set_delete(key, value) - perform_update(:set_delete, key, value) + perform_update(:set_delete, key, value.to_s) end # Public: Determines equality for an adapter instance when compared to diff --git a/lib/flipper/adapters/memory.rb b/lib/flipper/adapters/memory.rb index 0f3b133c5..848e3541e 100644 --- a/lib/flipper/adapters/memory.rb +++ b/lib/flipper/adapters/memory.rb @@ -15,7 +15,7 @@ def read(key) # Public def write(key, value) - @source[key.to_s] = value + @source[key.to_s] = value.to_s end # Public @@ -26,13 +26,13 @@ def delete(key) # Public def set_add(key, value) ensure_set_initialized(key) - @source[key.to_s].add(value) + @source[key.to_s].add(value.to_s) end # Public def set_delete(key, value) ensure_set_initialized(key) - @source[key.to_s].delete(value) + @source[key.to_s].delete(value.to_s) end # Public diff --git a/lib/flipper/spec/shared_adapter_specs.rb b/lib/flipper/spec/shared_adapter_specs.rb index 66a5fc9a6..ebe95b0c6 100644 --- a/lib/flipper/spec/shared_adapter_specs.rb +++ b/lib/flipper/spec/shared_adapter_specs.rb @@ -82,18 +82,27 @@ Flipper.new(subject).should_not be_nil end - context "integration spot-checks" do + context "working with sets" do + it "always returns strings" do + subject.set_add key, 1 + subject.set_add key, 2 + subject.set_members(key).should eq(Set['1', '2']) + subject.set_delete key, 2 + subject.set_members(key).should eq(Set['1']) + end + end + context "integration spot-checks" do let(:instance) { Flipper.new(subject) } let(:feature) { instance[:feature] } let(:actor) { Struct.new(:id).new(1) } - describe "percentage of actors" do + context "percentage of actors" do let(:percentage) { instance.actors(10) } it_should_behave_like 'a working percentage' end - describe "random percentage" do + context "random percentage" do let(:percentage) { instance.random(10) } it_should_behave_like 'a working percentage' end diff --git a/spec/flipper/adapter_spec.rb b/spec/flipper/adapter_spec.rb index 5d63a184a..e08da7060 100644 --- a/spec/flipper/adapter_spec.rb +++ b/spec/flipper/adapter_spec.rb @@ -5,7 +5,8 @@ describe Flipper::Adapter do let(:local_cache) { {} } - let(:adapter) { Flipper::Adapters::Memory.new } + let(:source) { {} } + let(:adapter) { Flipper::Adapters::Memory.new(source) } let(:features_key) { described_class::FeaturesKey } subject { described_class.new(adapter, :local_cache => local_cache) } @@ -134,7 +135,7 @@ describe "#set_members" do before do - adapter.write 'foo', Set['1', '2'] + source['foo'] = Set['1', '2'] @result = subject.set_members('foo') end @@ -180,7 +181,7 @@ describe "#set_add" do before do - adapter.write 'foo', Set['1'] + source['foo'] = Set['1'] local_cache['foo'] = Set['1'] subject.set_add 'foo', '2' end @@ -196,7 +197,7 @@ describe "#set_delete" do before do - adapter.write 'foo', Set['1', '2', '3'] + source['foo'] = Set['1', '2', '3'] local_cache['foo'] = Set['1', '2', '3'] subject.set_delete 'foo', '3' end @@ -233,7 +234,7 @@ describe "#set_members" do before do - adapter.write 'foo', Set['1', '2'] + source['foo'] = Set['1', '2'] @result = subject.set_members('foo') end @@ -280,7 +281,7 @@ describe "#set_add" do before do - adapter.write 'foo', Set['1'] + source['foo'] = Set['1'] local_cache['foo'] = Set['1'] subject.set_add 'foo', '2' end @@ -296,7 +297,7 @@ describe "#set_delete" do before do - adapter.write 'foo', Set['1', '2', '3'] + source['foo'] = Set['1', '2', '3'] local_cache['foo'] = Set['1', '2', '3'] subject.set_delete 'foo', '3' end