Socket
Book a DemoInstallSign in
Socket

gitdb-client

Package Overview
Dependencies
Maintainers
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

gitdb-client

1.0.0
bundlerRubygems
Version published
Maintainers
2
Created
Source

GitDB Ruby Client

Official Ruby client for GitDB - GitHub-backed NoSQL database.

Installation

Add this line to your application's Gemfile:

gem 'gitdb-client'

And then execute:

$ bundle install

Or install it yourself as:

$ gem install gitdb-client

Quick Start

require 'gitdb_client'

# Create a client instance
client = GitDBClient.new('your-github-token', 'owner', 'repository')

# Check server health
client.health

# Create a collection
client.create_collection('users')

# Insert a document
document = {
  name: 'John Doe',
  email: 'john@example.com',
  age: 30
}

id = client.insert('users', document)
puts "Inserted document with ID: #{id}"

# Find documents
query = {
  age: { '$gte' => 25 }
}

documents = client.find('users', query)
puts "Found #{documents.length} documents"

# Update a document
update = { age: 31 }
client.update('users', id, update)

# Delete a document
client.delete('users', id)

Features

  • Simple Ruby API - Easy to use Ruby interface
  • Full CRUD operations - Create, Read, Update, Delete documents
  • Query support - MongoDB-style query operators
  • Collection management - Create, list, delete collections
  • Error handling - Comprehensive error handling
  • HTTP client - Built-in HTTP client with retry logic
  • JSON handling - Native JSON serialization/deserialization
  • Ruby 2.6+ support - Modern Ruby compatibility

Configuration

GitHub Token

You'll need a GitHub Personal Access Token with the following permissions:

  • repo - Full control of private repositories
  • workflow - Update GitHub Action workflows

Create a token at: https://github.com/settings/tokens

Client Initialization

require 'gitdb_client'

# Basic initialization
client = GitDBClient.new('token', 'owner', 'repo')

# With custom base URL (for self-hosted instances)
client = GitDBClient.new('token', 'owner', 'repo', 'http://localhost:7896')

API Reference

Client Creation

# Create a new client
client = GitDBClient.new(token, owner, repo)

# Create client with custom URL
client = GitDBClient.new(token, owner, repo, 'http://localhost:7896')

Health Check

# Check if server is healthy
client.health

Collection Management

# Create a collection
client.create_collection('users')

# List all collections
collections = client.list_collections
collections.each do |collection|
  puts "Collection: #{collection['name']} (#{collection['count']} documents)"
end

# Delete a collection
client.delete_collection('users')

Document Operations

Insert

document = {
  name: 'Alice',
  email: 'alice@example.com',
  age: 25
}

id = client.insert('users', document)
puts "Inserted with ID: #{id}"

Find

# Find all documents
all_users = client.find('users', nil)

# Find with query
query = {
  age: { '$gte' => 30 }
}
older_users = client.find('users', query)

# Find one document
user = client.find_one('users', query)

# Find by ID
user = client.find_by_id('users', 'document-id')

Update

update = {
  age: 26,
  last_updated: '2024-01-01'
}

client.update('users', 'document-id', update)

Delete

# Delete by ID
client.delete('users', 'document-id')

# Delete multiple documents
query = {
  age: { '$lt' => 18 }
}
deleted_count = client.delete_many('users', query)

Batch Operations

# Insert multiple documents
documents = [
  { name: 'Alice', age: 25 },
  { name: 'Bob', age: 30 },
  { name: 'Charlie', age: 35 }
]

documents.each do |doc|
  id = client.insert('users', doc)
end

# Update multiple documents
query = {
  age: { '$gte' => 25 }
}

update = {
  category: 'senior'
}

updated_count = client.update_many('users', query, update)

Query Operators

The Ruby client supports MongoDB-style query operators:

query = {}

# Equal
query[:age] = 30

# Greater than
query[:age] = { '$gt' => 25 }

# Greater than or equal
query[:age] = { '$gte' => 25 }

# Less than
query[:age] = { '$lt' => 50 }

# Less than or equal
query[:age] = { '$lte' => 50 }

# In array
query[:status] = { '$in' => ['active', 'pending'] }

