lex-memcached 0.1.3 → 0.2.1
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/.github/workflows/ci.yml +16 -0
- data/.gitignore +2 -0
- data/.rubocop.yml +40 -10
- data/CHANGELOG.md +26 -2
- data/CLAUDE.md +89 -0
- data/Dockerfile +1 -1
- data/Gemfile +4 -0
- data/README.md +38 -17
- data/docker_deploy.rb +1 -0
- data/lex-memcached.gemspec +6 -4
- data/lib/legion/extensions/memcached/client.rb +28 -0
- data/lib/legion/extensions/memcached/helpers/client.rb +4 -2
- data/lib/legion/extensions/memcached/runners/item.rb +31 -25
- data/lib/legion/extensions/memcached/runners/server.rb +26 -20
- data/lib/legion/extensions/memcached/version.rb +3 -1
- data/lib/legion/extensions/memcached.rb +6 -0
- metadata +12 -27
- data/.github/workflows/rspec.yml +0 -54
- data/.github/workflows/rubocop.yml +0 -28
- data/Gemfile.lock +0 -127
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 00a90f9caad04dee9474147acfffb9360a9be483d4bd28437f39db3783d7eea1
|
|
4
|
+
data.tar.gz: 15cde1fd094b17a94390ce8907a0dc0a8e20c96b7352e309c8aea805a28833a1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 707a628d0c396175e43f9fbe61b6594f171e2697dd016198f1b0e4c7b3364ded20b40f87dbc18d266d716aa34c813b3779d8f81f18e66b5f5ecc2207360a6821
|
|
7
|
+
data.tar.gz: 534cc92c3710d831da4a60c9c28e96bd58111d1371be581c0a12eb089ebaf9bfde7bdcb730b0421769cf864e64c29fe4aeb0cc48b944af596c23ce4ea7afa5ce
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches: [main]
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
ci:
|
|
9
|
+
uses: LegionIO/.github/.github/workflows/ci.yml@main
|
|
10
|
+
|
|
11
|
+
release:
|
|
12
|
+
needs: ci
|
|
13
|
+
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
14
|
+
uses: LegionIO/.github/.github/workflows/release.yml@main
|
|
15
|
+
secrets:
|
|
16
|
+
rubygems-api-key: ${{ secrets.RUBYGEMS_API_KEY }}
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
|
@@ -1,20 +1,50 @@
|
|
|
1
|
+
AllCops:
|
|
2
|
+
TargetRubyVersion: 3.4
|
|
3
|
+
NewCops: enable
|
|
4
|
+
SuggestExtensions: false
|
|
5
|
+
|
|
1
6
|
Layout/LineLength:
|
|
2
|
-
Max:
|
|
7
|
+
Max: 160
|
|
8
|
+
|
|
9
|
+
Layout/SpaceAroundEqualsInParameterDefault:
|
|
10
|
+
EnforcedStyle: space
|
|
11
|
+
|
|
12
|
+
Layout/HashAlignment:
|
|
13
|
+
EnforcedHashRocketStyle: table
|
|
14
|
+
EnforcedColonStyle: table
|
|
15
|
+
|
|
3
16
|
Metrics/MethodLength:
|
|
4
|
-
Max:
|
|
17
|
+
Max: 50
|
|
18
|
+
|
|
5
19
|
Metrics/ClassLength:
|
|
6
20
|
Max: 1500
|
|
21
|
+
|
|
22
|
+
Metrics/ModuleLength:
|
|
23
|
+
Max: 1500
|
|
24
|
+
|
|
7
25
|
Metrics/BlockLength:
|
|
8
|
-
Max:
|
|
26
|
+
Max: 40
|
|
27
|
+
Exclude:
|
|
28
|
+
- 'spec/**/*'
|
|
29
|
+
|
|
30
|
+
Metrics/AbcSize:
|
|
31
|
+
Max: 60
|
|
32
|
+
|
|
33
|
+
Metrics/CyclomaticComplexity:
|
|
34
|
+
Max: 15
|
|
35
|
+
|
|
36
|
+
Metrics/PerceivedComplexity:
|
|
37
|
+
Max: 17
|
|
38
|
+
|
|
9
39
|
Style/Documentation:
|
|
10
40
|
Enabled: false
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
41
|
+
|
|
42
|
+
Style/SymbolArray:
|
|
43
|
+
Enabled: true
|
|
44
|
+
|
|
15
45
|
Style/FrozenStringLiteralComment:
|
|
16
|
-
Enabled:
|
|
46
|
+
Enabled: true
|
|
47
|
+
EnforcedStyle: always
|
|
48
|
+
|
|
17
49
|
Naming/FileName:
|
|
18
50
|
Enabled: false
|
|
19
|
-
Style/ClassAndModuleChildren:
|
|
20
|
-
Enabled: false
|
data/CHANGELOG.md
CHANGED
|
@@ -1,2 +1,26 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [0.2.1] - 2026-03-18
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
- `runners/item.rb`: named anonymous `**` splat as `**opts` in `get`, `fetch`, `add`, `delete`, and `append` methods to fix `NameError` at runtime
|
|
7
|
+
- `runners/server.rb`: `flush` now uses `client(server: server, **opts)` helper instead of bypassing it with `Dalli::Client.new` directly
|
|
8
|
+
- Added `if defined?(Legion::Extensions::Helpers::Lex)` guard to both runner files for standalone loading
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- `spec.license = 'MIT'` in gemspec
|
|
12
|
+
- `Gemfile.lock` added to `.gitignore`
|
|
13
|
+
- Uncommented and fully implemented specs for `Runners::Item`, `Runners::Server`, and `Helpers::Client`
|
|
14
|
+
- Entry point `memcached.rb` now requires helpers and runners explicitly
|
|
15
|
+
|
|
16
|
+
## [0.2.0] - 2026-03-15
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
- Standalone `Client` class (`Legion::Extensions::Memcached::Client`) that includes all Runner modules (`Item`, `Server`), stores connection options, and provides a `client(**override)` method for creating `Dalli::Client` instances outside the full LegionIO framework
|
|
20
|
+
- Specs for the standalone `Client` class
|
|
21
|
+
|
|
22
|
+
## [0.1.3] - prior
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
- Initial implementation with `Item` and `Server` runners
|
|
26
|
+
- `Helpers::Client` wrapping `Dalli::Client`
|
data/CLAUDE.md
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# lex-memcached: Memcached Integration for LegionIO
|
|
2
|
+
|
|
3
|
+
**Repository Level 3 Documentation**
|
|
4
|
+
- **Parent**: `/Users/miverso2/rubymine/legion/extensions-other/CLAUDE.md`
|
|
5
|
+
- **Grandparent**: `/Users/miverso2/rubymine/legion/CLAUDE.md`
|
|
6
|
+
|
|
7
|
+
## Purpose
|
|
8
|
+
|
|
9
|
+
Legion Extension that connects LegionIO to Memcached servers. Provides runners for item-level cache operations and server management through the Dalli client. Also includes a standalone `Client` class for use outside the Legion runtime.
|
|
10
|
+
|
|
11
|
+
**Version**: 0.2.0
|
|
12
|
+
|
|
13
|
+
**GitHub**: https://github.com/LegionIO/lex-memcached
|
|
14
|
+
**License**: MIT
|
|
15
|
+
|
|
16
|
+
## Architecture
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
Legion::Extensions::Memcached
|
|
20
|
+
├── Client # Standalone client: includes all runners, manages Dalli connection
|
|
21
|
+
│ ├── (includes) Runners::Item
|
|
22
|
+
│ └── (includes) Runners::Server
|
|
23
|
+
├── Runners/
|
|
24
|
+
│ ├── Item # Cache item ops: set, get, fetch, add, delete, append
|
|
25
|
+
│ └── Server # Server management and stats
|
|
26
|
+
└── Helpers/
|
|
27
|
+
└── Client # Dalli client connection helper
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Key Files
|
|
31
|
+
|
|
32
|
+
| Path | Purpose |
|
|
33
|
+
|------|---------|
|
|
34
|
+
| `lib/legion/extensions/memcached.rb` | Entry point, extension registration |
|
|
35
|
+
| `lib/legion/extensions/memcached/client.rb` | Standalone client class: includes all runners, wraps Dalli connection |
|
|
36
|
+
| `lib/legion/extensions/memcached/runners/item.rb` | Item runner: set, get, fetch, add, delete, append |
|
|
37
|
+
| `lib/legion/extensions/memcached/runners/server.rb` | Server stats and management |
|
|
38
|
+
| `lib/legion/extensions/memcached/helpers/client.rb` | Dalli client factory |
|
|
39
|
+
|
|
40
|
+
## Runner: Item
|
|
41
|
+
|
|
42
|
+
| Method | Parameters |
|
|
43
|
+
|--------|-----------|
|
|
44
|
+
| `set` | `key:`, `value:`, `server:`, `ttl:` |
|
|
45
|
+
| `get` | `key:`, `server:` |
|
|
46
|
+
| `fetch` | `key:`, `server:` |
|
|
47
|
+
| `add` | `key:`, `value:`, `ttl:`, `server:` |
|
|
48
|
+
| `delete` | `key:`, `server:` |
|
|
49
|
+
| `append` | `key:`, `value:`, `server:` |
|
|
50
|
+
|
|
51
|
+
## Runner: Server
|
|
52
|
+
|
|
53
|
+
| Method | Parameters |
|
|
54
|
+
|--------|-----------|
|
|
55
|
+
| `alive` | `server:` |
|
|
56
|
+
| `flush` | `delay:` (default: 0), `server:` |
|
|
57
|
+
| `stats` | `delay:` (default: 0), `server:` |
|
|
58
|
+
| `reset_stats` | `server:` |
|
|
59
|
+
| `version` | `server:` |
|
|
60
|
+
|
|
61
|
+
## Standalone Usage
|
|
62
|
+
|
|
63
|
+
`Legion::Extensions::Memcached::Client` can be used independently of the Legion runtime. It accepts a `server:` kwarg (default: `'127.0.0.1:11211'`) and includes all Item and Server runner methods directly.
|
|
64
|
+
|
|
65
|
+
```ruby
|
|
66
|
+
mc = Legion::Extensions::Memcached::Client.new(server: '10.0.0.1:11211')
|
|
67
|
+
mc.set(key: 'foo', value: 'bar', server: '10.0.0.1:11211', ttl: 300)
|
|
68
|
+
mc.get(key: 'foo', server: '10.0.0.1:11211')
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Per-call connection options can be overridden; the `client` method merges instance opts with any call-level overrides before building the `Dalli::Client`.
|
|
72
|
+
|
|
73
|
+
## Dependencies
|
|
74
|
+
|
|
75
|
+
| Gem | Purpose |
|
|
76
|
+
|-----|---------|
|
|
77
|
+
| `dalli` (>= 3.0) | Memcached Ruby client |
|
|
78
|
+
|
|
79
|
+
## Development
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
bundle install
|
|
83
|
+
bundle exec rspec
|
|
84
|
+
bundle exec rubocop
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
**Maintained By**: Matthew Iverson (@Esity)
|
data/Dockerfile
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -1,35 +1,56 @@
|
|
|
1
|
-
#
|
|
1
|
+
# lex-memcached
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
TODO: Delete this and the text above, and describe your gem
|
|
3
|
+
Memcached integration for [LegionIO](https://github.com/LegionIO/LegionIO). Run cache operations like get, set, add, append, and delete against Memcached servers via the Dalli client.
|
|
6
4
|
|
|
7
5
|
## Installation
|
|
8
6
|
|
|
9
|
-
|
|
7
|
+
```bash
|
|
8
|
+
gem install lex-memcached
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Or add to your Gemfile:
|
|
10
12
|
|
|
11
13
|
```ruby
|
|
12
|
-
gem '
|
|
14
|
+
gem 'lex-memcached'
|
|
13
15
|
```
|
|
14
16
|
|
|
15
|
-
|
|
17
|
+
## Standalone Usage
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
```ruby
|
|
20
|
+
require 'legion/extensions/memcached'
|
|
21
|
+
|
|
22
|
+
client = Legion::Extensions::Memcached::Client.new(server: '10.0.0.1:11211')
|
|
23
|
+
client.set(key: 'foo', value: 'bar', server: '10.0.0.1:11211', ttl: 300)
|
|
24
|
+
client.get(key: 'foo', server: '10.0.0.1:11211')
|
|
25
|
+
client.stats(server: '10.0.0.1:11211')
|
|
26
|
+
```
|
|
18
27
|
|
|
19
|
-
|
|
28
|
+
Constructor accepts `server:` (default `'127.0.0.1:11211'`).
|
|
20
29
|
|
|
21
|
-
|
|
30
|
+
## Runners
|
|
22
31
|
|
|
23
|
-
|
|
32
|
+
| Runner | Methods |
|
|
33
|
+
|--------|---------|
|
|
34
|
+
| Item | `set`, `get`, `fetch`, `add`, `delete`, `append` |
|
|
35
|
+
| Server | Server management and stats |
|
|
24
36
|
|
|
25
|
-
|
|
37
|
+
### Item Parameters
|
|
26
38
|
|
|
27
|
-
|
|
39
|
+
| Method | Required | Optional |
|
|
40
|
+
|--------|----------|----------|
|
|
41
|
+
| `set` | `key`, `value` | `server`, `ttl` |
|
|
42
|
+
| `get` | `key` | `server` |
|
|
43
|
+
| `fetch` | `key` | `server` |
|
|
44
|
+
| `add` | `key`, `value`, `ttl` | `server` |
|
|
45
|
+
| `delete` | `key` | `server` |
|
|
46
|
+
| `append` | `key`, `value` | `server` |
|
|
28
47
|
|
|
29
|
-
|
|
48
|
+
## Requirements
|
|
30
49
|
|
|
31
|
-
|
|
50
|
+
- Ruby >= 3.4
|
|
51
|
+
- [LegionIO](https://github.com/LegionIO/LegionIO) framework
|
|
52
|
+
- Memcached server
|
|
32
53
|
|
|
33
|
-
##
|
|
54
|
+
## License
|
|
34
55
|
|
|
35
|
-
|
|
56
|
+
MIT
|
data/docker_deploy.rb
CHANGED
data/lex-memcached.gemspec
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
lib = File.expand_path('lib', __dir__)
|
|
2
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
3
5
|
require 'legion/extensions/memcached/version'
|
|
@@ -11,13 +13,15 @@ Gem::Specification.new do |spec|
|
|
|
11
13
|
spec.summary = 'LEX::Memcached'
|
|
12
14
|
spec.description = 'LegionIO Extensions to connect to and manage memcached servers'
|
|
13
15
|
spec.homepage = 'https://github.com/LegionIO/lex-memcached'
|
|
14
|
-
spec.
|
|
16
|
+
spec.license = 'MIT'
|
|
17
|
+
spec.required_ruby_version = '>= 3.4'
|
|
15
18
|
|
|
16
19
|
spec.metadata['homepage_uri'] = spec.homepage
|
|
17
20
|
spec.metadata['source_code_uri'] = 'https://github.com/LegionIO/lex-memcached'
|
|
18
21
|
spec.metadata['documentation_uri'] = 'https://github.com/LegionIO/lex-memcached'
|
|
19
22
|
spec.metadata['changelog_uri'] = 'https://github.com/LegionIO/lex-memcached'
|
|
20
23
|
spec.metadata['bug_tracker_uri'] = 'https://github.com/LegionIO/lex-memcached/issues'
|
|
24
|
+
spec.metadata['rubygems_mfa_required'] = 'true'
|
|
21
25
|
|
|
22
26
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
|
23
27
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
@@ -25,7 +29,5 @@ Gem::Specification.new do |spec|
|
|
|
25
29
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
26
30
|
spec.require_paths = ['lib']
|
|
27
31
|
|
|
28
|
-
spec.
|
|
29
|
-
|
|
30
|
-
spec.add_dependency 'dalli'
|
|
32
|
+
spec.add_dependency 'dalli', '>= 3.0'
|
|
31
33
|
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'helpers/client'
|
|
4
|
+
require_relative 'runners/item'
|
|
5
|
+
require_relative 'runners/server'
|
|
6
|
+
|
|
7
|
+
module Legion
|
|
8
|
+
module Extensions
|
|
9
|
+
module Memcached
|
|
10
|
+
class Client
|
|
11
|
+
include Runners::Item
|
|
12
|
+
include Runners::Server
|
|
13
|
+
|
|
14
|
+
attr_reader :opts
|
|
15
|
+
|
|
16
|
+
def initialize(server: '127.0.0.1:11211', **extra)
|
|
17
|
+
@opts = { server: server, **extra }
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def client(**override)
|
|
21
|
+
merged = @opts.merge(override)
|
|
22
|
+
server = merged.fetch(:server)
|
|
23
|
+
Dalli::Client.new(server, **merged.except(:server))
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'dalli'
|
|
2
4
|
|
|
3
5
|
module Legion
|
|
@@ -5,8 +7,8 @@ module Legion
|
|
|
5
7
|
module Memcached
|
|
6
8
|
module Helpers
|
|
7
9
|
module Client
|
|
8
|
-
def client(server: '127.0.0.1:11211', **
|
|
9
|
-
Dalli::Client.new(server, **
|
|
10
|
+
def client(server: '127.0.0.1:11211', **)
|
|
11
|
+
Dalli::Client.new(server, **)
|
|
10
12
|
end
|
|
11
13
|
end
|
|
12
14
|
end
|
|
@@ -1,34 +1,40 @@
|
|
|
1
|
-
|
|
2
|
-
module Runners
|
|
3
|
-
module Item
|
|
4
|
-
include Legion::Extensions::Memcached::Helpers::Client
|
|
5
|
-
|
|
6
|
-
def set(key:, value:, server: nil, **opts)
|
|
7
|
-
client(server: server, **opts).set(key, value, opts[:ttl])
|
|
8
|
-
{ success: true, key: key, value: value, server: server, **opts }
|
|
9
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
10
2
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module Memcached
|
|
6
|
+
module Runners
|
|
7
|
+
module Item
|
|
8
|
+
include Legion::Extensions::Memcached::Helpers::Client
|
|
14
9
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
10
|
+
def set(key:, value:, server: nil, **opts)
|
|
11
|
+
client(server: server, **opts).set(key, value, opts[:ttl])
|
|
12
|
+
{ success: true, key: key, value: value, server: server, **opts }
|
|
13
|
+
end
|
|
18
14
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
def get(key:, server: nil, **)
|
|
16
|
+
{ success: true, get: client(server: server, **).get(key) }
|
|
17
|
+
end
|
|
22
18
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
19
|
+
def fetch(key:, server: nil, **)
|
|
20
|
+
{ success: true, fetch: client(server: server, **).fetch(key) }
|
|
21
|
+
end
|
|
26
22
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
23
|
+
def add(key:, value:, ttl:, server: nil, **)
|
|
24
|
+
{ success: true, add: client(server: server, **).add(key, value, ttl) }
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def delete(key:, server: nil, **)
|
|
28
|
+
{ success: true, delete: client(server: server, **).delete(key) }
|
|
29
|
+
end
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
def append(key:, value:, server: nil, **)
|
|
32
|
+
{ success: true, append: client(server: server, **).append(key, value) }
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
include Legion::Extensions::Helpers::Lex if defined?(Legion::Extensions::Helpers::Lex)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
32
38
|
end
|
|
33
39
|
end
|
|
34
40
|
end
|
|
@@ -1,29 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
module Runners
|
|
3
|
-
module Server
|
|
4
|
-
include Legion::Extensions::Memcached::Helpers::Client
|
|
1
|
+
# frozen_string_literal: true
|
|
5
2
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module Memcached
|
|
6
|
+
module Runners
|
|
7
|
+
module Server
|
|
8
|
+
include Legion::Extensions::Memcached::Helpers::Client
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
def alive(server: nil, **)
|
|
11
|
+
{ success: true, result: client(server: server, **).alive? }
|
|
12
|
+
end
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
def flush(server: nil, delay: 0, **)
|
|
15
|
+
{ success: true, result: client(server: server, **).flush(delay) }
|
|
16
|
+
end
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
def stats(delay: 0, server: nil, **)
|
|
19
|
+
{ success: true, result: client(server: server, **).stats(delay) }
|
|
20
|
+
end
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
def reset_stats(server: nil, **)
|
|
23
|
+
{ success: true, result: client(server: server, **).reset_stats }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def version(server: nil, **)
|
|
27
|
+
{ success: true, result: client(server: server, **).version }
|
|
28
|
+
end
|
|
25
29
|
|
|
26
|
-
|
|
30
|
+
include Legion::Extensions::Helpers::Lex if defined?(Legion::Extensions::Helpers::Lex)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
27
33
|
end
|
|
28
34
|
end
|
|
29
35
|
end
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'legion/extensions/memcached/version'
|
|
4
|
+
require 'legion/extensions/memcached/helpers/client'
|
|
5
|
+
require 'legion/extensions/memcached/runners/item'
|
|
6
|
+
require 'legion/extensions/memcached/runners/server'
|
|
7
|
+
require 'legion/extensions/memcached/client'
|
|
2
8
|
|
|
3
9
|
module Legion
|
|
4
10
|
module Extensions
|
metadata
CHANGED
|
@@ -1,43 +1,28 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: lex-memcached
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1
|
|
4
|
+
version: 0.2.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Esity
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
|
-
- !ruby/object:Gem::Dependency
|
|
14
|
-
name: legionio
|
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
|
16
|
-
requirements:
|
|
17
|
-
- - ">="
|
|
18
|
-
- !ruby/object:Gem::Version
|
|
19
|
-
version: '0'
|
|
20
|
-
type: :development
|
|
21
|
-
prerelease: false
|
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
-
requirements:
|
|
24
|
-
- - ">="
|
|
25
|
-
- !ruby/object:Gem::Version
|
|
26
|
-
version: '0'
|
|
27
12
|
- !ruby/object:Gem::Dependency
|
|
28
13
|
name: dalli
|
|
29
14
|
requirement: !ruby/object:Gem::Requirement
|
|
30
15
|
requirements:
|
|
31
16
|
- - ">="
|
|
32
17
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '0'
|
|
18
|
+
version: '3.0'
|
|
34
19
|
type: :runtime
|
|
35
20
|
prerelease: false
|
|
36
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
22
|
requirements:
|
|
38
23
|
- - ">="
|
|
39
24
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '0'
|
|
25
|
+
version: '3.0'
|
|
41
26
|
description: LegionIO Extensions to connect to and manage memcached servers
|
|
42
27
|
email:
|
|
43
28
|
- matthewdiverson@gmail.com
|
|
@@ -45,32 +30,33 @@ executables: []
|
|
|
45
30
|
extensions: []
|
|
46
31
|
extra_rdoc_files: []
|
|
47
32
|
files:
|
|
48
|
-
- ".github/workflows/
|
|
49
|
-
- ".github/workflows/rubocop.yml"
|
|
33
|
+
- ".github/workflows/ci.yml"
|
|
50
34
|
- ".gitignore"
|
|
51
35
|
- ".rspec"
|
|
52
36
|
- ".rubocop.yml"
|
|
53
37
|
- CHANGELOG.md
|
|
38
|
+
- CLAUDE.md
|
|
54
39
|
- Dockerfile
|
|
55
40
|
- Gemfile
|
|
56
|
-
- Gemfile.lock
|
|
57
41
|
- README.md
|
|
58
42
|
- docker_deploy.rb
|
|
59
43
|
- lex-memcached.gemspec
|
|
60
44
|
- lib/legion/extensions/memcached.rb
|
|
45
|
+
- lib/legion/extensions/memcached/client.rb
|
|
61
46
|
- lib/legion/extensions/memcached/helpers/client.rb
|
|
62
47
|
- lib/legion/extensions/memcached/runners/item.rb
|
|
63
48
|
- lib/legion/extensions/memcached/runners/server.rb
|
|
64
49
|
- lib/legion/extensions/memcached/version.rb
|
|
65
50
|
homepage: https://github.com/LegionIO/lex-memcached
|
|
66
|
-
licenses:
|
|
51
|
+
licenses:
|
|
52
|
+
- MIT
|
|
67
53
|
metadata:
|
|
68
54
|
homepage_uri: https://github.com/LegionIO/lex-memcached
|
|
69
55
|
source_code_uri: https://github.com/LegionIO/lex-memcached
|
|
70
56
|
documentation_uri: https://github.com/LegionIO/lex-memcached
|
|
71
57
|
changelog_uri: https://github.com/LegionIO/lex-memcached
|
|
72
58
|
bug_tracker_uri: https://github.com/LegionIO/lex-memcached/issues
|
|
73
|
-
|
|
59
|
+
rubygems_mfa_required: 'true'
|
|
74
60
|
rdoc_options: []
|
|
75
61
|
require_paths:
|
|
76
62
|
- lib
|
|
@@ -78,15 +64,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
78
64
|
requirements:
|
|
79
65
|
- - ">="
|
|
80
66
|
- !ruby/object:Gem::Version
|
|
81
|
-
version:
|
|
67
|
+
version: '3.4'
|
|
82
68
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
83
69
|
requirements:
|
|
84
70
|
- - ">="
|
|
85
71
|
- !ruby/object:Gem::Version
|
|
86
72
|
version: '0'
|
|
87
73
|
requirements: []
|
|
88
|
-
rubygems_version: 3.
|
|
89
|
-
signing_key:
|
|
74
|
+
rubygems_version: 3.6.9
|
|
90
75
|
specification_version: 4
|
|
91
76
|
summary: LEX::Memcached
|
|
92
77
|
test_files: []
|
data/.github/workflows/rspec.yml
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
name: RSpec
|
|
2
|
-
on: [push, pull_request]
|
|
3
|
-
|
|
4
|
-
jobs:
|
|
5
|
-
rspec:
|
|
6
|
-
strategy:
|
|
7
|
-
fail-fast: false
|
|
8
|
-
matrix:
|
|
9
|
-
os: [ubuntu-latest]
|
|
10
|
-
ruby: [2.7]
|
|
11
|
-
runs-on: ${{ matrix.os }}
|
|
12
|
-
steps:
|
|
13
|
-
- uses: actions/checkout@v2
|
|
14
|
-
- uses: ruby/setup-ruby@v1
|
|
15
|
-
with:
|
|
16
|
-
ruby-version: ${{ matrix.ruby }}
|
|
17
|
-
bundler-cache: true
|
|
18
|
-
- name: RSpec run
|
|
19
|
-
run: |
|
|
20
|
-
bash -c "
|
|
21
|
-
bundle exec rspec
|
|
22
|
-
[[ $? -ne 2 ]]
|
|
23
|
-
"
|
|
24
|
-
rspec-mri:
|
|
25
|
-
needs: rspec
|
|
26
|
-
strategy:
|
|
27
|
-
fail-fast: false
|
|
28
|
-
matrix:
|
|
29
|
-
os: [ ubuntu-latest ]
|
|
30
|
-
ruby: [2.5, 2.6, '3.0', head]
|
|
31
|
-
runs-on: ${{ matrix.os }}
|
|
32
|
-
steps:
|
|
33
|
-
- uses: actions/checkout@v2
|
|
34
|
-
- uses: ruby/setup-ruby@v1
|
|
35
|
-
with:
|
|
36
|
-
ruby-version: ${{ matrix.ruby }}
|
|
37
|
-
bundler-cache: true
|
|
38
|
-
- run: bundle exec rspec
|
|
39
|
-
rspec-truffleruby:
|
|
40
|
-
needs: rspec
|
|
41
|
-
strategy:
|
|
42
|
-
fail-fast: false
|
|
43
|
-
matrix:
|
|
44
|
-
os: [ ubuntu-latest ]
|
|
45
|
-
ruby: [truffleruby]
|
|
46
|
-
runs-on: ${{ matrix.os }}
|
|
47
|
-
steps:
|
|
48
|
-
- uses: actions/checkout@v2
|
|
49
|
-
- uses: ruby/setup-ruby@v1
|
|
50
|
-
with:
|
|
51
|
-
ruby-version: ${{ matrix.ruby }}
|
|
52
|
-
bundler-cache: true
|
|
53
|
-
- run: bundle exec rspec
|
|
54
|
-
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
name: Rubocop
|
|
2
|
-
on: [push, pull_request]
|
|
3
|
-
jobs:
|
|
4
|
-
rubocop:
|
|
5
|
-
strategy:
|
|
6
|
-
fail-fast: false
|
|
7
|
-
matrix:
|
|
8
|
-
os: [ubuntu-latest]
|
|
9
|
-
ruby: [2.7]
|
|
10
|
-
runs-on: ${{ matrix.os }}
|
|
11
|
-
steps:
|
|
12
|
-
- uses: actions/checkout@v2
|
|
13
|
-
- uses: ruby/setup-ruby@v1
|
|
14
|
-
with:
|
|
15
|
-
ruby-version: ${{ matrix.ruby }}
|
|
16
|
-
bundler-cache: true
|
|
17
|
-
- name: Install Rubocop
|
|
18
|
-
run: gem install rubocop code-scanning-rubocop
|
|
19
|
-
- name: Rubocop run --no-doc
|
|
20
|
-
run: |
|
|
21
|
-
bash -c "
|
|
22
|
-
rubocop --require code_scanning --format CodeScanning::SarifFormatter -o rubocop.sarif
|
|
23
|
-
[[ $? -ne 2 ]]
|
|
24
|
-
"
|
|
25
|
-
- name: Upload Sarif output
|
|
26
|
-
uses: github/codeql-action/upload-sarif@v1
|
|
27
|
-
with:
|
|
28
|
-
sarif_file: rubocop.sarif
|
data/Gemfile.lock
DELETED
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
PATH
|
|
2
|
-
remote: .
|
|
3
|
-
specs:
|
|
4
|
-
lex-memcached (0.1.3)
|
|
5
|
-
dalli
|
|
6
|
-
|
|
7
|
-
GEM
|
|
8
|
-
remote: https://rubygems.org/
|
|
9
|
-
specs:
|
|
10
|
-
amq-protocol (2.3.2)
|
|
11
|
-
ast (2.4.2)
|
|
12
|
-
aws-eventstream (1.1.1)
|
|
13
|
-
aws-sigv4 (1.2.3)
|
|
14
|
-
aws-eventstream (~> 1, >= 1.0.2)
|
|
15
|
-
bunny (2.18.0)
|
|
16
|
-
amq-protocol (~> 2.3, >= 2.3.1)
|
|
17
|
-
sorted_set (~> 1, >= 1.0.2)
|
|
18
|
-
concurrent-ruby (1.1.9)
|
|
19
|
-
concurrent-ruby-ext (1.1.9)
|
|
20
|
-
concurrent-ruby (= 1.1.9)
|
|
21
|
-
connection_pool (2.2.5)
|
|
22
|
-
daemons (1.4.0)
|
|
23
|
-
dalli (2.7.11)
|
|
24
|
-
diff-lcs (1.4.4)
|
|
25
|
-
docile (1.4.0)
|
|
26
|
-
json_pure (2.5.1)
|
|
27
|
-
legion-cache (1.2.0)
|
|
28
|
-
connection_pool (>= 2.2.3)
|
|
29
|
-
dalli (>= 2.7)
|
|
30
|
-
legion-logging
|
|
31
|
-
legion-settings
|
|
32
|
-
redis (>= 4.2)
|
|
33
|
-
legion-crypt (1.2.0)
|
|
34
|
-
vault (>= 0.15.0)
|
|
35
|
-
legion-json (1.2.0)
|
|
36
|
-
json_pure
|
|
37
|
-
multi_json
|
|
38
|
-
legion-logging (1.2.0)
|
|
39
|
-
rainbow (~> 3)
|
|
40
|
-
legion-settings (1.2.0)
|
|
41
|
-
legion-json (>= 1.2)
|
|
42
|
-
legion-transport (1.2.0)
|
|
43
|
-
bunny (>= 2.17.0)
|
|
44
|
-
concurrent-ruby (>= 1.1.7)
|
|
45
|
-
legion-json
|
|
46
|
-
legion-settings
|
|
47
|
-
legionio (1.2.0)
|
|
48
|
-
concurrent-ruby (>= 1.1.7)
|
|
49
|
-
concurrent-ruby-ext (>= 1.1.7)
|
|
50
|
-
daemons (>= 1.3.1)
|
|
51
|
-
legion-cache (>= 0.2.0)
|
|
52
|
-
legion-crypt (>= 0.2.0)
|
|
53
|
-
legion-json (>= 0.2.0)
|
|
54
|
-
legion-logging (>= 0.2.0)
|
|
55
|
-
legion-settings (>= 0.2.0)
|
|
56
|
-
legion-transport (>= 1.1.9)
|
|
57
|
-
lex-node
|
|
58
|
-
oj (>= 3.10)
|
|
59
|
-
thor (>= 1)
|
|
60
|
-
lex-node (0.2.0)
|
|
61
|
-
multi_json (1.15.0)
|
|
62
|
-
oj (3.11.5)
|
|
63
|
-
parallel (1.20.1)
|
|
64
|
-
parser (3.0.1.1)
|
|
65
|
-
ast (~> 2.4.1)
|
|
66
|
-
rainbow (3.0.0)
|
|
67
|
-
rake (13.0.3)
|
|
68
|
-
rbtree (0.4.4)
|
|
69
|
-
redis (4.3.1)
|
|
70
|
-
regexp_parser (2.1.1)
|
|
71
|
-
rexml (3.2.5)
|
|
72
|
-
rspec (3.10.0)
|
|
73
|
-
rspec-core (~> 3.10.0)
|
|
74
|
-
rspec-expectations (~> 3.10.0)
|
|
75
|
-
rspec-mocks (~> 3.10.0)
|
|
76
|
-
rspec-core (3.10.1)
|
|
77
|
-
rspec-support (~> 3.10.0)
|
|
78
|
-
rspec-expectations (3.10.1)
|
|
79
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
|
80
|
-
rspec-support (~> 3.10.0)
|
|
81
|
-
rspec-mocks (3.10.2)
|
|
82
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
|
83
|
-
rspec-support (~> 3.10.0)
|
|
84
|
-
rspec-support (3.10.2)
|
|
85
|
-
rspec_junit_formatter (0.4.1)
|
|
86
|
-
rspec-core (>= 2, < 4, != 2.12.0)
|
|
87
|
-
rubocop (1.16.1)
|
|
88
|
-
parallel (~> 1.10)
|
|
89
|
-
parser (>= 3.0.0.0)
|
|
90
|
-
rainbow (>= 2.2.2, < 4.0)
|
|
91
|
-
regexp_parser (>= 1.8, < 3.0)
|
|
92
|
-
rexml
|
|
93
|
-
rubocop-ast (>= 1.7.0, < 2.0)
|
|
94
|
-
ruby-progressbar (~> 1.7)
|
|
95
|
-
unicode-display_width (>= 1.4.0, < 3.0)
|
|
96
|
-
rubocop-ast (1.7.0)
|
|
97
|
-
parser (>= 3.0.1.1)
|
|
98
|
-
ruby-progressbar (1.11.0)
|
|
99
|
-
set (1.0.1)
|
|
100
|
-
simplecov (0.21.2)
|
|
101
|
-
docile (~> 1.1)
|
|
102
|
-
simplecov-html (~> 0.11)
|
|
103
|
-
simplecov_json_formatter (~> 0.1)
|
|
104
|
-
simplecov-html (0.12.3)
|
|
105
|
-
simplecov_json_formatter (0.1.3)
|
|
106
|
-
sorted_set (1.0.3)
|
|
107
|
-
rbtree
|
|
108
|
-
set (~> 1.0)
|
|
109
|
-
thor (1.1.0)
|
|
110
|
-
unicode-display_width (2.0.0)
|
|
111
|
-
vault (0.16.0)
|
|
112
|
-
aws-sigv4
|
|
113
|
-
|
|
114
|
-
PLATFORMS
|
|
115
|
-
ruby
|
|
116
|
-
|
|
117
|
-
DEPENDENCIES
|
|
118
|
-
legionio
|
|
119
|
-
lex-memcached!
|
|
120
|
-
rake
|
|
121
|
-
rspec
|
|
122
|
-
rspec_junit_formatter
|
|
123
|
-
rubocop
|
|
124
|
-
simplecov
|
|
125
|
-
|
|
126
|
-
BUNDLED WITH
|
|
127
|
-
2.2.19
|