memcached-manager 0.4.0 → 1.0.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 +13 -5
- data/.travis.yml +1 -1
- data/CONTRIBUTING.md +4 -4
- data/Dockerfile +7 -0
- data/Gemfile +0 -1
- data/Gemfile.lock +23 -19
- data/README.rdoc +8 -5
- data/Rakefile +6 -6
- data/VERSION +1 -1
- data/features/api/run_command.feature +6 -0
- data/features/api/search_memcached_keys.feature +6 -0
- data/features/step_definitions/api/create_memcached_key.rb +1 -1
- data/features/step_definitions/api/list_memcached_keys.rb +1 -0
- data/features/step_definitions/api/run_command.rb +12 -0
- data/features/step_definitions/api/search_memcached_keys.rb +6 -0
- data/features/step_definitions/webapp/create_memcached_key.rb +13 -7
- data/features/step_definitions/webapp/delete_memcached_key.rb +7 -13
- data/features/step_definitions/webapp/edit_configs.rb +7 -0
- data/features/support/env.rb +3 -2
- data/features/webapp/edit_configs.feature +9 -0
- data/features/webapp/edit_memcached_key.feature +1 -1
- data/fig.yml +13 -0
- data/githubpage_idea +23 -0
- data/lib/api.rb +25 -7
- data/lib/extensions.rb +6 -0
- data/lib/extensions/memcached_command.rb +14 -0
- data/lib/extensions/memcached_connection.rb +9 -0
- data/lib/extensions/memcached_inspector.rb +12 -5
- data/lib/extensions/memcached_settings.rb +2 -2
- data/lib/public/images/favicon.png +0 -0
- data/lib/public/images/glyphicons-halflings.png +0 -0
- data/lib/public/images/logo.png +0 -0
- data/lib/public/images/org-logo.png +0 -0
- data/lib/public/images/search.png +0 -0
- data/lib/public/javascripts/angular/controllers.js +48 -3
- data/lib/public/javascripts/angular/filters.js +85 -0
- data/lib/public/javascripts/angular/routes.js +26 -0
- data/lib/public/javascripts/angular/services/notification.js +41 -6
- data/lib/public/javascripts/angular/services/query_params_singleton.js +10 -0
- data/lib/public/javascripts/angular/services/resources.js +13 -0
- data/lib/public/javascripts/application.js +38 -1
- data/lib/public/javascripts/humanize.js +473 -0
- data/lib/public/javascripts/humanize_duration.js +329 -0
- data/lib/public/javascripts/jquery-terminal.js +4335 -0
- data/lib/public/javascripts/underscore.js +5 -0
- data/lib/public/stylesheets/app.css +196 -10
- data/lib/public/stylesheets/buttons.css +107 -0
- data/lib/public/stylesheets/inputs.css +119 -0
- data/lib/public/stylesheets/jquery-terminal.css +184 -0
- data/lib/public/stylesheets/media_queries.css +162 -0
- data/lib/public/templates/config.html.erb +8 -0
- data/lib/public/templates/edit.html.erb +5 -3
- data/lib/public/templates/keys.html.erb +42 -31
- data/lib/public/templates/new.html.erb +6 -4
- data/lib/public/templates/show.html.erb +1 -1
- data/lib/public/templates/stats.html.erb +1 -2
- data/lib/routes.rb +3 -0
- data/lib/views/index.erb +24 -3
- data/lib/views/layout.erb +14 -1
- data/memcached-manager.gemspec +31 -5
- data/spec/lib/extensions/api_response_spec.rb +9 -7
- data/spec/lib/extensions/memcached_command_spec.rb +13 -0
- data/spec/lib/extensions/memcached_connection_spec.rb +9 -4
- data/spec/lib/extensions/memcached_inspector_spec.rb +38 -17
- data/spec/lib/extensions/memcached_settings_spec.rb +16 -16
- data/spec/spec_helper.rb +2 -4
- metadata +48 -21
@@ -1,2 +1,2 @@
|
|
1
|
-
<
|
1
|
+
<h1>Key: {{ pair.key }}</h1>
|
2
2
|
<p>{{ pair.value }}</p>
|
data/lib/routes.rb
CHANGED
data/lib/views/index.erb
CHANGED
@@ -1,13 +1,34 @@
|
|
1
1
|
<div class="container">
|
2
|
-
<div class="sixteen columns"
|
2
|
+
<div class="sixteen columns">
|
3
3
|
</div><!-- sixteen column -->
|
4
4
|
<div class="one-third column">
|
5
5
|
<div ui-view="keys"></div>
|
6
6
|
</div><!-- two-third column -->
|
7
|
-
<div class="two-third column">
|
8
|
-
<div
|
7
|
+
<div class="two-third column" id="right-side">
|
8
|
+
<div class='menu-container'>
|
9
|
+
<a href="#/new" class="push_button green-desktop">
|
10
|
+
<span class='icon-plus icon-white spaced-icon'></span>New key
|
11
|
+
</a>
|
12
|
+
<a href="#/stats" class="push_button green-desktop">
|
13
|
+
<span class='icon-align-left icon-white spaced-icon'></span>Stats
|
14
|
+
</a>
|
15
|
+
<a href="#" id="openTerminal" class="push_button green-desktop">
|
16
|
+
<span class='icon-off icon-white spaced-icon'></span>Terminal
|
17
|
+
</a>
|
18
|
+
<a href="#/config" class="push_button green-desktop">
|
19
|
+
<span class='icon-cog icon-white spaced-icon'></span>Settings
|
20
|
+
</a>
|
21
|
+
</div>
|
22
|
+
|
23
|
+
<div ui-view="key" class="text-content">
|
24
|
+
</div><!-- text-content -->
|
9
25
|
</div><!-- two-third column -->
|
10
26
|
</div><!-- container -->
|
11
27
|
|
28
|
+
|
29
|
+
<div class='bottom-container'>
|
30
|
+
<div id='terminal'></div>
|
31
|
+
</div>
|
32
|
+
|
12
33
|
<!-- This controller is used to bootstrap the application -->
|
13
34
|
<section ng-controller='BootstrapController'></section>
|
data/lib/views/layout.erb
CHANGED
@@ -22,6 +22,10 @@
|
|
22
22
|
<link rel="stylesheet" href="<%= @engine_path %>/stylesheets/layout.css">
|
23
23
|
<link rel="stylesheet" href="<%= @engine_path %>/stylesheets/icons.css">
|
24
24
|
<link rel="stylesheet" href="<%= @engine_path %>/stylesheets/app.css">
|
25
|
+
<link rel="stylesheet" href="<%= @engine_path %>/stylesheets/buttons.css">
|
26
|
+
<link rel="stylesheet" href="<%= @engine_path %>/stylesheets/inputs.css">
|
27
|
+
<link rel="stylesheet" href="<%= @engine_path %>/stylesheets/jquery-terminal.css">
|
28
|
+
<link rel="stylesheet" href="<%= @engine_path %>/stylesheets/media_queries.css">
|
25
29
|
|
26
30
|
<!--[if lt IE 9]>
|
27
31
|
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
|
@@ -29,27 +33,36 @@
|
|
29
33
|
|
30
34
|
<!-- Favicons
|
31
35
|
================================================== -->
|
32
|
-
<link rel="shortcut icon" href="images/favicon.
|
36
|
+
<link rel="shortcut icon" href="images/favicon.png">
|
33
37
|
</head>
|
34
38
|
<body>
|
35
39
|
<%= yield %>
|
36
40
|
<script type='text/javascript'>
|
37
41
|
// This is used because sometimes the app is a Rails/Rack mounted application and it's base path is different.
|
38
42
|
window.basePath = '<%= @engine_path %>';
|
43
|
+
|
44
|
+
// Variables that hold state in the angular.js app
|
45
|
+
window.stateVariables = {};
|
39
46
|
</script>
|
40
47
|
<script type='text/javascript' src='<%= @engine_path %>/javascripts/jquery-1.9.1.min.js'></script>
|
48
|
+
<script type='text/javascript' src='<%= @engine_path %>/javascripts/underscore.js'></script>
|
41
49
|
<script type='text/javascript' src='<%= @engine_path %>/javascripts/angular.min.js'></script>
|
42
50
|
<script type='text/javascript' src='<%= @engine_path %>/javascripts/angular-resource.min.js'></script>
|
43
51
|
<script type='text/javascript' src='<%= @engine_path %>/javascripts/angular-ui-states.min.js'></script>
|
52
|
+
<script type='text/javascript' src='<%= @engine_path %>/javascripts/humanize.js'></script>
|
53
|
+
<script type='text/javascript' src='<%= @engine_path %>/javascripts/humanize_duration.js'></script>
|
44
54
|
<script type='text/javascript' src='<%= @engine_path %>/javascripts/application.js'></script>
|
45
55
|
<script type='text/javascript' src='<%= @engine_path %>/javascripts/angular/routes.js'></script>
|
46
56
|
<script type='text/javascript' src='<%= @engine_path %>/javascripts/angular/controllers.js'></script>
|
57
|
+
<script type='text/javascript' src='<%= @engine_path %>/javascripts/angular/filters.js'></script>
|
47
58
|
<script type='text/javascript' src='<%= @engine_path %>/javascripts/angular/services/notification.js'></script>
|
48
59
|
<script type='text/javascript' src='<%= @engine_path %>/javascripts/angular/services/response.js'></script>
|
49
60
|
<script type='text/javascript' src='<%= @engine_path %>/javascripts/angular/services/resources.js'></script>
|
61
|
+
<script type='text/javascript' src='<%= @engine_path %>/javascripts/angular/services/query_params_singleton.js'></script>
|
50
62
|
<script type='text/javascript' src='<%= @engine_path %>/javascripts/noty/jquery.noty.js'></script>
|
51
63
|
<script type='text/javascript' src='<%= @engine_path %>/javascripts/noty/layouts/top.js'></script>
|
52
64
|
<script type='text/javascript' src='<%= @engine_path %>/javascripts/noty/themes/default.js'></script>
|
53
65
|
<script type='text/javascript' src='<%= @engine_path %>/javascripts/noty_config.js'></script>
|
66
|
+
<script type='text/javascript' src='<%= @engine_path %>/javascripts/jquery-terminal.js'></script>
|
54
67
|
</body>
|
55
68
|
</html>
|
data/memcached-manager.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: memcached-manager 0.
|
5
|
+
# stub: memcached-manager 1.0.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "memcached-manager"
|
9
|
-
s.version = "0.
|
9
|
+
s.version = "1.0.0"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Thiago Fernandes Massa"]
|
14
|
-
s.date = "
|
14
|
+
s.date = "2015-02-07"
|
15
15
|
s.description = "A sinatra memcached-manager that allows you to view status, flush/view keys and so on. Also easily pluggable to a Rails app."
|
16
16
|
s.email = "thiagown@gmail.com"
|
17
17
|
s.executables = ["memcached-manager"]
|
@@ -23,6 +23,7 @@ Gem::Specification.new do |s|
|
|
23
23
|
".rspec",
|
24
24
|
".travis.yml",
|
25
25
|
"CONTRIBUTING.md",
|
26
|
+
"Dockerfile",
|
26
27
|
"Gemfile",
|
27
28
|
"Gemfile.lock",
|
28
29
|
"LICENSE.txt",
|
@@ -34,6 +35,8 @@ Gem::Specification.new do |s|
|
|
34
35
|
"features/api/create_memcached_key.feature",
|
35
36
|
"features/api/delete_memcached_key.feature",
|
36
37
|
"features/api/list_memcached_keys.feature",
|
38
|
+
"features/api/run_command.feature",
|
39
|
+
"features/api/search_memcached_keys.feature",
|
37
40
|
"features/api/set_memcached_info.feature",
|
38
41
|
"features/api/show_memcached_key.feature",
|
39
42
|
"features/api/show_memcached_stats.feature",
|
@@ -41,12 +44,15 @@ Gem::Specification.new do |s|
|
|
41
44
|
"features/step_definitions/api/create_memcached_key.rb",
|
42
45
|
"features/step_definitions/api/delete_memcached_key.rb",
|
43
46
|
"features/step_definitions/api/list_memcached_keys.rb",
|
47
|
+
"features/step_definitions/api/run_command.rb",
|
48
|
+
"features/step_definitions/api/search_memcached_keys.rb",
|
44
49
|
"features/step_definitions/api/show_memcached_key.rb",
|
45
50
|
"features/step_definitions/api/show_memcached_stats.rb",
|
46
51
|
"features/step_definitions/api/update_memcached_key.rb",
|
47
52
|
"features/step_definitions/set_memcached_info.rb",
|
48
53
|
"features/step_definitions/webapp/create_memcached_key.rb",
|
49
54
|
"features/step_definitions/webapp/delete_memcached_key.rb",
|
55
|
+
"features/step_definitions/webapp/edit_configs.rb",
|
50
56
|
"features/step_definitions/webapp/edit_memcached_key.rb",
|
51
57
|
"features/step_definitions/webapp/list_memcached_keys.rb",
|
52
58
|
"features/step_definitions/webapp/show_memcached_key.rb",
|
@@ -55,39 +61,58 @@ Gem::Specification.new do |s|
|
|
55
61
|
"features/support/hooks.rb",
|
56
62
|
"features/webapp/create_memcached_key.feature",
|
57
63
|
"features/webapp/delete_memcached_key.feature",
|
64
|
+
"features/webapp/edit_configs.feature",
|
58
65
|
"features/webapp/edit_memcached_key.feature",
|
59
66
|
"features/webapp/list_memcached_keys.feature",
|
60
67
|
"features/webapp/show_memcached_key.feature",
|
61
68
|
"features/webapp/show_memcached_stats.feature",
|
69
|
+
"fig.yml",
|
70
|
+
"githubpage_idea",
|
62
71
|
"lib/api.rb",
|
63
72
|
"lib/extensions.rb",
|
64
73
|
"lib/extensions/api_response.rb",
|
65
74
|
"lib/extensions/errors.rb",
|
75
|
+
"lib/extensions/memcached_command.rb",
|
66
76
|
"lib/extensions/memcached_connection.rb",
|
67
77
|
"lib/extensions/memcached_inspector.rb",
|
68
78
|
"lib/extensions/memcached_settings.rb",
|
69
79
|
"lib/memcached-manager.rb",
|
80
|
+
"lib/public/images/favicon.png",
|
70
81
|
"lib/public/images/glyphicons-halflings-white.png",
|
71
82
|
"lib/public/images/glyphicons-halflings.png",
|
83
|
+
"lib/public/images/logo.png",
|
84
|
+
"lib/public/images/org-logo.png",
|
85
|
+
"lib/public/images/search.png",
|
72
86
|
"lib/public/javascripts/angular-resource.min.js",
|
73
87
|
"lib/public/javascripts/angular-ui-states.min.js",
|
74
88
|
"lib/public/javascripts/angular.min.js",
|
75
89
|
"lib/public/javascripts/angular/controllers.js",
|
90
|
+
"lib/public/javascripts/angular/filters.js",
|
76
91
|
"lib/public/javascripts/angular/routes.js",
|
77
92
|
"lib/public/javascripts/angular/services/notification.js",
|
93
|
+
"lib/public/javascripts/angular/services/query_params_singleton.js",
|
78
94
|
"lib/public/javascripts/angular/services/resources.js",
|
79
95
|
"lib/public/javascripts/angular/services/response.js",
|
80
96
|
"lib/public/javascripts/application.js",
|
97
|
+
"lib/public/javascripts/humanize.js",
|
98
|
+
"lib/public/javascripts/humanize_duration.js",
|
81
99
|
"lib/public/javascripts/jquery-1.9.1.min.js",
|
100
|
+
"lib/public/javascripts/jquery-terminal.js",
|
82
101
|
"lib/public/javascripts/noty/jquery.noty.js",
|
83
102
|
"lib/public/javascripts/noty/layouts/top.js",
|
84
103
|
"lib/public/javascripts/noty/themes/default.js",
|
85
104
|
"lib/public/javascripts/noty_config.js",
|
105
|
+
"lib/public/javascripts/underscore.js",
|
86
106
|
"lib/public/stylesheets/app.css",
|
87
107
|
"lib/public/stylesheets/base.css",
|
108
|
+
"lib/public/stylesheets/buttons.css",
|
88
109
|
"lib/public/stylesheets/icons.css",
|
110
|
+
"lib/public/stylesheets/inputs.css",
|
111
|
+
"lib/public/stylesheets/jquery-terminal.css",
|
89
112
|
"lib/public/stylesheets/layout.css",
|
113
|
+
"lib/public/stylesheets/media_queries.css",
|
90
114
|
"lib/public/stylesheets/skeleton.css",
|
115
|
+
"lib/public/templates/config.html.erb",
|
91
116
|
"lib/public/templates/edit.html.erb",
|
92
117
|
"lib/public/templates/keys.html.erb",
|
93
118
|
"lib/public/templates/new.html.erb",
|
@@ -108,6 +133,7 @@ Gem::Specification.new do |s|
|
|
108
133
|
"spec/javascripts/support/jasmine_helper.rb",
|
109
134
|
"spec/lib/extensions/api_response_spec.rb",
|
110
135
|
"spec/lib/extensions/error_spec.rb",
|
136
|
+
"spec/lib/extensions/memcached_command_spec.rb",
|
111
137
|
"spec/lib/extensions/memcached_connection_spec.rb",
|
112
138
|
"spec/lib/extensions/memcached_inspector_spec.rb",
|
113
139
|
"spec/lib/extensions/memcached_settings_spec.rb",
|
@@ -115,9 +141,9 @@ Gem::Specification.new do |s|
|
|
115
141
|
]
|
116
142
|
s.homepage = "http://github.com/thiagofm/memcached-manager"
|
117
143
|
s.licenses = ["MIT"]
|
118
|
-
s.rubygems_version = "2.
|
144
|
+
s.rubygems_version = "2.4.5"
|
119
145
|
s.summary = "A sinatra memcached-manager that allows you to view status, flush/view keys and so on. Also easily pluggable to a Rails app."
|
120
|
-
s.test_files = ["spec/javascripts", "spec/javascripts/angular", "spec/javascripts/angular/controllers", "spec/javascripts/angular/controllers/list_keys_controller_spec.js", "spec/javascripts/angular/services", "spec/javascripts/angular/services/notification_spec.js", "spec/javascripts/angular/services/resource_spec.js", "spec/javascripts/angular/services/response_spec.js", "spec/javascripts/helpers", "spec/javascripts/helpers/angular-mocks.js", "spec/javascripts/helpers/SpecHelper.js", "spec/javascripts/support", "spec/javascripts/support/jasmine.yml", "spec/javascripts/support/jasmine_helper.rb", "spec/lib", "spec/lib/extensions", "spec/lib/extensions/api_response_spec.rb", "spec/lib/extensions/error_spec.rb", "spec/lib/extensions/memcached_connection_spec.rb", "spec/lib/extensions/memcached_inspector_spec.rb", "spec/lib/extensions/memcached_settings_spec.rb", "spec/spec_helper.rb"]
|
146
|
+
s.test_files = ["spec/javascripts", "spec/javascripts/angular", "spec/javascripts/angular/controllers", "spec/javascripts/angular/controllers/list_keys_controller_spec.js", "spec/javascripts/angular/services", "spec/javascripts/angular/services/notification_spec.js", "spec/javascripts/angular/services/resource_spec.js", "spec/javascripts/angular/services/response_spec.js", "spec/javascripts/helpers", "spec/javascripts/helpers/angular-mocks.js", "spec/javascripts/helpers/SpecHelper.js", "spec/javascripts/support", "spec/javascripts/support/jasmine.yml", "spec/javascripts/support/jasmine_helper.rb", "spec/lib", "spec/lib/extensions", "spec/lib/extensions/api_response_spec.rb", "spec/lib/extensions/error_spec.rb", "spec/lib/extensions/memcached_command_spec.rb", "spec/lib/extensions/memcached_connection_spec.rb", "spec/lib/extensions/memcached_inspector_spec.rb", "spec/lib/extensions/memcached_settings_spec.rb", "spec/spec_helper.rb"]
|
121
147
|
|
122
148
|
if s.respond_to? :specification_version then
|
123
149
|
s.specification_version = 4
|
@@ -6,22 +6,24 @@ require 'spec_helper'
|
|
6
6
|
describe Sinatra::APIResponse do
|
7
7
|
context "#api_response" do
|
8
8
|
it "should have a block given" do
|
9
|
-
|
9
|
+
expect { Class.new.extend(Sinatra::APIResponse).api_response }.to raise_error('No block given')
|
10
10
|
end
|
11
11
|
|
12
12
|
context 'error' do
|
13
|
+
let(:klass) { Class.new.extend(Sinatra::APIResponse) }
|
14
|
+
|
13
15
|
it "should respond with the errors" do
|
14
|
-
klass
|
15
|
-
klass.
|
16
|
-
klass.api_response {{yeah: 'yeahs'}}.should =~ /errors.*foo.*bar/
|
16
|
+
allow(klass).to receive(:errors).and_return([{foo: 'bar'}])
|
17
|
+
expect(klass.api_response {{yeah: 'yeahs'}}).to match /errors.*foo.*bar/
|
17
18
|
end
|
18
19
|
end
|
19
20
|
|
20
21
|
context 'no error' do
|
22
|
+
let(:klass) { Class.new.extend(Sinatra::APIResponse) }
|
23
|
+
|
21
24
|
it "should respond with what's inside the block" do
|
22
|
-
klass
|
23
|
-
klass.
|
24
|
-
klass.api_response { {foo: 'bar'} }.should =~ /foo.*bar/
|
25
|
+
allow(klass).to receive(:errors).and_return([])
|
26
|
+
expect(klass.api_response { {foo: 'bar'} }).to match /foo.*bar/
|
25
27
|
end
|
26
28
|
end
|
27
29
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sinatra::MemcachedCommand do
|
4
|
+
let(:host) { ENV['MEMCACHED_1_PORT_11211_TCP_ADDR'] || 'localhost' }
|
5
|
+
let(:port) { '11211' }
|
6
|
+
let(:memcached_connection) { Dalli::Client.new("#{host}:#{port}") }
|
7
|
+
let(:klass) { Class.new.extend(Sinatra::MemcachedCommand) }
|
8
|
+
|
9
|
+
it 'runs a command in memcached' do
|
10
|
+
memcached_connection.set('hello', 'world')
|
11
|
+
expect(klass.memcached_command(host: host, port: port, command: 'get hello')[:response]).to match /world/
|
12
|
+
end
|
13
|
+
end
|
@@ -4,8 +4,8 @@ describe Sinatra::MemcachedConnection do
|
|
4
4
|
let(:klass) { Class.new.extend(Sinatra::MemcachedConnection) }
|
5
5
|
|
6
6
|
context "#setup_memcached" do
|
7
|
-
before
|
8
|
-
it { klass.
|
7
|
+
before { klass.setup_memcached 'localhost', '1337' }
|
8
|
+
it { expect(klass).to have_instance_variable(:memcached) }
|
9
9
|
end
|
10
10
|
|
11
11
|
context "#close_memcached" do
|
@@ -16,10 +16,15 @@ describe Sinatra::MemcachedConnection do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
context "#memcached_connection" do
|
19
|
-
before
|
19
|
+
before { klass.setup_memcached 'localhost', '1337' }
|
20
20
|
|
21
21
|
it "should be the instance variable of memcached" do
|
22
|
-
klass.instance_variable_get(:"@memcached").
|
22
|
+
expect(klass.instance_variable_get(:"@memcached")).to eq klass.memcached_connection
|
23
23
|
end
|
24
24
|
end
|
25
|
+
|
26
|
+
context '#memcached_connected?', wip: true do
|
27
|
+
it { expect(klass.memcached_connected?('localhost', '11211')).to be_truthy }
|
28
|
+
it { expect(klass.memcached_connected?('localhost', '1121')).to be_falsy }
|
29
|
+
end
|
25
30
|
end
|
@@ -1,41 +1,62 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Sinatra::MemcachedInspector do
|
4
|
-
let(:host) { 'localhost' }
|
5
|
-
let(:port) { '11211' }
|
4
|
+
let!(:host) { ENV['MEMCACHED_1_PORT_11211_TCP_ADDR'] || 'localhost' }
|
5
|
+
let!(:port) { '11211' }
|
6
6
|
let(:memcached_connection) { Dalli::Client.new("#{host}:#{port}") }
|
7
7
|
let(:klass) { Class.new.extend(Sinatra::MemcachedInspector) }
|
8
8
|
|
9
9
|
context "#memcached_inspect" do
|
10
10
|
context 'undefined key' do
|
11
11
|
before(:each) do
|
12
|
+
memcached_connection.flush_all
|
12
13
|
memcached_connection.set('hello', 'world')
|
13
14
|
memcached_connection.set('question', "Who's John Galt?")
|
14
|
-
@response = klass.memcached_inspect host: host, port: port
|
15
15
|
end
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
it {
|
20
|
-
it {
|
21
|
-
it {
|
22
|
-
it {
|
23
|
-
it {
|
17
|
+
let(:response) { klass.memcached_inspect host: host, port: port }
|
18
|
+
|
19
|
+
it { expect(response).to be_an_instance_of Array }
|
20
|
+
it { expect(response.first.keys).to include :key }
|
21
|
+
it { expect(response.first.keys).to include :bytes }
|
22
|
+
it { expect(response.first.keys).to include :expires_in }
|
23
|
+
it { expect(response.first[:key]).to eq 'hello' }
|
24
|
+
it { expect(response.first[:expires_in]).to be_an_instance_of Fixnum }
|
24
25
|
end
|
25
26
|
|
26
27
|
context 'defined key' do
|
27
28
|
before(:each) do
|
29
|
+
memcached_connection.flush_all
|
28
30
|
memcached_connection.set('hello', 'world')
|
29
|
-
memcached_connection.set('question', "
|
31
|
+
memcached_connection.set('question', "eho's John Galt?")
|
30
32
|
@response = klass.memcached_inspect host: host, port: port, key: 'hello'
|
31
33
|
end
|
32
34
|
|
33
|
-
it { @response.
|
34
|
-
it { @response.
|
35
|
-
it { @response.
|
36
|
-
it { @response.
|
37
|
-
it { @response[:key].
|
38
|
-
it { @response[:
|
35
|
+
it { expect(@response).to_not be_an_instance_of Array }
|
36
|
+
it { expect(@response).to include :key }
|
37
|
+
it { expect(@response).to include :bytes }
|
38
|
+
it { expect(@response).to include :expires_in }
|
39
|
+
it { expect(@response[:key]).to eq 'hello' }
|
40
|
+
it { expect(@response[:expires_in]).to be_an_instance_of Fixnum }
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'defined query' do
|
44
|
+
before(:each) do
|
45
|
+
memcached_connection.flush_all
|
46
|
+
memcached_connection.set('foo1', 'world')
|
47
|
+
memcached_connection.set('foo', 'world')
|
48
|
+
memcached_connection.set('xpto', "Who's John Galt?")
|
49
|
+
@response = klass.memcached_inspect host: host, port: port, query: 'foo'
|
50
|
+
end
|
51
|
+
|
52
|
+
it { expect(@response).to be_an_instance_of Array }
|
53
|
+
it { expect(@response.size).to be 2 }
|
54
|
+
it { expect(@response.first).to include :key }
|
55
|
+
it { expect(@response.first).to include :bytes }
|
56
|
+
it { expect(@response.first.keys).to include :expires_in }
|
57
|
+
it { expect(@response.first[:key]).to eq 'foo' }
|
58
|
+
it { expect(@response.last[:key]).to eq 'foo1' }
|
59
|
+
it { expect(@response.first[:expires_in]).to be_an_instance_of Fixnum }
|
39
60
|
end
|
40
61
|
end
|
41
62
|
end
|
@@ -1,42 +1,42 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Sinatra::MemcachedSettings do
|
4
|
-
let(:configured_session) { {
|
4
|
+
let(:configured_session) { { :host => 'i.am', :port => '1337' } }
|
5
5
|
let(:empty_session) { {} }
|
6
6
|
let(:klass) { Class.new.extend(Sinatra::MemcachedSettings) }
|
7
|
-
|
7
|
+
|
8
8
|
before :each do
|
9
|
-
ENV.
|
10
|
-
ENV.
|
9
|
+
allow(ENV).to receive(:[]).with('memcached_host').and_return nil
|
10
|
+
allow(ENV).to receive(:[]).with('memcached_port').and_return nil
|
11
11
|
end
|
12
12
|
|
13
13
|
context '#memcached_host' do
|
14
14
|
it "host exists" do
|
15
|
-
klass.memcached_host(configured_session).
|
15
|
+
expect(klass.memcached_host(configured_session)).to eq 'i.am'
|
16
16
|
end
|
17
17
|
|
18
18
|
it "host doesn't exist" do
|
19
|
-
klass.memcached_host(empty_session).
|
19
|
+
expect(klass.memcached_host(empty_session)).to eq 'localhost'
|
20
20
|
end
|
21
21
|
|
22
22
|
it "host is set as an env variable" do
|
23
|
-
ENV.
|
24
|
-
klass.memcached_host(empty_session).
|
23
|
+
allow(ENV).to receive(:[]).with("memcached_host").and_return('ruby-lang.org')
|
24
|
+
expect(klass.memcached_host(empty_session)).to eq 'ruby-lang.org'
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
28
|
context '#memcached_port' do
|
29
29
|
it "port exists" do
|
30
|
-
klass.memcached_port(configured_session).
|
30
|
+
expect(klass.memcached_port(configured_session)).to eq '1337'
|
31
31
|
end
|
32
32
|
|
33
33
|
it "port doesn't exist" do
|
34
|
-
klass.memcached_port(empty_session).
|
34
|
+
expect(klass.memcached_port(empty_session)).to eq '11211'
|
35
35
|
end
|
36
36
|
|
37
37
|
it "port is set as an env variable" do
|
38
|
-
ENV.
|
39
|
-
klass.memcached_port(empty_session).
|
38
|
+
allow(ENV).to receive(:[]).with("memcached_port").and_return('9000')
|
39
|
+
expect(klass.memcached_port(empty_session)).to eq '9000'
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
@@ -45,11 +45,11 @@ describe Sinatra::MemcachedSettings do
|
|
45
45
|
let(:configured_host) { {'host' => 'i.am'} }
|
46
46
|
|
47
47
|
it "should be configured" do
|
48
|
-
klass.send(:configured?, configured_host, 'host').
|
48
|
+
expect(klass.send(:configured?, configured_host, 'host')).to be true
|
49
49
|
end
|
50
50
|
|
51
51
|
it "should not be configured" do
|
52
|
-
klass.send(:configured?, configured_host, 'port').
|
52
|
+
expect(klass.send(:configured?, configured_host, 'port')).to be false
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
@@ -57,11 +57,11 @@ describe Sinatra::MemcachedSettings do
|
|
57
57
|
let(:configured_port) { {'port' => '1337'} }
|
58
58
|
|
59
59
|
it "should be configured" do
|
60
|
-
klass.send(:configured?, configured_port, 'port').
|
60
|
+
expect(klass.send(:configured?, configured_port, 'port')).to be true
|
61
61
|
end
|
62
62
|
|
63
63
|
it "should not be configured" do
|
64
|
-
klass.send(:configured?, configured_port, 'host').
|
64
|
+
expect(klass.send(:configured?, configured_port, 'host')).to be false
|
65
65
|
end
|
66
66
|
end
|
67
67
|
end
|