lex-memcached 0.1.2 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a052b205afbe76131dc164bd222c75c2cbec80ef8ee8cd3112e0f32d0d9225ab
4
- data.tar.gz: 3762721eacad2d62db08eb19af0f91f8859e2b9b37ffae5dd4323e8035856fbb
3
+ metadata.gz: ef636e82ef50dc51d08210bcd0039b93e3891cbe1ff445474900cd4fc38c36fc
4
+ data.tar.gz: '0918bc87ee94c952edb2620f53d333ca3e8cc715c4dbde23038a5796d6bc8e19'
5
5
  SHA512:
6
- metadata.gz: 342c11757059e90b75fd0b0d5e21db77fa36f9b046de0050134ade66cc233c26d726daddb5de1d142860b19bf7557cbbc2389857c30d94a76f7e23ae0430355a
7
- data.tar.gz: 5cd24df39fbbd38f1b1a9eb361ed11dcc1761de4c26e915096de9af3b776d7f71b13813e7b0165d257823955901127e155a29c86173fa3ec7edd7eefe956f081
6
+ metadata.gz: 2dd0aa8a44413bb8c83ffa56cc585e01427a438550f295fb08a3896b6c3903815705fba5e460880ffe075e52bf83604cbfd53a0ee00686066c4b9fa9ae1079e9
7
+ data.tar.gz: 5b9a55c1bcd10ece8bfa15b6abda60faeed6c6c4d19ad74889b5874a7141d8fab4d5eb2ff73943e4da64ffb471cee70a72f4b2f2cfccf8ebda68d36fed584c97
@@ -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/.rubocop.yml CHANGED
@@ -1,19 +1,50 @@
1
+ AllCops:
2
+ TargetRubyVersion: 3.4
3
+ NewCops: enable
4
+ SuggestExtensions: false
5
+
1
6
  Layout/LineLength:
2
- Max: 120
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: 30
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: 50
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
- AllCops:
12
- TargetRubyVersion: 2.5
13
- NewCops: enable
41
+
42
+ Style/SymbolArray:
43
+ Enabled: true
44
+
14
45
  Style/FrozenStringLiteralComment:
15
- Enabled: false
46
+ Enabled: true
47
+ EnforcedStyle: always
48
+
16
49
  Naming/FileName:
17
50
  Enabled: false
