flipper-dalli 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
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,3 @@
1
+ module Flipper
2
+ VERSION = "0.9.0".freeze
3
+ 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