lex-mongodb 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 49e67347c208ee7d782532b70325d192f1da909a11430536bebe4523ee2c1803
4
+ data.tar.gz: c1143f932b61e0d24118cd683dd8b8304490ab1510be20b5cc9b9a5fa323f6cb
5
+ SHA512:
6
+ metadata.gz: ea6fa58a150dc8b37857897ddeab2b9a7a70a6a7f80149cbc6b43d51a7c8bd5408129524feec7d8c501b044fb237570f8e20b4b953c7746191ac0f3b3d980e87
7
+ data.tar.gz: 411bceadb66c42ce25f0d3f786d79abe49ec289cc2c7c382868e782e36e719801315cffb408a5adee4ca489420d4f05bff6d66ae55fe143c19792bffcbd02851
@@ -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 ADDED
@@ -0,0 +1,12 @@
1
+ Gemfile.lock
2
+ /.bundle/
3
+ /.yardoc
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+
11
+ # rspec failure tracking
12
+ .rspec_status
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
data/.rubocop.yml ADDED
@@ -0,0 +1,50 @@
1
+ AllCops:
2
+ TargetRubyVersion: 3.4
3
+ NewCops: enable
4
+ SuggestExtensions: false
5
+
6
+ Layout/LineLength:
7
+ Max: 160
8
+
9
+ Layout/SpaceAroundEqualsInParameterDefault:
10
+ EnforcedStyle: space
11
+
12
+ Layout/HashAlignment:
13
+ EnforcedHashRocketStyle: table
14
+ EnforcedColonStyle: table
15
+
16
+ Metrics/MethodLength:
17
+ Max: 50
18
+
19
+ Metrics/ClassLength:
20
+ Max: 1500
21
+
22
+ Metrics/ModuleLength:
23
+ Max: 1500
24
+
25
+ Metrics/BlockLength:
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
+
39
+ Style/Documentation:
40
+ Enabled: false
41
+
42
+ Style/SymbolArray:
43
+ Enabled: true
44
+
45
+ Style/FrozenStringLiteralComment:
46
+ Enabled: true
47
+ EnforcedStyle: always
48
+
49
+ Naming/FileName:
50
+ Enabled: false
data/CHANGELOG.md ADDED
@@ -0,0 +1,22 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [0.1.2] - 2026-03-22
9
+
10
+ ### Changed
11
+ - Add legion-cache, legion-crypt, legion-data, legion-json, legion-logging, legion-settings, and legion-transport as runtime dependencies
12
+ - Update spec_helper with real sub-gem helper stubs (Legion::Extensions::Helpers::Lex backed by real helpers)
13
+
14
+ ## [0.1.0] - 2026-03-21
15
+
16
+ ### Added
17
+ - Initial release
18
+ - `Helpers::Client` module with `Mongo::Client` connection builder (uri, database)
19
+ - `Runners::Documents` with find, insert_one, insert_many, update_one, delete_one, count
20
+ - `Runners::Collections` with list_collections, create_collection, drop_collection, collection_stats
21
+ - Standalone `Client` class including all runner modules
22
+ - Full spec coverage (17 specs)
data/Gemfile ADDED
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec
6
+
7
+ gem 'bundler', '>= 2'
8
+ gem 'rake'
9
+ gem 'rspec'
10
+ gem 'rubocop'
11
+ gem 'rubocop-rspec'
data/README.md ADDED
@@ -0,0 +1,75 @@
1
+ # lex-mongodb
2
+
3
+ LegionIO extension connecting LegionIO to MongoDB. Provides runners for document operations
4
+ and collection management.
5
+
6
+ ## Installation
7
+
8
+ Add to your Gemfile:
9
+
10
+ ```ruby
11
+ gem 'lex-mongodb'
12
+ ```
13
+
14
+ ## Standalone Client Usage
15
+
16
+ ```ruby
17
+ require 'legion/extensions/mongodb'
18
+
19
+ client = Legion::Extensions::Mongodb::Client.new(
20
+ uri: 'mongodb://localhost:27017',
21
+ database: 'myapp'
22
+ )
23
+
24
+ # Insert a document
25
+ client.insert_one(collection: 'users', document: { name: 'Jane Doe', role: 'admin' })
26
+
27
+ # Find documents
28
+ result = client.find(collection: 'users', filter: { role: 'admin' })
29
+ puts result[:result]
30
+
31
+ # Insert multiple documents
32
+ client.insert_many(
33
+ collection: 'logs',
34
+ documents: [{ event: 'login' }, { event: 'logout' }]
35
+ )
36
+
37
+ # Update a document
38
+ client.update_one(
39
+ collection: 'users',
40
+ filter: { name: 'Jane Doe' },
41
+ update: { role: 'superadmin' }
42
+ )
43
+
44
+ # Delete a document
45
+ client.delete_one(collection: 'users', filter: { name: 'Jane Doe' })
46
+
47
+ # Count documents matching a filter
48
+ result = client.count(collection: 'users', filter: { role: 'admin' })
49
+ puts result[:result]
50
+
51
+ # List collections
52
+ result = client.list_collections
53
+ puts result[:result]
54
+
55
+ # Create a collection
56
+ client.create_collection(collection: 'events')
57
+
58
+ # Drop a collection
59
+ client.drop_collection(collection: 'events')
60
+
61
+ # Get collection stats
62
+ result = client.collection_stats(collection: 'users')
63
+ puts result[:result]
64
+ ```
65
+
66
+ ## Configuration
67
+
68
+ | Setting | Default | Description |
69
+ |---------|---------|-------------|
70
+ | `uri` | `mongodb://127.0.0.1:27017` | MongoDB connection URI |
71
+ | `database` | `legion` | Default database name |
72
+
73
+ ## License
74
+
75
+ MIT
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/legion/extensions/mongodb/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'lex-mongodb'
7
+ spec.version = Legion::Extensions::Mongodb::VERSION
8
+ spec.authors = ['Esity']
9
+ spec.email = ['matthewdiverson@gmail.com']
10
+
11
+ spec.summary = 'LEX::MongoDB'
12
+ spec.description = 'Connects LegionIO to MongoDB'
13
+ spec.homepage = 'https://github.com/LegionIO/lex-mongodb'
14
+ spec.license = 'MIT'
15
+ spec.required_ruby_version = '>= 3.4'
16
+
17
+ spec.metadata['homepage_uri'] = spec.homepage
18
+ spec.metadata['source_code_uri'] = 'https://github.com/LegionIO/lex-mongodb'
19
+ spec.metadata['documentation_uri'] = 'https://github.com/LegionIO/lex-mongodb'
20
+ spec.metadata['changelog_uri'] = 'https://github.com/LegionIO/lex-mongodb'
21
+ spec.metadata['bug_tracker_uri'] = 'https://github.com/LegionIO/lex-mongodb/issues'
22
+ spec.metadata['rubygems_mfa_required'] = 'true'
23
+
24
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
25
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
26
+ end
27
+ spec.require_paths = ['lib']
28
+
29
+ spec.add_dependency 'legion-cache', '>= 1.3.11'
30
+ spec.add_dependency 'legion-crypt', '>= 1.4.9'
31
+ spec.add_dependency 'legion-data', '>= 1.4.17'
32
+ spec.add_dependency 'legion-json', '>= 1.2.1'
33
+ spec.add_dependency 'legion-logging', '>= 1.3.2'
34
+ spec.add_dependency 'legion-settings', '>= 1.3.14'
35
+ spec.add_dependency 'legion-transport', '>= 1.3.9'
36
+ spec.add_dependency 'mongo', '~> 2.19'
37
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'helpers/client'
4
+ require_relative 'runners/documents'
5
+ require_relative 'runners/collections'
6
+
7
+ module Legion
8
+ module Extensions
9
+ module Mongodb
10
+ class Client
11
+ include Runners::Documents
12
+ include Runners::Collections
13
+
14
+ attr_reader :opts
15
+
16
+ def initialize(uri: 'mongodb://127.0.0.1:27017', database: 'legion', **extra)
17
+ @opts = { uri: uri, database: database, **extra }
18
+ end
19
+
20
+ def client(**override)
21
+ Helpers::Client.client(**@opts, **override)
22
+ end
23
+
24
+ def database(**override)
25
+ override[:database] || @opts[:database] || 'legion'
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'mongo'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Mongodb
8
+ module Helpers
9
+ module Client
10
+ def self.client(uri: 'mongodb://127.0.0.1:27017', database: 'legion', **_opts)
11
+ ::Mongo::Client.new(uri, database: database)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/mongodb/helpers/client'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Mongodb
8
+ module Runners
9
+ module Collections
10
+ def list_collections(**)
11
+ names = client(**).use(database(**)).list_collections.map { |c| c['name'] }
12
+ { result: names }
13
+ end
14
+
15
+ def create_collection(collection:, **)
16
+ client(**).use(database(**)).command(create: collection)
17
+ { result: collection }
18
+ end
19
+
20
+ def drop_collection(collection:, **)
21
+ client(**).use(database(**)).collection(collection).drop
22
+ { result: collection }
23
+ end
24
+
25
+ def collection_stats(collection:, **)
26
+ result = client(**).use(database(**)).command(collStats: collection).documents.first
27
+ { result: result }
28
+ end
29
+
30
+ def database(**opts)
31
+ opts[:database] || 'legion'
32
+ end
33
+
34
+ extend Legion::Extensions::Mongodb::Helpers::Client
35
+ include Legion::Extensions::Helpers::Lex if defined?(Legion::Extensions::Helpers::Lex)
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/mongodb/helpers/client'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Mongodb
8
+ module Runners
9
+ module Documents
10
+ def find(collection:, filter: {}, limit: 0, **)
11
+ cursor = client(**).use(database(**))
12
+ .collection(collection)
13
+ .find(filter)
14
+ cursor = cursor.limit(limit) if limit.positive?
15
+ { result: cursor.to_a }
16
+ end
17
+
18
+ def insert_one(collection:, document:, **)
19
+ result = client(**).use(database(**)).collection(collection).insert_one(document)
20
+ { result: result.inserted_id }
21
+ end
22
+
23
+ def insert_many(collection:, documents:, **)
24
+ result = client(**).use(database(**)).collection(collection).insert_many(documents)
25
+ { result: result.inserted_ids }
26
+ end
27
+
28
+ def update_one(collection:, filter:, update:, upsert: false, **)
29
+ result = client(**).use(database(**)).collection(collection)
30
+ .update_one(filter, { '$set' => update }, upsert: upsert)
31
+ { result: result.modified_count }
32
+ end
33
+
34
+ def delete_one(collection:, filter:, **)
35
+ result = client(**).use(database(**)).collection(collection).delete_one(filter)
36
+ { result: result.deleted_count }
37
+ end
38
+
39
+ def count(collection:, filter: {}, **)
40
+ result = client(**).use(database(**)).collection(collection).count_documents(filter)
41
+ { result: result }
42
+ end
43
+
44
+ def database(**opts)
45
+ opts[:database] || 'legion'
46
+ end
47
+
48
+ extend Legion::Extensions::Mongodb::Helpers::Client
49
+ include Legion::Extensions::Helpers::Lex if defined?(Legion::Extensions::Helpers::Lex)
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Mongodb
6
+ VERSION = '0.1.2'
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/mongodb/version'
4
+ require 'legion/extensions/mongodb/helpers/client'
5
+ require 'legion/extensions/mongodb/runners/documents'
6
+ require 'legion/extensions/mongodb/runners/collections'
7
+ require 'legion/extensions/mongodb/client'
8
+
9
+ module Legion
10
+ module Extensions
11
+ module Mongodb
12
+ extend Legion::Extensions::Core if Legion::Extensions.const_defined?(:Core, false)
13
+ end
14
+ end
15
+ end
metadata ADDED
@@ -0,0 +1,172 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lex-mongodb
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ platform: ruby
6
+ authors:
7
+ - Esity
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: legion-cache
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: 1.3.11
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: 1.3.11
26
+ - !ruby/object:Gem::Dependency
27
+ name: legion-crypt
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.4.9
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 1.4.9
40
+ - !ruby/object:Gem::Dependency
41
+ name: legion-data
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 1.4.17
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 1.4.17
54
+ - !ruby/object:Gem::Dependency
55
+ name: legion-json
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 1.2.1
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: 1.2.1
68
+ - !ruby/object:Gem::Dependency
69
+ name: legion-logging
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 1.3.2
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: 1.3.2
82
+ - !ruby/object:Gem::Dependency
83
+ name: legion-settings
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 1.3.14
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: 1.3.14
96
+ - !ruby/object:Gem::Dependency
97
+ name: legion-transport
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 1.3.9
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: 1.3.9
110
+ - !ruby/object:Gem::Dependency
111
+ name: mongo
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '2.19'
117
+ type: :runtime
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '2.19'
124
+ description: Connects LegionIO to MongoDB
125
+ email:
126
+ - matthewdiverson@gmail.com
127
+ executables: []
128
+ extensions: []
129
+ extra_rdoc_files: []
130
+ files:
131
+ - ".github/workflows/ci.yml"
132
+ - ".gitignore"
133
+ - ".rspec"
134
+ - ".rubocop.yml"
135
+ - CHANGELOG.md
136
+ - Gemfile
137
+ - README.md
138
+ - lex-mongodb.gemspec
139
+ - lib/legion/extensions/mongodb.rb
140
+ - lib/legion/extensions/mongodb/client.rb
141
+ - lib/legion/extensions/mongodb/helpers/client.rb
142
+ - lib/legion/extensions/mongodb/runners/collections.rb
143
+ - lib/legion/extensions/mongodb/runners/documents.rb
144
+ - lib/legion/extensions/mongodb/version.rb
145
+ homepage: https://github.com/LegionIO/lex-mongodb
146
+ licenses:
147
+ - MIT
148
+ metadata:
149
+ homepage_uri: https://github.com/LegionIO/lex-mongodb
150
+ source_code_uri: https://github.com/LegionIO/lex-mongodb
151
+ documentation_uri: https://github.com/LegionIO/lex-mongodb
152
+ changelog_uri: https://github.com/LegionIO/lex-mongodb
153
+ bug_tracker_uri: https://github.com/LegionIO/lex-mongodb/issues
154
+ rubygems_mfa_required: 'true'
155
+ rdoc_options: []
156
+ require_paths:
157
+ - lib
158
+ required_ruby_version: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ version: '3.4'
163
+ required_rubygems_version: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ requirements: []
169
+ rubygems_version: 3.6.9
170
+ specification_version: 4
171
+ summary: LEX::MongoDB
172
+ test_files: []