firebolt 0.13.0 → 0.13.2
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 +4 -4
- data/firebolt.gemspec +3 -0
- data/lib/firebolt/cache.rb +7 -7
- data/lib/firebolt/config.rb +1 -1
- data/lib/firebolt/file_warmer.rb +1 -1
- data/lib/firebolt/version.rb +1 -1
- data/lib/firebolt.rb +13 -9
- data/spec/lib/firebolt/cache_spec.rb +73 -0
- data/spec/lib/firebolt/config_spec.rb +53 -0
- data/spec/lib/firebolt/key_spec.rb +32 -0
- data/spec/lib/firebolt/warmer_spec.rb +51 -0
- data/spec/lib/firebolt_spec.rb +86 -0
- data/spec/spec_helper.rb +13 -0
- metadata +57 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c5f6d3818aa3574b3122735bda4c7687ed19bdf4
|
4
|
+
data.tar.gz: 04fd500afdae9d599e22f6599b3ec5ab2ab743e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 96299bfa9cf4729757264a178ea7c1981e86ffc194a3f1e9851da4805be9f7aebf13b716166e25ef82207e95f72634ae237855e9adb402d5cc97930df14d6fb1
|
7
|
+
data.tar.gz: 01844bf0b93e6b574da623e140f8b25edbf83cf7c910b8b0ddae452d3f1723b4e41aef044a45bfc19b511f2fd16c5c18890d3df3c0ba4487d21b9c9d50a3bc6b
|
data/firebolt.gemspec
CHANGED
@@ -24,9 +24,12 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_dependency "json"
|
25
25
|
spec.add_dependency "rufus-scheduler", "~> 3.0"
|
26
26
|
spec.add_dependency "concurrent-ruby", "~> 1.0"
|
27
|
+
spec.add_dependency "activesupport"
|
27
28
|
|
28
29
|
##
|
29
30
|
# Development Dependencies
|
30
31
|
#
|
32
|
+
spec.add_development_dependency "pry"
|
31
33
|
spec.add_development_dependency "rake"
|
34
|
+
spec.add_development_dependency "rspec"
|
32
35
|
end
|
data/lib/firebolt/cache.rb
CHANGED
@@ -3,36 +3,36 @@ module Firebolt
|
|
3
3
|
include ::Firebolt::Keys
|
4
4
|
|
5
5
|
def delete(key_suffix, options = nil)
|
6
|
-
salted_key =
|
6
|
+
salted_key = cache_key_with_salt(key_suffix, salt)
|
7
7
|
return nil if salted_key.nil?
|
8
8
|
|
9
9
|
::Firebolt.config.cache.delete(salted_key, options)
|
10
10
|
end
|
11
11
|
|
12
|
-
def fetch(
|
13
|
-
salted_key =
|
12
|
+
def fetch(key_suffix, options = nil, &block)
|
13
|
+
salted_key = cache_key_with_salt(key_suffix, salt)
|
14
14
|
return nil if salted_key.nil?
|
15
15
|
|
16
16
|
::Firebolt.config.cache.fetch(salted_key, options, &block)
|
17
17
|
end
|
18
18
|
|
19
19
|
def read(key_suffix, options = nil)
|
20
|
-
salted_key =
|
20
|
+
salted_key = cache_key_with_salt(key_suffix, salt)
|
21
21
|
return nil if salted_key.nil?
|
22
22
|
|
23
23
|
::Firebolt.config.cache.read(salted_key, options)
|
24
24
|
end
|
25
25
|
|
26
26
|
def reset_salt!(new_salt)
|
27
|
-
::Firebolt.config.cache.write(
|
27
|
+
::Firebolt.config.cache.write(salt_key, new_salt)
|
28
28
|
end
|
29
29
|
|
30
30
|
def salt
|
31
|
-
::Firebolt.config.cache.read(
|
31
|
+
::Firebolt.config.cache.read(salt_key)
|
32
32
|
end
|
33
33
|
|
34
34
|
def write(key_suffix, value, options = {})
|
35
|
-
salted_key =
|
35
|
+
salted_key = cache_key_with_salt(key_suffix, salt)
|
36
36
|
return nil if salted_key.nil?
|
37
37
|
|
38
38
|
options.merge!(:expires_in => ::Firebolt.config.warming_frequency + 1.hour)
|
data/lib/firebolt/config.rb
CHANGED
@@ -78,7 +78,7 @@ module Firebolt
|
|
78
78
|
|
79
79
|
def warmer=(value)
|
80
80
|
raise ArgumentError, "Warmer must include the ::Firebolt::Warmer module." unless value.ancestors.include?(::Firebolt::Warmer)
|
81
|
-
raise ArgumentError, "Warmer must respond to
|
81
|
+
raise ArgumentError, "Warmer must respond to #perform." unless value.instance_methods.include?(:perform)
|
82
82
|
|
83
83
|
self[:warmer] = value
|
84
84
|
end
|
data/lib/firebolt/file_warmer.rb
CHANGED
data/lib/firebolt/version.rb
CHANGED
data/lib/firebolt.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
require "active_support"
|
2
|
+
require "active_support/core_ext/numeric"
|
3
|
+
|
1
4
|
require "json"
|
2
5
|
require "securerandom"
|
3
6
|
require "concurrent"
|
@@ -17,20 +20,21 @@ module Firebolt
|
|
17
20
|
extend ::Firebolt::Cache
|
18
21
|
|
19
22
|
# Using a mutex to control access while creating a ::Firebolt::Config
|
20
|
-
|
23
|
+
FIREBOLT_MUTEX = ::Mutex.new
|
24
|
+
CONFIGURE_MUTEX = ::Mutex.new
|
21
25
|
|
22
26
|
def self.config
|
23
27
|
return @config unless @config.nil?
|
24
28
|
|
25
|
-
|
26
|
-
@config
|
29
|
+
FIREBOLT_MUTEX.synchronize do
|
30
|
+
@config ||= ::Firebolt::Config.new
|
27
31
|
end
|
28
32
|
|
29
|
-
|
33
|
+
@config
|
30
34
|
end
|
31
35
|
|
32
36
|
def self.configure
|
33
|
-
|
37
|
+
CONFIGURE_MUTEX.synchronize do
|
34
38
|
yield(config)
|
35
39
|
end
|
36
40
|
end
|
@@ -42,7 +46,7 @@ module Firebolt
|
|
42
46
|
|
43
47
|
scheduler = ::Rufus::Scheduler.new
|
44
48
|
scheduler.every(warming_frequency) do
|
45
|
-
::Firebolt::WarmCacheJob.new.
|
49
|
+
::Firebolt::WarmCacheJob.new.perform(config.warmer)
|
46
50
|
end
|
47
51
|
end
|
48
52
|
|
@@ -66,11 +70,11 @@ module Firebolt
|
|
66
70
|
def self.initialized!
|
67
71
|
return @initialized unless @initialized.nil?
|
68
72
|
|
69
|
-
|
70
|
-
@initialized
|
73
|
+
FIREBOLT_MUTEX.synchronize do
|
74
|
+
@initialized ||= true
|
71
75
|
end
|
72
76
|
|
73
|
-
|
77
|
+
@initialized
|
74
78
|
end
|
75
79
|
|
76
80
|
def self.initialized?
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe ::Firebolt::Cache do
|
4
|
+
mock_firebolt_cache!
|
5
|
+
subject { klass.new }
|
6
|
+
let(:klass) { ::Class.new { include ::Firebolt::Cache } }
|
7
|
+
|
8
|
+
let(:key_suffix) { "test" }
|
9
|
+
let(:options) { { :some => :thing } }
|
10
|
+
let(:salt) { "1234" }
|
11
|
+
let(:salt_key) { "firebolt.mx.salt" }
|
12
|
+
let(:salted_key) { "yolo" }
|
13
|
+
|
14
|
+
before do
|
15
|
+
::Firebolt.config.namespace = "mx"
|
16
|
+
::Firebolt.config.warming_frequency = 1000
|
17
|
+
end
|
18
|
+
|
19
|
+
context "with a valid salt key" do
|
20
|
+
before do
|
21
|
+
allow(subject).to receive(:salt_key).and_return(salt_key)
|
22
|
+
allow(subject).to receive(:salt).and_return(salt)
|
23
|
+
allow(subject).to receive(:cache_key_with_salt).with(key_suffix, salt).and_return(salted_key)
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "#delete" do
|
27
|
+
it "deletes the key" do
|
28
|
+
expect(::Firebolt.config.cache).to receive(:delete).with(salted_key, options)
|
29
|
+
subject.delete(key_suffix, options)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "#fetch" do
|
34
|
+
it "fetches out the key" do
|
35
|
+
expect(::Firebolt.config.cache).to receive(:fetch).with(salted_key, options)
|
36
|
+
subject.fetch(key_suffix, options)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "#read" do
|
41
|
+
it "reads out the key" do
|
42
|
+
expect(::Firebolt.config.cache).to receive(:read).with(salted_key, options)
|
43
|
+
subject.read(key_suffix, options)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "#write" do
|
48
|
+
let(:merged_options) { options.merge(:expires_in => 4600) }
|
49
|
+
let(:value) { "idk" }
|
50
|
+
|
51
|
+
it "write the key" do
|
52
|
+
expect(::Firebolt.config.cache).to receive(:write).with(salted_key, value, merged_options)
|
53
|
+
subject.write(key_suffix, value, options)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "#reset_salt!" do
|
59
|
+
let(:new_salt_key) { "new_salt_key" }
|
60
|
+
|
61
|
+
it "can reset the salt key" do
|
62
|
+
expect(::Firebolt.config.cache).to receive(:write).with(salt_key, new_salt_key)
|
63
|
+
subject.reset_salt!(new_salt_key)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe "#salt" do
|
68
|
+
it "can get the salt key" do
|
69
|
+
expect(::Firebolt.config.cache).to receive(:read).with(salt_key)
|
70
|
+
subject.salt
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe ::Firebolt::Config do
|
4
|
+
subject { described_class.new(options) }
|
5
|
+
|
6
|
+
let(:options) { { :namespace => "mx" } }
|
7
|
+
|
8
|
+
describe ".hash_accessor" do
|
9
|
+
it "creates a reader and writer" do
|
10
|
+
described_class.hash_accessor :thing
|
11
|
+
expect { subject.thing = :no_way }.to_not raise_error
|
12
|
+
expect(subject.thing).to eq(:no_way)
|
13
|
+
expect(subject[:thing]).to eq(:no_way)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "#namespace" do
|
18
|
+
it "can build a namespace" do
|
19
|
+
expect(subject.namespace).to eq("firebolt.mx")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "#warmer=" do
|
24
|
+
context "when does not include ::Firebolt::Warmer" do
|
25
|
+
it "raises an error" do
|
26
|
+
expect { subject.warmer = ::String }.to raise_error(::ArgumentError, /must include the ::Firebolt::Warmer/)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context "when does not have a #perform method" do
|
31
|
+
let(:warmer) { ::Class.new { include ::Firebolt::Warmer } }
|
32
|
+
|
33
|
+
it "raises an error" do
|
34
|
+
expect { subject.warmer = warmer }.to raise_error(::ArgumentError, /must respond to #perform/)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context "when includes ::Firebolt::Warmer and responsd to #perform" do
|
39
|
+
let(:warmer) do
|
40
|
+
::Class.new do
|
41
|
+
include ::Firebolt::Warmer
|
42
|
+
|
43
|
+
def perform
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
it "does not raise an error" do
|
49
|
+
expect { subject.warmer = warmer }.to_not raise_error
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe ::Firebolt::Keys do
|
4
|
+
let(:klass) { ::Class.new { include ::Firebolt::Keys } }
|
5
|
+
subject { klass.new }
|
6
|
+
|
7
|
+
before { ::Firebolt.config.namespace = "mx" }
|
8
|
+
|
9
|
+
describe "#cache_key" do
|
10
|
+
it "creates a cache key via a namespace" do
|
11
|
+
expect(subject.cache_key("yolo")).to eq("firebolt.mx.yolo")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "#cache_key_with_salt" do
|
16
|
+
it "creates a cache key with key suffix" do
|
17
|
+
expect(subject.cache_key_with_salt("yolo", "test")).to eq("firebolt.mx.test.yolo")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "#namespace" do
|
22
|
+
it "gets the namespace from the config" do
|
23
|
+
expect(subject.namespace).to eq("firebolt.mx")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "#salt_key" do
|
28
|
+
it "creates a salt key" do
|
29
|
+
expect(subject.salt_key).to eq("firebolt.mx.salt")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe ::Firebolt::Warmer do
|
4
|
+
mock_firebolt_cache!
|
5
|
+
|
6
|
+
let(:klass) do
|
7
|
+
::Class.new do
|
8
|
+
include ::Firebolt::Warmer
|
9
|
+
|
10
|
+
def initialize(results)
|
11
|
+
@results = results
|
12
|
+
end
|
13
|
+
|
14
|
+
def perform
|
15
|
+
@results
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
subject { klass.new(results) }
|
20
|
+
let(:results) { { "some" => "thing" } }
|
21
|
+
|
22
|
+
before do
|
23
|
+
::Firebolt.config.namespace = "mx"
|
24
|
+
::Firebolt.config.warming_frequency = 1000
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "#warm" do
|
28
|
+
it "calls #perform on the warmer class" do
|
29
|
+
expect(subject).to receive(:perform).and_return(results)
|
30
|
+
expect(subject).to receive(:_warmer_reset_salt!)
|
31
|
+
expect(subject).to receive(:_warmer_write_results_to_cache).with(results)
|
32
|
+
subject.warm
|
33
|
+
end
|
34
|
+
|
35
|
+
it "writes the results of #perform to the cache" do
|
36
|
+
allow(subject).to receive(:_warmer_salt).and_return("test")
|
37
|
+
expect(subject).to receive(:_warmer_expires_in).and_return(4600)
|
38
|
+
expect(subject).to receive(:_warmer_salted_cache_key).with("some").and_return("firebolt.mx.test.some")
|
39
|
+
expect(::Firebolt.config.cache).to receive(:write).with("firebolt.mx.test.some", "thing", :expires_in => 4600)
|
40
|
+
subject.warm
|
41
|
+
end
|
42
|
+
|
43
|
+
context "when an result that does not respond to #each_pair is returned from #perform" do
|
44
|
+
let(:results) { nil }
|
45
|
+
|
46
|
+
it "raises an error" do
|
47
|
+
expect { subject.warm }.to raise_error("Warmer must return an object that responds to #each_pair.")
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe ::Firebolt do
|
4
|
+
mock_firebolt_cache!
|
5
|
+
|
6
|
+
describe ".config" do
|
7
|
+
it "creates a config" do
|
8
|
+
expect(described_class.config).to be_a(Firebolt::Config)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe ".configure" do
|
13
|
+
it "can be configured via a block" do
|
14
|
+
described_class.configure do |config|
|
15
|
+
expect(config).to eq(described_class.config)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe ".initialize_rufus_scheduler" do
|
21
|
+
let(:scheduler) { ::Rufus::Scheduler.new }
|
22
|
+
|
23
|
+
before { ::Firebolt.config.warming_frequency = 1000 }
|
24
|
+
|
25
|
+
it "creates an instance of rufus scheduler" do
|
26
|
+
# TODO: Test the config.warmer call.
|
27
|
+
allow(::Rufus::Scheduler).to receive(:new).and_return(scheduler)
|
28
|
+
expect(scheduler).to receive(:every).with("1000")
|
29
|
+
described_class.initialize_rufus_scheduler
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe ".initialize!" do
|
34
|
+
let(:warmer) do
|
35
|
+
::Class.new do
|
36
|
+
include ::Firebolt::Warmer
|
37
|
+
|
38
|
+
def perform
|
39
|
+
{}
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
let(:warmer_instance) { warmer.new }
|
44
|
+
|
45
|
+
before do
|
46
|
+
::Firebolt.config.warming_frequency = 1000
|
47
|
+
::Firebolt.config.warmer = warmer
|
48
|
+
end
|
49
|
+
|
50
|
+
it "calls the warmer" do
|
51
|
+
expect(warmer).to receive(:new).and_return(warmer_instance)
|
52
|
+
expect(warmer_instance).to receive(:warm)
|
53
|
+
described_class.initialize!
|
54
|
+
sleep 0.1 # Await async future to complete
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe ".skip_warming?" do
|
59
|
+
context "when firebolt set to skip" do
|
60
|
+
before { ENV["FIREBOLT_SKIP_WARMING"] = "true" }
|
61
|
+
after { ENV["FIREBOLT_SKIP_WARMING"] = nil }
|
62
|
+
|
63
|
+
it "skips the warming" do
|
64
|
+
expect(described_class).to be_skip_warming
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context "when rails testing mode" do
|
69
|
+
before { ENV["RAILS_ENV"] = "test" }
|
70
|
+
after { ENV["RAILS_ENV"] = nil }
|
71
|
+
|
72
|
+
it "skips the warming" do
|
73
|
+
expect(described_class).to be_skip_warming
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
context "when no skip flags are set" do
|
78
|
+
before { ENV["FIREBOLT_SKIP_WARMING"] = nil }
|
79
|
+
after { ENV["FIREBOLT_SKIP_WARMING"] = "true" }
|
80
|
+
|
81
|
+
it "does not skip the warming" do
|
82
|
+
expect(described_class).to_not be_skip_warming
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
2
|
+
|
3
|
+
require "firebolt"
|
4
|
+
require "pry"
|
5
|
+
|
6
|
+
RSpec.configure do
|
7
|
+
def mock_firebolt_cache!
|
8
|
+
let(:_mock_firebolt_cache) { double(:write => nil, :fetch => nil, :delete => nil, :read => nil) }
|
9
|
+
|
10
|
+
before { ::Firebolt.config.cache = _mock_firebolt_cache }
|
11
|
+
after { ::Firebolt.config.cache = nil }
|
12
|
+
end
|
13
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: firebolt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.13.
|
4
|
+
version: 0.13.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Hutchison
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-02-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
@@ -53,6 +53,34 @@ dependencies:
|
|
53
53
|
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '1.0'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: activesupport
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: pry
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
56
84
|
- !ruby/object:Gem::Dependency
|
57
85
|
name: rake
|
58
86
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,6 +95,20 @@ dependencies:
|
|
67
95
|
- - ">="
|
68
96
|
- !ruby/object:Gem::Version
|
69
97
|
version: '0'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: rspec
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
70
112
|
description: Simple little cache warmer.
|
71
113
|
email:
|
72
114
|
- liveh2o@gmail.com
|
@@ -91,6 +133,12 @@ files:
|
|
91
133
|
- lib/firebolt/version.rb
|
92
134
|
- lib/firebolt/warm_cache_job.rb
|
93
135
|
- lib/firebolt/warmer.rb
|
136
|
+
- spec/lib/firebolt/cache_spec.rb
|
137
|
+
- spec/lib/firebolt/config_spec.rb
|
138
|
+
- spec/lib/firebolt/key_spec.rb
|
139
|
+
- spec/lib/firebolt/warmer_spec.rb
|
140
|
+
- spec/lib/firebolt_spec.rb
|
141
|
+
- spec/spec_helper.rb
|
94
142
|
homepage: https://github.com/moneydesktop/firebolt
|
95
143
|
licenses:
|
96
144
|
- MIT
|
@@ -116,4 +164,10 @@ signing_key:
|
|
116
164
|
specification_version: 4
|
117
165
|
summary: Firebolt is a simple cache warmer. It warms the cache using a specially defined
|
118
166
|
warmer class.
|
119
|
-
test_files:
|
167
|
+
test_files:
|
168
|
+
- spec/lib/firebolt/cache_spec.rb
|
169
|
+
- spec/lib/firebolt/config_spec.rb
|
170
|
+
- spec/lib/firebolt/key_spec.rb
|
171
|
+
- spec/lib/firebolt/warmer_spec.rb
|
172
|
+
- spec/lib/firebolt_spec.rb
|
173
|
+
- spec/spec_helper.rb
|