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 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