18
- Style/ClassAndModuleChildren:
19
- Enabled: false
data/CHANGELOG.md CHANGED
@@ -1 +1,13 @@
1
- # optum_telegraf_beacon CHANGELOG
1
+ # Changelog
2
+
3
+ ## [0.2.0] - 2026-03-15
4
+
5
+ ### Added
6
+ - 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
7
+ - Specs for the standalone `Client` class
8
+
9
+ ## [0.1.3] - prior
10
+
11
+ ### Added
12
+ - Initial implementation with `Item` and `Server` runners
13
+ - `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 ADDED
@@ -0,0 +1,5 @@
1
+ FROM legionio/legion:latest
2
+ LABEL maintainer="Matthew Iverson <matthewdiverson@gmail.com>"
3
+
4
+ RUN gem install lex-memcached --no-document --no-prerelease
5
+ CMD ruby --yjit $(which legionio)
data/Gemfile CHANGED
@@ -1,4 +1,14 @@
1
- source 'https://rubygems.org'
1
+ # frozen_string_literal: true
2
2
 
3
- # Specify your gem's dependencies in legion-extensions-memcached.gemspec
3
+ source 'https://rubygems.org'
4
4
  gemspec
5
+
6
+ gem 'legionio'
7
+
8
+ group :test do
9
+ gem 'rake'
10
+ gem 'rspec'
11
+ gem 'rspec_junit_formatter'
12
+ gem 'rubocop'
13
+ gem 'simplecov'
14
+ end
data/Gemfile.lock CHANGED
@@ -1,133 +1,160 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lex-memcached (0.1.1)
5
- dalli
4
+ lex-memcached (0.2.0)
5
+ dalli (>= 3.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- amq-protocol (2.3.2)
11
- ast (2.4.1)
12
- aws-eventstream (1.1.0)
13
- aws-sigv4 (1.2.2)
10
+ addressable (2.8.9)
11
+ public_suffix (>= 2.0.2, < 8.0)
12
+ amq-protocol (2.5.1)
13
+ ast (2.4.3)
14
+ aws-eventstream (1.4.0)
15
+ aws-sigv4 (1.12.1)
14
16
  aws-eventstream (~> 1, >= 1.0.2)
15
- bunny (2.17.0)
16
- amq-protocol (~> 2.3, >= 2.3.1)
17
- codecov (0.2.12)
18
- json
19
- simplecov
20
- concurrent-ruby (1.1.7)
21
- concurrent-ruby-ext (1.1.7)
22
- concurrent-ruby (= 1.1.7)
23
- connection_pool (2.2.3)
24
- daemons (1.3.1)
25
- dalli (2.7.11)
26
- diff-lcs (1.4.4)
27
- docile (1.3.2)
28
- hashdiff (1.0.1)
29
- json (2.3.1)
30
- json_pure (2.3.1)
31
- legion-cache (1.0.0)
32
- connection_pool
33
- dalli
34
- redis
35
- legion-crypt (0.2.1)
36
- vault
37
- legion-data (1.1.4)
17
+ base64 (0.3.0)
18
+ bigdecimal (4.0.1)
19
+ bunny (2.24.0)
20
+ amq-protocol (~> 2.3)
21
+ sorted_set (~> 1, >= 1.0.2)
22
+ concurrent-ruby (1.3.6)
23
+ concurrent-ruby-ext (1.3.6)
24
+ concurrent-ruby (= 1.3.6)
25
+ connection_pool (2.5.5)
26
+ daemons (1.4.1)
27
+ dalli (5.0.2)
28
+ logger
29
+ diff-lcs (1.6.2)
30
+ docile (1.4.1)
31
+ json (2.19.1)
32
+ json-schema (6.2.0)
33
+ addressable (~> 2.8)
34
+ bigdecimal (>= 3.1, < 5)
35
+ json_pure (2.8.1)
36
+ language_server-protocol (3.17.0.5)
37
+ legion-cache (1.2.0)
38
+ connection_pool (>= 2.2.3)
39
+ dalli (>= 2.7)
38
40
  legion-logging
39
41
  legion-settings
40
- mysql2
41
- sequel
42
- legion-exceptions (1.1.2)
43
- legion-json (1.1.2)
42
+ redis (>= 4.2)
43
+ legion-crypt (1.2.0)
44
+ vault (>= 0.15.0)
45
+ legion-json (1.2.0)
44
46
  json_pure
45
47
  multi_json
46
- legion-logging (1.1.3)
48
+ legion-logging (1.2.0)
47
49
  rainbow (~> 3)
48
- legion-settings (1.1.2)
49
- legion-json
50
- legion-logging
51
- legion-transport (1.1.5)
52
- bunny
53
- concurrent-ruby
50
+ legion-settings (1.2.0)
51
+ legion-json (>= 1.2)
52
+ legion-transport (1.2.0)
53
+ bunny (>= 2.17.0)
54
+ concurrent-ruby (>= 1.1.7)
54
55
  legion-json
55
- legionio (0.3.4)
56
- bunny
57
- concurrent-ruby
58
- concurrent-ruby-ext
59
- daemons
60
- hashdiff
61
- legion-cache
62
- legion-crypt
63
- legion-data
64
- legion-exceptions
65
- legion-json
66
- legion-logging
67
56
  legion-settings
68
- legion-transport
57
+ legionio (1.2.1)
58
+ concurrent-ruby (>= 1.1.7)
59
+ concurrent-ruby-ext (>= 1.1.7)
60
+ daemons (>= 1.3.1)
61
+ legion-cache (>= 0.2.0)
62
+ legion-crypt (>= 0.2.0)
63
+ legion-json (>= 0.2.0)
64
+ legion-logging (>= 0.2.0)
65
+ legion-settings (>= 0.2.0)
66
+ legion-transport (>= 1.1.9)
69
67
  lex-node
70
- oj
71
- lex-node (0.1.2)
72
- multi_json (1.15.0)
73
- mysql2 (0.5.3)
74
- oj (3.10.15)
75
- parallel (1.19.2)
76
- parser (2.7.2.0)
68
+ oj (>= 3.10)
69
+ thor (>= 1)
70
+ lex-node (0.2.0)
71
+ lint_roller (1.1.0)
72
+ logger (1.7.0)
73
+ mcp (0.8.0)
74
+ json-schema (>= 4.1)
75
+ multi_json (1.19.1)
76
+ net-http-persistent (4.0.8)
77
+ connection_pool (>= 2.2.4, < 4)
78
+ oj (3.16.16)
79
+ bigdecimal (>= 3.0)
80
+ ostruct (>= 0.2)
81
+ ostruct (0.6.3)
82
+ parallel (1.27.0)
83
+ parser (3.3.10.2)
77
84
  ast (~> 2.4.1)
78
- rainbow (3.0.0)
79
- rake (13.0.1)
80
- redis (4.2.2)
81
- regexp_parser (1.8.2)
82
- rexml (3.2.4)
83
- rspec (3.9.0)
84
- rspec-core (~> 3.9.0)
85
- rspec-expectations (~> 3.9.0)
86
- rspec-mocks (~> 3.9.0)
87
- rspec-core (3.9.3)
88
- rspec-support (~> 3.9.3)
89
- rspec-expectations (3.9.3)
85
+ racc
86
+ prism (1.9.0)
87
+ public_suffix (7.0.5)
88
+ racc (1.8.1)
89
+ rainbow (3.1.1)
90
+ rake (13.3.1)
91
+ rbtree (0.4.6)
92
+ redis (5.4.1)
93
+ redis-client (>= 0.22.0)
94
+ redis-client (0.27.0)
95
+ connection_pool
96
+ regexp_parser (2.11.3)
97
+ rspec (3.13.2)
98
+ rspec-core (~> 3.13.0)
99
+ rspec-expectations (~> 3.13.0)
100
+ rspec-mocks (~> 3.13.0)
101
+ rspec-core (3.13.6)
102
+ rspec-support (~> 3.13.0)
103
+ rspec-expectations (3.13.5)
90
104
  diff-lcs (>= 1.2.0, < 2.0)
91
- rspec-support (~> 3.9.0)
92
- rspec-mocks (3.9.1)
105
+ rspec-support (~> 3.13.0)
106
+ rspec-mocks (3.13.8)
93
107
  diff-lcs (>= 1.2.0, < 2.0)
94
- rspec-support (~> 3.9.0)
95
- rspec-support (3.9.4)
96
- rspec_junit_formatter (0.4.1)
108
+ rspec-support (~> 3.13.0)
109
+ rspec-support (3.13.7)
110
+ rspec_junit_formatter (0.6.0)
97
111
  rspec-core (>= 2, < 4, != 2.12.0)
98
- rubocop (1.0.0)
112
+ rubocop (1.85.1)
113
+ json (~> 2.3)
114
+ language_server-protocol (~> 3.17.0.2)
115
+ lint_roller (~> 1.1.0)
116
+ mcp (~> 0.6)
99
117
  parallel (~> 1.10)
100
- parser (>= 2.7.1.5)
118
+ parser (>= 3.3.0.2)
101
119
  rainbow (>= 2.2.2, < 4.0)
102
- regexp_parser (>= 1.8)
103
- rexml
104
- rubocop-ast (>= 0.6.0)
120
+ regexp_parser (>= 2.9.3, < 3.0)
121
+ rubocop-ast (>= 1.49.0, < 2.0)
105
122
  ruby-progressbar (~> 1.7)
106
- unicode-display_width (>= 1.4.0, < 2.0)
107
- rubocop-ast (1.0.1)
108
- parser (>= 2.7.1.5)
109
- ruby-progressbar (1.10.1)
110
- sequel (5.37.0)
111
- simplecov (0.19.0)
123
+ unicode-display_width (>= 2.4.0, < 4.0)
124
+ rubocop-ast (1.49.1)
125
+ parser (>= 3.3.7.2)
126
+ prism (~> 1.7)
127
+ ruby-progressbar (1.13.0)
128
+ simplecov (0.22.0)
112
129
  docile (~> 1.1)
113
130
  simplecov-html (~> 0.11)
114
- simplecov-html (0.12.3)
115
- unicode-display_width (1.7.0)
116
- vault (0.15.0)
131
+ simplecov_json_formatter (~> 0.1)
132
+ simplecov-html (0.13.2)
133
+ simplecov_json_formatter (0.1.4)
134
+ sorted_set (1.1.0)
135
+ rbtree
136
+ thor (1.5.0)
137
+ unicode-display_width (3.2.0)
138
+ unicode-emoji (~> 4.1)
139
+ unicode-emoji (4.2.0)
140
+ vault (0.20.0)
117
141
  aws-sigv4
142
+ base64
143
+ connection_pool (~> 2.4)
144
+ net-http-persistent (~> 4.0, >= 4.0.2)
118
145
 
119
146
  PLATFORMS
147
+ arm64-darwin-25
120
148
  ruby
121
149
 
122
150
  DEPENDENCIES
123
- bundler
124
- codecov
125
151
  legionio
126
152
  lex-memcached!
127
153
  rake
128
154
  rspec
129
155
  rspec_junit_formatter
130
156
  rubocop
157
+ simplecov
131
158
 
132
159
  BUNDLED WITH
133
- 2.1.2
160
+ 2.6.9
data/README.md CHANGED
@@ -1,35 +1,43 @@
1
- # Legion::Extensions::Memcached
1
+ # lex-memcached
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/legion/extensions/memcached`. To experiment with that code, run `bin/console` for an interactive prompt.
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
- Add this line to your application's Gemfile:
10
-
11
- ```ruby
12
- gem 'legion-extensions-memcached'
7
+ ```bash
8
+ gem install lex-memcached
13
9
  ```
14
10
 
15
- And then execute:
11
+ Or add to your Gemfile:
16
12
 
17
- $ bundle
18
-
19
- Or install it yourself as:
13
+ ```ruby
14
+ gem 'lex-memcached'
15
+ ```
20
16
 
21
- $ gem install legion-extensions-memcached
17
+ ## Runners
22
18
 
23
- ## Usage
19
+ | Runner | Methods |
20
+ |--------|---------|
21
+ | Item | `set`, `get`, `fetch`, `add`, `delete`, `append` |
22
+ | Server | Server management and stats |
24
23
 
25
- TODO: Write usage instructions here
24
+ ### Item Parameters
26
25
 
27
- ## Development
26
+ | Method | Required | Optional |
27
+ |--------|----------|----------|
28
+ | `set` | `key`, `value` | `server`, `ttl` |
29
+ | `get` | `key` | `server` |
30
+ | `fetch` | `key` | `server` |
31
+ | `add` | `key`, `value`, `ttl` | `server` |
32
+ | `delete` | `key` | `server` |
33
+ | `append` | `key`, `value` | `server` |
28
34
 
29
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
35
+ ## Requirements
30
36
 
31
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
37
+ - Ruby >= 3.4
38
+ - [LegionIO](https://github.com/LegionIO/LegionIO) framework
39
+ - Memcached server
32
40
 
33
- ## Contributing
41
+ ## License
34
42
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/legion-extensions-memcached.
43
+ MIT
data/docker_deploy.rb ADDED
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ long_name = 'lex-memcached'
5
+ name = 'memcached'
6
+ require "./lib/legion/extensions/#{name}/version"
7
+ version = Legion::Extensions::Memcached::VERSION
8
+
9
+ system("gem build #{long_name}.gemspec")
10
+ system("gh release create v#{version} '#{long_name}-#{version}.gem'")
11
+ system("gem push #{long_name}-#{version}.gem")
12
+ system("gem push --key github --host https://rubygems.pkg.github.com/LegionIO #{long_name}-#{version}.gem")
13
+
14
+ puts "Building docker image for Legion v#{version}"
15
+ system("docker build --tag legionio/lex-#{name}:v#{version} .")
16
+ puts 'Pushing to hub.docker.com'
17
+ system("docker push legionio/lex-#{name}:v#{version}")
18
+ system("docker push legionio/lex-#{name}:latest")
19
+ puts 'completed'
@@ -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'
@@ -5,19 +7,20 @@ require 'legion/extensions/memcached/version'
5
7
  Gem::Specification.new do |spec|
6
8
  spec.name = 'lex-memcached'
7
9
  spec.version = Legion::Extensions::Memcached::VERSION
8
- spec.authors = ['Miverson']
10
+ spec.authors = ['Esity']
9
11
  spec.email = ['matthewdiverson@gmail.com']
10
12
 
11
13
  spec.summary = 'LEX::Memcached'
12
- spec.description = 'LEX::Memcached'
13
- spec.homepage = 'https://bitbucket.org/legion-io/lex-memcached'
14
- spec.required_ruby_version = Gem::Requirement.new('>= 2.5.0')
14
+ spec.description = 'LegionIO Extensions to connect to and manage memcached servers'
15
+ spec.homepage = 'https://github.com/LegionIO/lex-memcached'
16
+ spec.required_ruby_version = '>= 3.4'
15
17
 
16
18
  spec.metadata['homepage_uri'] = spec.homepage
17
- spec.metadata['source_code_uri'] = 'https://bitbucket.org/legion-io/lex-memcached'
18
- spec.metadata['documentation_uri'] = 'https://legionio.atlassian.net/wiki/spaces/LEX/pages/614858753'
19
- spec.metadata['changelog_uri'] = 'https://legionio.atlassian.net/wiki/spaces/LEX/pages/614858760'
20
- spec.metadata['bug_tracker_uri'] = 'https://bitbucket.org/legion-io/lex-memcached/issues'
19
+ spec.metadata['source_code_uri'] = 'https://github.com/LegionIO/lex-memcached'
20
+ spec.metadata['documentation_uri'] = 'https://github.com/LegionIO/lex-memcached'
21
+ spec.metadata['changelog_uri'] = 'https://github.com/LegionIO/lex-memcached'
22
+ spec.metadata['bug_tracker_uri'] = 'https://github.com/LegionIO/lex-memcached/issues'
23
+ spec.metadata['rubygems_mfa_required'] = 'true'
21
24
 
22
25
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
23
26
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
@@ -25,13 +28,5 @@ Gem::Specification.new do |spec|
25
28
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
26
29
  spec.require_paths = ['lib']
27
30
 
28
- spec.add_development_dependency 'bundler'
29
- spec.add_development_dependency 'codecov'
30
- spec.add_development_dependency 'legionio'
31
- spec.add_development_dependency 'rake'
32
- spec.add_development_dependency 'rspec'
33
- spec.add_development_dependency 'rspec_junit_formatter'
34
- spec.add_development_dependency 'rubocop'
35
-
36
- spec.add_dependency 'dalli'
31
+ spec.add_dependency 'dalli', '>= 3.0'
37
32
  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', **opts)
9
- Dalli::Client.new(server, **opts)
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
- module Legion::Extensions::Memcached
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
- def get(key:, server: nil, **opts)
12
- { success: true, get: client(server: server, **opts).get(key), **opts }
13
- end
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
- def fetch(key:, server: nil, **opts)
16
- { success: true, fetch: client(server: server, **opts).fetch(key), **opts }
17
- end
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
- def add(key:, value:, ttl:, server: nil, **opts)
20
- { success: true, add: client(server: server, **opts).add(key, value, ttl), **opts }
21
- end
15
+ def get(key:, server: nil, **)
16
+ { success: true, get: client(server: server, **).get(key), **opts }
17
+ end
22
18
 
23
- def delete(key:, server: nil, **opts)
24
- { success: true, delete: client(server: server, **opts).delete(key), **opts }
25
- end
19
+ def fetch(key:, server: nil, **)
20
+ { success: true, fetch: client(server: server, **).fetch(key), **opts }
21
+ end
26
22
 
27
- def append(key:, value:, server: nil, **opts)
28
- { success: true, append: client(server: server, **opts).append(key, value), **opts }
29
- end
23
+ def add(key:, value:, ttl:, server: nil, **)
24
+ { success: true, add: client(server: server, **).add(key, value, ttl), **opts }
25
+ end
26
+
27
+ def delete(key:, server: nil, **)
28
+ { success: true, delete: client(server: server, **).delete(key), **opts }
29
+ end
30
30
 
31
- include Legion::Extensions::Helpers::Lex
31
+ def append(key:, value:, server: nil, **)
32
+ { success: true, append: client(server: server, **).append(key, value), **opts }
33
+ end
34
+
35
+ include Legion::Extensions::Helpers::Lex
36
+ end
37
+ end
32
38
  end
33
39
  end
34
40
  end
@@ -1,29 +1,35 @@
1
- module Legion::Extensions::Memcached
2
- module Runners
3
- module Server
4
- include Legion::Extensions::Memcached::Helpers::Client
1
+ # frozen_string_literal: true
5
2
 
6
- def alive(server: nil, **opts)
7
- { success: true, result: client(server: server, **opts).alive?, **opts }
8
- end
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
- def flush(delay: 0, server: nil, **opts)
11
- { success: true, result: Dalli::Client.new(server).flush(delay), **opts }
12
- end
10
+ def alive(server: nil, **)
11
+ { success: true, result: client(server: server, **).alive?, **opts }
12
+ end
13
13
 
14
- def stats(delay: 0, server: nil, **opts)
15
- { success: true, result: client(server: server, **opts).stats(delay), **opts }
16
- end
14
+ def flush(delay: 0, server: nil, **opts)
15
+ { success: true, result: Dalli::Client.new(server).flush(delay), **opts }
16
+ end
17
17
 
18
- def reset_stats(server: nil, **opts)
19
- { success: true, result: client(server: server, **opts).reset_stats, **opts }
20
- end
18
+ def stats(delay: 0, server: nil, **)
19
+ { success: true, result: client(server: server, **).stats(delay), **opts }
20
+ end
21
21
 
22
- def version(server: nil, **opts)
23
- { success: true, result: client(server: server, **opts).version, **opts }
24
- end
22
+ def reset_stats(server: nil, **)
23
+ { success: true, result: client(server: server, **).reset_stats, **opts }
24
+ end
25
+
26
+ def version(server: nil, **)
27
+ { success: true, result: client(server: server, **).version, **opts }
28
+ end
25
29
 
26
- include Legion::Extensions::Helpers::Lex
30
+ include Legion::Extensions::Helpers::Lex
31
+ end
32
+ end
27
33
  end
28
34
  end
29
35
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Legion
2
4
  module Extensions
3
5
  module Memcached
4
- VERSION = '0.1.2'.freeze
6
+ VERSION = '0.2.0'
5
7
  end
6
8
  end
7
9
  end
@@ -1,4 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'legion/extensions/memcached/version'
4
+ require 'legion/extensions/memcached/client'
2
5
 
3
6
  module Legion
4
7
  module Extensions
metadata CHANGED
@@ -1,162 +1,62 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lex-memcached
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
- - Miverson
8
- autorequire:
7
+ - Esity
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2020-10-24 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
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
- - !ruby/object:Gem::Dependency
28
- name: codecov
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: legionio
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: rake
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: rspec
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: rspec_junit_formatter
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: rubocop
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
12
  - !ruby/object:Gem::Dependency
112
13
  name: dalli
113
14
  requirement: !ruby/object:Gem::Requirement
114
15
  requirements:
115
16
  - - ">="
116
17
  - !ruby/object:Gem::Version
117
- version: '0'
18
+ version: '3.0'
118
19
  type: :runtime
119
20
  prerelease: false
120
21
  version_requirements: !ruby/object:Gem::Requirement
121
22
  requirements:
122
23
  - - ">="
123
24
  - !ruby/object:Gem::Version
124
- version: '0'
125
- description: LEX::Memcached
25
+ version: '3.0'
26
+ description: LegionIO Extensions to connect to and manage memcached servers
126
27
  email:
127
28
  - matthewdiverson@gmail.com
128
29
  executables: []
129
30
  extensions: []
130
31
  extra_rdoc_files: []
131
32
  files:
132
- - ".circleci/config.yml"
33
+ - ".github/workflows/ci.yml"
133
34
  - ".gitignore"
134
35
  - ".rspec"
135
36
  - ".rubocop.yml"
136
37
  - CHANGELOG.md
38
+ - CLAUDE.md
39
+ - Dockerfile
137
40
  - Gemfile
138
41
  - Gemfile.lock
139
42
  - README.md
140
- - Rakefile
141
- - bin/console
142
- - bin/lex-memcached
143
- - bin/setup
144
- - bitbucket-pipelines.yml
43
+ - docker_deploy.rb
145
44
  - lex-memcached.gemspec
146
45
  - lib/legion/extensions/memcached.rb
46
+ - lib/legion/extensions/memcached/client.rb
147
47
  - lib/legion/extensions/memcached/helpers/client.rb
148
48
  - lib/legion/extensions/memcached/runners/item.rb
149
49
  - lib/legion/extensions/memcached/runners/server.rb
150
50
  - lib/legion/extensions/memcached/version.rb
151
- homepage: https://bitbucket.org/legion-io/lex-memcached
51
+ homepage: https://github.com/LegionIO/lex-memcached
152
52
  licenses: []
153
53
  metadata:
154
- homepage_uri: https://bitbucket.org/legion-io/lex-memcached
155
- source_code_uri: https://bitbucket.org/legion-io/lex-memcached
156
- documentation_uri: https://legionio.atlassian.net/wiki/spaces/LEX/pages/614858753
157
- changelog_uri: https://legionio.atlassian.net/wiki/spaces/LEX/pages/614858760
158
- bug_tracker_uri: https://bitbucket.org/legion-io/lex-memcached/issues
159
- post_install_message:
54
+ homepage_uri: https://github.com/LegionIO/lex-memcached
55
+ source_code_uri: https://github.com/LegionIO/lex-memcached
56
+ documentation_uri: https://github.com/LegionIO/lex-memcached
57
+ changelog_uri: https://github.com/LegionIO/lex-memcached
58
+ bug_tracker_uri: https://github.com/LegionIO/lex-memcached/issues
59
+ rubygems_mfa_required: 'true'
160
60
  rdoc_options: []
161
61
  require_paths:
162
62
  - lib
@@ -164,15 +64,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
164
64
  requirements:
165
65
  - - ">="
166
66
  - !ruby/object:Gem::Version
167
- version: 2.5.0
67
+ version: '3.4'
168
68
  required_rubygems_version: !ruby/object:Gem::Requirement
169
69
  requirements:
170
70
  - - ">="
171
71
  - !ruby/object:Gem::Version
172
72
  version: '0'
173
73
  requirements: []
174
- rubygems_version: 3.1.2
175
- signing_key:
74
+ rubygems_version: 3.6.9
176
75
  specification_version: 4
177
76
  summary: LEX::Memcached
178
77
  test_files: []
data/.circleci/config.yml DELETED
@@ -1,61 +0,0 @@
1
- version: 2.1
2
- orbs:
3
- ruby: circleci/ruby@0.2.1
4
-
5
- jobs:
6
- "rubocop":
7
- docker:
8
- - image: circleci/ruby:2.5-node
9
- steps:
10
- - checkout
11
- - ruby/load-cache
12
- - ruby/install-deps
13
- - run:
14
- name: Run Rubocop
15
- command: bundle exec rubocop
16
- - ruby/save-cache
17
- "ruby-two-five":
18
- docker:
19
- - image: circleci/ruby:2.5
20
- - image: memcached:1.5-alpine
21
- steps:
22
- - checkout
23
- - ruby/load-cache
24
- - ruby/install-deps
25
- - ruby/run-tests
26
- - ruby/save-cache
27
- "ruby-two-six":
28
- docker:
29
- - image: circleci/ruby:2.6
30
- - image: memcached:1.5-alpine
31
- steps:
32
- - checkout
33
- - ruby/load-cache
34
- - ruby/install-deps
35
- - ruby/run-tests
36
- - ruby/save-cache
37
- "ruby-two-seven":
38
- docker:
39
- - image: circleci/ruby:2.7
40
- - image: memcached:1.5-alpine
41
- steps:
42
- - checkout
43
- - ruby/load-cache
44
- - ruby/install-deps
45
- - ruby/run-tests
46
- - ruby/save-cache
47
-
48
- workflows:
49
- version: 2
50
- rubocop-rspec:
51
- jobs:
52
- - rubocop
53
- - ruby-two-five:
54
- requires:
55
- - rubocop
56
- - ruby-two-six:
57
- requires:
58
- - ruby-two-five
59
- - ruby-two-seven:
60
- requires:
61
- - ruby-two-five
data/Rakefile DELETED
@@ -1,6 +0,0 @@
1
- require 'bundler/gem_tasks'
2
- require 'rspec/core/rake_task'
3
-
4
- RSpec::Core::RakeTask.new(:spec)
5
-
6
- task default: :spec
data/bin/console DELETED
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'bundler/setup'
4
- require 'legion/extensions/memcached'
5
-
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require 'irb'
14
- IRB.start(__FILE__)
data/bin/lex-memcached DELETED
@@ -1,58 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
- # rubocop:disable all
4
- require 'optparse'
5
-
6
- options = { action: :run }
7
-
8
- daemonize_help = 'run daemonized in the background (default: false)'
9
- pidfile_help = 'the pid filename'
10
- logfile_help = 'the log filename'
11
- include_help = 'an additional $LOAD_PATH (may be used more than once)'
12
- debug_help = 'set $DEBUG to true'
13
- warn_help = 'enable warnings'
14
-
15
- op = OptionParser.new
16
- op.banner = 'An example of how to daemonize a long running Ruby process.'
17
- op.separator ''
18
- op.separator 'Usage: server [options]'
19
- op.separator ''
20
-
21
- op.separator ''
22
- op.separator 'Process options:'
23
- op.on('-d', '--daemonize', daemonize_help) { options[:daemonize] = true }
24
- op.on('-p', '--pid PIDFILE', pidfile_help) { |value| options[:pidfile] = value }
25
- op.on('-l', '--log LOGFILE', logfile_help) { |value| options[:logfile] = value }
26
-
27
- op.separator ''
28
- op.separator 'Ruby options:'
29
- op.on('-I', '--include PATH', include_help) {
30
- |value| $LOAD_PATH.unshift(*value.split(':').map {
31
- |v| File.expand_path(v)
32
- })
33
- }
34
- op.on('--debug', debug_help) { $DEBUG = true }
35
- op.on('--warn', warn_help) { $-w = true }
36
-
37
- op.separator ''
38
- op.separator 'Common options:'
39
- op.on('-h', '--help') { options[:action] = :help }
40
- op.on('-v', '--version') { options[:action] = :version }
41
-
42
- op.separator ''
43
- op.parse!(ARGV)
44
-
45
- #==============================================================================
46
- # EXECUTE script
47
- #==============================================================================
48
-
49
- require File.expand_path('lib/legion.rb') unless options[:action] == :help
50
- require File.expand_path('lib/legion/process.rb') unless options[:action] == :help
51
- case options[:action]
52
- when :help then puts op.to_s
53
- when :version then puts Legion::VERSION
54
- else
55
- Legion::Process.run!(options)
56
- end
57
-
58
- Legion::Process.new(options).run!
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here
@@ -1,17 +0,0 @@
1
- image: ruby:2.7.0
2
-
3
- pipelines:
4
- tags:
5
- "v*":
6
- - step:
7
- name: Push to RubyGems
8
- deployment: RubyGems
9
- script:
10
- - gem install bundler gem-release rake rspec
11
- - bundle install
12
- - rake build
13
- - mkdir .gem
14
- - (umask 077 ; echo $gem_creds | base64 --decode > .gem/credentials)
15
- - gem release
16
- artifacts:
17
- - pkg/**