# Not in array
query[:status] = { '$nin' => ['inactive', 'deleted'] }

# Logical AND
query[:'$and'] = [
  { age: { '$gte' => 18 } },
  { status: 'active' }
]

# Logical OR
query[:'$or'] = [
  { status: 'active' },
  { status: 'pending' }
]

Error Handling

The SDK provides comprehensive error handling:

begin
  document = client.find_by_id('users', 'non-existent-id')
rescue GitDBError => e
  puts "GitDB Error: #{e.message}"
  puts "Status Code: #{e.status_code}"
rescue => e
  puts "General Error: #{e.message}"
end

Advanced Usage

Custom HTTP Client

require 'httparty'

# Create custom HTTP client
http_client = HTTParty
http_client.timeout = 30

# Create GitDB client with custom HTTP client
client = GitDBClient.new('token', 'owner', 'repo', http_client: http_client)

Retry Logic

# The client includes built-in retry logic for transient errors
# You can configure retry behavior if needed
client.max_retries = 3
client.retry_delay = 1

Examples

User Management System

require 'gitdb_client'

class User
  attr_accessor :id, :name, :email, :age, :status, :created_at

  def initialize(name, email, age)
    @name = name
    @email = email
    @age = age
    @status = 'active'
    @created_at = Time.now
  end

  def to_hash
    {
      name: @name,
      email: @email,
      age: @age,
      status: @status,
      created_at: @created_at
    }
  end
end

class UserManager
  def initialize(token, owner, repo)
    @client = GitDBClient.new(token, owner, repo)
  end

  def create_user(name, email, age)
    user = User.new(name, email, age)
    @client.insert('users', user.to_hash)
  end

  def find_user_by_email(email)
    query = { email: email }
    @client.find_one('users', query)
  end

  def update_user_status(user_id, status)
    update = { status: status }
    @client.update('users', user_id, update)
  end

  def get_active_users
    query = { status: 'active' }
    @client.find('users', query)
  end

  def delete_inactive_users
    query = { status: 'inactive' }
    @client.delete_many('users', query)
  end
end

# Usage
user_manager = UserManager.new('your-token', 'owner', 'repo')

# Create user
user_id = user_manager.create_user('John Doe', 'john@example.com', 30)

# Find user
user = user_manager.find_user_by_email('john@example.com')

# Update status
user_manager.update_user_status(user_id, 'inactive')

# Get active users
active_users = user_manager.get_active_users
puts "Active users: #{active_users.length}"

Testing

require 'rspec'
require 'gitdb_client'

RSpec.describe GitDBClient do
  describe '#new' do
    it 'creates a client instance' do
      client = GitDBClient.new('token', 'owner', 'repo')
      expect(client).to be_a(GitDBClient)
    end
  end

  describe '#insert and #find_by_id' do
    it 'inserts and finds a document' do
      client = GitDBClient.new('token', 'owner', 'repo')

      # Test document
      document = {
        name: 'Test User',
        age: 25
      }

      # Insert
      id = client.insert('test', document)

      # Find by ID
      found = client.find_by_id('test', id)

      expect(found['name']).to eq('Test User')

      # Cleanup
      client.delete('test', id)
    end
  end
end

Troubleshooting

Common Issues

  • Authentication Error

    • Verify your GitHub token is valid
    • Ensure token has required permissions
    • Check token hasn't expired
  • Repository Access

    • Verify repository exists
    • Check you have access to the repository
    • Ensure repository is not private (unless using private GitDB)
  • Network Issues

    • Check internet connection
    • Verify GitHub API is accessible
    • Check firewall settings
  • Rate Limiting

    • GitHub API has rate limits
    • Implement exponential backoff for retries
    • Consider using authenticated requests

Debug Mode

Enable debug mode to see detailed request/response information:

# Set debug mode (if supported by the client)
client.debug_mode = true

Contributing

  • Fork the repository
  • Create a feature branch
  • Make your changes
  • Add tests
  • Submit a pull request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Support

Changelog

v1.0.0

  • Initial release
  • Full CRUD operations
  • Query support with MongoDB-style operators
  • Error handling
  • Comprehensive documentation

FAQs

Package last updated on 13 Jul 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.