flipper-dalli 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/flipper-dalli.gemspec +24 -0
- data/lib/flipper-dalli.rb +1 -0
- data/lib/flipper/adapters/dalli.rb +76 -0
- data/lib/flipper/version.rb +3 -0
- data/spec/flipper/adapters/dalli_spec.rb +25 -0
- data/test/adapters/dalli_test.rb +18 -0
- metadata +86 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 48e6c85c38775e001fbfbee28b4ccf2e0237d616
|
4
|
+
data.tar.gz: 711c7cd4f5bd6247c27cf77078a409d754d82c4b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e8c4ba79332fe8ee28a108c7fba97c8d761566ee5b9f204cf6ff72035795a4a2283c73f54ff91097bd465f59ea557f3c2fff3be9c6f21f21be9f85bf81a8f05e
|
7
|
+
data.tar.gz: b6e438caa0a7d65b038239db5ac538a78aecfc0bee3d976af5f1e46fa4d90ac76742f0760dbdc4d6c8418b34db14a4c0044c372637049b55b8c83a93205fc4a3
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/flipper/version', __FILE__)
|
3
|
+
|
4
|
+
flipper_dalli_files = lambda { |file|
|
5
|
+
file =~ /dalli/
|
6
|
+
}
|
7
|
+
|
8
|
+
Gem::Specification.new do |gem|
|
9
|
+
gem.authors = ["John Nunemaker"]
|
10
|
+
gem.email = ["nunemaker@gmail.com"]
|
11
|
+
gem.summary = "Dalli adapter for Flipper"
|
12
|
+
gem.description = "Dalli adapter for Flipper"
|
13
|
+
gem.license = "MIT"
|
14
|
+
gem.homepage = "https://github.com/jnunemaker/flipper"
|
15
|
+
|
16
|
+
gem.files = `git ls-files`.split("\n").select(&flipper_dalli_files) + ["lib/flipper/version.rb"]
|
17
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n").select(&flipper_dalli_files)
|
18
|
+
gem.name = "flipper-dalli"
|
19
|
+
gem.require_paths = ["lib"]
|
20
|
+
gem.version = Flipper::VERSION
|
21
|
+
|
22
|
+
gem.add_dependency 'flipper', "~> #{Flipper::VERSION}"
|
23
|
+
gem.add_dependency 'dalli', '>= 2.0', '< 3'
|
24
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'flipper/adapters/dalli'
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'dalli'
|
2
|
+
|
3
|
+
module Flipper
|
4
|
+
module Adapters
|
5
|
+
# Public: Adapter that wraps another adapter with the ability to cache
|
6
|
+
# adapter calls in Memcached using the Dalli gem.
|
7
|
+
class Dalli
|
8
|
+
include ::Flipper::Adapter
|
9
|
+
|
10
|
+
FeaturesKey = :flipper_features
|
11
|
+
|
12
|
+
# Internal
|
13
|
+
attr_reader :cache
|
14
|
+
|
15
|
+
# Public: The name of the adapter.
|
16
|
+
attr_reader :name
|
17
|
+
|
18
|
+
# Public
|
19
|
+
def initialize(adapter, cache, ttl = 0)
|
20
|
+
@adapter = adapter
|
21
|
+
@name = :dalli
|
22
|
+
@cache = cache
|
23
|
+
@ttl = ttl
|
24
|
+
end
|
25
|
+
|
26
|
+
# Public
|
27
|
+
def features
|
28
|
+
@cache.fetch(FeaturesKey, @ttl) do
|
29
|
+
@adapter.features
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Public
|
34
|
+
def add(feature)
|
35
|
+
result = @adapter.add(feature)
|
36
|
+
@cache.delete(FeaturesKey)
|
37
|
+
result
|
38
|
+
end
|
39
|
+
|
40
|
+
# Public
|
41
|
+
def remove(feature)
|
42
|
+
result = @adapter.remove(feature)
|
43
|
+
@cache.delete(FeaturesKey)
|
44
|
+
result
|
45
|
+
end
|
46
|
+
|
47
|
+
# Public
|
48
|
+
def clear(feature)
|
49
|
+
result = @adapter.clear(feature)
|
50
|
+
@cache.delete(feature)
|
51
|
+
result
|
52
|
+
end
|
53
|
+
|
54
|
+
# Public
|
55
|
+
def get(feature)
|
56
|
+
@cache.fetch(feature, @ttl) do
|
57
|
+
@adapter.get(feature)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# Public
|
62
|
+
def enable(feature, gate, thing)
|
63
|
+
result = @adapter.enable(feature, gate, thing)
|
64
|
+
@cache.delete(feature)
|
65
|
+
result
|
66
|
+
end
|
67
|
+
|
68
|
+
# Public
|
69
|
+
def disable(feature, gate, thing)
|
70
|
+
result = @adapter.disable(feature, gate, thing)
|
71
|
+
@cache.delete(feature)
|
72
|
+
result
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'flipper/adapters/memory'
|
3
|
+
require 'flipper/adapters/dalli'
|
4
|
+
require 'flipper/spec/shared_adapter_specs'
|
5
|
+
|
6
|
+
RSpec.describe Flipper::Adapters::Dalli do
|
7
|
+
let(:memory_adapter) { Flipper::Adapters::Memory.new }
|
8
|
+
let(:cache) { Dalli::Client.new('localhost:11211') }
|
9
|
+
let(:adapter) { Flipper::Adapters::Dalli.new(memory_adapter, cache) }
|
10
|
+
let(:flipper) { Flipper.new(adapter) }
|
11
|
+
|
12
|
+
subject { described_class.new(adapter, cache) }
|
13
|
+
|
14
|
+
before do
|
15
|
+
cache.flush
|
16
|
+
end
|
17
|
+
|
18
|
+
it_should_behave_like 'a flipper adapter'
|
19
|
+
|
20
|
+
describe "#name" do
|
21
|
+
it "is dalli" do
|
22
|
+
expect(subject.name).to be(:dalli)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'flipper/adapters/memory'
|
3
|
+
require 'flipper/adapters/dalli'
|
4
|
+
|
5
|
+
class DalliTest < MiniTest::Test
|
6
|
+
prepend Flipper::Test::SharedAdapterTests
|
7
|
+
|
8
|
+
def setup
|
9
|
+
@cache = Dalli::Client.new('localhost:11211')
|
10
|
+
@cache.flush
|
11
|
+
memory_adapter = Flipper::Adapters::Memory.new
|
12
|
+
@adapter = Flipper::Adapters::Dalli.new(memory_adapter, @cache)
|
13
|
+
end
|
14
|
+
|
15
|
+
def teardown
|
16
|
+
@cache.flush
|
17
|
+
end
|
18
|
+
end
|
metadata
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: flipper-dalli
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- John Nunemaker
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-07-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: flipper
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.9.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.9.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: dalli
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.0'
|
34
|
+
- - "<"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '3'
|
37
|
+
type: :runtime
|
38
|
+
prerelease: false
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '2.0'
|
44
|
+
- - "<"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '3'
|
47
|
+
description: Dalli adapter for Flipper
|
48
|
+
email:
|
49
|
+
- nunemaker@gmail.com
|
50
|
+
executables: []
|
51
|
+
extensions: []
|
52
|
+
extra_rdoc_files: []
|
53
|
+
files:
|
54
|
+
- flipper-dalli.gemspec
|
55
|
+
- lib/flipper-dalli.rb
|
56
|
+
- lib/flipper/adapters/dalli.rb
|
57
|
+
- lib/flipper/version.rb
|
58
|
+
- spec/flipper/adapters/dalli_spec.rb
|
59
|
+
- test/adapters/dalli_test.rb
|
60
|
+
homepage: https://github.com/jnunemaker/flipper
|
61
|
+
licenses:
|
62
|
+
- MIT
|
63
|
+
metadata: {}
|
64
|
+
post_install_message:
|
65
|
+
rdoc_options: []
|
66
|
+
require_paths:
|
67
|
+
- lib
|
68
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '0'
|
73
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
requirements: []
|
79
|
+
rubyforge_project:
|
80
|
+
rubygems_version: 2.4.5.1
|
81
|
+
signing_key:
|
82
|
+
specification_version: 4
|
83
|
+
summary: Dalli adapter for Flipper
|
84
|
+
test_files:
|
85
|
+
- spec/flipper/adapters/dalli_spec.rb
|
86
|
+
- test/adapters/dalli_test.rb
|