CtrlK
BlogDocsLog inGet started
Tessl Logo

igmarin/rails-agent-skills

Curated library of 28 public AI agent skills for Ruby on Rails development. Organized by category: testing, code-quality, engines, infrastructure, api, and context. Covers code review, architecture, security, testing (RSpec), engines, Hotwire, and TDD automation. Shared Ruby skills (YARD docs, DDD, service objects) have moved to ruby-core-skills. Repository agents remain documented in GitHub but are intentionally excluded from the Tessl tile.

93

1.78x
Quality

95%

Does it follow best practices?

Impact

93%

1.78x

Average score across 28 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

spec_examples.mdskills/testing/test-service/assets/

RSpec Service Testing Examples

Service object testing patterns for test-service skill.

Before implementation, report the proof:

- First command: `bundle exec rspec spec/services/users/sync_service_spec.rb`
- Expected RED: `NameError: uninitialized constant Users::SyncService`
- GREEN rerun: `bundle exec rspec spec/services/users/sync_service_spec.rb`
  1. Unit test for service object
# frozen_string_literal: true
RSpec.describe Users::SyncService, type: :unit do
  describe '.call' do
    subject(:result) { described_class.call(user: user) }

    let(:user) { build(:user) }

    it 'returns success' do
      expect(result[:success]).to be true
    end

    it 'returns synced count' do
      expect(result[:response]).to include(:synced_count)
    end
  end
end
  1. Error handling spec

RSpec.describe Users::SyncService, type: :unit do it 'returns error shape when external API fails' do allow(ExternalApi).to receive(:push).and_raise(Net::OpenTimeout) result = Users::SyncService.call(user: create(:user)) expect(result[:success]).to be false expect(result[:response][:error]).to match(/timeout/i) end end

  1. Integration-style spec using perform_enqueued_jobs for background jobs

RSpec.describe 'Sync integration', type: :integration do it 'enqueues and performs SyncUserJob' do user = create(:user) expect { SyncUserJob.perform_later(user.id) }.to have_enqueued_job(SyncUserJob) perform_enqueued_jobs # assert side effects end end

skills

README.md

tile.json