Створення GitHub Activity CLI — подорож у світ Ruby

pic

Створення GitHub Activity CLI — подорож у Ruby

Посилання

Чи хотіли ви коли-небудь швидко перевірити активність когось на GitHub прямо з вашого терміналу? Не так давно я поставив собі це завдання і створив простий, але потужний інструмент CLI на Ruby.

Дозвольте розповісти, як я створив цей GitHub Activity CLI, поділившись як технічними деталями, так і уроками, отриманими в процесі.

Огляд проєкту

GitHub Activity CLI — це інструмент командного рядка, який отримує та відображає нещодавні активності користувача на GitHub. Він створений на Ruby і слідує принципам чистого коду, забезпечуючи простоту реалізації та підтримки.

Виклик

Вимоги до проєкту були взяті з проєкту GitHub User Activity на roadmap.sh.

Основні цілі полягали в тому, щоб:

  • Отримати нещодавні активності користувача на GitHub за допомогою GitHub API
  • Відобразити активності в зручному для читання форматі
  • Обробляти різні типи подій GitHub (push, issues, PRs тощо)
  • Реалізувати належне оброблення помилок

Структура проєкту

Я організував код у чисту, модульну структуру:

├── bin  
│ └── github-activity # Виконуваний скрипт CLI  
└── lib  
 ├── activity_formatter.rb # Форматує різні типи подій  
 ├── github_activity.rb # Основна логіка програми  
 └── github_client.rb # Обробляє комунікацію з GitHub API

Технічна реалізація

1.

GitHub клієнт

Серце програми — це клас GitHubClient, який обробляє всі комунікації з API:

class GitHubClient  
 BASE_URL = 'https://api.github.com'  

 def fetch_user_events(username)  
 uri = URI("#{BASE_URL}/users/#{username}/events")  
 response = make_request(uri)  

 case response  
 when Net::HTTPSuccess  
 JSON.parse(response.body)  
 when Net::HTTPNotFound  
 raise "Користувача '#{username}' не знайдено"  
 else  
 raise "Не вдалося отримати активність GitHub: #{response.message}"  
 end  
 end  
end

Я використовував вбудовану бібліотеку Net::HTTP в Ruby, щоб мінімізувати залежності. Клієнт обробляє базові випадки помилок і повертає розібрані дані у форматі JSON.

2. Форматування подій

Одним із цікавих завдань було форматування різних типів подій GitHub.

Я створив окремий клас ActivityFormatter, який обробляє це, використовуючи чистий патерн:

class ActivityFormatter  
 def format(event)  
 case event['type']  
 when 'PushEvent'  
 format_push_event(event)  
 when 'CreateEvent'  
 format_create_event(event)  
 when 'IssuesEvent'  
 format_issues_event(event)  
 # ... інші типи подій  
 end  
 end  
end

Такий підхід дозволяє легко додавати підтримку нових типів подій і тримати логіку форматування організованою.

3. Основна програма

Клас GitHubActivity об’єднує все разом:

class GitHubActivity  
 def initialize(username)  
 @username = username  
 @client = GitHubClient.new  
 @formatter = ActivityFormatter.new  
 end  

 def run  
 events = @client.fetch_user_events(@username)  
 if events.empty?  
 puts "Немає нещодавньої активності для користувача '#{@username}'"  
 return  
 end  

 display_events(events)  
 end  
end

Досвід користувача

Я зосередився на тому, щоб зробити CLI інтуїтивно зрозумілим та зручним для користувача.

Користувачі можуть просто виконати:

./bin/github-activity username

Виведення чисте і зручне для читання:

Нещодавня активність на GitHub для sulmanweb:  
--------------------------------------------------  
Зроблено 2 коміти в sulmanweb/project  
Створено гілку в sulmanweb/new-repo  
Закрито проблему 'Потрібне виправлення помилки' в sulmanweb/app

Результати навчання

Створення цього CLI навчило мене кількох цінних уроків:

  1. Інтеграція API: Робота з GitHub API показала важливість належної обробки помилок та парсингу відповідей.
  2. Організація коду: Розбиття функціональності на окремі класи зробило код більш підтримуваним та тестованим.
  3. Досвід користувача: Навіть для інструменту CLI досвід користувача має значення.

Чітке виведення та корисні повідомлення про помилки справляють велику різницю.

Підтримка проєкту

Хочете допомогти зробити GitHub Activity CLI ще кращим? Є кілька способів, як ви можете внести свій внесок:

Фінансова підтримка

  • ⭐ Поставте зірочку репозиторію, щоб показати вашу підтримку
  • 💝 Розгляньте можливість підняти моє рішення на сторінці GitHub Activity CLI solution
  • 🎁 Поділіться проєктом з вашою мережею

Технічні внески

  • 🐛 Повідомляйте про баги та пропонуйте функції через GitHub Issues
  • 🔧 Вносьте запити на пул для виправлення помилок або покращень
  • 📚 Допоможіть покращити документацію
  • 🌐 Допоможіть з перекладами, якщо ви володієте кількома мовами

Майбутні покращення

Хоча поточна версія працює добре, завжди є місце для покращень:

  • Додати автентифікацію для обробки обмежень API
  • Додати більш детальну інформацію про події
  • Додати параметри фільтрації для конкретних типів подій
  • Реалізувати кешування для швидших повторних запитів

Як почати

Хочете спробувати? Ось як:

1.

  1. Клонуйте репозиторій
  2. Зробіть CLI виконуваним: chmod +x bin/github-activity
  3. Запустіть його: ./bin/github-activity

Висновок

Створення цього GitHub Activity CLI стало чудовою вправою у створенні зосередженого, корисного інструменту, дотримуючись практик чистого коду. Це показує, як відносно проста ідея може стати практичною утилітою, яку інші можуть використовувати і розвивати.

Джерельний код доступний на GitHub, і я буду радий отримати будь-які відгуки або внески від спільноти. Щасливого кодування! 🚀

Оригінально опубліковано на https://sulmanweb.com.

Перекладено з: Building a GitHub Activity CLI — A Ruby Journey

Leave a Reply

Your email address will not be published. Required fields are marked *